Why Not eInk Tablets?

I recently read news about nook touch rooted to Android 2.1. Seems like a great idea for someone like me who wants the benefit of eInk – long time working on batteries and eye-friendly display, but with the features that tablets provide.

I wonder why tablet manufacturers don’t look closer at eInk. Yes, it’s grayscale (yet), not good for watching video or playing games, but for everything else it could be good. Chatting, checking email, reading news, even writing code. Perhaps e-reader manufacturers should not lock them with reading-only software but have OS like Android and some good reading apps. People wouldn’t need to hack them then.

By the way if you are interested in ereaders it’s good to subscrive to Dani’s e-reader news site. It contains hand-picked news and articles. No noise, only the most interesting and most important news.

SEO-Friendly Ajax

Loading parts of your content with Ajax is cool, but the problem is search engines don’t quite follow javascript links.

Here is very simple way to solve this problem.

1. Use links with onclick attribute like this:

<a href=”some_url” onclick=”loadContent(page);return false;”>Load Page</a>

The search engines will follow the URL you have given to the “href” attribute. The browser will not follow it because of the “return false” statement in the onclick.

If you are using click handler with jQuery or similar library, follow the same logic.

Your ajax function (in this case called loadContent) should also call the same “some_url”

2. Make sure your system makes difference beetween calling some_url by ajax and calling it normally. This can happen very easy if you add a POST parameter to your ajax request. Then on the server side you can simply check whether the paremeter is there or not.

3. If the request comes by ajax, return only the piece of content that must be loaded in the ajax placeholder in your original page.

If the request does not come by ajax, load a full page with navigation and everything. Why is this needed? Because search engines may index these direct URLs and send traffic there. When real visitor lands on such page you want them to see your full site design with header, footer and navigation, and not just the piece of content that the ajax call needs to load.

I think there’s no need of examples, but if it’s unclear let me know in the comments.

Bulgaria Travel Hacker (Our latest info-site)

I have not had much time to post here recently due to work and other projects. One of them just went live yesterday. Bulgaria Travel Hacker is a site with practical information for people who want to visit my country. If you ever wondered how is everything like in it, the site will give you first-hand information about places to visit, food, safety and more.

The design is by Dani Velkova. The site is based on a simple custom CMS, which on the other hand is based on a variation of the Celeroo framework.

How To Ask For Tech Help

Here are some of the worst ways:

- “Hey, this software is giving me errors! Fix it ASAP!”
Comment: What errors? Which software? Don’t think that the tech guy is in your head.

- “Open this URL: xxxxxxxxxxxxx. Go to A. Then do B. Then click on the green triangle. Then login as XXX/YYY. Try to add ZZZ as a friend. See what’s happening!”
Comment: Why the heck didn’t you just tell me that you were seeing an error?

- “The feature XYZ is not working!!!”
Comment: What exactly is not working? Is it giving an error? Is the screen going blank? How did you understand it’s not working?

- “I’m doing this and that and then the program does that and this”.
Comment: So… why are you telling me this? Is there something wrong in what have happened and if yes, what is wrong?

- “I saw the code, you are using XYZ (recursion, global variable, function instead of class or whatever he thinks is wrong). This is not the right way, I have a friend in Oracle and they are using ZYX!”
Comment: just because the guys in Oracle use something, it doesn’t mean it’s good for your case.

Here is the right way to ask for tech help when there is a problem:

“I have a problem with XYZ. It should do A, but it does B. Here is how to reproduce:… (if asked)”

Or to elaborate a little bit: start with the problem. Don’t tell me to go somewhere and do this or that but tell me what exactly is wrong and why do you think it’s wrong. If there has been an error, copy it and send it to me. If the program is showing a blank screen, tell me it’s a blank screen. If the function is returning wrong result, tell me that and let me know what you think is the right result. Don’t just tell me “it doesn’t work”. This makes the tech support mad and doesn’t bring any useful information. If asked, be ready to explain how to reproduce the error.

Following this pattern you will get your problem solved quickly. Often the tech guys can fix a problem in a minute if you give them the SQL error you have seen on the screen and can lose hours trying to figure out what eventually you could have done so it resulted in some error.

Is Switching To a More Advanced Language Going To Make You a Better Developer?

