Skip navigation.

Двойная Радость

Double Joy

Posts tagged with "программирование"

быстрое. программистское.

,

до того уже замарался программить, что о неверной рекурсии догадался не из програмного кода, а из лога Apache.

[Wed Sep 26 18:24:06 2007] [notice] child pid 27046 exit signal Segmentation fault (11)
[Wed Sep 26 18:24:06 2007] [notice] child pid 27937 exit signal Segmentation fault (11)
[Wed Sep 26 18:24:06 2007] [notice] child pid 28673 exit signal Segmentation fault (11)
[Wed Sep 26 18:24:06 2007] [notice] child pid 28900 exit signal Segmentation fault (11)
[Wed Sep 26 18:33:08 2007] [notice] child pid 27307 exit signal Segmentation fault (11)
[Wed Sep 26 18:33:08 2007] [notice] child pid 27696 exit signal Segmentation fault (11)
[Wed Sep 26 18:33:08 2007] [notice] child pid 28482 exit signal Segmentation fault (11)
[Wed Sep 26 18:33:08 2007] [notice] child pid 28672 exit signal Segmentation fault (11)
[Wed Sep 26 18:33:08 2007] [notice] child pid 30130 exit signal Segmentation fault (11)

лечиться уже походу поздно :frown:

С хардкодингом по жизни

, ,

вообще, в детстве я хотел стать футболистом - благо отец кой-чего достиг в футболе и у мя всегда был отличный пример для подражания. наверное, даже правильней будет сказать, что в детстве я бредил футболом: мало того что до посинения играл в него, так еще и собирал всякую аттрибутику связанную с ним: наклейки, постеры, журналы, газеты, значки, да еще и постоянно прикипал к телевизору как только там появлялся футбол. замечу, что я рос в славные времена для всего украинского, и особенно киевского, футбола. лиги чемпионов сначала 94/95 и 3:2 со Спартаком и даже 1:4 с Баварией (первый гол Шевченко в ЛЧ), потом 95/96 и славный подкуп шубами, 97/98 и великие 3:0 и 4:0 с Барселоной, 98/99 и несправедливые 3:3 в Киве с Баварией в полуфинале. все эти события записаны в отдельной ячейки моей футбольной памяти. и все вышеперечисленное только усиливало мою заинтересованность в футболе. но футбол был не заинтересован во мне. и после одной единственной разбитой брови после турнира в Славутиче в 99м родители поставили на моей карьере крест.

конечно, какое-то время я очень сильно жалел из-за этого. мне казалось, что это несправедливо и вообще так не может быть - ведь я так надежно стоял в воротах, совершал такие сейвы, брал такие пенальти, меня так хвалили в районных баталиях. ну и прочее тд, тп. были банальные сопли.

все перевернулось после того, как я прикипел к компьютеру. времена ж были давние и такого широкого распростронения, как сейчас, компьютеры не имели. посему первое знакомство с ними происходило не в стенах родного дома, а в стенах компьютерного класса 303 школы - а там Warcraft II, Quake II, FIFA 99. первые легенды гейм-индустрии для меня. это потом были компьютерные клубы и Midtown Madness, Midtown Madness II, Counter-Strike, Half-Life, Quake III, FIFA 2000-02, Roller Coaster. денег было выкинуто в это развлечение с головой. главное вообщем то, что в первый мой этап знакомства с компьютером меня интересовали только игры - никаких интернетов, чатов, веб-сайтов, порнухи и тд. это было не интересно, намного интересней было пасовать школу, проходя очередной сезон в Фифе или мочась на очередной карте в Контру.

следующим витком стало приобритение компьютера, который до сих пор, уже 6 лет, верой и правдой служит мне. комплектация по последнему писку прогресса на май 2001: пень 3ий 800, 128 оперативы, 32 видео. радости было хоть отбавляй. а так как ФК ДК с каждым следующим сезоном показывало результаты все хуже и хуже у меня стало появлятся все больше и больше времени для юзанья компа. сначало было стандартно: игры, в которые играл по клубам, начали появлятся на жестком диске и начиналось ихнее прохождение. потом это начинало надоедать и начал возникать новый вопрос: а что же делать то за компьютером?

