Thursday, July 31, 2008

Tesla Motors - Roadster Electric Car - the new iPhone killer? :)

tesla roadster - electric car by tesla motors

Tesla motors have done a fabulous work on their electric car - Tesla Roadster goes live! This car is worth buying even just for its sexy appearance, not only because 1 mile on this car will cost you as low as 2 cents!

I didn't stand in line neither for iPhone, nor for iPhone 3G (oh well, shopping lines are not that common here in Switzerland), but for this baby I would agree to wait naked for a week in Siberian climate. "Lamborghini-beating" acceleration from 0 to 60 mph in 3.9 seconds - it makes 'traffic-light' competitions a joke. 'Refilling' your car from a regular power supply like you do with your mobile phone - this also adds... excitement :) "Could I refill my car here please while you do my haircut" anyone? ;)

tesla roadster - electric car by tesla motors
Only 250 Tesla Roadsters are available in Europe starting from spring 2009 for 99,000 Euro (about 154,000 USD by today's exchange rate). Mass sales will begin at 2010 - when basically every serious car manufacturing company like Mercedes, Ford, BMW, Mitsubishi, Volkswagen plans to produce their electromobiles. Meanwhile we can only drool at Tesla Roadsters exterior selector. I personally like the gray one (second last).



On a way to cleaner atmosphere (or I'll be forced to move to Norway because of this heat) and cheap, easy and fast transportation :)

Special thanks to dikiy.com for sharing the link.

Blogspot cares about spammers more then about regular users - vital things that Blogger lacks

Damn. Insomnia is not the best thing you can have on a weekday.
But since I'm here, I might as well spend this time for something useful. Like, pondering about things that we currently have in Blogger that are useful only for splogs (like, Show Link Fields option in Settings->Formatting) and things that would make Blogger experience not only pleasurable, but also more effective.

So, here goes list of Blogger features that cry and beg to be implemented:
  • Ability to set meta keywords for every post page.
  • Ability to set (or automatically generate from content) meta description.
    Meta keywords and meta description are very important for good indexing and more precise results for your pages from search engines. Right now, you actually can set these meta tags - using the trick that I described in how to optimize your blogger post page titles for search engines, adding <meta name="keywords" content="keywords, for, your, site"> and <meta name="description" content="description for your site" > under lines that start with <title> - but this can only be done globally for the blog. While still giving a positive boost, it is not as good as it could be - you could specify keywords manually, and description could be automatically taken from the first paragraph of the post. Could be. If Blogger team wasn't too busy implementing comment moderation in Malay.
  • Image titles and alt text in editor  - blogger in draft features a very nice picture upload interface, together with live picture size selection bar that appears under the picture if you click on it in editor. But if you are at least a bit familiar with SEO and have enabled enhanced image search (you did enable it, didn't you? it's free and takes one click on a checkbox in Google Webmaster Tools) - then you will have to switch to Edit HTML mode and add image's alt and title parameter text by hand if you want your images to take advantages of Google Image search.
    Why title and alternate text for images is important - read in the next article.
  • Title text for links  - the previous also applies for links. To specify link title you have to hack html - I don't mind it, I usually type my articles in raw html, yet switching from compose mode if you are there just to specify link title (including searching for the correct place afterwards) is just... too much of a hassle.
  • Related posts widget - is it that hard? Feed-based JavaScript solutions only slow the page down. Significantly.
  • Ability to set favicon.ico file
As an additional note from widget developer, I would also like to point that Blogspot widget API doesn't work as stated - widget.template form input field is simply ignored - rendering any attempt to fully utilize Blogger templating features absolutely useless - effectively pushing you into 'JavaScript only' field.

I try not to provide non-constructive critics. If I am ever challenged for my words - mark this - then I promise to implement or help implementing all the features listed in this post free of charge, even signing a non-disclosure agreement about parts of code that I might see.

*Here should be a fancy ending phrase. Right now I can't think of any*

Tuesday, July 29, 2008

Too much stumbling can cause insomnia: funniest geek t-shirt of the day

i read your e-mail - geek t-shirt




from play.com.

Bigger collection of funny geek t-shirts: geek blog.

Saturday, July 26, 2008

Blogger SEO tip for Sunday: wrap your archive list

SEO tip of the day: wrap your archive list.



Archive lists are cool. They provide your readers with 'at-a-glance' idea about the content you have and can help your readers to choose your next article to read. There are cons though, and these cons are... huge.



If your archive lists are generated on server-side (that is done in Blogger, Wordpress, and basically every blogging platform), and if you have archive list as a widget, your every page will contain the titles of your blog posts. Is that good or bad?



If you are a smart guy and write extensive keyword-filled titles for your posts, that is great. You will appear in more search result pages, you have a bigger chance to be spotted for referring to the specific topic - writing good, extensive titles is a must-do for any good blogger. But. If you have an open blog archive in your blog template, then your link-baiting titles will appear on your every page.



Rand Fishkin of SEOmoz has written a great article about keyword cannibalization. While his article is great, Rand's illustrations are even more fabulous, they are a piece of art and SEO history. I can't help but to post it here - I will never be able to create such a ingenious illustration:

confused googlebot illustration
If you include an unwrapped blog archive into your template, your every post will contain your link-baiting keywords. This will NOT help you an overall better rank for a specified keyword. But this may give problems to Google's 'most relevant page' algorithm.



To check it, I have run an experiment. I have unwrapped the "blog archive" widget and let it run for quite some time, checking Google Analytics for "inconsistencies".  



The results? They didn't ask me to wait long. I have started to receive hits for 'gemcraft' keyword into my Sonny page instead of dedicated GemCraft page. And even one hit to my X-Com page by "gemcraft walkthrough" keyword.  



The reason? They all are about games. And they all contain the keyword-filled "GemCraft by ArmorGames - walkthrough, hints, tips and tricks" phrase from unwrapped blog archive.

 

The solution? wrap your blog archive. Easy as that. This way, Google will have no problem deciding which of your pages is the most relevant for a specific keyword, and your visitors will be happy to receive exactly what they were looking for, instead of marking you as a "evil spammer who used black-hat SEO technologies to fool Google into showing his (probably malware-ridden) content in response to valid keywords."



Be nice to your readers and visitors. Wrap your blog archive.

Wednesday, July 23, 2008

And... we are back again!

We are up and running again. Didn't take even a second of downtime.

Hope you enjoy the new domain name and new website look as much as I do :)

The Great Movement Day - Leave Your Fears Behind

Today is a great day. Today we are leaving our beloved blogspot hosting and moving out of the nest to our new domain.

I have spent a couple of days hacking a new skin for this blog. Currently I'm performing last tweaks to the new template, inserting some CSS hacks so the new skin will also display (almost) properly in Internet Explorer. The old Blue Jeans template with my Blogger fixes and SEO optimizations will be up for grabs. Just let me know if you are interested - I will host it somewhere and make it available for downloads.

I know what I risk switching to another domain (and especially .me) from .blogspot.com namespace, so loved by Google :) I have set up a couple of other .me blogs with link-baiting hot trend keywords and so far only one of them has got indexed (yes, I did submit them to webmasters tools). I also understand that now I will have to write even hotter and better optimized content in order to tie with .blogspot.com domains for places in SERPs — and I'm up for it :)

