Skip to main content

Mobomo webinars-now on demand! | learn more.

In a country where people can't get internet access until college, and computers are not household items, a disciplined self-learner discovered his passion for computers and technology despite his own circumstances. In this week's Insider, read about Senior Engineer, Xue Yong Zhi.

Yong grew up in Beijing, China where he spent most of his youth studying to get into a good college. In his free time he took joy in reading comic books like Doraemon and Dragon Ball, and dreamt of one day becoming a comic book writer. Yong didn't have access to computers or the internet until college, and says that, "even in my generation in China, this still was early." Studying hard in school and performing well on college admission exams afforded him the opportunity to attend one of the few colleges in China that had internet access.

Yong explains that in China, your concentration in college is determined by your entrance exams. His strong grades allowed him to study Wireless Communications, but he admits that he didn't like it that much and with a sense of relief confesses, "thankfully, I soon discovered computers!" Yong later landed a job with a small group of hackers at NSFocus.com, which has since become a successful network security company in China.

The fact that he was able to get a job in the computer field at all was fortuitous; "We did not have many choices in China. For most people the major that you study is your career afterward." Yong was able to break out of that convention by teaching himself everything he could about computers, programming and networking while he was in college. "I did not spend much time on my major, only enough to pass the exams. I spent most of my time teaching myself computer and internet stuff. Telnet and BBSes were the most interesting stuff at that time, and I learned about things like internet security from there." He didn't have any peers or teachers in his department to study with or bounce ideas off; his learning was entirely self-directed.

When Yong began working for NSFocus.com after college, he learned about internet security and programming at an accelerated pace. He spent most of his time working on an intrusion detection system in C & C++. "Doing things that you like is priceless," Yong says. In a society where your future unfolds in a mostly determined and linear path, breaking out of the mold can be a difficult challenge. Yong now enjoys an unconventional life in comparison to the life he had in China. As a senior engineer at Intridea, he works and raises his son Alex from the comfort of his home in Maryland, with his wife. He came to the states several years ago to study Computer Science, and earned his Master's degree at the University of Delaware.

Yong learned Ruby when he was rewriting a web application at a previous company. "My boss liked C, so I had to use C to write the application (a strange requirement). I wanted to write a framework to make it easier for myself. After comparing lots of frameworks I found that I liked Rails's style the best, and I wrote a framework in C based on Rails MVC architecture. Although the project was later canceled, I was already really interested in Ruby and Rails, and taught myself the languages." Yong can program in C, C++ Java and some other languages, but prefers Ruby over all of them; "It makes things easy for me as a programmer. I can spend more time thinking about applications, rather than reinventing wheels."

At Intridea Yong has been working on a download manager for a large gaming client, which requires him to work on both a Windows machine and a Mac. But working on a PC isn't a bad thing for him. In fact, he's only been using a Mac for a year now. His history in internet security had him most often working with Linux, Unix and Windows operating systems on PCs. His favorite development tool, Source Insight is an editor for C, C++ and Java. "This tool is the best. No other tool even comes close. Few people have heard of it, and it does not support Ruby, sadly, but if I have some free time to do an open source project I will write an editor like that."

For Ruby development Yong uses Vim. In order to better understand the Ruby internals, he started writing a Ruby compiler, from the ground up over two years ago. "I gave up recently because it was just too much work to port all the libs into C extensions, and JRuby started to do similar things." Although he has since stepped away from the project, he was able to attain an in-depth understanding of Ruby while he was trying to learn the language.

Studying, working and living in the United States has been enjoyable for Yong, but he sometimes thinks of going back to China. "My parents, and my wife's parents live in China, and they miss their grandson very much." One thing Yong doesn't miss about China is the noise. He talks about how quiet it is here in the U.S. compared to Beijing; "There are people everywhere in China. You know how crowded the shopping malls get around Christmas time? In China, it is like that every single day."

I asked Yong if he feels that people in China are at a disadvantage technologically, because they do not have the opportunity to use computers or the internet until they are at least in college. He answers, "No, I do not think so. Smart people can learn things quickly." Yong is a bright example of that case. Being able to direct your own learning and thusly your own success is one of the common traits among all Intrideans. Yong's story illustrates that anyone, from any part of the world, given a dose of inspiration and vision can carve out their individual path to happiness and success.

Categories
Author

Looking for a robust Photoshop template to create & preview Android wallpapers? The search is over! Intridea is happy to provide a pixel-perfect PSD GUI that allows you to preview Android wallpaper images exactly as they'll appear on your device. This wallpaper template is based on the HTC Vision (a.k.a. G2) running stock Android 2.2 (Froyo). The template is setup to preview wallpapers of 960x800 in size.

Here is what makes this Android Wallpaper Template awesome.

Preview wallpaper on different homescreen positions

A central feature of this template is the ability to preview your Android wallpaper as it shifts from left-to-right to imitate your different home screens. Using only a single wallpaper layer, you can turn on/off individual phone layers overlaid in different positions across your wallpaper.