и мне почему-то захотелось создавать веб-сайты. интересно то, что я особо и не был дружен с интернетом, не висел в нем, так пару раз заходил, да и модем (ИнтерналМодем на Моторолле) смог настроить только через год после покупки компа. а тут такое. начиналось все с самоучителя электронного фронт-пейдж. потом были книги по ХТМЛ 4, ДжаваСкрипт 1.3 - книги отстойные по всем параметрам и которые просто кишили ошибками и неточностями. но я не сдавался, и быстро отбросив фронт-пейдж начал делать сайты в хтмл-редакторе.

путем проб и ошибок я понял, что мне надо будет выучить пхп и уже следующим летом я по полной кинулся в его изучение. первым моим сайтом на пхп стал неформат (после полугода учения пхп). а до того я уже создал и скинхейт.нм.ру и сайт для своего класса (на нативном хтмл :smile: ). то был 2004ый год.

сейчас прошло три года. за эти три года изменилось куча всего у нас в стране даже успела произойти революция, а сама страна успела сыграть на чм, что же касается меня, то я все как прежде пишу на пхп и что самое интересное, большинство кода пишу просто в удовольствие, просто ради процесса писать. а потом беру этот код и удаляю или он сам по себе удаляется, ибо сайт под который он написан уходит в утиль :smile: а я потом опять пишу и пишу. и хоть сам приемлю понятие абстракности и полного полиморфизма с инкапсуляцией, никак не могу эти понятия на сто процентов реализовать в своем коде. и вот выходит, что писал пол-лета движок для КМС с абстрактными типами данных и системой управления версиями этих данных, а сейчас вынужден хардкодить практически аналогичный движок, но без кучи тех фичерсов, который изначально в него должны были входить.

вообщем, как итог, хотел стать футболистом - а стал пхп-программистом. вот такой лайфхистори.

А вот это уже интересно :)

,

После появления PyQt ни минуты не сомневался в том, что рано или поздно меня порадуют и PHP-Qt. Так и случилось :smile: И ведь вы понимаете, что это намного интересней, чем деревянный и до сих пор не юзабильный PHP-GTK. Так что следим за развитием ситуации!

What is PHP-Qt?

PHP-Qt is an extension for PHP5 that aims to write software with the Qt Toolkit. It provides an object-oriented interface to the Qt4 Framework and allows to write Qt applications in the PHP language.

Qt is a class library with an elegant object-oriented API plus a set of tools for cross-platform development and internationalization.

The class library offers functionality for GUI, networking, XML processing, unicode, database access, image processing including SVG, 3D etc.

Additionally Qt includes the Qt Designer for rapid GUI development, the Qt Linguist for internationalization, and the Qt Assistant, a customizable, redistributable help file/documentation browser.

It is available for Linux, Apple, Unix, Windows and even on cell phones.

PHP-Qt site

почему нет поиска по записям в Google Reader?

, , ,

решил малость оптимизировать чтение новостных лент, в основном с новыми музыкальными релизами, и посему переместил их в сеть... выбирал между новой бетой Bloglines и Google Reader, выбрал второй, который мне показался более свежим...

наступила ночь и я задался вполне резонным, как по мне, вопросом: а почему это на Google Reader нет встроенного поиска по записям фидов и как сие можно понять и охарактерезировать? в Google Mail поиск присутствует, не говоря там о всяких Google News, Maps и даже, внимание, Blogsearch...

так что же, все-таки помешало инженерам Гугл включить возможность поиска в релиз Ридера? или это они специально оставили возможность для маневра перед запуском финальной версии? эх, монополисты...

пару слов об украинских веб-программистах: проект tuse.com.ua - часть номер раз.

, , , ...

