БлогЪТ на Стан


Защо мразя Internet Explorer

Posted in Професионално by Стан on the August 22nd, 2006

За пореден ден Internet Explorer ми къса нервичките. Сега по някакви причини, необясними до момента, при зареждане на страничка посредством връзка ми изкарва празна страница. При преглед на кода се оказва, че и код няма. При F5 я зарежда. Ако същата страница я въведа директно в полето за адрес се извежда нормално. Всякакви кешове съм изключил и нищо.

Усещам как ще си изгубя още 5-6 часа в търсене защо Експлодера прави така.

Открих проблема и след като си поуспокоих нервите, реших да споделя (не за друго, ами после ще трябва да редактирам псувните в постинга).

Проблемът е, че Internet Explorer от време на време “изпадал в заблуждение” по отношение на кодирането на знаците на страницата, и трябвало да му се напомни. При PHP и UTF-8 кодиране на знаците проблема се решава със следното:

header("Content-type: text/html; charset=utf-8");

Data too long for column

Posted in Бази от данни by Стан on the August 21st, 2006

Твърде рано се зарадвах на новия MySQL. Веднага след инсталацията импортирах базите от данни от стария сървър, тествах няколко от приложенията си за които знам, че са с по-сложнички заявки, тествах дали данните на кирилица са се импортирали добре и останах доволен. Какво обаче се случи с един от проектите върху които работя…

След опит да се вмъкне текст в поле на кирилица, ако е над определени символи (доста под зададените при дефиницията на полето), MySQL ми връща грешка:

Data too long for column 'subject' at row 1

Мдаа… кофти работа. Набързо правя преглед на наборите от знаци:

SHOW VARIABLES LIKE 'char%';

Всичко ОК, и в phpMyAdmin, и от уеб приложението:

character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server utf8
character_set_system utf8

Преглеждам набързо наборите от знаци на базата от данни, на таблиците, на полетата - всичко ОК (utf8_general_ci).

Точно заради подобни мизерийки винаги си пускам по една заявка
SET NAMES 'utf8'

Реших, че явно проблема не е толкова тривиален потърсих в google:

http://bugs.mysql.com/bug.php?id=13139
http://bugs.mysql.com/bug.php?id=16209
http://bugs.mysql.com/bug.php?id=17872
http://bugs.mysql.com/bug.php?id=18908

Мда… още по-кофти е от колкото предполагах. Явно не съм сам. За съжаление твърде късно ми хрумна идеята да вкарам запис от phpMyAdmin-а. Стана. Явно проблема беше в моя телевизор.

Та започнах да си гледам телевизора, като беше ясно, че проблема е или в Модела или в Контролера (MVC Архитектура). Погледнах в Модела заявката, която се генерира - текста счупен. Погледнах в Контролера - там текста ок. Значи предава Контролера данните на Модела и той ги скапва.

След кратък анализ се оказа, че проблема е във htmlentities и по-специално факта, че не съм предал като трети параметър ‘UTF-8′. Интересното тук е, че никога не ми се е налагало да правя това, но сега това се оказа “препъни камъка” в цялата тази овертюра при търсенето на виновника.

Въпросът ще трябва да се проучи допълнително!

Ъпгрейд на MySQL и phpMyAdmin

Posted in Бази от данни by Стан on the August 19th, 2006

След като по разни причини не успях да отида до Враца с едната група ентусиасти (на палатки или в хотел) и не успях да отида на палатки (с велосипеди) край с. Бесарбово с другата група не по-малки ентусиасти, реших, че е крайно време да си обновя стария MySQL 4.1.11 до 5.0.24. Прехода мина изключително плавно.

mysqldump --opt --all-databases -uroot -p > server.sql

и после

mysql -uroot -p < server.sql

Отдавна не бях обновявал превода на phpMyAdmin а сега ми се отдава възможност благодарение на MySQL 5, да видя известно количество низове, които при 4-ката не се появяваха. Доста е трудно да се превеждат низовете на потребителски интерфейс на софтуер, без да го виждаш и без да знаеш в какъв контекст се използват съответните изрази.