New domains are already set up and point to Google hosting (ghs.google.com), the only thing left to do is to put on a new skin and turn on redirection here. I expect at least a half cut in page visits for the first week, while Google indexes the site — and most of the visits will be still redirects from eterniel.blogspot.com. It will take quite a while until the new site will be fully indexed with Google and all value-passing links will be restored. I estimate this time for about a month.
So far, so good. See you soon on a new domain with a cool brand name and a new hot skin! Don't worry — site feed is still the same and all the visits to this page will be automatically redirected to our new domain :) Bon voyage!

Google is ALWAYS watching you!

I have noticed that every time I write bad things about Google, one of my top-visited pages suddenly disappears from Google index. The page that yesterday topped the SERPs is 'suddenly' not in Google index. Every time :) I don't want to sound like a CEO of that company speaking about The Great Google Banner Ad Conspiracy though sometimes I suspect Google has a special job position, responsible for viewing index results that match Google[^.!]*sucks.*[.!] regexp.

So, from now on, I will only write good things about Google (who knows, you should always expect the worst).
Kidding.

But well, I have only good news about Google today:


Google has started to index .ME domains already.


Thit is great, and this leads us to our next article: The Great Movement Day.

Google receives these spam e-mails too:

From What's an SEO? Does Google recommend working with companies that offer to make my site Google-friendly? at Google:

Be wary of SEO firms and web consultants or agencies that send you email out of the blue.

Amazingly, we get these spam emails too:


"Dear google.com, I visited your website and noticed that you are not listed in most of the major search engines and directories..."

Reserve the same skepticism for unsolicited email about search engines as you do for "burn fat at night" diet pills or requests to help transfer funds from deposed dictators.


Poor google.com is not listed in major search engines and directories. Sure thing, spam e-mails know better :)

PC Of The Future will feature a Paper Shit Holder

Paper shit holder! That's something we were really missing in our everyday life!

Original article



Cross-posting here the original art because it must be saved for future generations:

pc of the future - e-ball - paper shit holder
pc of the future - e-ball - working on paper shit

Tuesday, July 22, 2008

"General HTTP error: Domain name not found" in Google Webmaster Tools and how to fix it

For some of my domains, Google Webmaster Tools kept returning me "General HTTP error: Domain name not found" error when I tried to add them:



General HTTP error - Domain name not found in Google Webmaster Tools
That was pretty sad, as most of the domains were fully functioning. After poking around, I have found an odd mistake in Google Webmaster Tools domain verification module. Google Webmaster Tools always tries to access the domain by it's www. form, so for http://cranked.me/ Google Webmaster Tools tries to access http://www.cranked.me/ and if it fails, you receive "General HTTP error: Domain name not found" error message.



The solution to this issue is to make sure www. - form of your website is accessible — you need a proper CNAME record in your domain settings or to make sure the server that hosts your page redirects www. prefix to your main site. For BlogSpot hosting, it could be done in Dashboard->Settings->Publishing, Advanced Settings module. Make sure the checkbox "Redirect www.<yoursite>.<yourdomain> to <yoursite>.<yourdomain>" is set:



redirect www form of your domain to your domain in BlogSpot
And supply the www. form of your website to the Webmasters Tools:

submitting www form of your site to google webmaster tools





That's it. Google Webmaster Tools will accept it, and you can proceed to your website management and optimization.

.ME domains are NOT indexed and crawled by Google

As you may know, I own a bunch of .me domains. I have been experimenting with them for a while, and here are my results:

 
.ME domains are NOT yet indexed and crawled by Google. 


From a bunch of my websites on .me domains, none is included in Google index. Plenty of them are hosted at BlogSpot, so Google is aware as hell about their presence. Yet none of them has been crawled yet, and Google Webmasters Tools accepts only half of them.

What do you mean "half"? — you might ask? Here's how:

google webmaster tools refuses to accept a working dot-me domain
While sites like http://game-guide.me/ and http://supercool.me/ are accepted perfectly well but simply not indexed, sites like http://eviscerated.me/ are simply not accepted with "General HTTP error: Domain name not found". Read how to resolve General HTTP error: Domain name not found if you have similar problems with your other sites.



Meanwhile, the only .me domain that is indexed is http://www.domain.me/. This gives us a hope every other .me domain will be indexed as well.

Monday, July 21, 2008

Even if you quit World of Warcraft, you are still one of them...

Originally posted to Game-Guide.me

Achievements in WoW - Tycho from PennyArcade


I feel sooooo same as Tycho... I didn't even think a second about a phrase Gabe said.

There should be one called "Win Omen", for when you raidwipe by drawing aggro from the MT with dots.
Right? It's like... L2P, nub.


