Archive for the ‘ Writing ’ Category

CAA – Canadian Automobile Association application release

I meant to post an update about this, but for some reason it completely slipped my mind. On Nov. 17, the CAA application (my very first mobile application I got to work on!) was approved by CAA and all the app stores, so it is now available for public download!

You can get the different platform versions:

I hope you get to test it out if you get a chance! I think trying to write about all the different things I learned during this project would be at least a 20 page essay, so I’ll try to highlight the key points:

  • It is extremely important to anticipate and think about areas of change in your code. Code will have to be written to be as easily modifiable as possible. This means low coupling, high cohesion, minimal hard coding, using OO paradigms (Android and BlackBerry use Java, iPhone uses Objective-C), and being ready for change. You will get changes to the requirements, it is possible some things may not be possible, and although these requirements should all be determined at the beginning of the project, that is a perfect world situation that I have yet to experience.
  • Meetings are good, but too many meetings, or overly long meetings are terrible. Having a quick meeting to update and sync up with the status of the project and any issues on a daily or weekly basis is great. However, if these meetings drag on too long, then it’s pretty much a waste of time.
  • Design patterns are awesome. Use them. People have been developing for a long time, so use the plans they have laid out!
  • Testing is incredibly important. And there are many, many kinds of testing. They are all important. It’s better to catch all your bugs before things go into production because user feedback about how to duplicate a bug is not often helpful. Try to set it up so that if your application crashes it can email you the crash log, which is infinitely more useful than a user description.
  • User experience can make or break an application. I can write an extremely difficult application which took years to develop and can do everything from tell you the time to drive your car, but if you can’t figure out how to use it, it’s worthless. Applications that are simple to program, but easy to use, are what make it to the top of the app store lists. Make sure you get a designer to help you out with it, and do some user experience testing as well.
  • Meet all your deadlines, but don’t freak out about your deadlines. In the beginning I would worry, fret, panic, and have multiple heart attacks on delivery days. All very useless. Work on it consistently and make sure you do all your testing at least a day before the delivery date. When you change how something work 2 minutes before a release is supposed to go out, you should go through all your tests again. Just because it works for the one case doesn’t mean it works for everything!
  • BugZilla (or a bug tracking software) is only useful if you know how to use it. We were using BugZilla to keep track of all of our incoming bugs, closed bugs, and just generally keeping track of things through it, but I could not for the life of me figure out how to use it. I had to go through an incredibly painful process where I set up email notification for every bug opened, and then I would save all those emails, and when the time came, open up every single email to try to figure out which bugs were open, closed, in progress, or not bugs anymore. (I really wish they would upgrade their system … it’s still so hard to use!). Eventually I kind of figured out how to use it for my project and my bugs, and it became easier.
  • Whether you choose to use Git, SVN, Mercurial, make sure you fully understand how to use it. There are benefits and drawbacks to each, make sure you know how to use your chosen repository system’s features.

I think the last two points can essentially be summarized to: know how to use the tools you’re developing with. I think that’s a long enough list, however. I hope that’s useful to someone if they ever come across it!

And if you can, download the app and tell me how it goes for you! Let me know if I can make it better for you, and how :).

LadiesLearningCode: WordPress

I had the opportunity to volunteer at a LadiesLearningCode (LLC) event, where the topic of discussion was WordPress.

I was basically a mentor helping out, so I attended a session where we went over the content of the day, tried to figure out the content we should talk about, then tried to achieve a good balance between theory/practical experience to get the learners get some experience. The workshop was open to men as well as women, and is a nonprofit organization which puts on a series of workshops for people interested in learning how to code, with a target towards women. I believe the point of it is that since there are so few women, it’s nice to meet others in the field so you don’t feel as alone!

Someone eventually linked the event to HackerNews, where the had a discussion about whether or not it is actually useful or pretty pointless. When I first started school, I used to ask this question a lot, mostly despairingly because I didn’t understand why my life had gone from equal amounts of girl friends and guy friends to practically no girl friends at all. Eventually, I moved past it and got over it, it doesn’t really make a difference to me now. I still think it would be nice to meet more females in the tech field, as it would be easy to relate to them, but it’s not a huge issue for me anymore.

