Category: Hacking

Computer, technical and life hacks!

Последното от del.icio.us

Последното от del.icio.us

Тази сутрин се събудих необичайно рано. Без ничия намеса, просто ей-така. Сън, от който ти се ще да се събудиш, събуждаш се, след това лежиш и гледаш тъпо в тавана, мислейки какво да правиш. Докато най-накрая решаваш да станеш, защото лежейки само си губиш времето.

След като станах, забелязах че е още 6 часът. Добър час за неделно събуждане, нали? Типично в стил “луд по компютри изрод” реших да седна и да оправя някои неща по блога. Трябваше да разкарам последните следи от [WP-RecentLinks] (един плъгин, който отдавна не използвам), както и да му намеря подходящ заместител.

[WP-RecentLinks] по принцип го използвах, за да мога в блога да показвам последните посетени от мен интересни връзки. Но в течение на времето той се превърна в неподозирано upgrade бреме. А и аз започнах да използвам del.icio.us, за да си записвам там любопитните (и любимите) връзки.

Заместител на [WP-RecentLinks] можеше да бъде само плъгин, който да може да показва моите последни прибавени в del.icio.us връзки. След кратко търсене се спрях на два кандидата:

* [WordPress del.icio.us Plugin 1.0][]. Този го инсталирах, тествах и махнах. Принципно изглежда много добре, но пък изисква потребителското ми име _и паролата ми за достъп_ до del.icio.us. И идея си нямам защо му е трябвало на автора това изискване за паролата. Иначе плъгинът си има кеширане (за да не се повтаря често в заявките си до del.icio.us), което пък от своя страна изискваше да разреша на WordPress да пише из хостинга ми.
* [Delicious Cached++][]. Този плъгин (връзката е към някакъв испански материал) се оказа изборът ми засега. Функционално е почти идентичен с предишния, но за сметка на това не изисква паролата за del.icio.us. Е, не прави и кеш, но може по-късно да си поиграя и аз да напиша кеширането (хареса ми как е реализирано в горния плъгин – [KISS][] е приложен много на место).

Та засега ще си стоим без кеш. Интересно как Visual Studio успя да прецака sidebar.php, след като сложих кирилица за заглавие. Не ми се търсеше каква е причината, ще го мисля после. Засега ще оставя заглавието на английски, а вие може да хвърляте по едно око на блокчето с последните ми връзки от del.icio.us, което се намира отдясно точно под моят Shoutbox.

_Поправка!_: [Delicious Cached++][] използва API функцията на WordPress [fetch_rss][], което значи, че има кеширане и то е прозрачно за самия плъгин, т.е. решението е перфектно. Като се замисли повече човек, то кеширането си го има и в самото име на плъгина, ама откъде толкова акъл в 7 часа неделя сутрин, че да го видя?

[WordPress del.icio.us Plugin 1.0]: http://linuxbrit.co.uk/blog/2004/10/01/wordpress-delicious-plugin-10/ “WordPress del.icio.us Plugin 1.0”
[Delicious Cached++]: http://weblog.jcraveiro.com/projectos/delicious-cached-pp/ “Delicious Cached++”
[KISS]: http://en.wikipedia.org/wiki/KISS_principle “Принципът KISS”
[WP-RecentLinks]: http://rebelpixel.com/projects/wp-recent-links/ “WordPress Recent Links plugin”
[fetch_rss]: http://codex.wordpress.org/Function_Reference/fetch_rss “fetch_rss WordPress API Function”

Shoutbox в този блог

Shoutbox в този блог

Блогът вече има shout box. Вчера използвах плъгина Pierre’s Wordspew, за да го създам (придружено с не малко нерви от моя страна, защото конфигурацията на блога ми е малко “странна”).

Ако не знаете какво е shoutbox, но знаете английски, Wikipedia ще ви помогне. За тези, които не знаят, ще се опитам да обясня накратко тук.