I didn't even ponder a second when I read that... That was just... normal for me. And only after reading Tycho's comment I felt that something is indeed not good :)


For those of you who come here from search engines looking for term definitions (Win Omen definition in the end):

wipe

A situation when the entire party is killed. (short for "wipeout")


raidwipe

wipe, but applied to entire raid (25-40 people)


drawing aggro

Incrementing the monster's internal 'hate to personally you' counter to a level when he leaves his current target and switches on you.


MT

see Main Tank


Main Tank

a person who is responsible for drawing attention of the monster, thus making the monster focus attacks on the provoker (while the rest of the group is 'relatively' safe because they don't receive direct hits).


DOT

An abbreviation for 'Damage over Time' - a shortcut for spells/abilities or their part that don't do massive direct damage, but instead spread the damage over a certain period of time.


L2P

An abbreviation for 'Learn to play' — a phrase often used to piss-off someone by belittling his gaming skills.


nub

an offensive short form for 'newbie' — someone who is not yet familiar with a game.


Win Omen

The term refers to Omen Threat Meter — an interface addon to World of Warcraft that estimates and shows amount of 'hate' a given monster has to each player. The player that tops the list (Wins 'top the Omen' competition) usually receives a focused attention of the monster, and if the victim is not Main Tank - consequences can be dire not only for the 'Winner', but to the whole raid.

Saturday, July 19, 2008

Review: goDaddy.com domain services and hosting

First of all I would like to thank GoDaddy.com for registering .me domains for us. I have registered quite a bunch the day it was launched - and now, as a rightful customer of GoDaddy I would like to say why it sucks.
  1. Domain registration is slow. You need to pass 5 pages to get to the 'enter your credit card details' page. All these 5 pages try to sell you other GoDaddy products.
  2. GoDaddy offers you 'payed parking'. If you pay $3/month, your domain will be 'parked' - if someone accesses it, he will be shown ads, and if he clicks them, you will receive 60% of the profit.
    Basically, you pay for putting ads on your own domain, and after that you receive only 60% of the profit.
  3. But the main feature is - if you don't subscribe for payed parking, you will be parked for free. By default - and I haven't seen an opportunity to disable this 'feature'. This means, that even after you own the domain, GoDaddy will put ads on it, making money on you.
    Unless you fix it manually, pointing your domain to something else (for all of yours 10-100-1000 domains).
  4. GoDaddy user interface is hellish slow. Probably it was somehow related to .me boom - I don't know. I can understand that 'updating your domain dns entry can take up to 48 hours', but if it takes up to 30 seconds to follow a page in internal domain management tools - this is just ridiculous. GoDaddy, if you hire me for a mere $80/hour, I will speed up your pages more then 4 times, pleasing all your customers.
  5. FTP access is... strange. I could access my site by ftp only for the first day I used it. Then - I can't login there by ftp anymore. Bad username or password - kidding me, tools?

There are plenty of other features. I perfectly understand the amount of customers GoDaddy has to serve. Yet this is a bad excuse for all the things I have pointed.

Even though I have managed to do what I wanted with GoDaddy, their service will make me try any other domain name registrar once I want to register a domain.

GoDaddy.com - I know what I risk, writing this review - I have read the End User License agreement - you can basically take away all domains I own with your registration. However, you can also change my opinion, writing me an e-mail to eterniel [at] gmail.com addressing all the issues I have mentioned above. And, if contacted by a good persuading personality, I can change my point of view and write a good review for your services, and maybe even removing this blog entry that states 'GoDaddy sucks'. Meanwhile, let it be here.

Friday, July 18, 2008

.me domains boom

Did you already purchase your .me domain? (choose .me from the combo box). The .me domain registration opened just yesterday — fancy domains like love.me, kiss.me, hug.me etc were taken by .me administrative team even before the actual registration has started (http://love.me was registered on April 29th), but there are still plenty of cool names available if you are creative. Don't miss your chance!

Wednesday, July 16, 2008

I was nominated for a 'Bug-free developer of the year' award

This is an excerpt from an e-mail that I've received from a customer today:

I finally found a bug! I’ve tested a LOT of software and hardware throughout many years and I was wondering if this would be the first time ever that I’d beta test something without finding a bug. :)


This guy really knows how to write good e-mails :) Bug-free beta — actually, this even was the very first test build. 'The bug' was simply a debug message that could be understood in two ways (written many years ago and not even by me :) - already changed that.


If only I could spend as much time updating this blog — the unfinished 'naming conventions' article beggarly looks at me every time I login here. I will find time for you — I promise.

Friday, July 11, 2008

Laziness Impatience Hubris - three great virtues of a programmer

"We will encourage you to develop the three great virtues of a programmer: laziness, impatience, and hubris." - LarryWall, ProgrammingPerl (1st edition), OreillyAndAssociates

In the second edition of the book (which sports not only LarryWall as author, but also TomChristiansen and RandalSchwartz as co-authors), there is a glossary which has pithy definitions for each of these terms:

Laziness
The quality that makes you go to great effort to reduce overall energy expenditure. It makes you write labor-saving programs that other people will find useful, and document what you wrote so you don't have to answer so many questions about it. Hence, the first great virtue of a programmer. Also hence, this book. See also impatience and hubris.
Impatience
The anger you feel when the computer is being lazy. This makes you write programs that don't just react to your needs, but actually anticipate them. Or at least pretend to. Hence, the second great virtue of a programmer. See also laziness and hubris.
Hubris
Excessive pride, the sort of thing Zeus zaps you for. Also the quality that makes you write (and maintain) programs that other people won't want to say bad things about. Hence, the third great virtue of a programmer. See also laziness and impatience.




original link

Thursday, July 10, 2008

Spartan Programming: A Real Man's approach to engineering

man and machine flexible coolthree keyboard