The event itself was great, it started at 8:30am and went on until about 5:30-6pm. We set up a server to run on everyone’s machine (interestingly enough, of the 85-90 people that were learners, everyone except for 2-3 people were on Macs, not Windows), installed a WordPress site, customized it, played around with some php, went through some nitty gritty WordPress details, and made some basic and complicated changes that most people like for their websites. It was very interesting, and I even learned a few things myself that day :) (a big one would be how to use Mac machines…). Breakfast (thank you for this!!), lunch, snacks, and drinks were provided and much fun was had.

I had a great time at the event and it really encouraged me to get more involved in the tech community and tech scene in Toronto, which I was previously unaware of. SF might be where everyone thinks all the innovation happens, but there is some serious talent and skill in Toronto as well!

Commit Early, Commit Often

One of the most important lessons I’ve probably learned over this past week is the mantra that should be drilled into every programmer’s head and then explained:

Commit Early, Commit Often

Even though I’ve been told and heard in the past numerous times that to commit early and commit often is a good thing, I didn’t do a very good job of it in practice. For some reason, I didn’t want to commit anything until I had completed a large portion of code, or a new feature, or fixed not one or two, but many bugs. I basically wanted to build a program / project with as few commits as possible.

I talk about this with respect to version control systems, I think they’re incredibly useful and once you start using them, you’ll never go back to life without them.

Reasons why I thought this was good: 

  • If I commit now, it might cause conflicts with the other person working on this as well, which will be problematic. I don’t want to screw up my code by updating, so I’ll just finish up a lot and make it work.

BAD: This actually doesn’t make a lot of sense. I wasn’t even able to convince myself of this. There will be conflicts if more than one person is working on the same function in the code or same area. There will be MORE if you commit after a long period of time. If you commit early and commit often, small conflicts will be easy to change and fix as opposed to a huge one.

  • I don’t want to look like a bad programmer by submitting things that might not be complete or really neat … I’ll just fix it up later and then commit.

BAD: This is terrible! The only way you can improve is by practicing, and by receiving critique. If you let no one look at your code for fear of judgement and being thought of as inferior, how will you improve? Secondly, just try to learn as much as possible!

  • I will commit after I have completed feature x or y, or after I have fixed bugs x, y, z, and q.

BAD: Commit early and commit often! This is in direct violation of that rule! If you wait until you have a big feature or a lot of bugs fixed, it can cause problems! You might lose your data, your files can get corrupted (all worst case scenario things of course, but Murphy’s always waiting to strike!) and then you’ll lose everything you worked for. Commit early and commit often.

  • I don’t want to break the build.

GOOD/BAD: It’s excellent to not want to break the build, it’s not good to refuse to commit for large periods of time. Better to test your code out (I’ve heard in Microsoft they test on three different machines with a variety of tests before they add the code to the build).

Reasons that you should always, always always commit early and commit often:

  • Your code is not you. Receive feedback, critiques, improve code, do not make same mistake again. Life’s all about that, isn’t it?
  • If someone catches a mistake you’re making early on (or even you do), then it’s super easy to rectify in the beginning, as opposed to later in the game. Then it gets 10x harder. I believe there’s a law for this that goes something like:

The amount of effort/difficulty to fix a bug that is found increases 10x for each stage that it is missed in (the stages being requirements, design, implementation, verification, production, and then maintenance).

  • If something corrupts, you have a revision that was working pretty close to the one you have right now!
  • If you haven’t committed and someone else commits code and then your code breaks after they commit, you can’t really argue their code is the reason for this. It can possibly  be the reason, and it is also possible that there was something in your code that is wrong.
  • If you make a really stupid delete file or overwrite file mistake, retrieving it is not difficult at all!

That’s all I can think of at the moment, but I hope I’ve convinced or argued enough to help anyone reading this to remember to COMMIT EARLY, COMMIT OFTEN!  I learned this the hard way, hopefully my example will be enough to save others!

“IE vs Every Other Browser On the Planet”