Shoutbox (помагайте за добър български термин) представлява функционалност в дадена web страница или портал (или в блог), която позволява всеки потребител да остави кратко съобщение, без да се изисква регистрация или нещо друго, освен това да не оставя спам. За да се предпази shoutbox-ът от спам, той си има списък със забранени думи (че и даже IP адреси). Shoutbox в никакъв случай не подменя коментарите. Ако искате да кажете нещо, свързано с конкретния материал, коментарите са безценното место за това. Ако обаче искате да потърсите контакт с мен или останалите четящи по каквато и да е друга тема, или искате просто да покажете, че сте там, тогава може да използвате Shoutbox.

В Shoutbox може да се заговорим за всичко. За последната статия, за някой по-пиперлив коментар, за каквото и да е. Докато запазваме добрия тон, разбира се. Принципно, всички правила, които важат за коментарите, важат и за това което се пише в shoutbox-а.

Ще намерите Shoutbox-а отдясно, точно под Fortune. Ще ви чакам (и) там.

### Избрани въпроси и уточнения от самия Shoutbox:

__Симона__: а бе не е нужно да влизам МСН и ИЦЯ-то ама къде отиде конфиденциалността по дяволите …
__Doncho__ : @Симона: това не е личен чат, Мони, това е публичен такъв. Представи си една голяма стая, в която пишеш по стените. Всеки, който е влязъл в стаята, може да прочете това, което си написала. За личните неща си има други методи

WP-ShortStat not counting? Fixed!

WP-ShortStat not counting? Fixed!

After yesterday’s upgrade I decided to enable the WP-ShortStat plugin, which seems to come bundled at least with version 2.0.6 (maybe even earlier, but I did not notice). I was quite surprised why, after I enabled it, its tables remained empty and the stats (logically!), were zero too.

Since I know that my blog does not have _that little_ visitors (well, at least I visit it, don’t I?), I decided to look for the reason. After some hacking through the code, I saw that because of some reason, this plugin looks for the function ‘is\_admin\_page’ and if such function is not defined, it defines it. Obviously, something was wrong with that function, because my debugging showed that if I just remove the call to it, everything goes smooth.

I did not want to search more. I have no idea what is going wrong, and honestly – I do not care. I even tend to think that the function is totally useless, since the plugin detects quite well the ‘admin pages’ by looking for ‘wp-admin’ in the page URL. What is important for me after the whole research is that my counters started to go up :).

If you observe the same problem and if you share my thoughts, you may try to fix your wp-shortstat.php file. It’s simple:

* Open the file in an editor
* look for “is\_admin\_page()” in this file. You will find a fragment, which will look like:

if($wpdb->is\_admin
|| strstr($_SERVER['PHP_SELF'], 'wp-admin/')
|| is\_404()
|| is\_admin\_page()
)

* Once you find this fragment, delete the line “|| is_admin_page()”, or if you want to be good boy/gal, just add two back slashes _//_ in front of it like that:

if($wpdb->is_admin
|| strstr($_SERVER['PHP\_SELF'], 'wp-admin/')
|| is\_404()
__//__|| is\_admin\_page()
)

* Save the file. You’re done. The thing should immediately start counting your visits.

Blog upgrade to 2.0.6 and some neat stuff too

Blog upgrade to 2.0.6 and some neat stuff too

Yesterday I devoted some time to the blog. It was running 2.0.4 for a long time, and 2.0.6 was already out. Also I found SNAP Preview Anywhere service, which I liked and decided to integrate in the blog. WordPress.Com guys liked it, so what the hell, it worths a try!

SNAP integration went very smooth using the SNAP Preview Anywhere plugin. In not more than 3 minutes I had finished the job. It’s a bit stupid to show you previews of your internal links, so I switched that off. I wonder why the author does not switch that off by default, but it’s his choice anyway.

After the plugin installation, I went for the more risky task, i.e. upgrading my WordPress to 2.0.6. I say “risky”, but after all it went smooth: backup site, backup DB, switch off plugins (remember the ones, which were ON first), copy 2.0.6 files over, enable plugins, perform the upgrade, done.

