Saturday, June 25, 2011

The net neutrality conundrum

'Network Neutrality' is a hotly debated topic these days. It seems every few months, the concept of net neutrality rears its head when some large ISP enters into talks with a content provider to offer a faster connect to that providers content in exchange for money. It's a good deal for content providers who seek a competitive edge because traffic to their site would be fast while traffic for competitors sites, at least those who didn't pay, would be substantially slower but it's a horrible deal for consumers who may find their favorite websites slow to access and difficult to navigate.

So it's no surprise that Congress and the FCC have taken up the network neutrality discussion and both sides are heavily lobbying lawmakers for legislation that comes down squarely on their side.  When the issue first started being discussed, I supported a Congressional network neutrality bill because I thought it was the only way to make sure the Internet playing field was kept fair for both small and large players. On second thought, though, I now realize I was wrong. Pushing for legislation on either side of the issue is actually a red herring and could have very severe unintended consequences.

See, asking Congress to pass legislation to protect freedom and fairness on the Internet is actually giving Congress the authority to control the Internet - or at least the American part of it. We are expressly giving them expanded regulatory control of a network who, by its very nature, is uncontrollable.  Though it might be for 'the public good' we are expanding the control government has over our online lives. That might seem like a good thing in this case but what happens then when government acts against the best interests of the people and in the interests of corporations instead?  If we've already ceded regulatory control to them via network neutrality, where do we draw the line and how do we stop the landslide once it starts?

Network neutrality could also have negative effects in the physical world too. How many times have you seen ads on television that say 'American Express is the only card accepted here? How many times have you seen local merchants give discounts to people who pay with cash instead of credit cards because they want to avoid the discounts credit card companies impose on their sales? Couldn't it be argued that this is the physical world version of network neutrality? It's showing favoritism to a certain network of people (users of cash or people who hold American Express cards) over their counterparts and offering a reward to those who give the merchant whatever they want.

Couldn't we then argue that, if we demand 'fairness' by legislation on the Internet, we should also demand it in the physical world?  Why should such 'protections' extend only to the digital world? Perhaps there should be laws governing 'monetary network neutrality'.  See the potential problem? Every extension of government control leads to greater extensions in the future because they have a unique way to find new ways to interpret 'rights' and 'protections' in expanded ways.

So what's the answer then? Nobody wants a slower Internet just because a company didn't pay what amounts to an extortion fee to an ISP. Here's an idea: Instead of pushing for increased government control, we should actually be advocating that the government take a 'hands off' attitude with the Internet and allow the free market to rule on network neutrality.  Allow ISP's that want to strike deals with content providers to do so and allow those who want to treat everyone equally to do so. Then, let consumers vote with their dollars as to which ISP's live or die based on their policies. In a free market, freedom wins because the consumer, not the government, is in control. Consumers voting with their dollars have a much more powerful impact on the behavior of corporations than any law ever could and the market is often very brutal to bad actors.

I would argue that the free market is the only way to guarantee network neutrality. Corporations can find ways around laws but it's not so easy to find ways around an angry consumer. Give the customer what they want or die is how the free market works and that's just as it should be. Network neutrality isn't a government issue, it's a consumer one and, thankfully, it's one consumers can solve quite easily.

Thursday, June 23, 2011

Urgent Action Request: The detention of Ms. Mansoureh Behkish in Iran

I know many of you subscribe to Amnesty International's 'Urgent Action Request' mailing list. However, I'm sure there are many of you who don't and so I'm sharing this latest posting here on the blog.

I strongly urge you to utilize one of the contact methods listed in this request. You could help save Ms. Behkish from torture or even death. If you cannot find the time to go out and buy a postcard, I encourage you to use email and reach out to the contact listed here.  If you would like a prewritten letter you can send instead of writing your own, please contact me at for a copy of the one I sent.

Here is the appeal:

23 June 2011

UA 196/11         Risk of torture/Risk of ill-treatment
IRAN                Mansoureh Behkish (f)

Iranian human rights activist, Mansoureh Behkish, was arrested on 12 June 2011. She is a member of the 'Mourning Mothers' group, which campaigns against human rights violations such as unlawful killings, arbitrary arrests, torture, and enforced disappearances. She is at risk of torture or other ill-treatment.