I go on many different websites when I’m sitting on a computer reading the news, trying to research something, or looking for an elegant solution. Occasionally, I stumble upon a website that has some really great features or looks really attractive. When this happens, I spend some time looking at the page source, to see what they’re doing and how they’re doing it. While looking at one websites javascript files, I came across this gem of a function:

function getNewHTTPObject() {
       var xmlhttp;
/** Special IE only code ... */
       /*@cc_on
          @if (@_jscript_version >= 5)
              try {
                  xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
              } catch (e) {
                  try {
                      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
                  } catch (E) {
                      xmlhttp = false;
                  }
             }
          @else
             xmlhttp = false;
        @end @*/

/** Every other browser on the planet */
if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
            try {
                xmlhttp = new XMLHttpRequest();
            } catch (e) {
                xmlhttp = false;
            }
        }
        return xmlhttp;
}

The amusing part is in the comments (I’ve bolded to make it more clear). Just highlighting the inconsistency in IE as opposed to other browsers. I remember coding a “Towers of Hanoi” web application, which worked for almost all browsers except for IE. I’ve seen CSS and HTML that has to be fixed especially for IE.

They really should make an effort to standardize themselves. It doesn’t necessarily make them better because they’re different in this case. It just makes life harder for web programmers.

A PEY Placement

The University of Toronto’s Computer Science Department offers a unique internship experience: the PEY experience, short for Professional Experience Year. This program is a minimum 12 month, maximum 16 month internship, and a 40 hours / week commitment. This also means that you will graduate one year later than you were supposed to, and that in total, it will take you 5 years to get your degree, not 4.

As well, this experience is probably the best real world experience you can have before graduating and looking for full time work. Going to a prestigious school with a renowned department helps, but it does not guarantee anything. Employers are looking for talent, a willingness to work hard, and the ability to learn.

Before I applied to any jobs, I laid out a list of requirements I wanted in an ideal job:

  • Extensive software engineering experience
  • Preferably the option to play different roles on a team
  • One which I could learn a lot from
  • A project / concept the company was working on which excited me
  • Preferably a manager who wouldn’t yell at me all the time or had a short temper
  • A placement where communication was important to the team
  • Preferably close to home, so a small commute time (I commute ~1.5 hours at least for school one way daily)

Perhaps I had more requirements than some of my peers, whom I heard say once or twice wanted a job that gave them good money, and that was it. I understand the importance of money, and do not advocate necessarily selling out your services for free all the time, as you need to make an earning for yourself. I do not feel however, that money should be your only consideration for a PEY position. I was not financially strapped however, to let money be my only deciding factor, although I agree it is important. I do point however, to all the open source communities out there, who are putting in hours of work for something they get no return from financially. They program because they are passionate and benefit from seeing others use it. Look at Blender and Gimp, just to name two.

Taking all of these accounts into consideration, I interviewed at a variety of locations. I got a few offers from some companies that I would have loved to work with and hopefully will be able to in the future, but in the end, I chose a mobile app development company, which is still considered a startup in Canada.

I chose it because it gave me almost all of the things I wanted in a job, and because I’ve wanted to develop mobile apps for a long time, and this was the perfect opportunity to do what I was really interested in and be paid for it as well ;)!

And thus, I embark on a sixteen month internship, fresh out of school. I look forward to blogging about my experiences, and keeping a note of useful tips and tricks I learn over the course of the next sixteen months.

The difference between a great programmer and a tolerable programmer

The difference between a tolerable programmer and a great programmer is not how many programming languages they know, and it’s not whether they prefer Python or Java. It’s whether they can communicate their ideas. By persuading other people, they get leverage. By writing clear comments and technical specs, they let other programmers understand their code, which means other programmers can use and work with their code instead of rewriting it. Absent this, their code is worthless. By writing clear technical documentation for end users, they allow people to figure out what their code is supposed to do, which is the only way those users can see the value in their code. There’s a lot of wonderful, useful code buried on sourceforge somewhere that nobody uses because it was created by programmers who don’t write very well (or don’t write at all), and so nobody knows what they’ve done and their brilliant code languishes.