у матерых индийских аутсорсингеров появляется серьезный конкурент в праве попадать в программистские анекдоты, байки и басни... как ни прискорбно - но этими персонажами являются украинские веб-программисты, ибо такого количества багов на отечественных "мега" веб-проектах в мире надо еще поискать...

проект, номер раз, про который пойдет сегодня речь - развлекательная молодежная среда тусе.ком.уа (или Мое Тусэ понад усэ), главной фишкой которой являются обмен сообщениями в онлайне (аля айсикью) и поддержка собственной фотогалереи... как говорят, мои знакомые делал его студент КПИ... что ж если это был первый блин - то он вышел огромным комом...

почему? ну что ж тогда по пунктам...
1. Страница входа на Тусе... Непонятная желтая окантовка у кнопки войти и почему-то выделенная бледным серым цветом активная возможность "Запомнить меня" сразу наводят на мысль о, мягко сказать, неадекватности веб-программистов... нажатие клавишесочетания ктрл+ф3 только приумножает эту мысль... нет, я понимаю что при помощи таблиц удобней выстраивать элементы по странице, но использовать табличную верстку на этой странице - это кощунство... здесь же вообще нет ничего табличного...

и, ах да... ссылки Сделать стартовой и Добавить в избранное, как всегда в .УА, кликабельны только в Осле... других браузеров пока, наверное, еще не выпустили, как жаль...

2. А теперь перейду к собственно главному багу на сегодня для Тусэ... это невозможность юзания клавишесочетания ктрл+энтер в браузерах отличных от Осла и Геко-ядра... и это на сервисе у которого мнгновенные сообщения - главная фишка... почему это клавишесочетание не работает? да ведь потому что, код написан корявыми руками отечественных веб-программистов...

итак, ктрл+ф3 дает нам следующий убийственный фрагмент:
function BODY_onkeypress(e)
{
    var pressed=0;
var we=null;

if (window.event) we=window.event;
else if(parent && parent.event) we = parent.event;

if (we) {       // IE
pressed=we.keyCode==10;
} else if(e) {  // NN
pressed = 
(e.which==10 && e.modifiers==2) || // NN4
(e.keyCode==0 && e.charCode==106 && e.ctrlKey) ||
(e.keyCode==13 && e.ctrlKey) // Mozilla
}

if (pressed) { 

if (trimAll(document.message.msg.value).length == 0) { 
alert('Введи текст сообщения!'); 
return false; 
} else {
document.forms[0].submit();
}
}
}

document.onkeypress = BODY_onkeypress;
if (parent) parent.document.onkeypress = BODY_onkeypress;

каков разгул фантазии у товарищей программистов? да? то-то же ))) они вместо четырех строчек кода потратили на проверку условия нажатия ктрл+энтер 11 строк кода и ничего не добились... ибо код скопипащен из какого-то другого источника и в нем совершенно никто не разбирался, после того, как в уважаемом всеми Осле он успешно заработал... то, что в стране юзают и другие браузеры - никого не ебет, аудитория не пострадает, сайт тоже, рнб и дальше будет в фаворе...

а говно все в том, что работающая версия кроссбраузерного сабмиттинга по клавишесочетанию пишется считанные минуты при помощи Гугла (у меня ДжаваСкрипт забрал минут 5 не более)... и как результат везде работает и все довольны...

не верите? проверяйте:
<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html dir="ltr" lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">

