Testing tools for Old OS & Browser Combos

Lots of us have to trace down odd bugs and test things on different browsers and OS combinations… Of course, the worst of which is “various versions of IE” on “various versions of Windows”. It seems crazy, but the same version of IE can behave differently on a different version of Windows.

The two best solutions I’ve used are:

http://www.modern.ie/en-us/virtualization-tools [free, vm locally]

and

http://www.browserstack.com/ [costs, web based]

I just got assigned a crappy bug ticket on IE8 + WinXP and had to dust this off again… thought I’d send out a post, see if it helps others and triggers a discussion which might help me out too.

Great advice from Arunoda “Just Contribute!”

http://readme.lk/noticed-tech-crowd-interview-arunoda-susiripala/
 
This advice might be aimed at people who already consider themselves developers, but there’s a nugget in there that’s perfect for anyone who is interested in getting started…
 
Pick some open-source project, probably a smaller one, that does something you’re interested in.  Maybe it’s something you tried out and used.  Maybe it’s something you tried out and it didn’t work out.  Maybe it’s something you looked at and didn’t understand.
 
Then… help out.  
 
Report an issue if you had one, even just requesting more information/instructions or pointing out what was unclear.
 
Better yet, fork and clone the repository…
 
Add to the readme. Build out some documentation.
 
Refactor a single function, add comment blocks in the code, standardize code formatting… or if you’re up for it, add a new feature or fix a legitimate bug.
 
Then submit a pull request.  
 
Communicate with other developers to defend your Pull Request.  Sometimes they go in and sometimes they don’t, but it’s still great experience and your contributions remain available on your repo (and forks do get seen/used).
 
 MeteorRider Pull Request
 
If this sounds foreign… don’t be intimidated – it isn’t hard.  
 
Do it three times and you’ll be totally comfortable.  
 
Do it thirty times and you’ll be a much better developer, you will have helped the community at large, and things you use will be improved.  Stick with it and your contributions will be noticed by other developers.  Also there is a public history of your contributions which can only help when it comes time to apply for the next job.

my pull request, please merge it

Meteor + PhoneGap/Cordova (Roundup – Fall 2013)

About Meteor and PhoneGap / Cordova

Meteor is a rapid server/client development framework, written in JS – makes very interactive apps easy to build. http://meteor.com

PhoneGap / Cordova is a project to allow developers to use HTML, CSS, and JS to build mobile apps for all major devices. http://phonegap.com

Basics of Integrating Meteor + PhoneGap / Cordova

The basic idea here is to use PhoneGap / Cordova to create a mobile App on several different platforms at once and it gives device hardware access; then “load” your Meteor application, which handles all of the rest of whatever you want your app to do.

Why this approach?

Meteor already has a lot of what you’d want for any App, including client/server shared logic, client optimization and caching, and an amazing client/server data sync/transfer system.  It’s fast, easy to work in, and well documented.  If you ignore the mobile aspect, this is a wonderful platform — if we can get it to work with mobile devices, then it’s a no-brainer win.

PhoneGap / Cordova is a convenient “shell” for this, allowing you to get the device hardware hooks in/out of JS, and load up whatever HTML, CSS, JS you like.  Web developers love it, and even people who can work with native Android or iOS (etc) apps may like it because it’s cross platform, business logic only has to be written once.  (Also, it’s now a lot more organized and stable after the 3x release)

Meteor + PhoneGap = Win!

The benefits of both are easy to combine. It’s your web app, and now it’s also your mobile app.

Just in case you didn’t hear that, your full application is available on the web and on the device exactly the same, you only have to build it once.  You simply have to slap on some responsive CSS and have logic in your app that determines if you’re in PhoneGap or not (more on that later).

More: http://prezi.com/ig9gjm11mwsi/from-zero-to-mobile-web-app-in-sixty-minutes/

Integration Options

“Lazy Loading”

This approach starts the PhoneGap / Cordova out at the URL to the Meteor App.  This means NOTHING on the PhoneGap www folder gets loaded, and everything is loaded via Meteor.  After the page has loaded, it attempts to load the correct PhoneGap / Cordova JS file (again, from Meteor, out of the public folder) and then run device specific logic.

https://github.com/awatson1978/cordova-phonegap

Pros

  • Fast – fast to initially load, and internal changes are also fast

  • No middle layer in PhoneGap, no exchange

  • Simple way to get Meteor app into App Store and monetized

  • Apps built with this method have gotten approved in both iTunes and Google Play