I [Jeff Atwood] won’t hire a programmer unless they can write, and write well, in English. If you can write, wherever you get hired, you’ll soon find that you’re getting asked to write the specifications and that means you’re already leveraging your influence and getting noticed by management.

Excerpt from this post – why good communication and writing skills are important for programmers.

Blogging: It Has a Purpose

The past decade or so has seen an increase in the number of blogs and bloggers.  There has also been an increase in the number of people wishing to have their own personal identity on the Internet and a way of communicating with the rest of the world. This is largely because of the explosion in the number of people who have access and availability to the Internet. Blogging provides an easy, simple way of communicating and connecting with others. It also allows people to hear the voices and opinions of others in different countries [1]. In June 2008, Technorati performed a count of the number of blogs written in English that made at least one post in that month. The number of active blogs totaled 2,261,185, with 48% of respondents living in North America [2]. Partly because of the ease with which people could post their thoughts, many people regard blogging as useless and as a waste of time. Over the course of time however, blogging is slowly starting to be seen as more acceptable, useful, and important.

There are distinct genres of blogs: personal, political, professional, and corporate to name a few. For the purpose of this paper, the focus will be on personal and political blogs. A political blog is one that comments on politics. It is the main source of communication for people in countries where criticism against the government is not encouraged or tolerated [3]. However, reports indicate that of the total number of bloggers, 79% report being personal bloggers [2]. The reason many people adopt a personal blog is because it allows them to fulfill certain needs as indicated by Maslow’s Hierarchy of Needs [4]. It also allows them a way to interact and communicate with others and is an excellent use of Freud’s Talking Therapy [5]. Bloggers have also been able to change the lives of people reading their blogs and have been able to communicate to a broader audience [6][7]. Blogging is indeed important, and benefits both society and individuals.

Political Blogging

Increasingly, people are becoming more mistrustful of information printed in newspapers and magazines. This is because some governments monitor journalists and publications who report on volatile issues. This is especially true in countries where the government does not want its people to criticize and question the decisions made and laws passed [3]. In order to broadcast the reality of the situation, many people are using blogs as a medium to communicate the truth.

Cuba is currently under communist rule. The president, Fidel Castro, on his eightieth birthday in 2006, was praised by Gabriel Marcel Parquez and Hugo Chavez. The former is a Nobel prize-winning novelist and the latter is the Venezuelan president. Both congratulated Castro on his ability to answer the questions and criticisms of his people, and praised the lack of repression [1]. The reality however, is that people are disappearing for questioning Castro or speaking out against him. The newspapers present Castro in a positive light and have nothing but praise for him. People are starving and struggling to make a living, but the news that travels to the rest of the world says otherwise [1]. A United Nations envoy, in 2007, praised Cuba for adequately feeding its people [1], even when it was revealed in 2006, that people were starving to death [8]. It is difficult in Cuba to gain access to an Internet connection, thanks in part to America. In 2006, US Internet service providers were instructed to not provide services to Cuba [1]. Even under great supervision however, a few maintain blogs and post regularly [1]. Mainstream media continues to mislead readers about the reality of the situation in Cuba, but the truth is slowly trickling out through blogs [1].

In November 2009, UC students gathered at the UCLA campus to protest a proposed 32% tuition hike. Riot police were called in by the University shortly after the peaceful demonstrators arrived. Police were armed with tasers, guns, and pepper spray. When students attempted to enter a building to speak with the president, police restricted access. Previously, students had been informed that a few individuals would be allowed to speak to the president and the board. At least one student was arrested [9], and others reported minor injuries which included being tased and pepper sprayed. However, none of this was reported by the LA Times [10]. Students documented their experiences on blogs, through which this information was made available. Again, the truth was not wholly communicated through mainstream media, it is through political blogs that the real truth was communicated, proving its importance.

It is through political blogs then, that the truth is often communicated about information the government doesn’t always want its people to know. Sometimes, because of the massive amounts of information a publication reports on, some details are lost or not investigated. In both of these cases, political blogs become very important.

The Reason People Blog

