Archive for the ‘Web development’ Category

Solution for TortoiseSVN + Samba shares permissions problem. "Can't move".

September 25th, 2008   

I had significant problems with commiting changes to svn repository for my Tangra Framework. Repository was at sourceforge.net. For ages I am using one and the same configuration and just recently I've started to have problems with commits.

Configuration:

Linux server with Debian/GNU linux + Apache + Samba (3.2.0.31-2) + PHP, etc.

Windows XP with Zend Studio, Dreamweaver, TortoiseSVN, etc.

Working copy of the framework is shared as Samba share. Yes, I know that this is not recommended but it is most convenient way -- I am able to edit files directly from my windows PC. 

After upgrade to TortoiseSVN 1.5.* all commits that added new files was showing error like:

"Commit succeeded but…"

"Error: "Error bumping revisions post-commit (details follow):"

"Error: "Can't move" (some files from .svn/props/ to .svn/prob-base/).

After above error I was unable to commit anymore -- svn was stating that I have to execute Clean Up, but when trying to do so -- clean up was failing. I had to delete whole dir that was failing, then to update parent dir in order to obtain clean working copy. That was working solution when just one dir was messed up but when I had multiple dirs with same problem -- I hade to checkout the entire trunk which tooked about 1hour (because sourcefourge svn is slow, project itself is not vary big.)

Solution:

(more…)

MySQL "Create table" to ADODB XML Schema (AXMLS) converter

September 23rd, 2008   

During the development of Tangra CMS installer I found that it is really annoying when you have to convert multiple tables from MySQL CREATE TABLE to Adodb's XML schema format by hand. I had to convert more than 20 tables and I decided to write simple converter that will automate this task. The result is MySQL "Create table" to ADODB XML Schema (AXMLS) converter

Generally speaking it takes something like:

CREATE TABLE `users` (
  `id` int(10) unsigned NOT NULL,
  `username` varchar(50) NOT NULL,
  `password` varchar(50) NOT NULL,
  `disabled` tinyint(3) unsigned NOT NULL default '0',
  PRIMARY KEY  (`id`),
  UNIQUE KEY `i_username` (`username`),
  KEY `i_check_login` (`username`,`password`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

as an input and as output generates: (more…)

Първи впечатления от Google Chrome -- прост и супер бърз

September 3rd, 2008   

Ето и накратко първите впечатления от Google Chrome:

Инсталация

Бърза и лесна, няма въпроси с повишена трудност. Лошото е, че автоматично разпознава настройките на Windows-а и превключва на езика, който намери в Regional Settings.

При инсталацията импортва отметките от FF. Интересното е, че поне при мен не импортна нищо от IE, а все пак уж този Chrome е с цел да смаже IE-то.

Интерфейс

Максимално опростен, няма дори Home и Стоп бутони. Баща ми, който е на 69 години ще го хареса.

Настройки (more…)

Линк за сваляне на новия броузер Google Chromе

September 2nd, 2008   

Не мога да разбера точната причина, но днес поне 4 човека ме питаха откъде съм си свалил Google Chrome. За тяхно разочарование им отговорих, че не съм. За всички, които чак пък с такова нетърпение очакват новия броузер -- сайта му ще е наличен на: http://www.google.com/chrome след 20 часа българско време днес (02.09.2008).

Аз лично, този броузер го очаквам със смесени чувства, най-вече, защото (more…)

Web дизайнери срещу програмисти. Сблъсъкът продължава.

July 31st, 2008   

Днес отново имах диспут с отнесен от вихъра web дизайнер, който се опитваше да ме убеди да съм му оставел 158 килобайтовия full page background, защото иначе се развалял целия дизайн. Опитах се да му обясня най-човешки, че такова животно като full page background е единствено подходящо за неговия личен сайт, където си представя дизайнерските умения. Опитах се и да му покажа, че ако сайта получи повече content ще се появи скролбар и няма абсолютно никакъв начин неговия bg да изглежда нормално в такъв случай. Наивно очаквах, че след експеримента със скролбара пича ще се усети, че е напаравил гаф и ще измисли нещо ново, но за съжаление, както ми се е случвало и преди с други такива като него, ми излезе със следните идиотски идеи: (more…)

Да напишеш насила captcha модул

July 11th, 2008   

В последните дни за занимавах да направя user registration модул за моя Tangra Framework for PHP. Както и се очакваше -- грандоманията в мен отново надделя и вместо на спретна набързо едно модулче с проста формичка за user details, аз се отплеснах и направих чудовищна форма с всички възможни полета за които се сетих, че е конфигурируема отгоре на това (т.е. може да се избере като се настройва сайта кои полета да се показват и кои да са задължителни).

Както и да е, направих регистрацията, админа и т.н. но в един момент покрай правенето на страница за "Resend activation email" е усетих, че злонамерени келеши могат да я използват за много успешна DOS атака. Налагаше се да сложа captcha.

Разрових се из интерсвинщината, (more…)

WordPress + Feedburner plugin = Проблеми. Решение.

July 1st, 2008   

flamocon_190h.gifПреди няколко дни реших да се регистрирам във Feedburner. Всичко вървеше нормално, следвах инструкциите, качих plugin-а, който feedburner-a ми препоръча (FeedBurner FeedSmith) и всичко "заспа". Уж.

Вчера забелязах, че други системи, които се опитват да четат RSS-feed-a нещо не показват новите ми постинги. В първия момент не се сетих от какво може да е -- много неща са ми наглавата тия дни и въобще не се сетих, че инсталирах plugin. Реших, че нещо са се набъгали или забавили и затова не са update-нати.

Днес обаче отново проверих и видях, че все още новите постинги не са се появили. Имах малко свободно време (докато обядвам) и се амбицирах да намеря къде е проблема. Оказа се, че feedburner plugin-а е нагло копеленце и е направил така, че освен feedburner bot-a, всички други, които се опитват да четата RSS feed-ada бъдат пренасочвани към http://feeds.feedburner.com/ognyan_bankov.

За щастие решението се оказа лесно:

(more…)

Нов release на Tangra framework -- 2.0.0dev5

June 27th, 2008   

Тази публикация беше преместена на ново място: Нов release на Tangra framework -- 2.0.0dev5

How to remove "Blog archive" from title in wordpress theme. Solution.

June 20th, 2008   

wordpress-logo.jpgIf you ended up here you are probably wondering how to remove annoyng "Blog archive" text from your blog post titles.

There are good news and bad news.

The bad news is that if you have blog registered at wordpress (i.e. username.wordpress.com) I can't help you.

The good news is that if you have installed wordpress package on your server or some hosting space -- removing "Blog archive" is quite easy.

FTP (or whatever method you use to upload files) to your server and go to directory wp-content/themes. Here you will fine directories for available themes. Enter the directory of your theme (probably "default/"). Here you will find a bunch of files. Open header.php for editing.

Find the line that is enclosed by <title></title> tags. On default theme that is line 7.

It looks like:

<title><?php bloginfo('name'); ?> <?php if ( is_single() ) { ?> » Blog Archive <?php } ?> <?php wp_title(); ?></title>

All you have to do is to remove "» Blog Archive" (without quotes).

Save your file. That's it.

PHP's $_SERVER['path_info'] does not work when there is a GET parameter. Simple solution.

March 30th, 2008   

logo-bug1.gifToday, during testing of a site for a client of mine I found that for some reason $_SERVER['PATH_INFO'] is not populated although there is path_info parameters in the requested URL. Initially I suspected that fault is in my Tangra Framework for PHP but after a quick phpinfo() I found that the problem is with the PHP itselft. Examples that describe the situation:

  • With requested URI http://test.myhost/index.php/_lang-en/ everything works as expected, i.e. $_SERVER['PATH_INFO'] contains /_lang-en/.
  • With requested URI http://test.myhost/index.php?someparam=1/_lang-en/ $_SERVER['PATH_INFO'] is not set at all. The problem is that when you have GET parameter(s) in your URI, PATH_INFO for some reason is not populated.

The solution: (more…)