Cons

  • Complicated because there are lots of different Cordova JS files you may have to support, for different browsers and different versions.

  • PhoneGap plugins JS more complicated (again, has to be managed inside Meteor, but versions kept in sync with PhoneGap)

“Hijacking DOM”

This approach is somewhere between the other 2.  The PhoneGap / Cordova files live on the device in the PhoneGap www folder.  The App starts up with the local index.html file, but then JS “hijacks” the DOM, it does an AJAX request to your Meteor app and rewrites the document with your Meteor document, triggering all the events needed for Meteor to startup.

This gives Meteor access to all the PhoneGap JS (already loaded) but the PhoneGap JS is bundled for each device/version within PhoneGap.  It also puts all of the PhoneGap JS into the global scope alongside Meteor JS.

https://github.com/zeroasterisk/MeteorRider

Pros

  • Simple to manage, because all the device-specific code is within PhoneGap (each version is bundled)

  • Pretty fast, the base level AJAX request is pretty fast

  • Scope is easy, because PhoneGap is available to Meteor directly

  • App JS can be tested independent of Meteor (just don’t load it)

Cons

  • Scope collision is possible, be careful

  • We have experienced some complications with App hardware plugins, perhaps due to scope?

“Push (iFrames)”

This approach is perhaps the most isolated.  It uses JS to make an iframe inside of the PhoneGap / Cordova “page” and to create a “queue” to exchange JS from Meteor to PhoneGap and back.  Meteor and PhoneGap can only talk to each other through this exchange, not directly.

https://github.com/raix/Meteor-Cordova

Pros

  • Simple to manage, because all the device-specific code is within PhoneGap (each version is bundled)

  • Sort-of fast, the base level iframe is pretty fast, but the in-iframe scrolling can lag

  • Scope is isolated, no collisions

  • App JS can be tested independent of Meteor (just don’t load it)

  • Plugins are basically guaranteed to work, because they are 100% isolated

  • Sophisticated use of Appcache

Cons

  • Scope is more complicated and slow, you HAVE to learn and use the exchange methods

  • it’s an iFrame… (ick)

  • because it’s an iFrame, scrolling can lag/flicker on some devices

Smoothing the Rough Edges

For any of these options, you need to know:

  • from Meteor

    • Am I loaded into a device via PhoneGap?

    • Is the device loaded?  (usually it already is before Meteor is loaded)

    • What hardware hooks are available?

  • from PhoneGap

    • Is Meteor connected (status)?

    • Do we need a “fallback” URL, if Meteor is not online

Some of that is built into all of the options, but there is a lot of room left for “making is easy”.

There is also some need for simplifying and standardizing some of the JS needed on the PhoneGap side (for the “hijack” and “iframe” methods) to load the Meteor app and failover if it’s not available.

Feel free to contribute if you accomplish any of these, or if you want to help out with the documentation (github fork & pull request).

Conclusions

These are all new approaches and libraries.  There will be more support from the Meteor core for Mobile sometime, but that may be a while.  Until then, these are great options for making an excellent mobile app with Meteor and PhoneGap.

Alan’s favorite = “iframes” because the isolation is good for PhoneGap plugins

I personally HATE iframes with a passion, but after having used (and contributed to) all three options, I’m personally using the “iframe” method now.  This is because I have had trouble with PhoneGap plugins with the other methods.

no plugins?  = “hijack” because it’s fast and simple

If you don’t plan on using plugins, but may use PhoneGap core API then I recommend the “hijack” method.  It’s fast, simple, and you don’t have the awkward iframe exchange in the middle.

Finally, if you don’t use anything from PhoneGap at all, and it’s just a shell/browser for your Meteor App, you may prefer “lazy loading” – it is dead simple.  Be aware though, the long list of Cordova versions your app will eventually have to support makes this option my least favorite long term.

Resources

on Meteor

General PhoneGap Guides

on Meteor + PhoneGap

Meteor Packages:

Looking for a new blog platform

I’m working too much to afford the time to build one right now, but I’m looking into a MeteorJS bloging system….  Anyone got a recommendation?  @zeroasterisk

MOSSCON 2013 was lots of fun

I had a great time attending and presenting at moscon.

http://mosscon.org/

May 18 – 19, 2013 | University of Louisville | Louisville, Kentucky

I know it was a lot of work for the people who set it up, but you did a great job and I look forward to attending again in another year.

(if I present again next time, my slides will be more readable, I promise…)

