Every project has a new learning in terms of technology and relationships which are being built around and over this. Every development team has a unconscious phantasm about the project success. Even in the agile mode of development there are several Risk mitigation plans emerging and submerging. Can we really channel the energies involved in making a good client developer relationship? If this is done at what cost? Is that feasible? Who is liable for these action?
Project post-mortem meetings can be very interesting from a spectators perspective. You get to see “the good the bad and the ugly”. Few points which one can constantly hear is “proactive communication”, “Did he seek the solution or did we offer him the solution?”, “Error prone estimations” and can pen down more. The most often term is proactive communication.
Can everything be solved by proactive communication? Well mostly. There may arise a situation where there the nothing infront you makes sense. When you add some sense to it, a reactive situation arises and ultimately there will no almost nil progess. The best thing we can offer is to raise a flag and record the situation to keep track of it.
When you work in distributed teams, please understand the project’s drift. Do not try to isolate yourself or someone else unless it is really required and that works..
Alot is being spoken and done on the mobile application end. As the fourth generation of mobiles are up, users awaiting for the fifth generation. Mobile applications are also being used in the same fashion. There are over 2.5 billion users around the world using smartphones alone. As people started digesting the concept of viral marketing, now the viral applications are all gamed up for mobile versions as well.
There has been a very interesting transition in terms of UI and UX. Usage of tables in the application layouts is considered mobile rude. From appeal to the acceptance, mobile has redefined quite a few things. Once there was this trend of having desktop application for a web application but now it is having a mobile application.
In terms of development, the market is reaching out for cross platform compatibility application. DRY principle in software development is now cross platform mobile application development. Choosing platforms which supports similar principles is in the boom now.
My top 5 such platforms would be, Rhomobile, Appcelerator Titainum, PhoneGap, MoSync, and Corona.
Rhomobile is ruby based. This provides a complete set of products for managing an enterprise’s mobile apps and data. The entire product suite Rhodes, RhoSync, RhoHub and RhoGallery. These components effectively create a new era in enterprise mobility. Unlike previous approaches to mobilizing enterprise apps, Rhomobile uses the power and productivity of web technology and the cloud to allow enterprises to more easily DEVELOP, DISTRIBUTE, DEPLOY and MANAGE native smartphone apps and data. One of the best out there.
PhoneGap is a HTML5 application platform that allows you to author native applications with web technologies and get access to api’s and appstore. Allows to develop applications for iPhone, iTouch, iPAD, Android, Blackberry, Symbian and Palm becoming one of the few products that supports almost all major platforms.
MoSync makes it easy, fun and cost efficient to develop mobile application for all the major platforms. Using C++ and a set of powerful APIs, you can harness the full power of modern smartphone platforms while still supporting Java ME devices using a single codebase. MoSync gives its best on windows and mac. Lets hope this to rock linux world as well.
Corona SDK is a mobile development framework for creating high-performance, multimedia rich applications and games for the iPhone, iPad, and Android. With Corona SDK, you develop in Lua, a high-performance scripting language, and you can create powerful applications in a matter of hours. No Objective-C/Cocoa, C++ or Java knowledge is required. We will use LUA here for developing applications on corona. Lua has been rocking the world with its powerful scripting nature from the times of world of warcrafts
With these technologies in the big game, let hope to make this world more tech agnostic ;)
Smart phones and mobile applications have become trend setters in the market.. Just going with the wave I have started working with mobile applications for various platforms..
I use emacs as the editor. I do not advocate emacs, I just like it.
I installed required SDK.
Once I’m done with the installation I have moved on to create my first android application.
./android create project --package my.first.helloandroid --activity HelloAndroid --target 8 --path <path-to-your-project>/HelloAndroid Well here I got struck for a couple minutes about --target which is supposed to the list of targets present. ./android list targets returned me an empty set. I started my andriod sdk and adv manager and installed available packages. After they are installed I could see different versions of platforms in my platforms folder in my /home/<username>/android-sdk-linux_86/platforms After installing the packages I could successfully create my first Andriod App. Since I do not use eclipse I have used the above command to generate the project required folders. We can find the source at HelloAdroid/src Once done with writing code in the app, I have used ant clean and ant install to get the app running. For the ant commands to work we need the emulator to be running else it would anyways prompt the message ;) I shall keep this you posted as I move ahead with this..
Continuous Integration is something which most of us use as a part of our developer daily chore.. We tend to make sure each time the code is integrated it is clean and at least it dose not break the existing code.
If we are lucky enough we end up waiting for our test cases to run for ages.. and ages… We will start cleaning our spec/tests code and end up cleaning most of it.. yet we they might run slow enough to let us make a coffee and order a pizza..
To avoid such I have used parallel tests(written by Michael Grosser) which gave a bumping speed to the execution of my test cases.
This helped me to speed up my test cases like increase their execution speed to 25-40%.
This speeds up the test cases/specs by running parallel on multiple CPUs.
time rake test:units test:functionals (without parallel test)
time rake parallel:test
Apart from this I also found DeepTest(David Vollbracht) git://github.com/qxjit/deep-test.git
DeepTest enables tests to run in parallel using multiple processes. Processes may spawned locally to take advantage of multiple processors on a single machine or distributed across many machines to take advantage of distributed processing.
DeepTest also claims that any number of projects can be executed(run) using the same test servers, as long as they’re all using the same version of Ruby and DeepTest.
Lets spend less time on waiting for the execution test cases/specs…
I got lucky by for trying amazon simpledb. Amazon SimpleDB is a web service providing the core database functions of data indexing and querying in the cloud.
Some basics about it:
class User < SimpleRecord::Base
has_strings :first_name, :is_monkey
@user = User.new(:first_name => “kranthi”, :is_monkey=>true)
And we have the user created. We must try to do a batch save to reduce the number of hits so as to save our monies :p
After the basic is done may be we can move into creating relationships. One of the important things would be that right now I could not some how get the part of many-many relation. But I could get the belongs_to and has_many working with the current simple record.
One of the solutions(may be not very elegant) could be the use of multiple attributes which save the ids and retrieve them as required.
I have also noticed that simple record support dirty saving which quite impressive, buts the virtual attributes are not yet into full implementation.
As I get going with this… I’ll be updating my blog..
Factory_girl allows you to quickly define prototypes for each of your models and ask for instances with properties that are important to the test at hand.
This is one of the best ways to replace fixtures and help us write better specs for the applications.Factory girl is available as a gem and aslo as a plugin
gem install thoughtbot-factory_girl --source http://gems.github.com
Factories can be created anywhere.They will be automatically loaded if they are defined in test or spec folders.
We can create a basic factory like this
Factory.define :user do |u|
This created factory can be called using Factory.create or Factory.build
When we say Factory.create it would create a query in the sql while build creates a factory in memory.
When using factory girl with rspec it would look soemthing like this,
describe “User”, :model=>”User” do
@person = Factory.create(:user)
it ” Should be a new record “do
We can also user Faker gem to create fake data.When we user faker gem a factory would look like this
Factory.define :user do |u|
@person = Factory.create(:user,:name=>”monkey”,:email=>”email@example.com’)
As rails developers we try to maintain dry princples along with that we also focus in skinny controllers and skinny models.
One of the way I have used to approach skinny model would be by using concerns with.I had a model called person.rb which was very length.There were alot of relations and validations and authenticating method present in it.Once my app was up and working well I tried to refractor my code.
I have created a config file called concerns.rb in config/initializers so that these gets preloaded.
class << ActiveRecord::Base
concerns.each do |concern|
Once this is done I have created a folder which says person and created files for authentication methods,validations,association.In the person.rb model I have included them as concerned_with :validations, :associations, :authenticated_methods
By using the above method I got a skinny model with the general rails standards.