Although blogging, especially political blogging, has proven to be useful, many people question the use of personal blogs. People frequently question the reason people blog and feel it is not a productive use of time. There are many reasons people blog and many psychological theories that would aid in explaining the use of blogging. One psychological theory is Maslow’s Hierarchy of Needs and the other is Freud’s theory about Talking Therapy [5]. Another reason people blog is to connect with others and because they want to be able to relate to others.

Maslow’s Hierarchy of Needs, which explains human need and motivation [4], also explains the motivation to blog. Blogging can help to fulfill the need to have confidence in oneself and the respect of self and others. It can also help to fulfill the need to self-actualize. As well, because self-actualization is a continuously evolving process [4], blogging can be a very useful lifelong tool. It is often when one writes down what they are feeling or attempts to explain it that they are able to understand how they truly feel [11]. Sometimes, after they do this they still need the help of others to understand themselves. By talking about their problems, it is very plausible that the person will relieve repressed emotions or feelings, which is beneficial for them.

Personal blogs, in which people post their art, stories or photography, also allows them to receive feedback from others. It allows amateur artists or writers to improve as they receive feedback [11]. As a result, it also allows people to connect with one another if they are drawn to their work. Corporations who cater to consumers, such as Hollywood, have also started to realize that an easy way to listen to the voice of the masses is through blogging [11]. Rottentomatoes, which originally started out as a movie review blog, is one such example [12]. This realization that one can voice their opinion easily and be heard by the masses or someone else draws people to blogging.

Personal blogs in which people post about their daily lives also draws people in. This can be because they know the person blogging and can follow their life easily, or because they can relate to someone’s circumstance or situation. Many also begin blogging to connect with others and have an online community of friends, particularly those blogging about a specific topic, such as religion [11]. There are many other topics one could blog about, such as school, disaster relief, book reviews, and so on. Some institutions are realizing the importance of blogs and now offer them to students to write about their experience. MIT offers this option [13] and has allowed people to gain insight into the social setting of the school.

There are many reasons people blog, but the main reasons are to self-actualize, connect and relate with others, and to have a voice.

Blogs Can Change Lives

Another reason blogging is useful and important is because it has the power to change people’s lives. As previously mentioned, because blogging allows people to connect and share with one another, it is emotionally beneficial for them. It is beneficial not only because it allows catharsis [11], but because it allows people to gain knowledge and understanding about others. It aids in causing people to be more compassionate towards others. Although there are many blogs that have changed lives, this paper will be focusing on two, PostSecret [6] and HomelessMan [7].

PostSecret is a blog started by Frank Warren. The concept of the blog is that one can anonymously mail in a secret on a personalized postcard. The postcards provide inspiration for readers, and allow the writer to heal as they have unburdened themselves. They also provide hope to those who can identify with the writers’ secret and create a community of acceptance [14]. Warren posted on the site the contact information for HopeLine, a suicide help line, which Cassie, a visitor to the site took advantage of. Cassie later contacted Warren with a picture of herself letting him know that the reason she was alive today was because of the website [15]. PostSecret has since its inception in January 1, 2005, gained such a large following that Warren has published five books of secrets. It is obvious that PostSecret has changed people’s lives.

HomelessMan is blog started by Philip Stern. Philip blogs about Tony, a homeless man he met outside of his favorite coffee shop. He started to learn about Tony’s life and decided that the rest of the world needed to hear his story too. The blog is records of conversations the two have had. When people post questions to Tony on the blog, Philip relays them and Tony answers them [7]. This has caused people to face the realities that the homeless people are facing. It has also cleared up some misconceptions – one being that homeless people are lazy and do not want to work for a living. Philip’s blog has given a voice to Tony, who is the voice for homeless people in Toronto. Tony’s sister was able to find him because of the blog, and a few people have visited Tony since Philip started the blog [7]. The blog has not only changed Philip’s life, but also the lives of people who have never met Tony. It has allowed people to better understand homelessness.

These are only two of the blogs that have changed people’s lives, and in the case of PostSecret, definitely saved people’s lives. It is obvious then that blogs really are important.

Recommendations