Windows + Linux guy, switching to OSX

I have recently switched to Mac full-time, coming from a Windows/Linux background.

Here are some general (easy to install/use) applications you might find useful.  (advanced notice might come out in a bit)

———————————————————
Jing – free / can pay for extra features (multi-platform)

  • Take Screenshots: Capture an image of what you see on your computer screen
  • Record Screencasts: Record up to 5 minutes of onscreen video + audio
Inline image 2

Inline image 3

Alfred – free / can pay for extra features
  • Increase your productivity
    by launching apps with shortcuts
  • Instant access to
    web searches, bookmarks
    & more
  • Browse and play music from your
    iTunes library
    quickly
  • Perform actions
    =96 copy, move & email files & folders
  • Ward off RSI
    =96 skip using the mouse with easy shortcuts
Inline image 4
note: I paid for the “powerpack” upgrade for things like global hotkeys.
Inline image 5
SoundSource – free

SoundSource is a tiny application for Mac OS X enabling you to switch your audio input and output sources with a single click, and even adjust their volume settings.

https://rogueamoeba.com/freebies/

Inline image 1

Growl – $1.99
(Excellent System/Application Notifications)
Skype’s internal notifications are annoying and worthless, upgrading to Growl and setting it as your notification system for skype will allow you to never miss a Skype message.
(now that I’ve made that statement, I’d better be more quickly
responsive, eh?)
Inline image 9
Inline image 6
(Yes, even though I’m cheap, I paid for it and happy I did)
Caffeine – free
(great for presentations, watching a meeting, etc)

Caffeine is a tiny program that puts an icon in the right side of your menu bar. Click it to prevent your Mac from automatically going to sleep, dimming the screen or starting screen savers. Click it again to go back.