Изтеглих си най-актуалния phpMyAdmin (2.8.2.2), последната версия на езиковия файл от CVS-а и започнах. Забелязах, че отново на разни места липсват низове, не знам каква е причината, но е гадно когато видиш поле за отметка без текст, особено при експортиране. Открих ги, добавих променливките от английската версия, попреведох някой друг низ, прегледах и старите неща които съм превеждал - винаги се намира по някое и друго низче което не звучи много ясно и еднозначно. Естествено появиха се и интересни термини за превод като “plugin” “приставка” - звучи добре.

Като се поосвободя, пак. Ако някой (надали някой ми чете бозите, но все пак) намери проблем при превода да свирка. Знам колко е дразнещо, когато при интрфейс на български нещо не е преведено добре.

OpenFest 2006 - Русе

Posted in Отворен код by Стан on the August 18th, 2006

Има вероятност и тази година в Русе да се проведе празникът на свободното споделяне на знания OpenFest. Миналата година всичко мина много добре, с изключение на това, че залата, която беше за около 70 човека се препълни за около 20 минути и за началото на конференцията нямаше места дори за правостоящи. Според информация от медиите е имало над 100 човека. Тази година трябва да се уреди по-голяма зала. По мое мнение са малко конферентните зали в Русе за над 120 човека и най-вероятно ще трябва да за ползва АУЛА 1 на Русенския Университет. Дано всичко с организацията да мине добре :)

JavaScript грешка “is not a function”

Posted in JavaScript by Стан on the August 17th, 2006

Винаги съм се вбесявал адски много от безполезните и объркващи съобщения за грешки. Точно днес се сблъсках с поредното.

Ето малко код относно ситуацията (JavaScript-ът далеч от съвършен):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
<head>
<title>JavaScript грешка "is not a function"</title>
<script type="text/javascript">
function checkAll(obj)
{
var checkBoxes = document.getElementsByTagName('input');
for (i = 0; i < checkBoxes.length; i++)
{
if (obj.checked == true)
{
checkBoxes[i].checked = true;
}
else
{
checkBoxes[i].checked = false;
}
}
}
</script>
</script></head>
<body id="page">
<form name="f" method="post" action="#">
<input type="checkbox" name="checkAll" value="yes" onclick="checkAll(this)"/> <br />
<input type="checkbox" name="checkMessage1" value="1"/> <br />
<input type="checkbox" name="checkMessage2" value="2"/> <br />
<input type="checkbox" name="checkMessage3" value="3"/> <br />
</form>
</body>
</html>

Имаме 4 полета за отметка (checkbox), като първото служи за избор или за отмяна на избора на всички. Проблемът се появява, когато функцията, която трябва да извърши това при щракване на най-горното поле за отметка има същото име като някое от полетата на формуляра (стойността на атрибута name).

При това положение:

Firefox - checkAll is not a function

Internet Explorer - Object doesn’t support this property or method

Opera е доста по словоохотлива, но също толкова безполезна:
Event thread: click
Error:
name: TypeError
message: Statement on line 1: The Object does not implement [[Call]]
Backtrace:
Line 1 of script
checkAll(this);
At unknown location
[statement source code not available]

Решението е функцията, която обработва събитието onClick да се именува по друг начин, примерно selectAll

P.S. Ако някой знае как да си оцветявам HTML/CSS/JS кода в WordPress да свирка, че така не е много красIF.

Обслужване… в Приморско

Posted in Лично by Стан on the August 9th, 2006

Ще ми се да разкажа една случка за Приморско. Става дума за злощастното посещение от страна на 4-ма летуващи на заведение на самия център на града.

По случай 1300 години България с Указ №2190 от 16.10.1981 година на Държавния съвет на НРБ, село Приморско е обявен за град.