<head>
    <title>Crossbrowser Ctrl+Enter</title>

    <meta http-equiv="Content-Language" content="ru" />
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

    <meta name="Robots" content="noindex, nofollow" />

    <meta name="Author" content="Igor Davydenko" />
    <meta name="Reply-To" content="info@wemakesites.org" />
    <meta name="License" content="Licensed under the GNU GPL v.2.1 or later" />
    <meta name="Copyleft" content="All rights are copylefted" />

    <script type="text/javascript">
    <!--
        function validSubmit(form) {
            if (typeof(form) == 'undefined' || !form) return;

            var text = form.text.value;
            return (text.length > 0);
        }

        window.onload = function() {
            var form = document.getElementsByTagName('form')[0];
            form.text.focus();

            form.onsubmit = function() {
                if (!validSubmit(this)) {
                    window.alert('Please, fill messages text');
                    this.text.focus();
                    return false;
                }
                else {
                    window.alert('Message sended');
                    return true;
                }
            }
        

            form.onkeypress = function(event) {
                event = (event) ? event : window.event;

                if ((event.keyCode == 13 || event.keyCode == 10) && event.ctrlKey == true) {
                    var inputs = this.getElementsByTagName('input');
                    var submit = null;
                    
                    for (i in inputs) {
                        if (inputs[i].type.toLowerCase() == 'submit') {
                            submit = inputs[i];
                            break;
                        }
                    }
                
                    if (submit) {
                        submit.click();
                    }
                    else {
                        this.submit();
                    }
                }
            }
        }
    -->
    </script>

    <style type="text/css">
    <!--
        body {
            background-color: #fff;
        }

        body, input, select, textarea {
            font-family: 'Georgia', serif;
            font-size: 16pt;
            color: #000;
        }

        form {
            position: absolute;
            width: 50%;
            left: 50%;
            margin-left: -25%;
            border: 1px solid #c0cfe8;
        }

        form fieldset {
            width: 100%;
            margin: 0;
            padding: 0;
            border: 0 none transparent;
        }

        form fieldset legend {
            display: block;
            width: inherit;
            padding: 0.2em 0;
            background-color: #eaeef6;
            border-bottom: 1px solid #c0cfe8;
            text-indent: 2em;
            font-size: 18pt;
            font-weight: bold;
        }

        form fieldset p {
            padding: 0 1em;
            text-align: center;
        }

        form fieldset input, form fieldset select, form fieldset textarea {
            width: 100%;
        }

        form fieldset label {
            display: block;
            text-align: left;
            text-indent: 1em;
        }

        form fieldset label:hover {
            text-decoration: underline;
            cursor: pointer;
        }

        form fieldset br {
            display: none;
        }

        .Bold {
            font-weight: bold;
        }
    -->
    </style>
</head>

<body>

    <form action="temp.html" method="post">
        <fieldset>
            <legend>Send message</legend>

            <p>
                <label for="MTo" class="Bold">Choose recipient:</label><br />
                <select name="to" id="MTo" tabindex="1">
                    <option value="friend">Friend</option>
                    <option value="enemy">Enemy</option>
                    <option disabled="disabled">———</option>
                    <option value="father">Father</option>
                    <option value="mother">Mother</option>
                    <option value="brother">Brother</option>
                    <option value="sister">Sister</option>
                </select>
            </p>

            <p>
                <label for="MText" class="Bold">Enter text:</label><br />
                <textarea name="text" cols="20" rows="10" id="MText" tabindex="2"></textarea>
            </p>

            <p>
                <input type="submit" value="Send (Ctrl+Enter)" tabindex="3" />
            </p>
        </fieldset>
    </form>

</body>

</html>


и ведь это только начало... на Тусе еще много всяких жуков, о которых я обязательно вам расскажу чуток попозже, как только их буду "обезвреживать"...

посвящается и товарищам верстальщикам тоже :)

,


дополнения нужны?



если да, то как пройти мимо википедии?





комиксы от xkcd. наслаждайтесь :smile:

PHP против RoR, кто сильнее?

, ,

часто в последнее время натыкаюсь в интернете на постоянные разборки на тему "Когда умрет ПХП", "РоР - это наше спасение", "Питон - все просто и круто", хотя главный акцент в них ставится именно на вторую фразу... вот на нее я и дам свой корткий ответ или почему РоР - это не мое спасение...

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

во-вторых, всех ярых сторонников РоРа хочу спросить: чем вас не устраивает пятый ПХП с кучей фреймворков на его основе (ЗЕНД, Прадо, Симфони и тд, и тп...) MVC модели не хватает? или с базой данных работать сложно? или может сложно подключать?