13 years of coding don't pass without leaving a trace. You start to get stuck for hours in a shower on shampoo instructions that read "Apply, lather, rinse, repeat", type with a speed of a machine gun, navigate the code files using only your keyboard with inhuman agility, your fingers become longer and neck develops an aristocratic stoop. You also develop some sort of a style: the way you write code, the way you prefer to solve design problems, and a guideline that you use to evaluate code written by others. Your coding style is a distinct feature of you: it is honed all those years. Like an oriental master of combat that polishes his kung-fu for 60 years, you polish your code: the way it looks, the way it feels and even performs.

Through my programming experience, I never had an 'ultimate guideline to coding style'. My coding style was developed by seeing millions of lines of code from hundreds of other developers and by writing code myself. If I saw something that I considered cool I eventually adopted that in the code I wrote. If I saw something looks and performs fine — I was reusing that construct again and again. Never I had the name for my style — and if I was asked yesterday, I would define it in a couple of taciturn men words. But today, I have even a better definition — after stumbling at Jeff Atwood's article in my feed reader I finally know the name of the coding style I acknowledged and tried to follow and hone through all my coding career.

The name is short, precise and manly: Spartan programming.

300 Spartans movie screenshot
(I can't stand it, I just have to snatch this picture from the original Jeff's post).

Spartan programming. Two words say it all. Minimal, ascetic, open, yet powerful and to the point. The whole spartan armor set consists of a helmet and a shield — yet one look at a spartan leaves not even a small doubt in his immense strength and physical invincibility. There are two ways of constructing a software design. One way is to make it so simple that there are obviously no deficiencies. And the other way is to make it so complicated that there are no obvious deficiencies.— C.A.R. Hoare.



A quote from a Spartan programming description:
Spartan programming strives for simultaneous minimization of all of the following measures of code complexity:
  1. horizontal complexity, that is, the depth of nesting of control structures, just as the total line length.

  2. vertical complexity, that is, the code length in lines.

  3. token count

  4. character count

  5. parameters that is the number of parameters to a routine or a generic structure.

  6. variables

  7. looping instruction, that is the number of iterative instructions and their nesting level.

  8. conditionals, that is the number of if and multiple branch switch statements.

This is how Leonidas would write the code if he lived in our days and wasn't busy fighting with Chuck Norris for world dominance.

It is my deep belief that code should be as simple and as straightforward as possible. As Albert Einstein said, Any fool can make things bigger, more complex, and more violent. It takes a touch of genius - and a lot of courage - to move in the opposite direction.

The code should be short, sharp and to the point. If you think it's a good design idea to implement "just a couple more classes" because "it makes sense" to inherit CFelisCatus from CAnimalia->CChordata->CMammalia->CCarnivora->CFelidae->CFelis instead of inheriting CCat from CAnimal — you are wrong. The next engineer with 80% probability will simply not know what Felis catus is, and after a week of futile attempts to understand how to do things with your "advanced code that makes perfect sense" will simply decide "its not here" and will write his own CCat and CAnimal. That, my friend, is called code doubling, and practices like that give births to Codethulhus that feed on human souls. Remember: every time you write CFelisCatus, God kills a kitten.

if(true == bSucceeded)

{

  return XOK;

}

else

{

  return XNOK;

}

Anyone who writes code like this deserves to have both his hands chopped up to the elbow with a big (and dull) viking axe. If you think this is "readable", then you are wrong: human eye has a limited focus area for grabbing the code as a whole construct and human patience and concentration has its limits as well: after scrolling through 20 pages of open/close braces you just stop trying to read and understand the code and start to pretend that you are reading it. Unless you are a first-year culinary institute student or an indian programmer that is payed on per-line basis, you should restrain from writing code like that or I will break your face if I see you in public. And I mean it.

Compare the previous code with the code snippets below:if ( bSucceeded )

  return XOK;

return XNOK;
Or even with this one:return bSucceeded ? XOK : XNOK;

The code speaks for itself. It doesn't clutter your screen and is perfectly readable. If you can't understand how ternary operator works — what the hell are you doing at your can-feed-half-of-Africa-with-a-daily-salary engineering job?

Don't get me wrong. Even though I'm a fan of reversi.c, I do not approve that style of coding at work either. But there just should be a limit for code over-stretching.

My personal guidelines for manly code in C++

  • Ternary operator — master it. It turns a lot of code into elegant one-liners:printf("Ninja mode %s.", bStealth ? "enabled" : "disabled");

  • Prefer prefix form of incrementation/decrementation — it's simply faster then postfix. And with prefix form you can write cool things like this ++++++i;

  • Don't explicitly compare with NULL or false: if (enabled == true) looks tremendously stupid.

  • Delay variable declaration until it's initialization. This is simple. This immediately shows the type of a variable, and in case of non-integral variables (even std::string), you delay constructor and destructor call until it's obvious it's absolutely necessary — the execution point might never reach the code (for example, if it fails on parameter validation and returns).

  • Prefer integer constants to string constants — integer comparisons are many times faster, especially if you use std::string or similar — remember, you will also need to instantiate the std::string instance (and destroy it afterwards). Smaller memory footprint, more processor cache hits — there is no reason to use string constants over integer ones. Need strings for debug purposes? Create a static function that returns a const char* representation of this integer value. Oh, and with integer constants you can use switch instead of never-ending blocks of else if(...)'s

  • Trust noone — always check for the sanity of passed arguments, as well as function returns. Even if you have checked the code of the function (or even wrote it yourself) and are absolutely sure it can't return this specific value. Code is getting rewritten now and then, and trust me — nobody will try to change the behavior of your careless function until it loudly crashes on a big presentation day. And it will be you who will take salary cut the blame. Code, return values and arguments change — your function should still behave like a spartan and don't bring down the whole server because "this result is just not possible". Remember, the name 'bug' comes from the actual, real, material moth that got stuck in a relay of one of the first computers. And remember Adidas marketing slogan.

    Whatever happens, spartan code must stand. Or at least crash responsibly.

  • Avoid braces      } // else

        } // case

       } //switch

      } //while

     } //if( data != NULL)

    }
    Familiar construction? Even comments after braces don't help much. Avoid that. Don't encase the 'main processing' code into precondition-checking nested if blocks — check for precondition and return when it fails to fulfill. Don't encase single operation into braces. It is not better then indentation. It is worse. The only exception from this rule is a construct where you for some reason have nested if keywords paired with else keywords as well:

    bool intelligentDesign = true, spagettiMonster = false;

    if(intelligentDesign == true)

      if(spagettiMonster == true)

        printf("The world was created by God with the help of Flying Spagetti Monster.\n");

    else // if intelligentDesign != true, then the world was created by spagettiMonster alone

      printf("The world was created by Flying Spagetti Monster alone\n.");

    In cases like that, do encase even one-keyword blocks into braces. Don't trust indentation alone.

  • Naming convention. Naming convention is a controversial topic and many battles were lost before they have even started because spartans simply couldn't reach an agreement on a naming convention that should be used. (Read Linus Torvalds and Bjarne Stroustrup against Hungarian notation). And since spartans are used to talk short and to a point, we will stop writing this ode to manliness now and cover naming conventions in our next article.

