My job search over the past few weeks has got me thinking about what I really want to do in life. I’ve managed to narrow down 5 areas that are most important to me. Aside from what I’m looking to gain from a company, these things are largely things I would need/like at the place I’ll be working at for the next few years
The technology I work with has to be something I agree with. I would hate working on ASP, .NET or some form of VB, it’s just not something I’d like to do. People tend to feel strongly about some languages/packages and can learn to live with others, but they’re some that they cannot or refuse to work with. I’m no different; the technology I work with is something I’ll be stuck with for a few years at the very least, and it’s important that I learn to love the language and tools I use.
Work environments are made by the people. If the people aren’t fun or at least tolerable, it’s not going to be enjoyable working wherever you choose even if you love the technology and location. A lot of the smaller to mid-size tech companies spend time in the interview process trying to gauge whether the interviewee is someone they would like to work with and someone they can get along with, because having even one rotten apple in the bunch can easily bring the whole team down. For this reason, it’s important to work at a place where a team functions as a cohesive unit, and there’s no friction between people that pulls productivity way down and has a huge impact on the quality if life. For me, I need to be assured that the people I work with are “my kind of people”, smart people that work hard but know to loosen up every now and then to let off some steam.
Brand recognition is important. I need to work on a product that is useful, that people use frequently and that has some value to its consumers. I would like to be recognized as an employee of xyz company, a company that people know and trust. It’s not so important whether the company is directly consumer-focused or if it services other companies, but I can’t be passionate about working somewhere that I don’t see the value in the product myself. What drives me to work harder is that I know the code I write will be used by many many people to do whatever they need to do.
4. Work-life balance
Another (marginally) important factor for me is having some sort of a work-life balance. I’m still young and (almost) fresh out of college; I’d like some time to make inroads into the open-source community, join developer communities and maybe even pick up a hobby or two. My life right now is wholly consumed with surviving an onslaught of class, work, meetings and cooking for survival, and I need to know that when I get home after work at 8pm or whenever, I have some time to do things other than eat and sleep. It isn’t as important factor as others mentioned above, but it will definitely factor into my final decision.
While this isn’t a top priority, it still has a reasonable impact on whether or not I feel strongly about working somewhere. Being in Boston for four years, I’ve appreciated this greatly and realized how useful it is to be at a place that is both a tech hub and a college town. It’s nice to have all four seasons, convenient because they’re conferences and meetups happening all the time, and a great place to work at with young, fresh geniuses.
I’ve been using my HP touchpad pretty frequently, and I have to say I am in love with webOS on the touchpad. On the downside, there are performance issues with taps not being registered and it lags sometimes, along with the obvious shortage of apps, but on the other hand it is a very well designed piece of software. It’s intuitive, a pleasure to use and navigate through, and their multitasking solution is simply beautiful. It’s very visual and easy to use and swiping between apps and using multiple ones at the same time couldn’t be better, something android and even iOS has failed to capture. WebOS is, in my opinion, exactly what a tablet should sport for an OS, a simple, gesture oriented PC replacement (in some cases) solution.
I’ve gone ahead and installed cyanogenmod (alpha 2.1) on my touchpad, but it’s nowhere near as fulfilling an experience. Honeycomb on a tablet has the feel of being a smartphone OS that has been stretched to fit onto the tablet, with no changes or even enhancements made for the larger screen size. Ice Cream Sandwich is supposed to make it better, but I’e tried it on a tablet and the multitasking is still a pain to use; there’s no easy way to see what apps are actually open and no elegant way to close or switch between them.
In short, it’s pretty disappointing that HP took Palm’s excellent work and axed it. I don’t think there’s going to be enough effort on it as an open-source project, everyone’s caught up in the fight between Google and Apple to put a lot of thought into developing webOS and porting it to devices. Developing for webOS is possible with only html and js, using a framework called enyo. Pity, something I’d love to do as an exercise.
When I got my droid charge, I was a bit skeptical about its size, and about how useful that giant touchscreen would be. I didn’t think I’d be reading off it
much, and I’m notoriously bad with typing on touch screens. I used to touchtype furiously on all my old nokia phones, and getting a high-end android phone was quite a bit of a jump for me.
That said, I couldn’t be happier. I’m still an atrocious typist (swype gets me so frustrated sometimes that I want to throw my phone against the wall, but I’m worse at the conventional keyboard) but I use my phone all the time. It’s my text/talk phone, web browser, map, gps, camera and app portal all in one. I sit and read techcrunch articles (in class sometimes), answer emails on the go, work through my to-do list and keep track pf my calendar. Having it synced with my google account helps a lot, it keeps my life in order. Not sure what I’d do without my phone now.
On the other hand, the battery life is abysmal. I can’t even get through a working day without it dying out on me. Even with very light use, it’s usually almost dead between the time I leave home and get back, and if I use it like I normally do it’s dead long before. I used to carry around an extra charger to keep my phone usable, but that’s gone missing over the last week or so. I’ve had to buy an extra battery, and I swap them out every now and then to keep both charged in case I need it
On a side note, my HP touchpad should (finally) be coming soon. I’m hoping the cyanogenmod team or someone at rootzwiki will have a decent release of android for the touchpad – chances are I won’t like webOS as much as good old google android…
I’ve been struggling with setting up tomcat with sakai over the last few days. I’ve learned that although tomcat is relatively easy to set up, there are still quite a few hoops you have to jump through.
Installing tomcat itself is pretty straightforward, simply download the version you want, unzip the file and there you have it, your tomcat server. It needs minimal configuration – you can change the port it runs on in conf/server.xml (though beware, you need to be root to run anything on a port below 1000-something) and there are database settings somewhere in server.xml. Before you try running the server, make sure the environment variable $JAVA_HOME is set to the base of your java installation! For me this was at /usr/lib/jvm/java-6-sun, though it could very well be different depends on how your system is set up. The next thing to do is create an /etc/init.d script to make it much easier to start and stop – I took mine from howtogeek. Then, if you chmod u+x the script in init.d, you can just do
service tomcat start to start the service.
The biggest problem I ran into was exceeding the limit for the number of open files. By default on Ubuntu, you’re only allowed a little over a 1000 open files at a time. For running a tomcat server which could open many many thousands of files itself, this is nowhere near enough, and for the longest time I couldn’t figure out why the server kept failing to load. It was only after tailing the log file using
tail -f /opt/tomcat/logs/catalina.out and catching the ‘too many files open’ error that flew by that I realized that I was running out of the file limit. You can check your file hard and soft limits by running
ulimit -Hn and
ulimit -Sn. To modify this limit, you need to edit /etc/security/limits.conf and add the following two lines:
* soft nofile 65536 and
* hard nofile 65536 which sets the max number of open files (nofiles) limit to 65536. You might have to do a restart after this.
Once you have this down, however, tomcat should just work, and you’ll be able to access your webapp at localhost:8080 or whatever port you specified. Yay.
Yes, I know there are a multitude of guides out there on using vim as a super-powerful code editor, but I am going to go ahead and make my own recommendations. This is more or less a list of commands/tools that I use a lot and that work for me. To use a few of these though, you’re going to have to use my vimrc configuration: take a look at my vimrc repository on github.
:vsp [filename] – vertical split – one of my all-time favs! You can tab out the filename to see where you are and what files are available
:sp [filename] – horizontal split. Almost as useful as :vsp.
Ctrl+W Ctrl+R – While working with split windows, move current window clockwise. Useful for moving around splits.
:W – write and compile C files using the file ‘compile’ in the same directory, requires my vimrc config
. – Execute last command. Haven’t used it much yet, but seems very useful!
~ – switch the letter under the cursor from uppercase to lowercase and vice versa then move forward one char. Credit to Hashem for showing me this, it made my life n amount of times better!
:%s/from/to/g – Globally replace the ‘from’ strings in the file to ‘to’ – really useful find and replace. Don’t forget the g for global!
gg – Go to the start of a file
G – Go to the end of a file
gg=G – Indent from the start of a file to the end of a file (i.e. indent the whole file). You can also indent the line you’re on by using ==
q <char> – Insert <char> before cursor – requires my vimrc
Q <char> – Insert <char> after cursor – requires my vimrc
0 – Go to the start of a line
$ – Go to the end of a line
w – Go to the start of the next word
e – Go to the end of the current word
b – Go back to the previous word
J – Replace the newline at the end of the current line with space, i.e. bring the lower line up. Super useful
K – Look up the current word in the man pages, good for looking up C functions
Tab – autocomplete current word! Super useful, requires my vimrc
Ctrl+[ – an alias for ESC to get out of insert mode, again credit to Hashem!
The apache2 webserver can be very daunting for someone who’s a new user. I just spent a good amount of time wading through the mess I made when I first set it up in understanding and fixing a couple of things to make it work. This is part a reference to myself, part a quick primer to anyone else struggling with apache. There’s not too much detail, but it’s a way to get you started.
Apache sources a configuration file which can be modified for specific uses. The default config file is httpd.conf, and on most linux machines, it is located at /etc/apache2/httpd.conf. To see which config file your apache2 server is using, type in the command apache2 -V and one of the last lines of output will say something like SERVER_CONFIG_FILE and will tell you the location of the config file.
Apache2 supports a bunch of modules which are included by default, such as those for enabling proxies, and some that you have to install manually, such as mod-wsgi. Once you have the module, something to make sure you don’t trip up on is enabling the module using the command a2enmod (apache2 enable mod). Example: a2enmod mod-wsgi
Files named .htaccess have a special meaning in directories pointed to by apache. It is a file that contains directory specific configuration, such as whether to allow access to the directory or not. A lot of web frameworks, like wordpress to have a certain configuration in the .htaccess file, and they usually give you the code you need to put in the line. To allow .htaccess files to be used, however, they have to be readable by the user of the apache2 server, and the apache config file has to have AllowOverride All to allow the local .htaccess files to override the server settings.
Life would be so much more interesting if I didn’t have to take classes. On a campus like Tufts, there are so many exciting opportunities around that I wish I could spend more time doing, but it seems that classes and other responsibilities always get in the way. For instance, yesterday a friend of mine told me about an opportunity to spend a few weeks settings up an online system in php or python (both of which I am fairly proficient in) using third party APIs on an apache server do deal with forms logic and file storage. There’s my current position as an Academic Technology Fellow, which has been exposing me to wonderful technological tools that Tufts has available; I wish I had more time to play around with them and understand them inside out. There’s my internship from the summer, which I’d love to work harder on. There are many many more things I’d be happier doing, and on top of that there are always freelance projects floating around that I would be happy to spend a week developing and working on. And of course, there’s my personal website, which I swore I’d complete over the summer but only ended up doing part of it over the last week or so.
Another year and I’m out. However, that also means that it’s going to be much harder to come by opportunities such as this. Quite a conundrum indeed: I need to be in college to find things to do, but being in college means I have no time to do things.
This is a blog that will be used for testing purposes.