Monday, April 7, 2008
Install Firefox Plugin View Source Chart to View Formatted Source
Sunday, March 23, 2008
My Top 5 Freeware for Windows
We the Computer Engineer's all know that Firefox (Ahmet Salih's favorite for ITU's registirations) is pretty much the greatest free web browser known to man and that OpenOffice (Dogukan's favorite word processor for reporting) is a pretty decent open source alternative to the Microsoft Office suite … but those are obvious, right? What about all those sweet, free (as in food) software programs out there that no one’s really ever heard off? Don’t they deserve some love, too? Don't you want to get familiar with the tools that i have been using so much ?
Granted, a lot of the programs that get me excited are perhaps a bit obtuse, but let’s go with it. Without further adieu, here’s my short list for friends and beginners for programming containing 5 of the coolest unknown freeware for Windows (in no particular order for me :) )
1. PuTTY Connection Manager - DOWNLOAD
What?! You haven’t heard of PuTTY? It’s only the fastest, greatest, FREE terminal emulation client for Windows (for those of you who are freaked out by Unix terminals alone, much less ones ported to Windows, don’t worry - there are plenty of guides for why you’d use it and how to use it best).
(I’m sure there are plenty of people out there who prefer VanDyke’s SecureCRT, but it costs money, and being as I’m cheap, I don’t want to plunk down $99 for a program whose functionality PuTTY pretty much encapsulates)
However, there’s ONE thing that SecureCRT has that PuTTY doesn’t: tabs! Once you start administering several systems at once, you begin to get angry at how quickly those multiple terminal windows clog up your screen. For the longest time, I harbored envy of SecureCRT’s tabbed window that contained all terminal sessions in one screen … until I stumbled upon PuTTY Connection Manager.
This gem of a program “swallows” instances of PuTTY into one tabbed screen, complete with direct access to PuTTY’s native connection management screen and a tree-style list of all servers you currently have setup. Couple the bookmarks features and the Quick Connect options, and this program (which is still in beta) is looking pretty sweet next to commercial variants.
2. SyncBack - DOWNLOAD
Like most people, I never really thought about backing up anything on my hard drive. Then it happened - I remember I had to Photoshop some large project for a class and with the deadline looming, the power went out at my house. And I hadn’t saved a thing. And don’t even talk to me about about having a reliable UPS (see above mention of my “cheapness”). It was in those frustration-induced moments that I decided I needed to do a little backup.
Being a fan of freeware, I immediately Google’d for freeware backup utilities, and after trying a few (rather inadequate) ones, I found the free Community edition of SyncBack. This app still blows me away - the myriad of features it contains - synchronization/backup, FTP, ZIPing, and profiling, to name a few - is just unbelievable and should satisfy any personal backup you might need. Be sure to check out the sweet guide on SyncBack by Gina over at Lifehacker.
P.S: there’s a Enterprise version of SyncBack, but I can’t really see what I would need it for - check it out, though, because it might fit a need of yours that the Community edition doesn’t)
3. Belvedere - DOWNLOAD
So, being a computer scientist, I’ve taken it upon myself to be familiar with all types of computers - which is a snazzy way for me to justify being both a Mac user and a PC user. Some time ago, I ran across an awesome program for the Mac called Hazel, a rule-based program designed to keep files on your computer in order. Want your downloads folder - where you dump everything you download in Firefox - cleaned every week? Hazel can do it. Want any screenshots you take to automatically be placed in your Pictures folder? Hazel can do that, too.
Needless to say, this awesome experience immediately had me searching for a Windows equivalent. And what did I find? Nothing! I resigned myself to existing in an unorganized PC landscape for the rest of my days.
This last January, Adam at Lifehacker rode to the rescue with Belvedere, his attempt to create a direct clone of Hazel for Windows. While it doesn’t contain exactly the same functionality as Hazel (yet!), it has rules for modifying, deleting, moving, and otherwise heckling files that fit certain criteria. Given that I have folders all over my PC accumulating with junk, Belvedere is a set-it-and-leave-it app that ensures crud gets moved where it needs to go on a regular basis.
4. VirtuaWin - DOWNLOAD
Oh boy, I am a sucker for screen real estate. I just recently got myself a second monitor, and frankly, I don’t know how I ever lived without one. But it gets better - the other day, I saw a system administrator friend of mine using Linux’s virtual desktops with a dual monitor (in case you don’t know what virtual desktops are, check out this Wikipedia page on the subject). With 4 virtual desktops, his computer basically had 8 screens worth of information. 8!
Now, I would love to switch to Linux full time, but there are a lot of things on Windows that I need … but Windows doesn’t come with virtual desktops out of the box (the Microsoft PowerToys group has a virtual desktop implementation, but it’s nasty-slow). Once again, Google to the rescue: Sourceforge-hosted VirtuaWin was the answer.
This guy is lightning fast, and the FAQ on the site has tips for speeding it up under Windows. Add that to the fact that you can instantly switch to different virtual desktops (via mouse click, mouse movement, or hotkey), move windows between desktops, and create default application sets, and this is one sweet application for people starved for desktop space.
5. Komodo Edit - DOWNLOAD
This is one of those programs where you go, “How in the world is this free??”
Web development was one of my favorite areas for CE - I’m always on the lookout for tools that will help me get the job done better and faster (and are for free!).
Now, for a long time, I’ve been envious of Komodo IDE, what with its debugging qualities, DOM viewer, and code browsing. Unfortunately, it costs $$$, so it’s out the window.
But behold! ActiveState has a smaller, parred-down version of Komodo IDE for free! Komodo Edit only has three of Komodo IDE’s main features - editing multiple languages, project managers, and general toolbox - but I find that those are plenty. My favorite feature? Code completion for functions I’ve written
What about you guys? Any freeware for Windows we should know about? Hit us up below.
Etiketler: Freeware, ms windows, programming tools, recommendation for itu ce, tools, top 5 freeware, web developer tools, xp
Friday, February 8, 2008
What are the things we can do using Linux that we can't do with MS Windows?
I have thought about this subject this recently.
I don't have just one answer. I compiled a list of things I thought of and emailed it to myself...
Then I thought I would post it to the blog for future reference.
Feel free to add to the list or post any commands!
There is also a forums thread on the same topic, that I remembered as I complied my thoughts, so I stole some of the ideas posted there so this one is not a very creative post in my own ;)
1. Upgrade to the newest version legally and without paying money
2. Have the latest version of the operating system run faster than the previous version on the same hardware
3. Easily install and run different graphical interfaces if I don't like the default setup
4. Install twenty programs with one command
5. Have the system automatically update all my installed programs for me.
6. Install the same copy of my OS (Pardus) on multiple computers without worrying about license restrictions or activation keys
7. Give away copies of the operating system and other programs that run on it without breaking any laws, governmental or ethical or moral, because it was all intended to be used this way
8. Have full control over my computer hardware and know that there are no secret back doors in my software, put there by malicious software companies or governments
9. Run without using a virus scanner, adware/spyware protection, and not reboot my computer for months, even when I do keep up with all of the latest security updates
10. Run my computer without needing to defragment my hard drive, ever
11. Try out software, decide I don't like it, uninstall it, and know that it didn't leave little bits of stuff in a registry that can build up and slow down my machine
12. Make a major mistake that requires a complete reinstallation and be able to do it in less than an hour, because I put all of my data on a separate partition from the operating system and program files
13. Boot into a desktop with flash and effects as cool as Windows Vista on a three year old computer...in less than 40 seconds, including the time it takes me to type my username and password to login
14. Customize anything I want, legally, including my favorite programs. I can even track down the software developers to ask them questions, contribute ideas, and get involved in the actual design/software writing process if I want to
15. Have 4+ word processor windows open working on papers, listen to music, play with flashy desktop effects, have contact with a largely happy community and have firefox, instant messaging, and email clients all open at the same time, without ever having had to beg someone for a code to make my os work, and without the system running so slow it is useless
16. Use the command "dpkg --get-selections > pkg.list" to make a full, detailed list of all software I have installed, backup my /etc and /home directories on a separate partition, and you are able to recover your system any time, easily
17. Run multiple desktops simultaneously, or even allow multiple users to log in and use the computer simultaneously
18. Resize a hard disk partition without having to delete it and without losing the data on it
19. Use the same hardware for more than 5 years before it really needs to be replaced...I have some hardware that is nearly 10 years old, running Linux, and still useful
20. Browse the web while the OS is being installed!
21. Use almost any hardware and have a driver for it included with the operating system...eliminating the need to scour the internet to find the hardware manufacturer's website to locate one
22. Get the source code for almost anything, including the OS kernel and most of my applications
I could go on, but that's long enough, you may let the steps ascend :)
How to Recognise a Good Software Developer
How do you recognise good programmers if you’re a business guy in IT sector?
It’s not as easy as it sounds. CV experience is only of limited use here, because great programmers don’t always have the “official” experience to demonstrate that they’re great. In fact, a lot of that CV experience can be misleading. Yet there are a number of subtle cues that you can get, even from the CV, to figure out whether someone’s a great programmer.
I consider myself to be a pretty good programmer. At the same time, I’ve spent a fair amount of time on the business side of the fence, filtering technical CVs for projects, interviewing people, etc. Thanks to this, I think I have a bit of experience in recognising good programmers, and I want to share it in this article, in the hope that it may help other “business guys” to recognise good programmers. And, who knows, perhaps some programmers who have the potential to be good but haven’t really exploited this can also read this and realise what they need to do to become good (although, as I’ll argue, that’s definitely not accessible to all programmers!).
In his article The 18 mistakes that kill startups, Paul Graham makes the following point, i'd like to give some interesting parts of my research:
“… what killed most of the startups in the e-commerce business back in the 90s, it was bad programmers. A lot of those companies were started by business guys who thought the way startups worked was that you had some clever idea and then hired programmers to implement it. That’s actually much harder than it sounds—almost impossibly hard in fact—because business guys can’t tell which are the good programmers. They don’t even get a shot at the best ones, because no one really good wants a job implementing the vision of a business guy.
In practice what happens is that the business guys choose people they think are good programmers (it says here on his resume that he’s a Microsoft Certified Developer) but who aren’t. Then they’re mystified to find that their startup lumbers along like a World War II bomber while their competitors scream past like jet fighters. This kind of startup is in the same position as a big company, but without the advantages.
So how do you pick good programmers if you’re not a programmer? I don’t think there’s an answer. I was about to say you’d have to find a good programmer to help you hire people. But if you can’t recognize good programmers, how would you even do that?”
I disagree with Mr Graham on this one. I think there are a number of very strong indicators of a “good programmer” (and, conversely, strong indicators of a “not-so-good programmer”) that even a business guy can recognise. I’ll summarise some key indicators and counter-indicators in a list at the end of the article.
#1 : Passion
In my corporate experience, I met a kind of technical guy I’d never met before: the career programmer. This is a person who’s doing IT because they think it’s a good career. They don’t do any programming in their spare time. They’re shocked when they find out I have a LAN and 3 computers at home. They just do it at work. They don’t learn new stuff unless sent on a training program (or motivated by the need to get a job that requires that technology). They do “programming” as a day job. They don’t really want to talk about it outside of work. When they do, they talk with a distinctive lack of enthusiasm. Basically, they lack passion.
I believe that good developers are always passionate about programming. Good developers would do some programming even if they weren’t being paid for it. Good programmers will have a tendency to talk your ear off about some technical detail of what they’re working on (but while clearly believing, sincerely, that what they’re talking about is really worth talking about). Some people might see that as maladapted social skills (which it is), but if you want to recognise a good developer, this passion for what they’re doing at the expense of social smoothness is a very strong indicator. Can you get this guy to excitedly chat up a technology that he’s using, for a whole half hour, without losing steam? Then you might be onto a winner.
#2 : Self-teaching and love of learning
Programming is the ultimate moving target. Not a year goes by without some new technology robbing an old, established standard blind and changing half the development universe. This is not to say that all good programmers pick up these changes and ride the bleeding edge. However, there’s a class of programmers that will never, ever pick up a new technology unless forced to, because they don’t like learning new stuff. These programmers will typically have learnt programming at university, and expect to get by on whatever skills they picked up there, plus whatever courses their company is willing to send them on.
If you’re thinking of hiring someone as a programmer, and he ever utters the words “I can work with that, just send me on a training course for a week and I’ll be good at it”, don’t hire that guy. A good programmer doesn’t need a training course to learn a new technology. In fact, the great programmer will be the one talking your ear off about a new technology that you haven’t even heard of, explaining to you why you must use it in your business, even if none of your staff knows how to use it. Even if it’s a technology he doesn’t know how to use yet.
#3 : Intelligence
Some business people assume that lack of social tact and lack of intelligence are the same. Actually, intelligence has several facets, and emotional/social intelligence is only one of them. Good programmers aren’t dumb. Ever. In fact, good programmers are usually amongst the smartest people you know. Many of them will actually have pretty good social skills too. The cliché of the programmer who’s incapable of having a conversation is just that - a cliché. I’ve been to a few meetings of the London Ruby User Group and I can say that with only a very few exceptions, most people there are smart, talkative, sociable, have varied interests, etc. You wouldn’t look at them chattering away in the pub and think “what a bunch of geeks!” - at least until you approach a group and realise they’re talking about the best way to design a RESTful application with a heavy UI frontend.
This doesn’t mean that they’ll all feel comfortable in every social context. But it does mean that if the context is comfortable and non-threatening enough, you’ll be able to have as great a conversation with them as you would with the most “socially enabled” people (perhaps better, since most good programmers I know like their conversation to revolve around actually useful topics, rather than just inane banter).
Don’t ever hire a dumb person thinking they’re a good developer. They’re not. If you can’t have a great conversation with them in a relaxed social context, they’re very likely not a good programmer. On the other hand, anyone who’s clearly very smart at the very least has a strong potential to be a good or great programmer.
#4 : Hidden experience
This is correlated with the “Passion” point, but it is such a strong indicator that I’d like to emphasise it with its own point.
I started programming when I was about 9, on a Commodore 64. I then migrated onto the PC, did some Pascal. When I was 14 I wrote a raycasting engine in C and Assembler, spent a large amount of time playing with cool graphic effects that you could get your computer to do by messing directly with the video card. This was what I call my “coccoon stage”. When I entered that stage, I was a mediocre programmer, and lacked the confidence to do anything really complicated. When I finished it, I had gained that confidence. I knew that I could code pretty much anything so long as I put my mind to it.
Has that ever appeared on my CV? Nope.
I strongly believe that most good programmers will have a hidden iceberg or two like this that doesn’t appear on their CV or profile. Something they think isn’t really relevant, because it’s not “proper experience”, but which actually represents an awesome accomplishment. A good question to ask a potential “good programmer” in an interview would be “can you tell me about a personal project - even or especially one that’s completely irrelevant - that you did in your spare time, and that’s not on your CV?” If they can’t (unless their CV is 20 pages long), they’re probably not a good programmer. Even a programmer with an exhaustive CV will have some significant projects that are missing from there.
#5 : Variety of technologies
This one’s pretty simple. Because of the love of learning and toying with new technologies that comes with the package of being a “good programmer”, it’s inevitable that any “good programmer” over the age of 22 will be fluent in a dozen different technologies. They can’t help it. Learning a new technology is one of the most fun things a programmer with any passion can do. So they’ll do it all the time, and accumulate a portfolio of things they’ve “played around with”. They may not be experts at all of them, but all decent programmers will be fluent in a large inventory of unrelated technologies.
That “unrelated” bit is the subtle twist. Every half-decent java programmer will be able to list a set of technologies like “Java, J2EE, Ant, XML, SQL, Hibernate, Spring, Struts, EJB, Shell scripting”, etc.. But those are all part of the same technology stack, all directly related to each other. This is possibly hard to recognise for non-programmers, but it is possible to tell whether their technology stack is varied by talking to them about it, and asking them how the different technologies they know relate to each other. Over-specialisation in a single technology stack is an indicator of a not-so-good programmer.
Finally, if some of those technologies are at the bleeding edge, that’s a good positive indicator. For instance, today (November 2007), knowledge of Merb, Flex, RSpec, HAML, UJS, and many others… Please note that these are fairly closely related technologies, so in a couple of years, someone who knows all these will be equivalent to someone familiar with the Java stack listed in the previous paragraph.
Update: As a clarification to this point, there’s in fact two indicators here: variety and bleeding edge. Those are separate indicators. A good variety of technologies across a period of time is a positive indicator, whether or not the technologies are bleeding edge. And bleeding edge technologies are a positive indicator, whether or not there’s a variety of them.
#6 : Formal qualifications
This is more a of non-indicator than a counter-indicator. The key point to outline here is that formal qualifications don’t mean squat when you’re trying to recognise a good programmer. Many good programmers will have a degree in Computer Science. Many won’t. Certifications, like MCSE or SCJP or the like, don’t mean anything either. These are designed to be accessible and desirable to all. The only thing they indicate is a certain level of knowledge of a technology. They’re safeguards that allow technology recruitment people in large corporations to know “ok, this guy knows java, he’s got a certification to prove it” without having to interview them.
If you’re hiring for a small business, or you need really smart developers for a crack team that will implement agile development in your enterprise, you should disregard most formal qualifications as noise. They really don’t tell you very much about whether the programmer is good. Similarly, disregard age. Some programmers are awesome at 18. Others are awesome at 40. You can’t base your decisions about programmer quality on age (though you might decide to hire people around a certain age to have a better fit in the company; please do note that age discrimination is illegal in most countries!).
As a final note to this, in my experience most average or poor programmers start programming at university, for their Computer Science course. Most good programmers started programming long before, and the degree was just a natural continuation of their hobby. If your potential programmer didn’t do any programming before university, and all his experience starts when she got her first job, she’s probably not a good programmer.
Disclaimer
None of the indicators above or below are sure-fire indicators. You will find great programmers who break some of those moulds. However, my view is, you’ll rarely find a great programmer that breaks all of them. Similarly, you may find poor programmers that meet (or appear to meet) some of these criteria. But I do strongly believe that the more of these criteria a programmer meets, the more likely they are to be one of those elusive “good programmers” that, as a business guy, you need to partner with.
The criteria in bullets
So, in summary, here are some indicators and counter-indicators that should help you recognise a good programmer.
Positive indicators:
- Passionate about technology
- Programs as a hobby
- Will talk your ear off on a technical subject if encouraged
- Significant (and often numerous) personal side-projects over the years
- Learns new technologies on his/her own
- Opinionated about which technologies are better for various usages
- Very uncomfortable about the idea of working with a technology he doesn’t believe to be “right”
- Clearly smart, can have great conversations on a variety of topics
- Started programming long before university/work
- Has some hidden “icebergs”, large personal projects under the CV radar
- Knowledge of a large variety of unrelated technologies (may not be on CV)
Negative indicators:
- Programming is a day job
- Don’t really want to “talk shop”, even when encouraged to
- Learns new technologies in company-sponsored courses
- Happy to work with whatever technology you’ve picked, “all technologies are good”
- Doesn’t seem too smart
- Started programming at university
- All programming experience is on the CV
- Focused mainly on one or two technology stacks (e.g. everything to do with developing a java application), with no experience outside of it
I hope these help. Let me know below if you have any comments, or anything to add to them!