If you liked this article, subscribe to this blog's ATOM feed to make sure you won't miss the end of the story. Meanwhile, feel free to express your opinion by writing a comment, or share spartan wisdom with others:

Wednesday, July 9, 2008

How to optimize your Blogger post page titles for search engines moving the blog name to the end of the title

By default, Blogger blog titles look like this:



Cranked.ME: How to optimize your Blogger post page titles for search engines


having your blog title, a semicolon, and the post title. In this order.
Considering the Google love for page title to look exactly like a search query (or at least start like this), this is not the optimal layout. And if you are not a self loving git like me, your blog title might not be a one-word nickname of your own, but something like 'A blog about my little kittens'. This will turn your post page titles into something like this:



A blog about my little kittens: How to optimize your Blogger post page titles for search engines


with page titles like this, you might try your luck fighting wikipedia and kittenwar for kitten-related searches, but your 'Blog title optimization' posts can end up somewhere at the end of 17th page of search results.

To optimize your blog titles, moving the blog name to the end of the title and giving search engines an easy time to index your hottest link-bait post titles:
  1. Go to Blogger dashboard
  2. Choose Layout->Edit HTML
  3. Search for the following code:<title><data:blog.pageTitle/></title>
  4. Replace it with the following:<b:if cond='data:blog.pageType == "index"'>
    <title><data:blog.title/></title>
    <b:else/>
    <b:if cond='data:blog.pageType == "archive"'>
    <title><data:blog.title/> archive: <data:blog.pageName/></title>
    <b:else/>
    <title><data:blog.pageName/> - <data:blog.title/></title>
    </b:if>
    </b:if>
  5. This code does the following (in the following order):
    1. Leaves your main/search/label page titles the same
    2. Changes your archive pages to the following format: <Blog title> archive: <Date>
    3. Changes your post page titles to the following format:<Post Title> - <Blog Title>
  6. Save the template.

This is it. You can experiment with page titles modifying the data between <title> and </title> tags in the previously mentioned code.

Blogger data:blog.pageType variable possible values:
  • "index" — The 'index' pages. This includes your main page, search pages, post by label pages
  • "archive" — 'Archive' pages. This is what you get if you click on some month/year link in 'Archives' widget.
  • "item" — Blog post pages. Your post opened in a distinct page dedicated to it.

How to make comment form appear under your post in Blogger

An embedded under your post comment form is a new cool and long anticipated feature of Blogger. It minimizes the effort needed to leave a reply in your blog, thus raising the chance your blog visitors will leave their opinion.

All of the Blogger standard templates got updated with the new embedded comment form code, though the feature is still considered 'in draft', and you will have to login into 'Blogger in Draft' version of blog control UI to enable it.

To enable embedded under your post comment form in Blogger:

  1. Go to blogger in draft dashboard
  2. Optionally check the Make Blogger in Draft my default dashboard checkbox in the upper right corner if you want to always stay on bleeding-edge front of Blogger features.
  3. Press the 'Settings' link under your blog name
  4. Choose Comments tab
  5. Select 'Embedded below post' radiobutton option for Comment Form Placement setting.comment form embedded under post setting radiobutton manual
  6. Press the Save Settings button in the bottom of the page.

Now, if you use a standard Blogger template, all your post pages should receive a fancy embedded inline comment form.
In case you, just like me, use a custom template, you might need to update the template manually:
  1. Open Dashboard->Layout->Edit HTML
  2. Click Expand Widget Templates checkbox
  3. Find the following lines:<p class='comment-footer'>
    <b:if cond='data:post.allowComments'>
    <a expr:href='data:post.addCommentUrl' expr:onclick='data:post.addCommentOnclick'>
    <data:postCommentMsg/>
    </a>
    </b:if>
    </p>
  4. Replace it with the following:<p class='comment-footer'>
    <b:if cond='data:post.embedCommentForm'>
    <b:include data='post' name='comment-form'/>
    <b:else/>
    <b:if cond='data:post.allowComments'>
    <a expr:href='data:post.addCommentUrl' expr:onclick='data:post.addCommentOnclick'>
    <data:postCommentMsg/>
    </a>
    </b:if>
    </b:if>
    </p>
  5. Save the template.

Done. Feel free to experiment later with the template code of comment-form widget :)
Meanwhile, enjoy :)

Tuesday, July 8, 2008

We asked for new Blogger features for only a couple of years... and we got them!

Two new Blogger features (Embeddable comment form and Optimized Page Titles) has been around for some time, though I had time to insert them into my template only today.

The comment form will make it easier for readers to leave a response - you will not need to wait for the comment window to load anymore - I'm receiving a first wave of comments as I write this post - and I have also modified the comment form so the links from comments are no longer nofollowed - that motivates your subscribers and readers to comment your journal even more.

And the optimized title for pages will move the blog name remove the blog name from the beginning of the blog title so the site will be better recognized and ranked by search engines.