Mansoureh Behkish, 57, was arrested by men believed to belong to the Ministry of Intelligence when they recognized her in a street in Tehran, at 8pm on 12 June 2011. She is now held in Section 209 of Evin Prison. She was able to make a short phone call to her mother two or three days after her arrest and again on 20 June, but could not talk about the conditions of her detention. Mansoureh Behkish suffers from a neurodegenerative disease called diffuse myelinoclastic sclerosis, or sometimes referred to as "Schilder's disease".

The 'Mourning Mothers' group mainly comprises women whose children have been killed, disappeared or detained in post-election violence in Iran since June 2009, but it quickly grew to include relatives of other victims of human rights violations and their supporters. Mansoureh Behkish has lost several members of her family who were executed in the 1980s; since then she has been an activist and has been detained several times before.

Mansoureh Behkish was among 33 women from the 'Mourning Mothers' group arrested during their weekly meeting in Laleh Park, Tehran, on 9 January 2010 and held for several days. On 17 March 2010, she was prevented from traveling to Italy to visit her children and her passport was confiscated. She remains banned from travel abroad.

BACKGROUND INFORMATIONThe 'Mourning Mothers' group was set up by women whose children have been killed, disappeared or detained in post-election violence in Iran since June 2009 but it quickly grew to include relatives of other victims of human rights violations and their supporters. The 'Mourning Mothers' meet in silence for an hour each Saturday near the place and time of the killing of protester Neda Agha-Soltan, who came to symbolize the brutal repression meted out by security forces after the disputed presidential election of 2009. Her death was shown in footage circulated around the world Mansoureh Behkish has not herself lost a child but lost several members of her family in the 1980s and is very involved in the movement.

Mansoureh Behkish, along with other women in the 'Mourning Mothers' group, was first seized during the group's weekly meeting in Laleh Park, Tehran on 5 December 2009. Members of the group were arrested again on 9 January 2010; several of them were beaten and 10 were taken to hospital (see: Iran's 'Mourning Mothers' must be released, 11 January 2010,

On 9 April 9 2011, Leyla Seyfollahi and Zhila Karamzadeh-Makvandi were sentenced in connection with their membership of the 'Mourning Mothers'. They were arrested on 8 February 2010 and appeared before Branch 28 of the Revolutionary Court in Tehran in May 2010 and March 2011. Leyla Seyfollahi and Zhila Karamzadeh-Makvandi were sentenced to four years imprisonment for "founding an illegal organization" and "acting against state security". They remain free pending their appeal.

Mansoureh Behkish was first arrested in December 1981 and held in solitary confinement for three months, while pregnant. She was released on bail to deliver her baby outside prison. After her delivery, she escaped from her home town of Mashhad and went into hiding for more than seven years.

Between 1981 and 1988 Mansoureh Behkish lost five members of her family including a sister, four brothers and a brother-in-law. Starting in August 1988 and continuing until shortly before the tenth anniversary of the Islamic revolution in February 1989, the Iranian authorities carried out mass summary executions of political prisoners, known as the "prison massacre" – the largest numbers since those carried out in the first and second year after the Iranian revolution in 1979. In all between 4,500 and 5,000 prisoners are believed to have been killed, including women.

For the past few years, Mansoureh Behkish has participated in the commemoration of the victims of the 1988 mass executions, some of whom were buried in the Khavaran Cemetery in south Tehran. This event is held yearly by relatives of the dead on or about 29 August to mark the anniversary and demand justice for their loved ones. Hundreds of those summarily executed are buried in the cemetery, many of them in unmarked mass graves. Families of the victims have been under pressure from the Iranian authorities not to hold commemorations at the cemetery or in their homes. On 29 August 2008 Mansoureh Behkish was arrested and held in Evin Prison for three days and summoned several times that year.

Mansoureh Behkish is the main caretaker of her elderly mother.

RECOMMENDED ACTION: Please write immediately in French or your own language:-- Call on the Iranian authorities to release Mansoureh Behkish immediately and unconditionally if, as appears to be the case, she is held solely for the peaceful exercise of her rights to freedom of expression, assembly and association;
-- Call on the authorities to ensure that she is protected from torture and other ill-treatment, and grant her immediate and regular access to her family, lawyer of her choice and adequate medical care;
-- Urge the authorities to remove unlawful restrictions on freedoms of expression, association and assembly in Iran.