Inline image 7
Adium – free
Great multi-support IM client… covers just about everything but skype :(
Inline image 8
Synergy – free (multi-platform)
This one only barely makes the “easy” list… but if you have multiple computers+monitors sitting side-by-side, you can use this application to share a keyboard and mouse across them.
If this sounds good to you, read up on it and we might be able to help you set it up… if not, ignore this one.
Inline image 10

Blount 2011 “Year in Review Letter”

Everyone seems to do a great job of sending out yearly letters around the holidays, so here’s our attempt.

We collected some of our favorite photos from this year (mostly just the summer and fall) and made this video:
http://animoto.com/play/PXP02w37vyZ60ddGU7vxxg
Go ahead and watch it.

Back already?

It’s the end of December already and Poppy is almost 4 (01/24) and Oliver is almost 2 (02/02). Last year at this time, we went to Kansas City for Christmas with Alan’s family and after a long drive on Christmas eve, made it back to Louisville for Christmas with Anita’s. Oliver was just walking and still pretty chubby. Poppy was her same precocious self a few inches shorter, but thinking back now, the comparative difference is stark. They have both come such a long way this year.

Anita has worked 2 or 3 days a week this whole year, spending the other weekdays with the kids. The first half of the year we had one of our good friends Andrea taking care of them on the days that Anita worked. We have family passes at the Louisville Zoo and the Science center, so we were there a lot. Anita also took Poppy to several weeks of ballet/tap classes, and we make it to some park or another almost daily, often meeting others for play dates.

This summer we helped to host a family reunion for Alan’s extended family who came from all over the country to Mammoth Caves National Park. We did a lot of cooking out and sitting around telling stories. There were some other young ones (their third cousins I think) blazing a trail for the next generation. As you might expect, the kid’s parents trying to keep them somewhat in line and the grandparents encouraging them on. Surprisingly, we didn’t really go into the caves until the end and then we didn’t last too long before the kids had had enough… oh well, another year or two before they will have the patience for that.

Starting this fall we put both kids in a co-op school near us called “The Friend’s School”, where Poppy went for a year, a year ago, until Oliver was born. They attend 3 days a week, while Anita is working. The kids are both happy to be in classes, and I think really benefit from the structure and interacting in group settings with other adults in charge. We get daily reports of what the kids do and they bring home many projects they do during the week. Poppy’s compatriot Eleanor (2 months older) is in her class, and Oliver’s little buddy Abe (2 weeks younger) is in his class. We’ve gone to a few school functions after hours, and even just walking through the halls, everyone certainly knows our kids and there’s a real sense of inclusion at all grade levels there (up to grade 4 I think).

Oliver and Anita took trip to Florida to visit Anita’s grandmother early summer. Oliver and Alan took a trip to Houston mid-November to visit Alan’s grandfather, mother, and family. We all drove to Columbus, OH a few times to visit friends and we made several trips out to the lakehouse throughout the summer where we went boating and tubing, yes, with the kids. Anita and Alan took a trip without the kids to New Mexico to attend a friend’s wedding in the summer, while the grandmothers took over the kids (we’ve got to do that some more!). Otherwise, we have kept pretty close Louisville, but we certainly stay busy. We went on a train ride which was robbed by train robbers on horseback. We went to 3 or 4 different fall festivals, including the Colorfest at Bernhiem Forest. We have visited and pet every barn or zoo animal near us, and I think our kids have been on 6 different firetrucks this year. We went to the state fair, we went to a dozen birthday parties, a few neighborhood festivals (a few with bouncy castles), and a few concerts in the park.

Alan has continued to work at Allied Health Media, the name is new, but it’s the same company he’s been at since 2007. The beginning of the year they launched speechpathology.com and have been doing “phase 2″ adjustments to it this year, and gearing up for some other major projects using the same code-base slated for early 2012. The company has doubled in size in the last two years and things seem to be going well.

Anita still works as a pharmacist, and for the same company, but in a new location. She had been working at Central State Hospital, a state run psychiatric hospital. The hospital was downsizing and she feared her position was going to be cut, but instead she got shifted to the Hazelwood location. In both locations she still does mostly medication and chart reviews, ensuring adequate oversight is done for patient labs and prescriptions. She also fills in as a staff pharmacist, filling medications and handing them out to the nurses.

Oliver is regularly referred to as “a little kewpie doll” as he’s got white-blonde hair with little ringed tufts sticking out. He also always has a scratch or bruise or several on his forehead, face, etc. Since day one, he’s an extreme child. When he’s happy, he is extremely happy. When he’s unhappy, it too is extreme and everyone is going to know about it. At the beginning of the year he was walking on somewhat unstable legs and not really signing nor talking. He picked up walking and all physical activities quickly, but he was pretty slow on the communication side of things. He knew exactly what people were saying, even fairly complicated concepts, but he didn’t really start trying to talk till late fall. Now he’s got a pretty decent little vocabulary, but it can take some effort and a few clarification questions to understand him… even that level of communication has made the lives of his parents a lot easier – much better than whining for everything. We mimic his speech a lot because it’s so cute, especially when he starts chanting “oh baby, oh baby, oh baby”. He doesn’t suck his thumb or use a pacifier, but he has little silken “lovey” blankets he keeps on him at all times. He’s a bit of a brute, especially when he’s tired, but he is more affectionate than Poppy was at his age. His favorite things are books, tractors, trucks, balls, dogs, chickens, etc.. but mostly it’s “trac-ctor”.

Penelope has had a wonderful year. She has certainly gotten all of the last little bits of attitude she didn’t already posses, and thinks she can do anything. On the other hand, she pretty much can do anything… she’s a rough and tumble girl who can climb and sing and dance and cook and occasionally even listen. She is astoundingly good with her little brother, and they are best friends most of the time. This has been a magnificent year for imagination. She’s carrying around her baby dolls, driving cars and boats and airplanes and trains, or she is being the mama while Anita and Alan are the “sisters and brothers” or sometimes the “dog” or the “alligator”. I mentioned singing and dancing before, but I just love that she has decided that David Bowie’s songs from The Labyrinth are some of her favorite as well as “Total Eclipse of the Heart” and a handful of others. She not only sings along while they are playing, but she has walked into school singing a song the whole way. Doubly remarkable because she’s a bit shy sometimes, either genuinely or playing an act she can be shy even with people she knows… or not, there’s really no way of telling with her. Poppy has been picking out her clothes since she was 1 and is well known for her sense of style, I’ve never seen 3 kinds of stripes on a person one day, followed by stripes and dots and plaid the next; maybe all black the day after with pink socks. She recognizes most of her letters in any order/word, she can spell her own name and write it (sometimes readable), she can recognize all written numerals and can count up to at least 30. We are still at the very beginning of trying to equate letters to sounds to syllables to words. She may possibly be the world champion of rolling down a hill or dancing in the living room.

A whole year just went by, fast. We have wonderful memories and great photos, a beautiful family, smiling faces, and tired feet.

Happy holidays! Love and best wishes to your new year,

The Blounts

Poppy is 1000 days old today

Poppy is 1000 days old today!