In the next two posts, I will describe how to add an embedded comment form into your blogger template and how to optimize your blog title, moving the post name to the beginning of title.


We will also see how long it will take Google to fully re-index a blog hosted on it's favorite BlogSpot - older pages has been updated on 28th of June this year.


Stay tuned.

Sunday, July 6, 2008

что думает Лукоморье о Торадицио

«Довольные жидопидарасы построились в ряды и машут флажками» — известная фраза, взятая из подписи к фотографии гей-парада в необычайно фимозной статье Гей-технология. О геях там написано так много и так пóлно, что заставляет подозревать её авторов в латентности.


Это пиздец. 165 килобайт битого текста о геях. Спорю на бутылку очень хорошего коньяку что Мицгол был изнасилован в детстве. (и не раз :)
Я все понимаю - каждый имеет право на свое личное мнение. Будь оно "пидарасы" или "вот так, отношусь :)". Но 165 килобайт??? С картинками? Такой стадии ФГМ я еще не встречал :) И, как уже говорится, заставляет подозревать её авторов в латентности :).

Review: Wanted the Movie ("Особо опасен")

This movie was great. First 20 minutes.
Action, drill - everything was there.
Until they introduced threads.
I mean, come on, threads??? WTF? What idiot would invent a method to interprete knitting defects produced by a machine so it actually makes some readable names (Markov chains spring to mind), and after that dedicate a life for killing the people that was unlucky to have such a name? This was just... stupid.
The second idiotic 'revelation' was about his father. This 'turn' in the plot has almost made me puke.
And after 'rat army' I just couldn't watch it anymore.

Overall: 5 out of 10. Only for having some nice keyboard action inside.

Saturday, July 5, 2008

GemCraft by ArmorGames - walkthrough, hints, tips and tricks

gemcraft by armorgamesGemcraft by GameInABottle (published by ArmorGames) is a remake of classic Desktop Tower Defense game. But unlike other DTD clones, the original idea found a second life in this masterpiece.



General tips

  • Every game try to get as much amulets as you can. For every amulet you get extra experience points. If you build towers - build either 3, 6 or 9 of them. If you throw gem bombs - try to throw at least 15 or 30, so you get the extra amulet. Extra amulets = extra exp, and if you get the full blue frame after completed level you can get a bonus level as well.

  • Always unleash the next wave as fast as you can. First thing I do at the beginning of the game - I just release the first wave, and then put in my gems. If you see you can handle it - unleash the next wave as soon as possible right after the current. This grants you a bigger bonus to both exp and mana.

  • For the first few levels create smallest gems. This way costs the most mana, but you receive amulets for big amounts of gems created and big amount of gems combined.

  • Alternative method for the first few levels is gem bombing. Create a few, unleash the first wave and start throwing gems into the monster cave. Cast mana pool if you have enough mana, Ctrl+click on gem creation screen to create as much gems as you can, rinse and repeat. While this method can be quite tiring, it can give you glowing frame score even on first few levels, so you don't have to replay them. (Remember you can use '1' keyboard button to throw gems).

  • At the end of every level use the rest of your mana to create as much gems as you can. Press '3' to open gem creation screen, then Ctrl+Click on the lowest level gem - it should fill your inventory with gems. Press '6' to open combine gem menu and Ctrl+Click on a gem to combine as much as you can. Rinse and repeat. This way you will get the most from your extra mana in amulet experience. Out of mana? Throw these gems on enemies and get an extra amulet for gem bombing.

  • For levels 20 and higher, create expensive gems at the beginning. You will save some mana this way. On the last 2-3 waves, stick to producing small gems and combining them, so you get some extra amulets

  • Build towers as close as possible. Even if you see a 'sweet spot' to build your defenses - towers close to entrance will kill monsters faster, thus raising your exp and mana, and you will be able to release the next wave of monsters faster as well, raising your exp and mana even more.

  • If this epic boss has made it through your defenses with a small amount of hit points and is going to enter your tower - remember you still have gem explosions. While low level gem explosions are pretty useless, level 7 gem explosion is really devastating. Especially if you have 'powerful gem bombs' skill.

  • Don't bother replaying any levels before you have Number Of High Grade Starter Gems skill maxed. With this skill you will easily get max score on every level you replay (revealing you secret levels as well).





Skills

  • gemcraft game skill - more initial and maximum manaMore initial and maximum mana - this is the first skill you put your hands on. Very useful in epic fights when you think you will need to give an epic boss a 'second lap'. Useful because you can create higher level gems in the very start, or cast Mana Pool more times. Before 'number of medium grade starter gems' you should have it maxed.


  • gemcraft game skill - more mana gain per killMore mana gain per kill - very useful. You kill enormous amount of monsters - and even a small amount of extra mana from every kill really helps.


  • gemcraft game skill - armorArmor - used only in first epic fight, when you surely need to let the boss go through your tower. Absolutely useless otherwise. You do know that you can respec, resetting your skill points, right? So take some for the first epic fight, and respec back to 0 in Armor afterwards.


  • gemcraft game skill - more mana replenish per secondMore mana replenish per second - good when it's your top skill. Not as good when you are at higher levels because there are plenty of great skills then. Most of your mana still comes from kills and unleashing the next waves before time - but if you have extra points - this is a good place to invest.


  • gemcraft game skill - number of basic starter gemsNumber of basic starter gems - since basic gems are cheap, it is not that good. Other skills from this category (medium and high grade) are tremendously more useful.


  • gemcraft game skill - lower mana cost for gem creating and combiningLower mana cost for gem creating and combining - that's great. You create plenty of gems and combine a lot as well. Even if you create only a couple, but immensely powerful gems - cost decrease for them will be very noticeable.


  • gemcraft game skill - powerful gem bombsPowerful gem bombs - fun to experiment with, useless otherwise.


  • gemcraft game skill - dual gem masteryDual gem mastery - this is two-side skill. From one point, you want to concentrate on pure gems in GemCraft. From the other point you are often in situations when you are just forced to mix gems in order to get this 7 or 8 level gem. Invest just a few, and if you don't have Pure Gem Mastery yet.


  • gemcraft skill - lower initial and incremental cost for buildingsLower initial and incremental cost for buildings - very useful. Allows you to build Water Trenches like there is no tomorrow.


  • gemcraft game skill - number of medium ggrade starter gemsNumber Of Medium Grate Starter Gems - once you have it, invest everything you can into this skill. Later it will be superseeded by Number of High Grade Starter Gems skill, but meanwhile the initial boost from this skill cannot be underestimated.


  • gemcraft game skill - pure gem masteryPure Gem Mastery - a must have for every self-respecting wizard. Makes your pure gems stronger - what else do you need? :)


  • gemcraft game skill - number of high grade starter gemsNumber Of High Grade Starter Gems - immensely powerful (and expensive) skill. This skill maxed almost guarantees you a grade 7 gem in the very beginning - so you can unleash the waves of monsters one by another, and focus on Mana Pool from the start, thus boosting your mana regen and total exp. By effectiveness/skill points ratio this skill is second probably only to Pure Gem Mastery - and only because this skill is so expensive. By the time taken to complete a level with this skill it is on the first place.