Leader of the Islamic RepublicAyatollah Sayed 'Ali Khamenei
The Office of the Supreme Leader
Islamic Republic Street – End of Shahid Keshvar Doust Street,
Twitter: "Call on #Iran leader @khamenei_ir to call for the immediate and unconditional release of Mansoureh Behkish"
Salutation: Your Excellency

Head of the Judiciary
Ayatollah Sadegh Larijani
[care of] Public relations Office
Number 4, 2 Azizi Street
Vali Asr Ave., above Pasteur Street intersection
Email:  (In subject line: FAO Ayatollah Sadegh Larijani)
Salutation: Your Excellency


Secretary General, High Council for Human RightsMohammad Javad Larijani
High Council for Human Rights
[Care of] Office of the Head of the Judiciary, Pasteur St.,
Vali Asr Ave. south of Serah-e Jomhouri,
Tehran 1316814737,
Email: (subject line: FAO Mohammad Javad Larijani)Salutation: Dear Sir
Iran does not presently have an embassy in the United States. Instead, please send copies to:
Iranian Interests Section
2209 Wisconsin Ave NW
Washington DC 20007
Phone: 202 965 4990
Fax: 1 202 965 1073

Check with the AIUSA Urgent Action office if sending appeals after 4 August 2011.

Wednesday, June 15, 2011

The Courage to Get Involved

I've written before about the ongoing warn between corrupt police officers and citizens armed with cameras. While the battle will continue into the foreseeable future, there does seem to be a light at the end of the tunnel. All around the country, ordinary people are finding the courage to challenge corrupt officers and not back down when the officer tries to use the suggestion of force and brutality to intimidate them. Moreover, attorneys, politicians, and organizations like the American Civil Liberties Union are stepping up and standing up against the silencing of photographers.

What is it going to take to bring this war against accountability to a final end? It's going to take brave people from every walk of life who've had enough and won't be intimidated picking up cameras and fearlessly documenting police misconduct. It's going to take professional journalists, citizen journalists, and ordinary citizens who might only carry a cell phone with a camera to loudly and courageously scream "enough is enough!" and take what risks might come in order to exercise and defend their rights.

The video above is from the ACLU of Massachusetts and discusses why it's important for everyone to be involved in this fight. The professionals journalists aren't going to save your freedom; it's something you have to be brave enough to do your self. You must find the courage to get involved.

Monday, June 13, 2011

Damascus Gay Girl's lesson to the online activism community

For the last few weeks, a large part of the blog reading world, the twitterverse, and Facebook have been laser focused on the blog of Amina Abdallah Araf al Omari, a lesbian blogger who went by the name "Damascus Gay Girl" and purportedly living in Syria. In her blog, Amina wrote about the challenges gay people in Syria (and in many other parts of the middle east) face while living in countries that often execute gays and routinely deny even basic civil rights to this growing portion of the population based solely on their sexual orientation.

Days ago, Amina was reported missing by her cousin Rania. According to Rania, Amina went to meet with a local council member, got separated from her companion and was seized by three armed men who were assumed to be from the Syrian security forces. She was taken away in a car and her whereabouts were unknown.

Almost immediately, there was a worldwide outcry. Facebook groups demanding the ruling Baath party reveal her whereabouts were formed, blog posts were written, tweeted, and retweted, and the online activism community was immediately in arms ready to do what they could to help find and free Amina.

The problem was that none of it was true. Not a single word.

On Monday, a man identifying himself Tom MacMaster and posting from Turkey, confessed that he'd made the entire thing up. There was no Amina, no Rania, no kidnapping. It was all a hoax designed to bring attention to the plight of gays and lesbians living in oppressive regimes. He apologized and took full responsibility for the damage he might have caused.

I don't think it's enough. This kind of thing has happened before. Mr. MacMaster wasn't the first to fake a voice and I'm sure he won't be the last. But do the people who do things like he did fully understand the potential gravity of the situations they are creating?

Damascus Gay Girl wasn't real and her security and life were never really in danger, thankfully. But her story could represent any of the thousands of stories gays and lesbians throughout the middle east could tell. While Mr. MacMaster made up Amina, he did not make up the crisis she would have faced if she had in fact been real.

His words emboldened people throughout the region - throughout the world, really, to dare to think that, if Amina could be so brave, they could be too. Those people were real. They weren't the invention of some misguided writer and their real lives were put at risk. What Mr. MacMaster did was unconscionable and thoughtless and could possibly have gotten people killed. That is unforgivable; an apology is simply not enough.