Blogging is important, and indeed useful. One can use blogging to generate an income. For example, some people blog professionally and make an income. Of the blogs reported by Technorati, 12% are corporate blogs and 46% are professional blogs [2]. However, there is an overlap between the categories, showing that some professional blogs are corporate blogs which make money. This is further evidence that blogging is not useless.

Perhaps many people feel blogging is useless because of the sheer number of blogs and the lack of blog supervision or control. Many blogs start out as personal blogs which are often abandoned, or the authors write about topics without solid background knowledge. As a result blogs in general are regarded as not a very reliable source of information.

My proposition is that every blog post must follow at least one rule: that it must have a point or a purpose. To further increase the credibility, the point made must not be one that is obvious and mundane, but one that is thought provoking. It must, at the very least, cause people to have an opinion about it and be able to discuss the topic. Bloggers are allowed to have personal, journal-type blogs, in which the daily events are written, but they must also have a larger point. The point can be a pattern of behavior that is positive or negative, an observation about a group of friends, etc. It is possible to have a journal-type blog that still has a point.

As there are no “blog police” or formal blog instructors, the teaching must begin in schools. Blogging can easily be integrated into a classroom learning environment. For younger children, instead of a monthly newsletter for their parents, one can have the option of creating an online newsletter. For children in secondary school, blogging can be integrated into Information Technology courses or English Media courses. Students can be required to write a blog post or create an online blog journal in which they document their progress or work.

Post-secondary institutions can also take advantage of this to reach a broader range of incoming students. It also provides students at the Institution in the same discipline or program an area for intellectual discussion and growth. It can even allow students in different disiplines to interact and broaden the students’ scope.   Blogging can certainly be seen as important and useful, if proper steps were taken to teach bloggers a few essential blogging tips.

References

[1] A. Loewenstein, The Blogging Revolution, Melbourne University Press, 2008, pp. 1-39.

[2] D. White, “Day 1: who are the bloggers?,” Technorati, http://bit.ly/7ZymRG. Accessed December 5, 2009.

[3] M. McCaughey, M. D. Ayers, Cyberactivism: Online Activism in Theory and Practice, Routledge, 2003, pp. 165-184.

[4] J. M. Kiel, “Reshaping Maslow’s hierarchy of needs to reflect today’s educational and managerial philosophies,” Journal of Instructional Psychology, vol. 26, 1999. Available at http://www.bit.ly/questiaJournal. Accessed November 14, 2009.

[5] C.G. Boeree, “Sigmund Freud,” Shippensburg University My Website, http://bit.ly/talkingTherapy. Accessed December 5, 2009.

[6] F. Warren, “Postsecret,” PostSecret, http://bit.ly/postSecret. Accessed December 5, 2009.

[7] P. Stern, “Homeless man speaks,” Homeless Man Speaks, http://bit.ly/homelessManSpeaks. Accessed December 5, 2009.

[8] T. DeWeese, “Fidel Castro is a Communist,” Capitalism Magazine, http://bit.ly/fidelCastro. Accessed December 5, 2009.

[9] J. Bruning, “Statement from John Bruning about his arrest,” Occupy UCI and Everything Else Too, http://bit.ly/occupyUCI. Accessed December 5, 2009.

[10] M.-T Tran, “Students storm UCLA building to protest expected UC system fee increase [updated],” Los Angeles Times, November 19, 2009, http://bit.ly/LAarticle. Accessed December 5, 2009.

[11]  A. Barlow, Blogging @merica, Praeger Publishers, 2008, pp. 113-117, 137-145.

[12] S. Duong, “Rotten tomatoes,” Rotten Tomatoes, http://bit.ly/WV06. Accessed December 5, 2009.

[13] C. Chinea, “MIT admissions | Cristen C. ’10,” MIT Admissions, http://bit.ly/MITblog. Accessed December 5, 2009.

[14] F. Warren, My Secret, Harper Collins Publishers Inc., 2006.

[15] F. Warren, “Eating light bulbs & postsecret events,” myspace, http://bit.ly/psMySpace. Accessed December 5, 2009.