Toggle the appearance of your app icons

Rows of actual Android icons can be toggled on/off in your Photoshop layers panel, helping you visualize exactly how your wallpaper image will look behind your collection of awesome apps.

Complete & Editable G2 PSD GUI

Furthermore, this Android GUI is offered in hand-crafted, pixel-perfect Photoshop format, complete with all layer groups intact and editable. Feel free to use this template as a jumping off point in your future Android user-interface design projects.

Thanks are due to ~wwalczyszyn for his PSD collection of Android icons, ~bharathp666 for his PSD collection of Android widgets, and =zandog for the educational reference his G2 PSD GUI provided. All phone hardware layers in the PSD were created entirely by me, but may be reused freely.

Categories
Author

My last post over on my personal blog talked a bit about the story behind the application, showed what it was, and how to use it, but this time, I want to give you guys and gals a little bit of detail on the tech behind the application.

The app

The application is a Rails 3.0.1 application. It has 3 controllers and 2 models, with almost 1000 lines of application code. I'm making use of about 10 third-party gems, mostly for fetching and parsing tasks.

A diagram of the app's architecture

The general architecture of the app centers around two distinct pieces. The Rails application really just kind of accepts and displays data: the real magic happens in the background jobs (currently powered by delayed_job).

The background jobs

Once a job is fired off, a job runner grabs it and fetches the content. If it's a feed, then the feed is fetched by Feedzirra, summarized down (more details on this in a bit), and stored back in the record. I persist all 3 versions of the feed along with the original content. I did that because I intended to show the length differences on the page (e.g., "This feed is 70% shorter!"), but I didn't have time.

If it's a web page, then the content is fetched by RestClient. I then use nokogiri to extract the main content of the page out. The algorithm I'm using is pretty complex and clever, but since it's sort of half the "secret sauce" of tldr.it, I'm not going to describe it in detail. I will say that it uses some things from my own research, some refinements from the Readability bookmarklet's techniques, and some HTML-specific (and HTML5 specific) additions. It's nowhere near perfect, but then again I did built it in 48 hours.

The summarizer