After the upgrade was ready, I saw that my site’s Cyrillic was broken again. No wonder, this nasty MySQL bug bites again! I had to search through my postings to find the note to myself, which I left at the times when I upgraded my blog. Interesting, the posting was precisely at the times when I upgraded to 2.0.4. No wonder :). After injecting that code, everything ran fine.

Later on, after I loaded my Akismet, I “discovered” that I’ve overwritten my Akismet customizations from two weeks above. Using my own instructions, I was able to restore them without any problem. But if you’re lazy and do not want to follow all the steps, I will put this two updated files:

* Akismet (as it comes in WordPress 2.0.6) with the DHTML modification only, which allows you to have moderation comments “shrink”, but still displays 50 comments per Akismet page
* Akismet (as it comes in WordPress 2.0.6) with the DHTML modification and the 500 commments per moderation page change. This is the one I use, because when the comments are shrink, the more you see – the better.

Hm, maybe I should follow Yovko’s advice and write to the Akismet guys… some day?

Leaner Akismet Management Page

Leaner Akismet Management Page

My Akismet saga will never end. That’s the conclusion, which I achieved today, looking at the 3650 comments, which Akismet claimed as spam.

Few weeks earlier I had very bad experience with Akismet, because it was keeping to mark non-spam messages as such. And I eventually lost some of them into the huge pile of spam, which I daily receive. After that point I started to consider disabling Akismet, but the spammers brought me back in the reality quite fast… with one 5000 spam comments per hour pick.

After that point it was clear – Akismet will stay for a while. But how do I manager better (and most important – faster!) the daily spam heap? That was the question, which was bothering me again and again.

If you happen to have blog with Akismet protection, you will know that it displays the spam comments in a list of 50 messages/screen. This can be quite frustrating in the cases where you have 3500 messages to handle, because first – it does not have the “next/prev” page links at the bottom of each page too, and second – because 3500 spam comments fit “nicely” into about 70 pages.

I was not able to handle all that today, so I decided to make some changes. First I started with changing the amount of messages per page. That was easy – just found the magic number (yes, it’s a magic number) 50 and replaced it with variable, which had value of 500. So far – so good.

But now I hit another problem. The page become way too long to handle. “cialis”, “viagra” again and again and forever. Now, if you have had issues with that many spam messages, you usually develop the ability to judge the “spamness” of the message only by looking at the author and/or the reference link s/he provides. I mean, I don’t have much people who I care about and who sign also as “big cock mothefuka” in my comments section. Right?

So the next task was to develop a nice addition to Akismet, which will hide all bodies (with the “not spam” little form) and display only the person, it’s link and the IP address. That way I was expecting to see a nice table and to be able to browse through the comments much faster. If I need the body of a specific comment, the only thing I have to do is to click the expand/collapse link.

Surprisingly, it all happen much easier than I was expecting. Now I’m happy owner of Akismet management page, which looks like this:

Leaner Akismet Management page with one comment per line

If you want the same result, you can achieve it in these easy steps:

1. Locate and backup your akismet.php file. It should be located at “…/content/plugins/akismet” directory of your WordPress installation

2. Now when you have done that, find the function “ksd\_caught”. It’s a long function, but inside there you must find the place, where comment list generation occurs. The easiest way is just to look for this text: “<p><strong><?php comment\_author”, but it can be different across the different Akismet verstions.

3. Now after you found the text above, copy this text into the clipboard:
<a href="#" onclick="var content = this.parentNode.parentNode.getElementsByTagName('div')[0];if (content.style.display != '') { content.style.display = ''; this.innerHTML='[-]'; } else { content.style.display = 'none'; this.innerHTML='[+]'; }; return false;">[+]</a>

4. Paste the code __between__ the <p> and the <strong> in (2)

5. Now find the text “<?php comment\_text() ?>”. It should be just few lines after the text (2).

6. Copy and paste the code below __before__ the text in (5)
<div style="display:none;">

7. Now find the code
<?php
}
}

8. Copy and paste the code below __before__ the code in (7):
</div>

After all, the picture should look like this:

The final code, as it looks when compared with the original version

