One evening, while sipping chai in my balcony at sunset, I was curious to record it in a fancy way - time lapse. I’m not a “Pro” or “wannabe - Pro” Photographer - just own a decent camera Canon 600 D - with 18-135mm lens.
Time Lapse is an art of taking continuous photos and arranging them one after the other which gives an idea of how things are changing in a frame. Many of you must be wondering the difference b/w video and time lapse.
Well, Video records ~25-30 fps and plays at same speed while in time frame, we take 1 photo every 20 secs (or several mins based on your subject and its motion) which is 1/20 fps and then playing at 30 fps. Thus you see the change in subject in shorter time (very much like running a video at ~40x or more based on your interval time).
In past, I have contributed to development of secure & scalable image handling backend of an Electronic Medical Record Cloud which apart from regular medical record stuff, does lossless compression on images and mortifies it for different usage styles (thumbnail, lightbox view). I used graphicsmagick for the same and also played with ffmpeg (in case you want video output) so I had enough idea to get started. My aim was to make sure I use command line tools, than any Pro software.
Step 1: Choose subject, arrange for tripod
I got up early - 4.30am for 6am sunrise to setup stuff (probably too early for sleep deprived Software Engg). I couldn’t arrange tripod for early morning shot (too early to wake your boss for that ;) ), though borrowed that for cloud shoot in the evening.
Step 2: Click Photos at regular interval of time:
I used EOS Utility to capture images at interval of 3 mins. Unfortunately, this not available for my linux machine (which is my first choice), so had to use my Mac. If you don’t wish to use your laptop, you can buy an intervalometer (costs 10-15 $) to set time interval between shots or use software on your mobile.
My EOS Utility CD was back in India, so had to tweak installing process on my Mac (removed Info.datx file in Resources folder of downloaded copy from Canon official site - which tells system to look for previous versions before installing it). Even if I had the copy of CD, I can’t do without external CD drive for Mac. Using the software, you can directly save images on your laptop, thats fantastic! So, you don’t have to worry about disk space. I couldn’t figure out if there is a way to connect Camera’s power cord ( and not use battery) to keep the camera running for very long time. My battery takes ~350 photos per charge or ~ 200 mins of usage - without display (To overcome this for next time, I have ordered 2 extra (non Canon) battery packs from amazon).
For all linux fans, who dont wish to touch iOS or PC, I managed to get my Nexus 5 connected to my camera using micro usb to usb converter (very cheap). There are plenty of good paid apps with zillions of features, but you can find basic intervalometer in free app HeliconRemote.
Step 3: Check out photos
You should keep checking if photos are coming out to be good. After finishing your session, you should select the photo range that you wish to time lapse.
Step 4: Play with command line tools
“GraphicsMagick is the swiss army knife of image processing” - is how it’s official site mentions it.
It is very matured and well documented library for image processing cmd tools for all major platforms.
Easy to install graphicsmagick:
#For linux users:
sudo apt-get install gm
#For mac users (hoping you have brew already installed)
brew install gm
Step 5: Run commands and fine tune range
Following command should be handy.
gm convert -resize x200 -quality .2 -delay 20 -loop 0 IMG_*.JPG output_file.gif
output file can be very large (in hunderds of MBs) , you should make sure you resize to smaller version so that viewers can process it nicely.
For resize option, provide, widthxheight (either of them). You may use loop option to keep the images in loop and quality to reduce quality (for web), you may also compress images before processing for gif, but results came out to be same.
Delay option lets you give time between two frames. Play with this option to remove any choppy movement in the gif.
Last two arguments are input file format and output file name.
Step 6: Feel good about it :D
Group Photo at Google Mentor Summit 2013
Another Google Season of Code Season Ends!! Had lot of fun co-mentoring elastic-search (nodejs) & Reporting projects for GSoC 2013 :)
In case you have upgraded your Ubuntu (or similar distros) and are facing problem while opening previously installed app esp LibreOffice with following error:
The application cannot be started. Extension Manager: exception in synchronize
The problem is mainly because of lack of permission for the app. To solve cd /usr/share/applications and grant permission like this:
chmod +x <name_of_app>
If you are using nautilus (or similar file browser), go to Permissions and check: “Allow executing file as program”
In recent past, we have experienced a flood of Mobile apps in various App Stores. As most of the apps are either made by individual developers or startups, there is money and developer / manpower crunch. Because of this, first thing which suffers is testing of the product.
User Experience is given much more importance than what was given few years back. Having as less bugs as possible is another key requirement to provide good UX and to have that App Developers are moving from tradition testing platforms (which includes lot of coding by devs, which worked well for enterprise softwares) to different approaches like behaviour driven testing, simulations and many times crowd source testing.
At Raxa we plan to have a robust integration / behaviour driven testing platform. Currently, we have our unit tests running on jasmine. Managing cross-platform testing is one of our key requirements as we build some of our modules on Sencha Touch which can be packaged natively for seven different mobile OS using phone gap. In my personal experience, many things behave differently on different platform. As different platforms, use different JS Engine and other modules in Browser, many times different type events are generated by different browsers and not respecting standards much. Most of the browsers / platforms are not able to cope up with latest changes in w3c standards as well. And obsiously, there is wall b/w webkit v/s non-webkit browsers.
I found some time to google various options to test the Mobile app in the way which helps us to make my customer happier. I learnt about few options, many of which are mentioned below. Before jumping into picking up options, one must figure out whether you need your testing framework to be cloud based (it may cost you money, but will support you to test on real devices (mainly on SaaS) and save cost of acquiring and maintaining devices.
1. Testing on Cloud
- Perfecto Mobile: You can easily write your test script. Test on real devices available at various geographical locations. Not “very” costly. Very impressive way to do testing.
- Device Anywhere: For webapp, it is FREE. People who build on phonegap, can check on native browser of different platform. Easy to create Automation Scripts (by just drag and drop). Pass/Fail Screenshots / Videos are added to report. You must try this out. This also runs automation test across various platforms. Automation tests use image & text recognition to perform test (most the other frameworks do the same)
- Test Droid: Works on similar lines as above, but seems less impressive than others. Supports only iOS and Android.
2. Behaviour Driven Testing tools :
- FoneMonkey (iOS): Traces mouse movement. Seems very easy to use. Train monkey (and not your QA) once and let him test it for you on simulator / usb connected real device :)
- Calabash (iOS + Android): Cucumber based testing framework, which lets you write easy steps for new features to develop. These steps can be understood by end user, business analyst, tester and developer. Idea becomes very clear at start of user story. Doing it for already developed s/w is a big pain. Testing steps are like this (test case from README ofcalabash-android):
Feature: Login feature Scenario: As a valid user I can log into my app Given I am a valid user And I enter my username And I enter my password And I press "Login" Then I see "Welcome to coolest app ever"
- Robotium: OpenSource, works fine. but only for Android :(
- Appium.io: Again, OpenSource. Impressive. Needs some coding time :)
3. Performance Based Testing:
- WebpageTest: Mainly UI test to validate cross platform compatibility and time to load at various geographical locations (on various browsers). Choose Mobile Tab for testing your Mobile webapp
- Sunspider: To benchmark results
- MobiTest: Mainly UI test to validate cross platform compatibility and time to load at various geographical locations (on various browsers). Choose Mobile Tab for testing your Mobile webapp MobiTest allows you to load page on real device and returns rich detail about loading time of app, waterfall charts and even video recording of the page load.
- Memory leaks, ARC and similar issues can be debugged using xcode (for iOS)
4. Popular Crowd Source Testing Options:
5. Some testing frameworks which work only for a particular platform
- Test Framework just for Android:
Robotium , Bot-Bot, Monkey Runner, Droid Pilot
- Test Framework just for iOS:
Frank, KIF, Zucchini
Choosing right option can help us
- Save lot of cost to acquire and maintain test devices or spend time testing at to one of Open Device Labs
- Optimize resources including human resource spent on testing app
- Find Bugs
- Provide richer User Experience
- Make our customers happy :)
Feel free to mail your suggestions / comments either on this site or to madanpiyush [at] gmail.com
Many of the nodejs packages require nodejs version to be higher than what gets installed using package manager of ubuntu / other distros. So, you can either update your nodejs by compiling and installing after fetching code from nodejs repo OR simply use “n” (nodejs package) to upgrade your nodejs version. Use following commands:
#i hope npm is already installed ;), if not use:
sudo apt-get install npm
#cleans npm for any cached data
sudo npm cache clean -f
#installs package: n (-g for installing globally)
sudo npm install -g n
#mention version to be installed (or just stable)
sudo n 1.0.0
#check version number for node
We, at Raxa had a nice outing to Qutub Golf Course on Friday evening. It was the first time for many of us. We spent time at driving range getting used to techniques of the game (Mind you, it is not as easy as it appears). Some of the pics:
Pic #1: Believe me, I was not posing for it :o
Pic #2: (L to R) Shuro (with cricket hat), Bhagirath, Melodie (others are clueless what z see doing), Sidhi (missing paparazzi moment), Me (with protruding stomach), John (smart ass of our office), Sharon (with her naughty smile), Sathyan (Design Team: out of frame) and probably Rishi (Drupal guy) too.
Pic #3: Another badly taken photo ;)
With the advent of so many online-course portals like Coursera, NPTEL, OnlineCourses, etc, I do feel online courses with strict schedules are way better than other online resources as the former one test you for whatever they teach with a strict deadline to submit the assignment.
I enrolled in 7 week course: M101P MongoDB for Developers (using Python) by 10gen which was a comprehensive course touching all aspects of Mongodb for developers including CRUD in mongodb, Performance, Schema Design, Aggregation, Cases studies,etc. I really appreciate Andrew Erlichson and his team for making a very nice learning resource.
BTW, they provide you a nice certificate too. :)