Next, it's passed to the summarizer. The summarizer is largely powered by libots, an open-source word-frequency powered text summarizer. This library works quite well, but I hit the obstacle that it was written in C. I had planned to just pipe out to its command line utility, but its utility doesn't take input from stdin very well (and by not very well, I mean it segfaulted every time). So, at that point I wanted to just write a Ruby extension or use ffi. Neither of those approaches worked out (good C programmer, I am not), so I just opted to write my own C shell app to pipe to and get info back from. The way the summarizer works is to use the Ruby standard library's Shell class (I bet you've never heard of that one!) to pipe out the text content of the page (with some smart additions and such from my code) to my C summarizer with the summarization ratio as an argument to the utility. It captures the output on stdout (if there's an error for any reason like encoding, then it just returns blank) and places that back in the record. I do this 3 times for each web page and each feed.

Once the summarized text is captured, then the record is updated by the background job and the action that's polled by the user's browser returns the right JSON and HTML to update the user's view to show that it's been fetched.

Places to improve

I want to replace libots with a library of my own creation. I wanted to do this during the Rumble (or at least enhance ots's output with it), but I didn't have time at all. I'm still not totally sure which algorithm I'm going to use, but word frequency doesn't work the best in every situation. I also need to refine the content extraction algorithm, working on more special case parsers (currently there's only one for NYTimes and Blogspot blogs). I see why many of the URL's people try aren't working, but I didn't have a chance to add a second pass algorithm if we miss the content on the first run. I also want to make the extraction content-aware, since right now it just does some analysis on page structure and loose content detection.

Anyhow, that's the technical background. Feel free to ask any questions; I'll answer to the best of my ability!

Categories
Author

In the first post in this series, I talked about some of the challenges that we faced trying to implement Scrum on one of our large client projects. After failing to reap the benefits from Scrum, I designed a new process that was better suited to our project and our team. Thus Intridea Forge was born.

On the weekends, I help out at a local non-profit educational dairy farm doing blacksmithing. In the blacksmith's workshop, you start with raw materials and put them in the forge to heat up. The forge heats up the metal to the point where it's soft enough to be worked with tools like hammers and anvils.

This new process serves as a forge for ideas about the product. We use the process to take the ideas from cold, bare metal to a point where they are hot and maleable for the developers to work them into a finished product.

Intridea Forge in 200 words or less

In case you don't care about some of the details, here's the tl;dr version of Forge.

Forge is centered around three key concepts: release iterations, feature ownership, and the finisher.

Release iterations are variable-length, feature-based iterations that correspond to a full production release of the product. Iterations aren't tied to a fixed timeline and they only end when the last of the features is completed. Every iteration is a release iteration.

Feature ownership is the result of starting each iteration with a single developer being assigned to a single feature, even if it's huge and complex. As developers finish the easier features, they roll over and help on the bigger ones or work on code improvement.

The finisher is a role on each iteration filled by a single developer who is not tied to a specific feature. Instead they are dedicated to fixing bugs, code improvement, and reduction of technical debt (or any other task that makes it more of a finished product). The developer assigned to this role changes every iteration.

Intridea Forge in Detail

Since a picture is worth a thousand words, here's a graphical overview of how an iteration progresses.

Graphical process overview

  • Release Iterations

    Iterations in Forge don't have a fixed length. Instead, iterations are tied to the completion of all of the features slotted for that iteration, regardless of how long it takes. This means that iterations will rarely be the same duration as they are pegged to functionality, not a specific schedule. At the end of each iteration you do a full production release, complete with feature announcements and all of the other fanfare.

    This is a bit unconventional in the Agile world and it may sound more like traditional waterfall, but I promise that it's not waterfall and brings quite a few benefits with it.

  • Developer Ownership

    At the beginning of the iteration, all but one of the developers on the team are assigned to work exactly one feature each and to work it alone. The developers will then own the feature they start on for the duration of the iteration.

    Since not every feature in an iteration will require the same amount of time to complete, there will be developers who finish their features “early” (it's not really early and shouldn't be regarded that way; some features will be more complex and will take longer and no judgement should be placed on how long it takes to complete). When a developer finishes their feature (and all supporting test and documentation), then one of two things happen.

    If all of the other features are progressing without any issues, then the recently freed up developer simply gets added to the finisher pool (see below). If any of the features are lagging, complicated, tedious, or otherwise in need of help, then the project manager will reassign the developer to help with that feature.

    Let’s say Sally is working on a difficult feature and John completes his feature early and shifts over to help Sally finish. One of the advantages of this process is that by the time John comes in to help Sally she will have already have gotten started on the feature and should be able to easily guide John. At this point Sally will know what needs to be done and how it needs to be done and can make effective use of the additional help.

  • Finishers

    Most of the development team is assigned a specific feature to work on for the iteration. The extra developer is assigned to a rotating role called the finisher.

    The primary responsibility of the finisher is to respond to critical popup issues. Such issues might include bugs that were recently introduced and missed during QA, a minor but critical new feature, or other similar items. Any time that the finisher isn’t working on these popups he or she can work on anything that they think needs to be done to make the project better. Examples may include:

    • Fixing old bugs
    • Adding documentation
    • Improving test coverage
    • Refactoring difficult code
    • Modularizing features into components that can be reused and/or released as open source

    Each iteration, the finisher should be a different member of the development team. The rotation of this role is essential and provides a few advantages. First, it keeps developers from getting stove-piped into a single part of the system or a single type of development. It gives everyone the opportunity to dig into other parts of the project. It also ensures that everyone has a chance to clean up or rework some piece of code they may have run across on a previous iteration.

Key Events

During the iteration, the management team has a responsibility to be setting up the next iteration for the team. This is handled by several important meetings.

Key events graphic

  • Iteration Kickoff
    Who: Development team, project manager

    At the start of the iteration, the project manager meets with the development team and describes the features for the upcoming iteration. During this meeting, the team members are assigned to the various features and the finisher is identified. This is also an opportunity for the development team to get details on the new features and clarify any questions they may have.

    At this meeting, the development team will also give their estimates for how long the features will take. This will be relayed back to the management team and other stakeholders so that they know when to expect the end of the iteration.

  • Release announcement
    Who: Management team/stakeholders, project manager

    After all of the work from the previous iteration is complete, the management team meets to schedule the release and plan any downtime. They will review the new features, prepare newsletters, blog posts, etc. at this meeting. After the release is planned, the deployment team will perform the production deploy.

  • Mid-Iteration Review
    Who: Management team/stakeholders, project manager

    Based on daily reports from the development team, at this point the project manager informs the management team of the status of the iteration so far. The estimate for completion will be updated and any features that are available on staging can be demonstrated. This meeting can occur multiple times during the iteration.

  • Initial Planning Review
    Who: Management team/stakeholders, project manager

    Throughout the iteration, informal planning for the next iteration should be ongoing. The initial planning review is the first occasion where the management team meets to formalize plans for the next iteration. At this meeting, the project manager will collect inputs and rank upcoming features. He or she will also start to flesh out the feature requirements so that estimates can be made and dependencies can be addressed.

  • Dependency Review
    Who: Project manager, technical management, lead developers

    After the first pass at defining the next iteration is completed, a dependency review is held. This is the opportunity for the various inter-dependent teams to ensure that everyone will be accommodating any upcoming changes. For example, if the web site team will be making a change or adding a feature that will affect an API used by the desktop application, then this meeting should be where the project managers for the two teams meet to discuss the implications and deployment strategies.

  • Final Planning Review
    Who: Management team/stakeholders, project manager

    Leading up to the final planning review, the project manager should have placed initial estimates on all of the features and thoroughly fleshed out the requirements. The final planning review meeting gives the management team one last opportunity to change course on the next iteration before it is locked it. Timeline estimates are reviewed and everything is agreed upon.

Throughout the iteration, informal planning should be happening to lay out upcoming iterations. As the iteration progresses the management team will also be able to see previews of some of the new features as they are made available for testing on staging. This helps ensure that the capability is implemented as intended and satisfies the curiosity of the management team to see what is being built.

Conclusion

This post has given you an overview of Intridea Forge. In the final post in the series, we'll tell you about why it has worked well for our team and we'll share some of the challenges that we faced implementing it. We'll also give some tips and lessons learned about how to implement it on other projects.

Categories
Author
.ping_graph_img { -moz-box-shadow: 0px 2px 7px #aaa; border: 1px solid #fff; width: 600px; margin: 12px 0; }

I recently had the opportunity to investigate LDAP authentication and particularly SASL (Simple Authentication and Security Layer) binding with DIGEST-MD5 (“SASL/DIGEST-MD5”), because this approach provides network communication security with little sever configuration.

Currently, there are two popular LDAP gems ruby-ldap and ruby-net-ldap that provide API for simple binding on plain or SSL connections; however, in my test, both gems failed to create SASL/DIGEST-MD5 binding correctly.

Summarized below are some of my observations during the test:

  1. In my test with ruby-ldap, I tried several types of SASL binding mechanisms (i.e. DIGEST-MD5, GSS-SPNEGO, CRAM-MD5, etc.). No matter which type I chose, the SASL binding method always returned “Local Error” message. As we know, ruby-ldap is a wrapper for the libldap c library, which redirects all SASL calls to Cyrus SASL library. Since there is no easy way to debug the error, I used wireshark packet sniffer to examine the packets sequences, and found out that the SASL binding request is never sent out after the initial TCP syn/ack/syn-ack packets. It appears that the wrapper for the libldap c library is not working properly.

  2. A closer examination at the ruby-net-ldap reveals that the gem has implemented the full LDAP stack in Ruby even though it does not support SASL binding. The gem utilizes Ruby TCPSocket class to communicate with the LDAP server, and provides LDAP packet parser and constructor. ruby-net-ldap has recently been upgraded to net-ldap, which provides a framework for SASL binding.

Clearly, net-ldap is the only option for the SASL/DIGEST-MD5 implementation. To complete a SASL/DIGEST-MD5 authentication, the client needs to communicate with sever in the following sequence:

  1. The client sends an LDAP binding request with authentication=SASL and mechanism=DIGEST-MD5.
  2. The server generates an initial “digest challenge”, and sends it to the client.
  3. The client calculates “digest response” based on username, password, a random key and some information from the server’s challenge packet and returns the result to the server.
  4. The server validates the hash value and responses with a binding success packet.

The following net-ldap code ensures the correct SASL binding sequence and LDAP packet format:

  #msgid should always start with 0  #LDAP uses BER format to denote data, http://www.vijaymukhi.com/vmis/berldap.htm  #challenge_response is the Proc object which will parse the #digest challenge and provide the correct response to the server.    def bind_sasl auth    mech,cred,chall = auth[:mechanism],auth[:initial_credential],auth[:challenge_response]    raise LdapError.new( "invalid binding information" ) unless (mech && cred && chall)    n = 0    loop {       #start with initial credential for binding request       msgid = next_msgid.to_ber       #construct the LDAP payload from bottom up       sasl = [mech.to_ber, cred.to_ber].to_ber_contextspecific(3)       request = [LdapVersion.to_ber, "".to_ber, sasl].to_ber_appsequence(0)       request_pkt = [msgid, request].to_ber_sequence       #send out the packet through tcp socket       @conn.write request_pkt       #read server challenge from the socket and parse out the LDAP payload       (be = @conn.read_ber(AsnSyntax) and pdu = Net::LdapPdu.new( be )) or raise LdapError.new( "no bind result" )       return pdu.result_code unless pdu.result_code == 14 # saslBindInProgress       raise LdapError.new("sasl challenge overflow") if ((n+= 1) > MaxSaslChallenges)       #decode the LDAP payload and pass it to challenlge_response proc       cred = chall.call( pdu.result_server_sasl_creds )       #this credential will be send to server as the challenge response     }  end  

In addition to implementing communication sequence, I forked a gem pyu-ruby-sasl from ruby-sasl to parse server challenge and generate the correct digest response and fixing several issues while connecting to Active Directory. The following example shows how to parse server challenge and generate client digest response.

  def sasl_digest_md5(bind_dn, password, host)        challenge_response = Proc.new do |cred|      pref = SASL::Preferences.new :digest_uri =>  "ldap/#{host}", :username => bind_dn, :has_password? => true, :password =>password         sasl = SASL.new("DIGEST-MD5", pref)         response = sasl.receive("challenge", cred)         response[1]      end      {:mechanism => “DIGEST-MD5”, :initial_credential => ‘’, :challenge_response => challenge_response}  end  

After I implemented the above methods, I only need following lines to perform a SASL/DIGEST-MD5 binding to Active Directory server:

  conn = Net::LDAP::Connection.new(:host => “pyub8bb.score.local”, :port => 389)  result = conn.bind_sasl(sasl_digest_md5(‘SCORE\pyu’, ‘password’, ‘pyub8bb.score.local’)) == 0  

Graph 1

image
*Graph 1 demonstrates the SASL biding packet sequence between client and server:

Graph 2

image

Graph 3

image
*Graph 2 shows the server digest-change packet format, and *Graph 3 shows the content.

Graph 4

image

Graph 5

image
*Graphs 4 and 5 show the client challenge response packet format and content.

In our latest OSS gem OmniAuth, we included several implementations for different LDAP authentication mechanisms in oa-enterprise sub-gem.

Thanks to all the good gems, implementing LDAP authentication is still fairly easy in Ruby. However, we should not forget about Java; its JNDI package provides all LDAP authentication mechanisms including much more complicated GSSAPI/Kerberos authentication. We should seriously consider using JRuby.

Categories
Author

This weekend was the fourth annual Rails Rumble event; a software contest among Rails developers, in which smalls teams of coders bring an app to life in just 48 hours. In the week following the Rumble, the apps are judged by an expert panel of judges, winners are selected, and honor is won.

Intridea is no stranger to the Rumble. We've sponsored the event for the last three years, and we've had teams participating since the event was jump-started in 2007. Intrideans have created some interesting applications, like Run1Mile, Lyricist, Love+Loathe, Thingivore, Celebrity Passage, and Smacksale - a deal aggregator that's still collecting data and publishing the hottest sales, even today!

This year we have a notable presence at the festivities. Not only do we have several teams competing, but our Senior Partners Chris Selmer and Yoshi Maisami are on the expert judge panel. Additionally, Kevin Gisi, an engineer and open source advocate at Intridea is one of the Rumble organizers. We love supporting the Rails Rumble because it's a healthy competition that inspires innovation, and exemplifies the power of Ruby and Ruby on Rails.

Here's an overview of the smart apps coming from the Intridea teams this year!

RailsWizard

A Rocket-Fueled Kick in the App

Team: The Lonely Intridean

  • Michael Bleigh

Veteran Rails developer and open source evangelist, Michael Bleigh, came up with RailsWizard, a web-based rails application template wizard to help you get up and running even faster with your Rails app. Keeping true to the Ruby and Rails spirit of making the developer's life easier, and to keep you from continually reinventing the wheel, Michael delivers a bright solution to circumvent the often tedious first steps of creating a Rails app. The application is open-source is available for forking on Github.

tldr.it

a.d.d. approved news reading

Team: My Other Car Is Your Face

  • Jeremy McAnally

TLDR.it is an essential tool for the aspiring content minimalists on the web! With the overwhelming number of RSS feeds we all subscribe to, news sites that we frequent, and blogs that we love to read, it can be cumbersome to sort through all of the cruft to pinpoint the articles that we find immediately relevant. TLDR.it intelligently summarizes the content in a targeted article and gives you the short-winded version of the content, allowing you to browse more (and hopefully more relevant) chunks of data in a shorter span of time. To see the awesomeness for yourself, try it out with NYTimes, FoxNews or CNN.

IM Gateway

Team: This We Can Have

  • Dingding Ye
  • Daniel LV
  • Terry Tai
  • David Potsiadlo

IM Gateway is a super useful notification service that allows you to communicate with your application users in real-time. Using the IM Gateway API, you will be able to harness this powerful collaboration innovation and contact users from their own web applications. It acts as the IM gateway service that allows users to register their accounts with GTalk, MSN, Yahoo!, AIM, and Jabber in order to send messages to their contacts that are logged in to the site.

It's really easy to integrate IM Gateway into your application. Now, you'll never have a gap between IM notification and your web application. Just register on IMGateway and you and your users are ready to communicate!

Twazinga

Team: ZOMG Hungry

  • Jon Kinney
  • Matt Margolis (mrmargolis)
  • Chris Johnson (johnsonch)
  • Andrew Kaempf

Jon Kinney worked with his friends to create Twazinga - a purely fun app that provides entertainment by allowing users to mashup tweets and photos from Flickr. On the site you can search for anything on Twitter, target keywords from your search, and then use those keywords to search Flickr for related images. Then, Twazinga pairs those up in a pretty interface and allows users to vote the mashups up/down. Jon Kinney says, "It's all random (and hopefully hilarious) public information, but the twist is that it's guided by you! The hope is that we can create a more generic icanhascheezburger type site that allows users to create the hilarity themselves. If a friend posts a particularly funny overheard on Twitter, hit up Twazinga to pair a funny image with it and reply to them or share it with your own followers. If you don't like the image that was returned you can hit "regenerate" to search Flickr again with the same keywords. Or if you are in desperate need of a laugh but the tweet you want to mash up with is missing a little something... you can use the "Extra weird?" checkbox to pepper in some hidden keywords and no one will be the wiser!" As more mashups are made, the Top 10 will be crowded with hilarious pairings of tweets and correlating images.

Categories
Author

Mobomo has been busy building mobile apps for numerous clients this year, and one of our latest, RaceMate, was just covered on USAToday.com. The app, available for both Apple iOS (iPhone, iPod Touch, iPad) and Google Android-based mobile devices, was designed for the Marine Corps Marathon. It will let supporters track their favorite runner at the 35th annual race in Arlington, VA, on Sun Oct 31st, 2010. For further details, please see our earlier announcement of the RaceMate mobile app and the Marine Corps Marathon.

Categories
Author


Photo courtesy Evan Phoenix

What better place to mine for skills in Ruby development than at the foothills of the Rocky Mountains? I couldn't think of any better place to experience my first Ruby conference than at Mountain.rb. I went to Boulder, Colorado where I was greeted by towering mountains and listened to genius people advocating the language that I have been honeymooning with.

Now, please note, I am very new to the community. I have only been working in Ruby for the past 5 months, and I come from a design and front-end background. Most of my programming and development skills have been self-taught, so I'm a newborn amongst mature Rubyists. I think veteran developers might have had different experiences from the conference itself, but I've been inspired to share my beginner's viewpoint.

20101006_023
Photo courtesy Peggy Dyer

The conference started for me on Wednesday, October 6 with a QuickStart workshop on Ruby and Rails. The community house where the workshop was held sat at the very foot of the Flatirons. It was a beautiful view and the venue was the perfect meeting place. Rich, dark woods surrounded me and made me very comfortable, as I was about to get a steady, but strong stream of Rails knowledge sent my way. Sarah Allen (Blazing Cloud) and Sarah Mei (Pivotal Labs) led the QuickStart, and even though I am familiar with Ruby and Rails I was intrigued as they touched on the inner workings of Rails components.

20101006_059
Photo courtesy Peggy Dyer

Thursday started off the technical sessions, of which I was uncertain of how much I would be able to keep up with. Most of the talks tended to be higher-level, touching on aspects of software development that anyone whom delves in code would be able to utilize. (I will admit that I did get lost when messaging between threaded processes were discussed). Evan Phoenix and Joe O'Brien inspired goodwill with their encouraging talks on treating people right within OSS programming and software sales.

Pete Jackson, our very own Director of Client Services, gave a blockbuster talk on Geospatial Programming (if you missed it, you can still catch him again at RubyConf in New Orleans). His talk touched on a lot of tools that many developers have not yet worked with extensively, and it was very well received.

20101006_072
Photo courtesy Peggy Dyer

The Friday morning sessions were more suited to my skillset. Highlights for me included CJ Kilbom's talk on front-end testing with Cucumber, Jasmine and Evergreen. He covered how to go further with your front-end tests, so that you can include JavaScript testing as well. Paul Sadauskas gave a talk about why dynamic forms should not be so complicated, which led to a lively discussion on possible solutions.

The biggest thing that I took away from my first Ruby conference is that this community is one that I want to grow in. Amongst the good-natured developers, crazy animal noises from the crowd, and fervor for the Ruby language and methodologies I feel like this is fertile soil for me to cultivate. I'm so glad that I have been uprooted from PHP while I'm still green!

Categories
Author

Apple-iPad-600w
So, you thought that AT&T already sold the Apple iPad, did you? You can't be faulted for that, considering that the 3G models of the popular mobile media tablet uses an optional AT&T data plan. However, AT&T will not actually be selling iPads until Oct 28th -- the same day that their wireless competitor Verizon will be selling the iPad as well. Thrown into the mix, Wal-mart will join the list of retailers selling the device, which includes the recent addition of Best Buy this past summer.

But forget the retailers; it's the resulting competition between AT&T and Verizon that will be interesting to watch. How will they compete each other? They can't reduce the device price, since Apple has that fixed -- no discounts, unless they themselves offer it. So obviously, the differentiation between carriers will be data plans and connection options, though one or both might decide to throw in goodies such as special cables. Except that AT&T has one advantage, as discussed in the next section.

Device Options

Overall, there are six models of the iPad. One variable is memory size (16GB, 32GB and 64GB), and the other is a choice between a WiFi-only model and WiFi+3G model. AT&T will be offering all six models of iPad, since the 3G network used belongs to them. Verizon will be offering the three WiFi-only models, but to entice consumers over, they're also offering a Internet connection bundle for each of the three models, the details of which are below.

Internet Connection Options

With the AT&T offerings, if you need to be connected to the Internet regularly, you'd probably want one of the WiFi+3G models. If a wireless network connection suffices, then a WiFi-only model will probably do, and is cheaper besides. For Verizon, you have a choice of just a WiFi-only iPad, or getting a bundle that includes a MiFi 2220 mobile hotspot device. Normally, a hotspot device might be awkward to carry around, though MiFi 2200 is said to be quite small and pocketable. What's more, the MiFi 2200 lets you connect up to five devices to the Internet.

There are other options. Myself, I use a different Verizon option, based on what was available when I got my iPad (on its launch day in April 2010). I have a Palm Pre Plus smartphone that has an embedded mobile hotspot feature, which is free of charge and lets me connect up to five devices to the Internet. The only drawback is that if I'm on the go and am not carrying a car charger (or my iPad or iPhone is already plugged into the car charging socket) or don't have an AC outlet to charge from, then the Pre's battery burns out extremely fast while the mobile hotspot feature is enabled. I've never kept an accurate time, but it feels like about an hour before the battery is dead, whether I'm using the Internet connection or not. I'm not mistaken, I'm paying $40/month for the data plan (5GB) and $40/month for the cell phone minutes -- which I never use. My understanding is that Verizon also has Android phones that have mobile hotspots, if you don't want a Palm Pre Plus.

iPad Data Plans: A Comparison

In retrospect, had the iPad 3G been available on launch day, I would probably have purchased that. It's much more convenient than carrying my Palm Pre Plus and its charger around (as I already carry my iPhone and sometimes my iPod Touch as well). However, for those consumer who don't want to use AT&T, it's important to note that Verizon currently has the more cost-effective data plans:

  • Verizon's MiFi 2200 data plans: 1GB for $20/month; 3GB for $35/month; 5GB for $50/month. Overage charges are $10 per GigaByte for the two top-end plans, and $20 per GigaByte on the low-end plan. Verizon is offering these special MiFi rate plans only for new iPad purchases and not for other MiFi use. (Note: normal Verizon rates are are actually higher than AT&T: 250MB for $35/month and 5GB for $60/month. These are special iPad bundle rates.)
  • AT&T: 250MB for $14.99/month (about 3 times Verizon for 1GB worth); 2GB for $25/month. (Had AT&T stuck with their original $25/month "unlimited" plan for iPad, they would have had the best rate.) AT&T will also offer iPads free access to their 23,000+ WiFi hotspots in the USA.

So Verizon's data plans are much cheaper on a per-GB average. Normally, Verizon charges $299 for a MiFi device costs $299 or significantly less if you sign a new 2-year contract, but they've dropped the cost to $130 and dropped data plan rates for their iPad bundles. Their data plans are month to month, but you cannot buy an iPad "now" then go back later for a MiFi 2200 and expect the bundle rates. AT&T's data plan also does not require a contract, but the three 3G models do cost $130 more than their WiFi-only counterparts.

Which Carrier Should You Choose?

Confused yet? It's a bit difficult to recommend a carrier here. I use both AT&T and Verizon, but I am a mobile apps developer, so my needs are different than for most iPad users. It really depends on how you would use your iPad and whether you need to connect other devices. A 3G model is more convenient but binds you to AT&T. Verizon's iPad bundles let you connect multiple devices, but battery power would likely be less than the iPad's relatively long battery life, even in use. (Note: Apple's Verizon press release says the MiFi 2200 "provides up to four hours of active use and 40 hours of standby time on a single charge.")

For businesses that plan to have employees use the device for internal corporate use, WiFi-only models might suffice if a wireless network is always available. If an employee is will be "out in the field," then it's up to either cost, convenience, connection needs or carrier preference. (Don't forget AT&T's domestic network of 23,000+ free WiFi hotspots.) The same reasoning applies to individuals considering purchasing an iPad.

What This Means for the Future

Now of course the fact that Verizon will carry the iPad is refueling rumors that a Verizon iPhone is coming in 2011, and if that's true, I wouldn't be surprised if they offer Internet tethering, even if AT&T will not. What do I think? Well, it seems to me that Apple is starting a new, open relationship with Verizon and that that will very likely lead to other joint offerings. In other words, a Verizon iPhone will eventually come, once Apple is happy with Verizon's cellular network. Apple needs to diversify U.S. cellular provider coverage and cannot afford to lose more ground in the U.S. to Android phones.

Whichever carrier iPad buyers go with starting Oct 28th, the percentage of American adults owning media tablet devices is going to climb from the Pew Internet's current estimate of ~4%, and iPad sales will be a significant part of that. Gartner, Inc., feels that, worldwide, nearly 20 million units of media tablets (aka slates) will be sold in 2010, nearly 55M units in 2011, and over 208M units worldwide in 2014. Gene Munster, an analyst at Piper Jaffray, recently predicted that iPads alone would sell 21M units in 2011 -- nearly half of Gartner's total for all types of media tablets -- a number that's up from his initial estimate of 14.5M iPad units worldwide.

The net result of this is that mini notebook sales will suffer. If that means consumers start to use the iPads or other media tablets more often, there will be an increased demand for touch-based tablet software. This is supported by the prediction that larger media tablet devices will have an important role in the enterprise. In fact, AT&T plans to sell iPads directly to the enterprise. Once a multitasking version of Apple's iOS mobile OS is available for the iPad -- which will allow users to run several apps simultaneously, the device will have significantly more value in the enterprise.

Need advice on an iPad strategy for your business? Just want to know how you can leverage the mobile platform in general? Feel free to contact us to discuss your app idea or mobile campaign needs.

Categories
Author

I love the way random things collide to produce exciting new experiences and relationships. Case in point, an adventurous day Senior Partner Yoshi Maisami and I enjoyed, courtesy of the fine folks at NASDAQ OMX during Advertising Week in New York City (Sep 27 – Oct 1).

After connecting with NASDAQ social media rock star Jill Dodge at a Nonprofit + Technology Tweetup in Washington DC, I received an invitation to be on a panel discussing trends in new media, part of a half day event called the Social Media Leadership Forum, hosted by NASDAQ at its famous Market site in Times Square. Included in this invite was a Willy Wonka-esque golden ticket opportunity: take part in a closing bell ceremony, where child-like groups of adults clap and cheer with glee as the market closes, fueled it would seem by an endless river of chocolate (coffee actually).

Our day at NASDAQ began in the ‘fishbowl’, an area above the indoor electronic board buzzing with reporters from CNBC, FOX Business, and other news outlets. It’s an electric place to hang out, for me especially, someone enamored by scrolling stock symbols and the symbolic center of technology since my days covering business news for a radio network during the tech bubble of the late 90s.

NASDAQ OMX Chief Marketing Officer and event emcee John Jacobs kicked the forum off with opening remarks, then handed the baton to David Fischer, VP of Advertising and Global Operations for Facebook. Fisher moderated a panel of senior executives from JP Morgan Chase, Proctor and Gamble, and Adidas. Their discussion, ‘Building Your Brand Around People’, was followed by social media case studies from Cisco’s Head of Social Media Marketing (thank you Jeanette, for the tour of Telepresence at your NY HQ the next day … it was mind blowing), and Microsoft’s Director of Emerging Media.

It’s tough to follow such an esteemed group of thought leaders, but next on the agenda was the panel I was part of, called ‘Social Startups: Trends in New Media’. Curtis Hougland, founder of the PR/Marketing shop Attention moderated, while I took hot seats with StickyBits co-founder Seth Goldstein, First Round Capital’s Charlie O’Donnell, and Geoff Lewis, CEO of Topguest. Our discussion ranged from geolocation, to the mobile space, to the direction of the social web in general, and the trends brands need to be most aware of.

An audience member asked what advice we had for brands new to the social space, or dipping their toes nervously in social waters. I took the opportunity to encourage companies to weave ‘social’ throughout their entire fabric, to not just think of social media as external marketing and customer service channels, but to embrace internal social software and strategy as well, for transparent collaboration, problem solving, and idea sharing. Since Intridea offers Present.ly, our Enterprise microblogging tool, this is an area of personal passion and focus, and also of great interest to a growng number of brands as the Enterprise 2.0 space continues its rapid acension in 2010.

After a talk by Huffington Post CEO Eric Hippeau, John Jacobs closed out the afternoon of events and we were ushered into the NASDAQ electronic board room, where we mingled, and were given very specific instructions for the closing bell ceremony. It’s an extremely interesting event, occurring twice daily (opening/closing), and it was fascinating to get a behind-the-scenes perspective. The entire closing bell ceremony lasted about 45 minutes, from a reception to a special presentation given to the Executive Director of Advertising Week, Matt Scheckner, to numerous group photos and then the big countdown to 4pm ET.

NASDAQ invited everyone associated with the Social Media Leadership Forum to take part in the ceremony, and Yoshi and I were only too happy to participate. Note Yoshi’s strategic positioning just to the left of NASDAQ CMO John Jacobs. We clapped and yelled and smiled for about 90 seconds, til our hands and faces hurt.

The icing on the cake took place a little after 4pm, after the closing bell ceremony, when NASDAQ officials walked all of us outside, to the middle of the a pedestrian zone in bustling Times Square. After more group photos, they took individual shots of company/organization representatives. And to our complete surprise, reflecting the kind of coordination involved with these daily ceremonies, they scrolled NASDAQ Welcomes Intridea Inc across the massive outdoor NASDAQ billboard/tower in the background as they took our picture. It was a glorious 30 second send-off from our new friends at NASDAQ. And if one can dream, and dream IPO big, then perhaps we’ll see the Intridea brand spotlighted once again on the NASDAQ tower.

Categories
Author
Subscribe to