Името на заведението не запомних, само ще кажа, че в дясно от него беше едно друго барче с плакат на Кабелна телевизия “СКАТ”. Та след дълго търсене на място в заведенията с добра кухня и/или обслужване (”Кума Лиса” - супер обслужване, и “Кавака” - супер скара), видяхме едно заведенийце, което изглеждаше прилично. Имаше 1-2 свободни маси а на нас ни беше писнало да обикаляме и решихме да седнем там. Разположихме се, сервитьорката дойде сравнително бързо с менютата. Оказа се, че това е първото заведение в което приготвят пържена цаца - невероятно но факт - в заведение по Черноморието да няма цаца. Избрахме си какво ще хапваме и какви бири ще пием. Оказа се, че няма BECKS и Загорка, но за сметка на това се предлага локалното пиво - Бургаско. Поръчахме 3 Каменици и 1 Шуменско. Бяхме приятно изненадани, когато бирите пристигнаха почти веднага. Но… приятните изненади свършиха до тук.

Цаците се позабавиха доста, но все пак дойдоха. Аз лично съм на мнение, че където и да си винаги трябва да опиташ локалните специалитети, а на морето това са морските деликатеси. Този път обаче бях крайно (даже по скоро безкрайно) разочарован от качеството на цацата(ако това което получихме в чинийките може да се нарече цаца) в това заведение. Освен, че беше препържена имаше ужасен вкус. Такова нещо не бях ял никога. Тук мисля, че е уместно да се спомене, че на масата нямаше салфетки, нито оливерник, нито лимонов сок (цацата беше без лимонче), нито сервитьорката се сети да ни донесе. Важно е да се спомене, че и прибори не ни донесоха. След кратка дегустация с Митко установихме, че е нужно огромно количество лимонов сок за да се претъпи поне малко “вкуса” на цацата. След кратко оглеждане за сервитьорката и опити културно да я извикаме, решихме да се самообслужим.

Сервитьорките в това заведение трябва много да са обичали обувките си. До този извод стигнах, след като през цялото време не отделяха поглед от тях. Изключено беше да ги повикаш по културен начин.

Съвсем дискретно се огледахме за лимонов сок на масите около нас и бързо съзряхме скъпоценната(и животоспасяваща) жълта бутилка на една от тях. Митко беше нашият пратеник на добра воля. Рибата плувна в лимонов сок. Спомнихме си за прекрасните мигове с цацата от “Митака” (рок клуб в Русе), която беше доста класи над бълвоча, който се опитах да ям. Спомнихме си небезизвестната идеология “Пениш се не пениш, ще те ям. Пари съм давал за теб”. Митко издържа. Аз не.

Но да не издребняваме чак толкова. Мина повече половин час а още нямаше помен от дробчетата и сърчицата, които бяхме поръчали. Е, и те дойдоха. Не дойдоха обаче приборите, не дойде и оливерника. След като учтиво помолихме сервитьорката за прибори, и те дойдоха. Тук обаче явно под прибори разбират само вилици. Аз пък бях останал с впечатлението, че когато си поръчваш дробчета и сърчица поне едно ножче трябва да има - че да не си разчекваш устата или да не късаш със зъби неопечените дреболии(такива бяха - честно, за сметка на това горе споменатата цаца беше препържена - явно тук държат много на баланса) .

Помолихме и за нож - 2 пъти - вербално. Ясно беше, че с поглед, дискретно повдигане на показалеца или мятане на ръка няма да стане нищо (спомнете си лирическото отклонение за обувките по-горе). Междувременно Гюнай помоли Дидка за вилицата й, за да я използва като нож, докато сервитьорката донесе (или докато съмне - което е по-вероятното).
Интересното тук беше, че дойде точно това което поръчахме “нож”. Грешката до известна степен беше наша, трябваше по-рано да се досетим и да поръчаме “ножове”. Но така или иначе Гюнай си беше нарязал дробчетата с вилица а и не ни се чакаше още половин час за “допълнителен” нож. Съществено е да се припомни за липсата на салфетки на масата а също така и да се добави, че тези които бяха донесени с вилиците бяха всъщност 1/4 салфетки.

Няма да споменавам, колко бързо след като приключихме си тръгнахме. Обсъждането на бакшиш сметнахме за богохулство или най-малко за неуместно.

Накрая, за да не остане читателят с лоши чувства, ще спомена, че има две прекрасни заведения, които споменах по-горе - “Кума Лиса” и “Кавака”. “Кума Лиса” има прекрасно обслужване и храната не е лоша. На “Кавака” пък скарата е превъзходна а обслужването на ниво.