Bosses





How to beat the first epic boss - The Distorted

gemcraft game - first epic battle boss - the distorted





The Distorted:
Hit Points:10k
Armor level:26
Speed:0.6
Mana to banish:4920
First epic boss is fat. He has 10000 hp and it is impossible to take him down from the first round. Luckily, he costs only 4920mana to banish - that means that if you have 4920+ mana you will survive if he enters your castle and he will have to do all his way again. Respec. Invest 2 points in Armor, maximize More Mana Points Per Kill and More Mana Points Per Second. Rest divide between More Initial and Maximum Mana and Lower Mana Cost For Gem Creating And Combining. Setup: 6 extra towers, 5 in the front, one near the last tower on the road. Strategy: Buy expensive gems. One level 4 gem from the very beginning should guarantee you safety for about 6 or 7 waves. Buy level 4 and 5 gems and cast Mana Pool until you reach at least 4700 mana - together with points in Armor skill it will guarantee an extra lap for the epic boss. Some mobs from wave 29-31 can go through your defenses and into your castle - but you will replenish that mana while killing them when they go out for a second lap. Build a couple of water trenches to maximize the impact of your towers. When epic boss passes your first line of defenses, move your most powerful gems to 2 backend towers, so he will enjoy their firepower for the second time. If he walks into your tower and you have at least 4700 mana (you can check the actual amount needed by clicking on him), you will banish him and he will have to do all the way again. Move your strong gems again to the front row - this should be enough for a poor creature to depart for greener pastures.





Second Epic Battle - The Reborn

GemCraft game - second epic boss battle - The Reborn





The Reborn:
Hit Points:16k
Armor level:30
Speed:0.6
Mana to banish:6120
Strategy: You need 6120 mana to survive The Reborn entering your castle. Luckily, he comes only on 38 wave, so you have plenty of time to build your mana pool and your defenses. Buy expensive gems, invest in Mana Pool early and you should be able to greet the boss with at least 2 level 7 gems. Make sure to give him a double greeting, swapping the most powerful gems to your rear defenses. With some luck "The Reborn" might not even be able to reach your fortress even on his first lap.





Third epic battle - The Fallen

Same strategy. Build towers close. Get expensive gems. The poor boss died before I even screenshotted him. You don't need big amounts of mana for this boss - he will die on the way (Mana Pool spell is still useful, as you get boosts to your exp and mana gained from monsters).





Fourth epic battle - The Lurker

GemCraft game - fourth epic battle boss - The Lurker







The Lurker:
Hit Points:42k
Armor level:65
Speed:0.6
Mana to banish:6840


Once you have maxed Pure Gem Mastery and Number Of High Grade Starter Gems the rest of the game is simple. The Lurker should die on his first voyage to your castle. If he doesn't - throw some lvl 7-8 gems at him.





Final battle - The Guardian and The Forgotten

GemCraft game - fourth epic battle boss - The Lurker







The Guardian:
Hit Points:146k
Armor level:120
Speed:0.6
Mana to banish:7100




In addition to his impressive amount of hit points and armor, The Guardian seems to be quite resistant to gem bombs. Depending on your luck with purple gems, you will probably need to banish him once - so keep around 7k mana ready. The number one goal on him is to cut soften his ultra armor - make sure you put purple gems as close to the entrance as possible, and move them as The Guardian progresses through. Green gems (poison) help as well - they ignore armor entirely. After losing 100 out of his 120 armor he is easily taken by your other damage-dealing gems. Enjoy the meeting with The Forgotten :)



How to get secret levels

To get secret levels, you need to score for glowing frame for all levels except last two. First hidden level is revealed after you complete first 6 levels with the "glowing frame" score. Be warned, though - it is not that easy if you are not at least level 37.

Don't bother if you don't get the light-blue glowing frame for the first time you play the level — once you reach level 40, replaying levels to get the glowing frame will be trivial and very fast. So get the level 40 - and then go for hidden levels.

That's it. Hope you enjoy the game as much as I did :) And if you found this post useful, why not subscribe to my rss feed to receive updates about hot new games?

Friday, July 4, 2008

Blogger Templates and XHTML markup errors - problems with W3C Validator

I have just ran this blog through W3C Validator. It failed with 700 errors.
Granted, I take credit for plenty of errors. For example, I didn't escape twice the ampersand symbol in my FoxRecord page popularity meter. Knowing that it goes through template parser, I should have written &amp; not & when building URL's there.
Fixing it removed 60 errors. 640 to go. What next?
To check how much errors Blogspot Jeans Template brings me, I've ran my another Blogspot blog through Validator. The other blog runs with 'Minima Black' template and basically serves as a stub, having only one post. 347 errors.