Occasionally, and probably less often than I should, I read blogs and newsletters about programming and frameworks. Usually instead of finding useful information about the latest developments I’m finding flame wars on languages. They most often target PHP, though sometimes come from Java and .NET guys and target Ruby, Python and Perl.

“PHP isn’t even a programming language, it doesn’t have XYZ!!!”

You’re right, and not only that – it doesn’t even have ABC. But surprisingly it just works fine without it.

When you read these flame wars on forums and blogs you may start thinking that everyone out there works for NASA or Merrill Lynch (oops), does super advanced programming that your life depends on.

The truth is that at least 90% of the web software out there doesn’t need most of the advanced features that even languages like Ruby have, and that doesn’t make the software less valuable. A simple blogging platform like WordPress, written in PHP and working with MySQL has done a lot more for the internet and for the people than some advanced banking software has. A cheap looking personal network called Facebook (surprisingly, written in PHP again) does a lot more connecting people all over the world than those forum heroes who bash you for not using namespaces.

I’m not writing this to undervalue the work of the “real programmers”, neither to say that PHP is any better than Ruby or Python, or that Ruby is better than Java or .NET. PHP is indeed not a very well designed language and lacks many cool things that the others have.

What the simple languages like PHP and Perl have however is the ability to start quickly, throw few lines and have something working and in fact and finally to get the work done well enough.

Learning a more advanced language is definitely a plus, but switching your development to it may not be worth it. Your work matters because you create valuable software that people use, not because you know Java better than everyone else in your city. If PHP helps you to produce more good software in short time and cost effectively, then it is all you need to be successful. (And yes, to make more money).

P.S. This advice like everything in this blog is more attended to independent professionals and not so much for people who are looking for a job – to the latter it may make some sense to switch to more advanced language and get a better salary.

Random Thoughts About Developing A Facebook App

I’ve built a small Facebook application for parents mostly with the idea to see their API works and if it could be a decent widgetbait.
The application is still quite simple, but I think the idea is good – it’s lets you spread the word about your children by placing a badge in your profile. In addition you can find other Facebook users who have children of same gender, age or zodiac like yours.

If you have a Facebook profile and children, you may want to give it a try.

Here are few first thoughts about the development:

  • The API documentation seems quite unorganized and confusing
  • Sometimes you need to do quite stupid things. For example to “register a template bundle” just to publish a feed on user’s wall.
  • The lack of normal Javascript in FBML mode is boring
  • At least I didn’t stumble on any bugs

What about the results of a widgetbait? A SEO effect cannot be expected, because (as far as I know) all the pages in Facebook are accessible to logged in users only. So the “bait” can be only for direct traffic. You need at least 5 active users in order to submit your application to the directory, so it’s nothing like to drop a wordpress plugin and get the traffic rolling in.

If you plan to use a Facebook application for promoting your own site(s), you will need at least:

  • A good idea. Something original. Not like 90% of the apps out there
  • Some initial users. It would be a good idea to promote the app on your site first before expecting the app to promote your site
  • Your app and the site/service you are promoting should have something in common. For example our “I have children!” is promoting baby contest site and free baby photo album.

I’ll hopefully have some more results and stats from this widgetbait to share soon.

Celeroo Builder Is Alive

Today morning Celeroo Builder went live. If you have a web development project at your plate, you can sign up risk free and build it in probably 50% of the time that you would need if coding it manually.

Even if you are not a developer yourself, you can benefit from the builder. You can draft most of your application yourself (it’s simple enough for non programmers) and hire developers to finish only what you couldn’t do with the builder. How much you can save? Better just check yourself.

Web software development ain’t unlike Dating

Here’s a nice article – Web software development ain’t unlike Dating – posted on Celeroo Blog sharing an interesting approach to web development.

If you are a software developer or company struggling in the unsure market right now, it’s much likely that you are failing at some of the points discussed there.

Most developers/studios websites or their applications are not presentable at all. You can hardly understand what they are offering, how it can be beneficial for you and are they offering anything at all.

Many developers are so keen on writing “amazing loops” and “sexy recursions” that they build apps without taking in mind the user needs. If you are one of them, then you should generally change the way you do business.

The other points in the article also address very common mistakes, so I’d suggest you just read it.

What’s Your Point Of Difference In Web Design or Development?

“We do web design and development” doesn’t work. “We do low cost PHP/MySQL” doesn’t work either. There are too many who do that and your head isn’t going to stick up in the mob. Low cost is a bitch anyway.