Please note that some browsers might trick you, if you copy/paste directly from here. They might provide you with incorrect symbol for “double quotes”, especially if you have non-US locale, which has different opening and closing double quotes. If that happens, PHP will not understand your “sense of humor” and will award you with interesting, hairy error messages. To avoid all this pain, you must ensure that your the browser correctly copied to the clipboard the double quotes. The best way to check this is by pasting the copied text in Notepad or similar text editor, where usually you can immediately tell if the double quotes are the correct ones. But in general you should care about all this only if you do not succeed with the integration as I described it, or if you’re _sure_ that you have the incorrect double quotes.

At the end, after saving the file and loading your Akismet spam management page, it all should work as described. And I think you will love it!

If you’re interested in the “lazy” way of (not)doing all above, you can use this file, where I placed the following:

* akismet.php – Akismet 1.2.1 with the code changes integrated (it also includes my modifications for 500 comments per page, which is not described above)

* akismet.old.php – Akismet 1.2.1 before I started to apply the changes, described here (but it already contains the 500 comments per page change)

* akismet.new.php – Akismet 1.2.1 after the changes. This is actually identical to akismet.php, which is included only for convenience of the lazy people, who would not like to rename this file :).

Questions? Comments? Concerns?

Без късмет с Акисмет

Без късмет с Акисмет

Вчера с Владо обсъждахме факта, че той не може да пусне коментар, защото Akismet го “подпира”. И понеже аз четях списъка с блокирани “акисмети” доста набързо, се оказва че съм му изтрил коментар-два.

Спамът е нещо ужасно. Изключително досаден е и ако имате личен блог, който го знаят повече от 3-5 човека, сигурно знаете за какво говоря. При мен BadBehavior спира средно по 7,000 съобщения на седмица, а допълнително Akismet – още поне 200.

Не е честно обаче, когато човек си направи труда да напише коментар на някой, а този някой въобще не реагира. И на всичкото отгоре, човекът никога не види този свой коментар. Затова аз винаги се опитвам да отговарям на моите коментари. И затова много ми докривя от това, че (очевидно) съм трил коментари на Владо, а най-вероятно и на други хора, не внимавайки достатъчно какво точно Акисмет е “хванал” в мрежата си.

Искам да се извиня на всички, писали и не видяли своя коментар тук. Особено на тези, които са писали нормални коментари, а не споменаващи родословие (моето или на някой друг) по очевидно груб начин. Прощавайте! Ще съм по-внимателен следващия път.

А колкото до Акисмет… неговата !@#!@#! Не за пръв път ме проваля, надявам се да е за последен обаче. Засега го оставям включен, но ще го следя изкъсо.

Ако по някаква причина не може да коментирате или вашият коментар не се появи навреме, и ако ви се занимава с бъглив блог като моят, тогава не се притеснявайте да ми пишете на public[“маймуната”]doncho.net. Оплачете ми се и аз ще наритам глупавия плъгин, който ви създава проблеми.

Блогомързел

Блогомързел

> …Аз чета само 2 блога. И твоя, ама ти вече не пишеш

> …Ами не се обаждаш по ICQ, а и в блога не пишеш, та затова…

> …Няма ли вече да напишеш нещо в блога?

Три отделни цитата. От три различни човека. Еднакви само в едно – това, че изключително много държа на мнението им и че то е важно за него.

Криво е, но те са прави. Наистина напоследък нямам вдъхновение за писане. Не че имам някакви проблеми. Работата си е като всяка престижна работа – товари те сериозно, но носи пък удовлетворение, когато пребориш проблемите. Вкъщи си е ежедневната, датска скука (ако мога така да цитирам Веси :)). Т.е. нещата са си “в реда на нещата”, няма никакво музо-убийствено настроение или причина. Но въпреки това не ми се пише.

Излъгах :). По-горе излъгах, и веднага се сетих, че ако оставя нещата току-така, веднага някой ще ме “сграбчи за гушата” в коментарната секция. Музо-убиецът се нарича MMORPG. Както го наричаме с Ата, “пуцането” отнема сериозна част от сладкия пай, наречен “свободно време”. Както вече посъветвах Вени, с Втория живот трябва да се внимава, защото понякога става трети, и така съвсем ни завлича настрани от реалния такъв и яде повече времеви ресурс.