Then I compared distinct post pages. Both posts contained only one picture. The resulting disparity between error numbers would define the amount of XHTML markup errors introduced to my blog with Blogger Blue Jeans template, Blogger Tag Cloud trick and Blogger Related Posts hack from JackBook.com.
The results were astonishing.
XHTML Validation Errors
My custom Blogspot Template with Blogger Blue Jeans template, Blogger Tag Cloud trick and Blogger Related Posts hackStandard Blogger 'Minima Black' template
342 errors348 errors

The simple minimal standard Blogger template in fact contains more XHTML Validation errors then my custom template that I've created from a very ugly port from a WordPress template, with plenty of my self-made and borrowed hacks and tricks.


Of course, there is quite a way to go. For example, my simple 'Google fail' post totally breaks Internet Explorer. It simply stops rendering the page after first paragraph. The rest of the post and the whole right sidebar is not visible. This is my small 'ACID2' test.
'Related Posts in Blogger' hack from JackBook is no good. It simply puts all the related posts into your post page, hiding their bodies with CSS. That doesn't result in duplicate content since it is done with Java, though it noticeably increases page loading time. This is totally no good, and that's the reason I started to write FoxRecord.

So far so good. Google Webmasters Tools meanwhile only complains about duplicate title tags on my post pages and their comment pages.
But the HTML/XHTML errors in Blogger templates is something that should be really worked on. http://blogger.com contains 19 HTML markup errors itself.

I am sorry I wore grim reaper costume for your grandmother's 82nd birthday party

I am sorry that I wore grim reaper costume for your mother's 82nd birthday party. And once again, I'm sorry for your sudden, tragic loss.

Thursday, July 3, 2008

I love Microsoft and Internet Explorer

I have just seen how this page looks in Internet Explorer.
I always try to ensure compatibility with Internet Explorer.
Seeing how 'compatible' it is now — God damn it, there is _nothing_ special — a few transparent png's and _2_ JavaScripts — observing that half of this page is completely not seen in Internet Explorer will make me cry all night long today.

Wednesday, July 2, 2008

Rambo 4: John Rambo the movie - review

Watching 'John Rambo'. If I were him, I would kill the stupid missionaires myself.
It's pretty much clear, that he has quite a hard life as a hermit. Words of one chick is enough to go on a killing spree again.
Zomg. People in that poor country are dressed better then people here in Switzerland.
@1:06 Yeah, these 'commandos' really rock. Got caught off-guard and beaten hand-to-hand by some vietnamese rednecks.
@1:09 Yeah, those vietnamese rednecks are also bright. Shooting a solid-metal-plate protected machinegun with their pee-shooters, while standing on an open space.
@1:14 John Rambo looks sad. The chick ran searching for another guy. Rambo is not getting laid.
John+Rambo+is+sad+because+he+is+not+getting+laid

Conclusion: the whole country happily lived their way, then John Rambo came and killed everyone. Masterful job though :)

Overall: 7 out of 10. For excellent 'pirate' shootout.

Pidgin 2.4.1 or 2.4.2 and ICQ compatibility problems

What the fuck is going wrong with Pidgin? It disconnected me from ICQ and told me 'The client version you are using is too old. Please upgrade at http://pidgin.im/'.
What the fuck? I didn't change my Pidgin 2.4.1 version to anything else.
Obviously, it's AOL fucking around. I can understand that. First, the "mysterious" 12111 number, that figured out to be AOL-made support number (btw, I didn't get it in my contact list anyways), and now this.
I wouldn't have blamed pidgin. It's not their fault that AOL is fucking around. Except one thing. While installing the new, 2.4.3 version of Pidgin, I had to install shitloads of new libraries and disable plenty of others. I had to call configure about 8 times, and my resulting configure string looked like this:./configure --disable-meanwhile --disable-avahi --disable-dbus --disable-perl --disable-tcl --disable-screensaver --disable-startup-notification

Finally, after messing around a lot with the stupid 2.4.3, I've installed it. And... you know what? It still doesn't fucking work. Even after finding the proper version string in oscar.h, fixing it and recompiling.

Then I went to Ubuntu forums and tried everything that was offered there. Including sim-im instant messenger and ysm (you sick me).
This shit works fine. Until you try to use non-ascii encodings - then you're screwed again.

The tip that worked:
Update: For the convenience, I have put the already patched library file liboscar.so.0.0.0 for temporarily hosting at appspot. You can download it here, put it into /usr/lib/purple-2/ overwriting the old file and you are set. In case you want to do it yourself, here's the steps:

You should directly patch oscar library.

  1. Download the gzipped patch file http://ubuntuforums.org/attachment.php?attachmentid=75956&d=1214936747. You will need ubuntu forums login.
  2. Unzip it: gzip -d pidginicqbsdiff.gz
  3. Install bsdiff if you don't have it installed yet: sudo apt-get install bsdiff
  4. Patch oscar from libpurple: sudo bspatch /usr/lib/purple-2/liboscar.so.0.0.0 /usr/lib/purple-2/liboscar.so.0.0.0 ./pidginicqbsdiff

Done.

Tuesday, July 1, 2008

Sound issues - How to make Penny Arcade's On the Rain Slick Precipice of Darkness run with sound on Linux Ubuntu 8.04 Hardy Heron

The Kubuntu 8.04 Hardy Heron is cool, though it introduces Pulse sound system, and Penny Arcade game, "On the Rain Slick - Precipice of Darkness Episode 1" doesn't work well with it. You will not even be able to run it under some circumstances. It will just say "sound driver not found, the game will now exit".
Here's what you should do:
  1. Close _all sound-related programs before running the game. This includes Amarok, Firefox with some Macromedia Flash on the webpages, and run the game
  2. The game should run now, but with garbled and stuttered sound. Install alsa-oss:sudo apt-get install alsa-oss
  3. Launch the game through it: aoss ./RainSlickEp1

This should to the trick. Now you should play your Precipice of Darkness with a perfect sound quality.

On the Rain-Slick Precipice of Darkness - PennyArcade game

I have just bought a PennyArcade game (On the Rain-Slick Precipice of Darkness).