“I am the best programmer” or “We have a great team” is just as flawed. “Best” is subjective and I bet you aren’t, sorry (I doubt exactly “the best” is reading). Even if you were, your customers don’t care. They want a job done well for a good price and most won’t pay crazy fees to have a great work done. What could be so great in a simple PHP site anyway? It either works correctly or it doesn’t.

If you want to build a successful business in web design and/or development, you need an USP.

I can think of at least two relatively easy ways to differentiate your service by all the “we do it all” crowd.

Specialize in technology

If you are a freelance developer or small development studio, taking this approach can really help you find your market position. For example you can specialize in doing Facebook apps, WordPress plugins, Joomla modules or Twitter apps. Going this route exposes you to a smaller but a lot more targeted and less competitive market. If you build your site or blog around building Facebook apps for example you will have much better chance to rank in search engines for such searches, they are a lot more likely to convert into real customers and you can quickly become recognized as an authority in building Facebook apps. Such a targeted approach will also justify some advertising (PPC for example) because an ad “Get a Facebook app developed” is having a much bigger chance to convert someone who is looking for a Facebook app, rather than an add “Outsource PHP Programming” which leads to a site offering all kind of PHP programming services.

Specialization in technology will also help you become really good in the area and will easily justify higher rates.

You shouldn’t worry about the market being too small. If you can’t find enough customers for building Facebook apps, you can add a site or subdomain (“department”) offering programming Twitter apps. It’s enough to tell that you are doing some specialized service to convert better the customers who are looking for it. (assuming you really can do it of course)

If you are a designer or design studio, there are plenty of options for specialization as well. You can offer explicitly WordPress templates, Joomla themes, logo design, design of sites for mobile devices, Flash design etc. The key again is not to have a site saying “we offer web design”, but to have a point of difference.

Specialize in niches

If you a dentist and want a website you will prefer “Dentist’s Web Design” or even “Medical Web Design” (ridiculous company names of course, don’t use them) instead of “Web Design Gurus”. This is not only a marketing trick. Building a good web site (even if you do only the design or the development) requires a knowledge about the business logic your client operates in. Of course you can always just follow the requirements document (if you are lucky enough to get detailed one) but your service will be so much more valuable if you can provide advice and input that will genuinely help the client in their business.

By specializing in a niche you will quickly become knowledgeable about it and about the online strategies the businesses in that niche use. This will not cost you losing good shape in the general web field – you’ll have to do good design/development in the niche anyway. Even if several years you do exclusively websites or software for forex brokers nothing stops you do a completely different site after that. On the contrary, you may even transfer good ideas from one niche to another which is often incredibly valuable.

Specialization also means reuse. For example a while ago in Axaya we were doing a lot of social network sites so we got not only good in them, but also had a lot of ready code to reuse. This allowed us to give good quotes and show impressive portfolio to customers who look for social network sites.

Whatever business you are in, think how to differentiate yourself from the crowd. Being the best is not the answer even if you are. Being the cheapest is the worst possible answer even if you are only a pretender. Being different is what you need – it requires some effort, thoughts and time, but pays better long term.

New Very Relaxed PHP Framework Released

Celeroo-Frame is a little, fast and very relaxed PHP MVC framework. Some developers would even say it’s not a framework but a collection of libraries and coding practices. It’s ok to call it that – the most important thing is it helps you build PHP/MySQL applications really fastCeleroo-Frame can be downloaded hereCeleroo-Frame is a result of mine and Axaya‘s years of reusing and optimizing code in real live applications. Initially we didn’t aim to create a framework – it just happened as a result of real work. So you will not find as many libraries, tools and magic as in the other PHP frameworks, but you will certainly find a lot more freedom.While it implies certain way of doing the things, there are virtually no restrictions to what you may want to do and change. Unlike the other frameworks, its core is directly part of your application so you can change everything.The reason Celeroo-Frame was developed and released is to help you achieve really rapid development of web applications. The learning curve is extremely short and coding with it, I believe, is real fun. I recommend you to check the information at Celeroo blog as there is full documentation. Your feedback will be appreciated. Note that Celeroo-Frame is in Beta stage in the sense that it has just been packaged as a framework. (By the way Celeroo also uses Celeroo-Frame. You will hear more about Celeroo pretty soon).