But in a way, I think this hoax did point out one of the inherent weaknesses of online activism: verification. We really are forced to take everyone at their word and, sometimes, people do strange things for even stranger reasons. Mr. MacMaster could have been anyone: a hostile government trying to identify those within the country that sympathized with Amina, a jilted lover trying to get revenge on an innocent woman, or even a propaganda organization trying to sway public opinion one way or another. Online, we often have no way of knowing the truth and the task of finding it is only going to get tougher as technology advances.

So how should the online community react in situations like these? Should we stop responding to every random blog post or tweet from an oppressed person because we fear the may not exist? Should we continue to respond in hopes that one voice might indeed change the world? The answer to that question may well be one we won't be able to answer in the foreseeable future but I think it should give us a moment of pause next time we think of clicking retweet or encouraging others to act based solely on a single voice. Advocating a cause is an admirable thing, but we have to do so with a full understanding of the potential ramifications of where that advocacy may lead. We are sitting behind a computer, safe, fed, and secure. Those who we are advocating for, those we are empowering and encouraging are risking their lives and the lives of their family. If we're wrong in our advocacy, we move on to the next crisis, if they act on our incorrect or fraudulent information they die. Not quite the same thing, is it?

In the end, I'm not saying don't advocate. I have no plans not to continue acting online for others; what's at risk is too important. But I am saying use judgement. just because something seems true doesn't mean it is. There were questionable aspects of Aminia's story that should have led to greater scrutiny but nobody checked them out. Everyone wanted to be supportive and not critical. After it's all said and done, being critical might have saved lives while unquestioned support may have cost them.

Sometimes, it's good to take a moment and assess things. Amina's story was heart wrenching but it was nothing but an illusion; an illustration of the depth of human foolishness. Be careful folks. We're not playing a computer game here. Real lives are at stake; real lives are being lost. Someone could be tortured and killed because of something *you* tweet. Think about that next time before hitting the retweet button or reblogging a post. I personally don't want a death on my hands. I doubt any of you do either.

Be careful. Be vigilant. Keep everyone safe.

Sunday, June 12, 2011

REAL Studio: Kicking ass and taking names for this ex Microsoft developer!

As most of you know, I cut my teeth on Microsoft technology. Since Windows 3.1, I was a Microsoft die-hard even going so far as to earn an MCSE and become a Microsoft partner. As a software developer, one of my favorite things about the Microsoft ecosystem was how easy developing new software solutions were. While most of my colleagues on Unix/Linux were busy banging their heads against the wall writing C/C++ code, I was kicking out software in half the time using tools like Visual Studio and languages like Visual Basic. Sure, I know C and C++, but I really fail to see the use for them in modern consumer software development unless you're writing system level code. So I used whatever was easy, fast, and convenient and that, on Windows, was Visual Studio and Visual Basic.

When I moved to Linux, I immediately faced a productivity challenge. I didn't want to use C/C++, I hated Java, and I didn't know Python very well at all. What was I going to do to push my Linux solutions out as quickly as I had my Windows ones? Of course, I went back to what I knew: C++. For a while, I wrote a lot of C++ code. I hated it, saw it as a waste of my time, but I knew it and it was more productive than learning Python. Of course, I also started learning Python since there was a LOT of code in Linux (and Windows) written in the language. Still, my productivity was not where it should have been.


One day, I was lamenting to a friend of mine about how I missed my days of Visual Studio and really wanted something as easy as Visual Basic .NET on Linux. He brought up a tool he was using called RealBasic and I immediately found the idea very interesting. Here was a language that was easily accessible to an old .NET developer, completely object oriented, and created fully cross platform code! It was like everything I'd been dreaming about for months suddenly came true and I had to know more!

The next day, I visited the RealSoftware website and what I found was amazing. Developers of all stripes, from novice to professional, were singing the praises of this language that I'd never even heard of. They wrote about increased productivity, how cross platform it was, how easy it was to learn, and all of the great things there were doing in half the time using a tool many of them had only picked up a few months earlier Of course, I downloaded the trial and immediately got hooked. Here was a tool that combined the cross platform nature of C++ and Python with the ease of use of Visual Studio. Could anything be better?