За да бложа, от техническа гледна точка, към момента трябва да се случат някои от тези събития:

* Да нямам интернет, но да имам компютър
* Да играя в режим, който позволява писане, гледайки небрежно в прозорчето на “втория живот” (както е в момента, между другото)
* Да съм на работа, където е __абсурд__ да си позволя влизането в който и да е от реалните ми светове. Не че понякога и на работа нямам свободно време, но предвид образователния ресурс, с който разполагам в корпоративната мрежа, предпочитам да ровя поредната нова, интересна технология, отколкото да се занимавам с второто или третото ми “аз” :). А и е много нежелателно, откъм гледната точна на позицията която заемам, точно мен да виждат застанал пред “игра”.

Скоро ще станат три години, откакто за пръв път написах тема. Е добре де, не толкова скоро, след 4 месеца поне. За това време до сега имам (максимум) 483 теми, което дава честота на писане около две-три теми на седмица. Учудващо е колко голяма е тази честота, особено имайки впредвид колко пиша напоследък.

Нерядко ми хрумват идеи за материали. Идеи, които след това забравям. Май трябва да започна да си отварям по една темичка всеки път, когато дойде нова идея, пък да пиша когато наистина имам време. Така поне теми няма да липсват.
Или пък може би трябва да започна да пиша, въпреки че няма конкретно за какво? Така обаче рискувам да стана (още по-)скучен, затова не ми се ще да го правя. Гледайки обаче продуктивността на блози, които харесвам, обичам и/или уважавам (както по отношение на количество), чак понякога завиждам :).

Започнах този материал с идеята да обясня колко много време може да ви отнеме “второто аз”. Да съществуваш паралелно в един виртуален свят, населен от себеподобни съзнания, е нещо неописуемо. Ако човек не го е пробвал, няма как да му го опишеш. При всички положения за непознаващият това удоволствие описанието ще звучи наивно, детски, като нищо и глупаво, а на някои медици може и като клиничен случай да им прозвучи. Когато обаче успееш да създадеш второто си Аз на правилното място, когато успееш да намериш приятели в това виртуално пространство, тогава… вече си загубен. Второто и Аз ще те преследва, вероятно дълго време, като нищо може би завинаги. Ако по някаква причина го загубиш след време, ще чувстваш че губиш част от идентичността си. Защото наистина реално погледнато ще е така. Поне от твоята гледна точка. Виртуалната ти идентичност в случая е действително част от теб, дори и да не вземем впредвид чисто техническата инвестиция на време и пари. В този случай във виртуалната вселена ще има хора (истински, живи хора като теб и мен), на които ще липсваш и които ще тъгуват за теб. На които ще си нужен по време на битка например. Защото във виртуалните вселени винаги има някакъв конфликт, точно както в реалния свят. Но щетата от това да разцепиш на някой главата виртуално, или да му запалиш шортите с ефектна огнена магия е… ами виртуална. След посещение при лекар главата се оправя без последствия, а шортите можеш да възстановиш при местния шивач, например. Умишлено променям точните виртуални действия (да не скочи някой WoW фен например), точността на примерите тук няма значение.

“Второто аз” обаче, заемащо сериозна част от свободното ви време, ще ви вкара в конфликти с близките ви хора, които иначе са свикнали малко или много да разполагат поне с части от същото това време. Тези конфликти отначало ще са лекички, но постепенно ще стават все по-сериозни. Ако не полагате ежедневни усилия за запазването на баланса “нервност на близките хора” <=> “виртуално присъствие” рискувате конфликтите да стават все по-жестоки и хората все по-нервни. От собствен опит знам, че понякога наистина трябва да се прави компромис.
Проблемът е, че когато пък направите компромис с “виртуалното си Аз”, този компромис ще се види в очите на другите като нещо, което им се полага по право. Т.е. има опасност те въобще да не разберат компромиса. Затова трябва да им се помага. Кавгата или спорът е последното нещо, което ще помогне за оправянето на този тип аргументация. Най-малкото защото човекът, с който ще спорите, освен че ви е много близък и знае как да ви нарани, не разбира вашата позиция относно второто ви Аз. Както вече казах, това “второ Аз” на него вероятно му изглежда като глупава приумица, прищявка, правене на инат едва ли не. Затова направете възможното той да разбере защо за вас всичко това е важно.