в-третьих, да у ПХП есть много недочетов (основной из них, как по мне, это размытое определение типов, плюс невозможность создания своих типов данных, но и тут можно более менее спокойно жить за счет новой объектной модели пятого ПХП), но кто сказал, что ИХ НЕТ В РОР?

в-четвертых, ПХП не безопасен? может это не безопасен код, который был написан "быдлокодерами" в погоне за быстрыми манями (я молчу о любом движке форума на пхп и не говорю о популярных Мамбах и Джумлах, тихий ужас), это да... но профессиональные продукты на ПХП встречаются совсем не в единичных экземплярах... и заметьте даже написанные на 4ке (одна Смарти чего стоит)...

в-пятых, быстрота выполнения и тд, и тп... это вообще безсмыслено аргументировать, потому что ПХП - это интерпретирующийся язык... как лыжи намажешь, так они по снегу и будут идти... так что прежде чем поругать здесь ПХП - посмотрите на то, как вы его настроили...

в-шестых, и в главных... не надо никому ничего навязывать, да? вам удобней так... без проблем, мне удобней на ПХП... так что, удачи...

Самое главное в использовании связки UTF-8 + HTML + DOMDocument в PHP

,

это использование функции mb_convert_encoding в контексте:
$content = mb_convert_encoding($content, 'html-entities', 'utf-8');

перед непосредственной загрузкой HTML документа в класс или объект DOMDocument:
$dom = DOMDocument::loadHTML($content);

$dom -> loadHTML($content);


иначе убивается вся радость от юзанья юникода и в объекте DOMDocument правильно отображаются только одно-байтные символы, все же другие отображаются такими ненавистными крюкозябрами...

и в завершение верстальных/программистких разговоров

, ,

если кто-то думает, что валидность достичь в большом проекте нереально или она там будет совершенно не нужна я ничего не отвечу. ведь ответ очевиден: чем больше документ СТАНДАРТИЗИРОВАН тем более одинаково он выглядит в любом источнике отображения.

так что...
Neformat.com.ua - старая версия = This page is not Valid HTML 4.0 Transitional! (180 errors)
Neformat.com.ua - новая версия = This Page Is Valid XHTML 1.0 Strict!

даже точнее сказать, что новая версия полностью валидна и с XHTML 1.1 доктайпом, но я решил все же юзать 1.0 версию XHTML. конечно, в дальнейшем верстку засрут великие программисты неформата, но пока она еще красивая.

Пару слов о верстальщиках поисковых систем

выводы делайте сами...

Google - This page is not Valid (no Doctype found)! (64 errors)
Yahoo - This page is not Valid HTML 4.01 Strict! (282 errors)
MSN Live Search - This page is not Valid XHTML 1.0 Strict! (62 errors)
Ask.com - This page is not Valid HTML 4.01 Transitional! (69 errors)
Quintura - This page is not Valid HTML 4.01 Transitional! (25 errors)
Technorati - This Page Is Valid XHTML 1.0 Strict!
Яndex - This page is not Valid (no Doctype found)! (83 errors)
Rambler - This page is not Valid HTML 4.0 Transitional! (201 errors)
Aport - This page is not Valid (no Doctype found)! (363 errors)
Вебальта - This Page Is Valid XHTML 1.0 Transitional!
Nigma - This page is not Valid (no Doctype found)! (48 errors)
<META> - This page is not Valid HTML 4.0 Transitional! (180 errors)
bigmir)net - This page is not Valid HTML 4.01 Transitional! (305 errors)
I.ua - This page is not Valid XHTML 1.0 Transitional! (49 errors)
online :wink: ua - This page is not Valid (no Doctype found)! (139 errors)

но очевидно одно... валидность - дело нужное... хотя бы для тех же поисковых систем... и для отделения от шелухи именно поисковых запросов...