RealBasic (now called REAL Studio) offers all of the tools a professional developer needs including an object oriented language, version control, access to almost any database, the ability to develop dynamic web application as well as desktop ones, 'write once' deploy on Windows, Mac, or Linux, and a host of other features that any developer would love.

OK, so what's wrong with it?

For all my enthusiasm, REAL Studio isn't perfect. First, it's not free software (either in cost or as in freedom). The software is proprietary and Real Software does not plan to open source it anytime soon. That will present a problem for free software purist who believe that the entire toolchain has to be open source or the technology is useless. It bothers me a bit because there's no free compiler for REAL Studio that I could use without having to purchase the software.

Next, the price is prohibitive for new developers. If you're writing open source software, you can apply for a Personal Edition license (which normally cost $99) but it only allows you to developer Linux software and does not allow you to cross compile for other platforms. If you're a commercial developer or someone not writing open source on Linux then your cost will start at $99 and go up to $999 for the Enterprise Edition of the software. If you make your living writing software, the prices aren't really that bad but if you're a hobbyist, they might be a problem.

My last complaint is stability. I run a slightly older laptop that has a 1.8Ghz processor and 3GB or memory and running Ubuntu 10.10. It's not horrible but it's not top shelf gear either. Sometimes, while I'm coding, REAL Studio behaves in weird ways. Code completion sometimes takes a while, compiling can be a process that brings my system to an absolute halt. My screen grays out and all I can do is wait for the compilation to finish. If I'm compiling an application that uses a lot of graphics resources (and especially if I'm cross compiling for Windows) that process takes forever and has occasionally crashed my system after eating up all the free memory.

When I first encountered the problem I thought it must be me. Certainly I'm doing something wrong or accessing resources the wrong way. So I asked on the REAL Studio mailing list and the answer I got was "don't use graphics'. What? How can I write a really professional looking program and not use graphics? That was the advice. It seems the REAL Studio community has learned to work around the bugs and annoyances of the language to create the software they want. I'd much rather the company fix the bugs instead of taking the 'work around' route but that seems to be both the corporate and community stance right now on at least some of the bugs that are out there.

To be fair, I know that many companies don't fix non-critical bugs in their software and expect users to simply work around them. But I don't really consider a bug that crashes a computer a non-critical bug and I don't think we should have to work around that. I've not upgraded to the newest version of REAL Studio yet (2011r1) but I suspect that the bug is still there as it's been there for at least a few versions prior. Perhaps I'll try it out and report back in this post.

My overall impression

Overall, I really like REAL Studio. I think it allows everyone from novice to professional to be productive and opens up software development to people who otherwise would be shut out of a great process. I'd like to see a few changes but that's more in the way the compiler works and they are working on moving to the LVVM compiler so those might just take care of themselves.

So, whether you're a new developer or a seasoned professional, I'd recommend REAL Studio to you. Start out with the Personal Edition, see if you like it, then upgrade. I guarantee you'll have very few regrets.

Me? I'm still learning Python and eventually want to move all of my development to it. But for now, productivity is king and REAL Basic rules productivity for me.

Monday, June 6, 2011

The war between bad cops and citizens with cameras continues

Law enforcement and government officials have never been fond of citizens with cameras. It seems these dangerous, camera toting vigilantes always show up at the most inopportune moment and often capture footage that an officer, or officers, would probably rather not be filmed. The right of a citizen to record police while they're doing their job has been hotly debated over the last few years with all but the most backwards of courts and states supporting the absolute right of the citizen to record video of public servants as they discharge their duties - especially in public places like roadsides, parking lots, and other widely visible places.

As you might expect, most police officers don't really have a problem being videoed or photographed as long as the person with the camera doesn't get in the way. Recording the police at a distance that allows them to do their job and doesn't put them in danger is OK; getting up close and personal with the cop and camera while things are going nuts isn't. It's a pretty easy to understand guideline. Cops probably find a busybody with a camera annoying, but most won't do anything about it since the camera operator isn't breaking the law and neither is the cop.

But sometimes, the cops do break the law and that's where things get interesting.

Several citizen videos have surfaced over the last few years of police officers doing some very bad things. I'm not talking roughing up the local drug dealer here either; I'm talking things like stealing from suspects, assault, rape, and even murder. For obvious reasons, these cops would rather their escapades not fall into the hands of an ordinary citizen because, once it's out of police control, there's not much the cops can do to cover up the crime. And, yes, unfortunately, many times these crimes, as heinous as they are, are indeed covered up by the department.

Take, for example. the recent Memorial Day shooting of a man in Miami Beach, Florida. 35 year Narces Benoit and his girlfriend were driving by a police stop around 4:00am Monday morning when Narces noticed that the police were approaching the car with their weapons drawn. Finding it interesting and newsworthy, Benoit pulled out his mobile phone and began recording the encounter. Four minutes later, the incident ended with a hail of bullets being fired into the car, leaving the suspect dead.

Unfortunately, for Benoit, the action wasn't quite over yet. When officers noticed him recording they immediately started yelling for him to turn the camera off and came towards him aggressively. Notice that they did not say 'this is evidence, we need it' as a cop should do in these cases, they wanted him to STOP RECORDING. Suspicious, yes, but it doesn't end there.

Benoit ran to his car where his girlfriend sat in the drivers seat ready to leave. Moments later, he raises the camera to show an officer appearing at the drivers side with his gun trained on the couple, demanding that they turn the camera off and get out of the car. Once they exited the car, Benoit had the forethought to secret away the memory card from his phone to protect the video before the officers threw he and his girlfriend to the ground, took his mobile phone and smashed it then brought the pair to a mobile command center to be interrogated and, eventually, released.

Absolutely crazy? Yes.
Common procedure with bad cops? Yes.

Unfortunately, this kind of behavior has become commonplace as more and more people carry video equipped mobile phone and high definition pocket video cameras. When cops break the law, the likelihood that someone will have a video camera pointed at them has increased and, as a result, the aggression bad cops show towards these citizen journalists has increased as well. Video routinely 'disappears' from confiscated devices, phones are smashed on the sidewalk, and citizens are intimidated into silence by cops who believe they are above the law and that their departments won't do anything in response to a citizen complaint against them.

So what should you do if you see something happening with police that you feel needs to be documented? Most importantly, you should learn your state laws governing recording other people. Specifically, become familiar with the states wiretapping laws. In all but a handful of states, videotaping the police is an absolute right and not a crime. The states in which it is a crime usually prosecute videographers using the states antiquated wiretapping law that says that, in order to record someone, all parties must consent. Since the police obviously didn't consent, the videographer is violating the law. Of course, I don't know of anyone who would consent to being recorded during the commission of a crime but perhaps I just don't understand the law.

Of the states that have used wiretapping to prosecute videographers who film police, the rules on what you can record vary widely. Some states allow you to video record but not audio record since the law specifically references audio recording. Others make no distinction between the two and videographers can be arrested and face serious jail time (up to 6 years in some jurisdictions) for pulling out the camera.

Deciding to use your video camera is a tough choice. Choosing not to do so may mean that bad cops continue to get away with crimes for years, going undiciplined and allowed to further terrorize the populace. But deciding to do so could put you in both legal and physical danger and should not be taken lightly. In the end, speaking to a good lawyer or your states ACLU as well as understanding the physical risks involved can go a long way. Ultimately, the decision should be made carefully and thoughtfully and you should always act and speak to an officer with respect and in a non-aggressive tone. You want to document an officers crime or wrongdoing, not become part of it.

In the end, the police will have to accept the new reality that they will be videoed and those videos, if they are of criminal or unethical activities, will eventually make it online or even to court. But the police agencies and state legislatures must also accept that they cannot allow bad cops to suppress free speech in order to cover up their crimes. A badge is not a license to become a common street thug and it's an insult to every good, hard working, man and woman who wears the uniform to allow bad behavior to go unpunished or to protect 'the brotherhood' when outright crime is being committed.

The war against filming police is just beginning. Several cases are slowly working their way to the Supreme Court where a ruling there will help turn the tide one way or the other. Until then, know your rights, choose wisely, and just do the right thing. The law may not always be on your side but that doesn't mean you're doing anything wrong.

Friday, June 3, 2011

Linux programming editor of choice: Emacs

In yesterdays post, I wrote about Crimson Editor, a Windows based programmers editor that I've come to truly love over the years. Today, we're going to tackle Linux editors and, I have to say, picking a favorite editor for Linux was a really tough choice. There are so many choices, most of them really good and almost all of them free and open source.

Over the last few years, I've used a variety of editors on Linux, from Vi to Eclipse, I've gone through them all. For a while, I was even trying to use gEdit and Nano! Admittedly, since I've moved to Linux full time, my choice of editor has stabilized since I had to find something in which I could actually work comfortably and that, like on Windows, got out of my way and only helped when I needed it to.

Enter Emacs

Emacs is an old editor. Originally written by Free Software Foundation founder Richard M. Stallman in 1976 and updated constantly since, Emacs has found a home in almost every Unix (and now Linux) programmers toolbox. It's extensible, configurable, easy to use and offers everything a professional programmer would want in an editor:

  • Content-sensitive editing modes, including syntax coloring, for a variety of file types including plain text, source code, and HTML
  • Complete built-in documentation, including a tutorial for new users.
  • Full Unicode support for nearly all human languages and their scripts.
  • Highly customizable, using Emacs Lisp code or a graphical interface.
  • A large number of extensions that add other functionality, including a project planner, mail and news reader, debugger interface, calendar, and more. Many of these extensions are distributed with GNU Emacs; others are available separately.
  • Many other features that serious programmers will find indispensable

Of all the editors I've used on various kinds of systems, Emacs is perhaps the best yet. It's simple, configurable, and well supported. Currently in version 23 and

with a lifespan of over 30 years, Emacs could very well be the longest lived in use editor on the planet. There's a passionate community of users behind it and it really has taken a life of its own. I think that's a testament to how incredible the software really is.

Of course, there's all this goodness comes at a cost. Yesterday, I did a 'good/bad' comparison of Crimson Editor. Today, because my list of 'bad' is so short, I'm simply going to dispense with the list and post it outright:

The only thing wrong with Emacs is that it has a learning curve..

Seriously. That's it. I can't think of anything else negative about it. And the learning curve really isn't that steep either. A competent computer person can learn Emacs in less than a week and can become productive almost immediately.

Something else that should be noted is that the software is also cross platform. You can run it on almost any system including Windows, Mac, Linux, and (of course) Unix. On each system, it runs basically the same, has the same commands, and only has minor UI differences.

Lastly, the software is light. If you read my article yesterday, you know I hate bloated editors. One of the reasons I really like Crimson Editor is because how easy it is on system resources and Emacs is even better. It sits there, with all that raw power, waiting for your command while your system barely even knows it's there.

So that's it! If you're looking for a great programming editor for Linux, you can't beat Emacs. Check it out and see for yourself if you're not almost immediately more productive. In the end, isn't that a programmers greatest desire? Just to be more productive?

Thursday, June 2, 2011

Windows programming editor of choice: Crimson Editor

Nothing can make or break a developers productivity like a bad text editor. Done right, a good editor can help a developer work twice as fast and be more productive. Done wrong, it can bring development to a crawl and drag the entire process into a muck of configuration, testing, and more tinkering.

We all know about the bad editors out there. If you write code for a living, you've probably keep your own personal list of editors you'd rather not use. In the next two articles, however, I want to sing the praises of editors on both Microsoft Windows and Linux that just get it right. They work, get out of your way, and help you in surprising ways just when you need it. Since many of you out there are Windows users, we'll start there.

Before I start, let me issue this one caveat: I understand most Windows developers use Visual Studio. That's a given. But Visual Studio costs a lot of money and doesn't really allow you do code in "any language you want". Of course, it's also not open source. So, for the sake of these reviews, I'm going to ignore it. The two picks I've made are both open source and completely language agnostic. Using my picks, you can start writing code today, not pay a penny for any of your development tools, and aren't locked in to a small set of languages. If all you want to hear about is how great Visual Studio is and how it works for everything, move on. You're going to be sorely disappointed. Oh, and I'm also going to ignore Eclipse because I personally can't stand it and it's a bloated pig written in Java.

One more caveat: I don't use Windows anymore. As of last year, I've switched to a completely Linux based environment. That means there might be something better than Crimson Editor available now that wasn't available then. Seriously though, I doubt any of them will combine the speed and power Crimson offers into anything more attractive.

Now, let's talk about my favorite editor on Windows Crimson Editor.

Crimson Editor is a little editor I discovered way back in 2004 and have stuck with it ever since. While the developer hardly ever revs it, it's perhaps one of the most feature rich editors out of the box I've ever used.

The Good

This editor is amazing. While it's always been a free (as in beer) program, it's now open source and has an active community of users behind it which may turn into something amazing at some point. The Crimson Editor users I've met tend to be very enthuesed about it and are always talking about ways to improve it.

The editor supports a bunch of widely used languages including C/C++, Perl, Python, PHP, Java, and even supports many less widely used ones like Tcl/Tk, Fortran, Classic ASP, Pascal, LateX, and Matlab. While most of us probably won't ever use those languages, it's nice to see the developer put a little forethought into who his users might be instead of simply scratching his own itch.

Let's start with Macros. Macros are one of the great features of Crimson which allow you to save typing time by defining shortcut keystrokes for the things you do often. For example, you could define a macro to automatically update your git repository when you save revisions to your code or perform a complex compile with multiple command line flags without having to type it all again and again.

The software also features (and I really like this feature) the ability to have multiple files open at the same time in a nice, convenient, tabbed interface. This comes in handy when you're working with complex applications where you're constantly having to reference other source files as you work. Keep everything open and accessible and switch about as needed.

Next, we come to one of my favorite features: the code splitter. Using the code splitter, you can divide your screen in half and display different parts of the same document in each half. That comes in super handy when you're doing complex coding where you find yourself scrolling up and down to reference variable names or function documentation, parameter lists, or names. Not a huge feature but one I think adds a nice touch to an already awesome editor.

Of course, no programming editor would be complete with an advanced find and replace feature or an FTP client. The built-in FTP client is worth noting because, like a few other editors, it allows you to directly edit remote files on your server. You don't have to download them, edit, then re-upload. The software takes care of that all in the background for you and you never are exposed to what's going on.

There are a lot of other features that are worth mentioning and you can find a complete list of them here. But for now, let's talk about...

The Bad

Honestly, there's not a lot of bad I can say about Crimson. But if I had to think of something, at the top of my list would be the rev history. For the most part, development on the editor seems to have stopped. Since 2004 the editor has only received one rev (2008) and none since then. I don't know if the developer lost interest in it or had other obligations but it looks like we might be seeing the end of the line for Crimson very soon. Thankfully, it seems another group of developers have taken the Crimson code and started a project called Emerald Editor which promises to be a cross platform version of the original Crimson but, unfortunately, nothing's been done on that project either since 2008.

I'd also like to have seen better support for version control built into this editor. Even though it's old, people were using things like Subversion and CVS in 2004 and I'm surprised that it doesn't support it. FTP only is kind of a crappy alternative to the much better system they could have implemented.

Code folding would have been a nice feature as most editors, even in 2004, seems to have started supporting it and language syntax help (like Eclipse has) would have been nice too. There are simply times when you're using some obscure language method and you'd rather not break your concentration and go to the docs to figure out how to use it. Having the IDE give you doc would have been sweet.

Overall, I believe Crimson is still a viable and strong editor even at its advanced age and lack of care. It's not going to offer you the strong tools and configuration that editors like Eclipse do, but it's a great, lightweight editor for those of us who don't want to install a full Eclipse environment just to write some PHP, Python, or C code. I used Crimson for many years and while I found myself sometimes wanting something more powerful, it really wasn't that often and the desire wasn't really enough to make me switch to something heavier.

All in all, I'd still recommend Crimson for someone who's not in a corporate coding environment or needs the advanced features a heavier editor offers.

Why do I hate Eclipse so much?

I don't! I actually have used Eclipse quite a bit and find it a very comfortable and configurable editor to use. I just don't think it really meets the needs of most non-corporate programmers. Eclipse shines when you're working on enterprise level software, working in teams, or doing any number of other things that corporate coders do. For a lone coder or a very small team, I think it's a bit overkill.

I also don't like how 'heavy' Eclipse. I don't like software written in Java because I think it is simply a waste of system resources. While Eclipse isn't as bad as some of the other Java based crap I've had to use, it still suffers from all of the system drain that all other Java software does. Had it been written in a more sensible language like C/C++, this would not have been an issue at all. In fact, I've long questioned why they wrote it in Java. The answer I've always gotten was 'we wanted it to be cross platform'. Is C++ not cross platform? Java was just a bad idea.

So I don't hate Eclipse but I really like Crimson Editor on Windows. If you're a lone coder, I'd strongly encourage you to check it out. You won't be disappointed and I personally wouldn't mind if you grabbed the source and rev'd it for us either. That might be a great way to contribute to the community.

Tomorrow, we'll review my favorite editor for Linux. Hint: it's NOT gEdit or Kate!