Леле, какво нещо се получи. Дано на някой горното да помогне, защото на мен като че ли само ще ми навреди (свалям си картите, един вид, пред най-важния човек, с който имам честички спорове точно по горния въпрос). Факт е обаче, че второто Аз може да съществува паралелно с първото, но за това трябват допълнителни усилия. И се надявам гореописаното да помогне с нещо.

А за истинските ми, любими игри и нечисти виртуални страсти 🙂 ще пиша в друг(и) материал(и). Той ще бъде е със зарибяваща цел, донякъде :). Защото практиката до сега ми е показала, че виртуалните познати са нещо хубаво, но като че ли много по-хубаво е ако реален приятел го има до теб и във виртуалната реалност, където може да си помагате и да споделяте живот (и смърт). Защото, слава Богу, смъртта във виртуалната реалност е обратима.

А сега да ида да си прибера рудата…

Пълни RSS емисии

Пълни RSS емисии

Винаги ме е дразнил фактът, че много хора предоставят частични RSS емисии от новото съдържание в техните блози. И винаги съм си мислел, че при мен са пълни.

Днес прочетох и подкрепих инициативата на Kaladan за пълни RSS емисии. Еленко и Пейо ме насочиха към тази инициатива. Прочетете и вие, и променете най-накрая тази настройка във вашия блог!

Ако не знаете как – питайте! Ще ви се обясни :).

“Защо комерсиалният OSS софтуер е толкова скъп?”

“Защо комерсиалният OSS софтуер е толкова скъп?”

Интересен въпрос. Преводът е мой, въпросът е от [Slashdot][]:

> Стартиращият ни бизнес искаше да използва OSS продукти. Не искахме да прахосваме време за оправяне на бъгове и поради това основно наше изискване беше “официален съпорт за всички OSS продукти”. Мислехме, че сме готови да платим цената за OSS продуктите, но получихме истински ценови шок.
>
> Сега внимавайте: QT струва $3300 за всяко место (компютър, на който разработчик работи). Зарязахме разработката и пренаписахме всичко на C# (MSVS 2005 струва $700).
>
> Embedded Linux от уважаван RT производител е $25,000 на година за 5 места. Ние се нуждаехме само от 3 места, но трябваше така или иначе да купим 5. Поддръжката беше лоша. Ще използваме VxWorks или WinCE за нашият следващ продукт. RedHat Linux струва $299. ОЕМ версия на Windows е ~$140. Комерсиален лиценз за Cygwin би струвал десетки хиляди долари и съществува само за големи предприятия. Ние се нуждаехме от 5 места. Windows Unix Services са безплатни.
>
> Накрая, ние решихме че оцеляването на нашия бизнес е по-добро от всички идеи “да правим добро”. Освен този embedded Linux (за който казахме, че ще бъде заменен от WinCE или VxWorks), ние вече не сме OSS бизнес.

Честно казано, не ми прилича на FUD. Поне [Slashdot][] не биха публикували FUD току-така. Цените са реални, разходите са правилно планирани. Ако наистина не искаш да поддържаш експертни специалисти на место, това ще струва много пари. И е някакси нормално. На пазарът има много малко фирми, специализиращи в OSS съпорт. Докато алтернативата има изградена мрежа от партньори и съпорт (което съответно увеличава конкуренцията за съпорт и намаля цените).

Прочетете и коментарите. Интересни неща може да се видят :).

И моля ви, да не започваме коментарна война. Ако има с какво да допринесете по темата – заповядайте. Ако ще се плюем – няма да стане.

[Slashdot]: http://slashdot.org “/.”

Theme: Overlay by Kaira Extra Text