О чудесах

    Время от времени каждый из нас может вспомнить ситуации, когда ну вот всё правильно делаешь, а система «чудит». Бьешься, пытаешься найти проблему, уже и консиллиум вокруг себя собрал — никто не может понять, в чем дело, а потом проходит какое время и наступает озарение. И понимаешь, что сглупил, что вот она, ошибка. На поверхности лежала. Потом такие байки можно в профессиональной тусовке рассказывать.


    Маленький оффтопик с программерской тематики на жизненную. Лет семь назад со мной в Турции, в отеле, произошла забавная ситуация. Мне понадобилось зачем-то погладить там футболку и я пытался сформулировать глубокую мысль на английском, ну как мог. На ресепшене его тоже знали не очень, они пытались меня понять.

    — Ту а’йрон, ай ниид ту айрон, — говорю я девушке. To iron. To — iron. White t-shirt. To iron. Она машет головой: «Ок, ок, мистер!». Спросила, буду ли я в комнате у себя. Да, отвечаю, где ж мне еще быть-то с утюгом.

    Сижу в комнате. Тут стук в дверь, открываю ее и чуть не грохаюсь на пол. На меня смотрит турецкий мужчина и ничего не понимает. В руках держит поднос, на котором два айрана.

    Вот такие ситуации иногда происходят и с компами, и в программировании, и в администрировании. Началось все с чужой истории про почту, которая не ходила дальше 500 миль. Я опубликовал ее на ЖЖ еще в 2003 году, так на нее до сих пор посещение заметное. Видимо, трогает тема людей, да.

    На домашнем ноуте (macbook) у меня вдруг заклинило мышь. Двигаешь курсор мыши, а он с собой окошки утаскивает. Перегружаю комп (это уже не просто сделать было без мыши), секунд пять работает как надо, а потом опять такая же фигня. Вот ни с того, ни с сего же. Работала ведь минуту назад! Ничего не ставил и не записывал на диск, не изменял. Просто на пустом месте рраз! — и не работает. И ведь даже сделать ничего нельзя, мышь не работает, с клавиатуры толку мало на макоси. За пять секунд в начале, конечно, ничего не успеваешь. Я сломал всю голову, что бы это могло быть.

    И тут я перешел на кухню. Тачпад заработал. Сам собой. Уфф, подумал я, чудеса случаются, но все, проблема в прошлом, и вернулся к разбору почты.

    Вечером я вернулся обратно в комнату с ноутом. Ну ёлки палки, опять. Кое-где проступил мат.

    Пришла мысль вернуться на кухню. Я ее отогнал, потому что это бред. Но она не отступала. Вернулся. Ура курсорчик задвигался!!! Вернулся в комнату — опять заблокирован.

    Я уже подумал о дозиметре, ей богу.

    Сел и стал думать. И понял.

    Вы будете смеяться. Дети игрушками прижали кнопку блютусной мыши в углу комнаты, о которой я уже вообще забыл — как-то тачпадом было удобнее. До кухни блютус уже не добивал.
    Так вот, всё это есть вступление к теме сегодняшней заметки. Тема будет про сайт. Вот не поверите, я вспомнил и о мыши, о об айране, когда вчера вечером пытался понять, what the fuck.

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

    Сайт работает на базе RewriteEngine — это такая технология от Apache, позволяющая, в частности, преобразовывать адреса вида /folder1/folder2/ в что-то типа /script.php?param=/folder1/folder2. У меня было настроено так, что не преобразовывает она только в одном случае — если ресурс, на который указывает путь, действительно существует. Это позволяет обращаться к картинкам, например, /img/picture.png и этот путь не будет «скормлен» скрипту script.php. Потому что там стоит специальная строчечка.
    Давайте я все-таки полное содержание .htaccess приведу:

    RewriteEngine on
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /script.php?param=$1 [L,QSA]

    В script.php у меня есть условие, типа следующего,

    clearlog();
    $param = $_REQUEST['param'];
    if ($param == "/folder1/folder2/")
    {
    // BLOCK A : process folder1 - folder2
    writelog ('1');
    } else
    {
    // BLOCK B :
    writelog ('2');
    }

    И тут я вижу, что при ОДНОМ обращении в браузер, в лог пишется ДВЕ строки. Двоечка и единичка.

    Я протер глаза. Попробовал еще раз. Стер лог-файл. Вписал в браузер в режиме «инкогнито» вызов, открыл инструментарий разработчика, проверил, что запрос один. ТО ЖЕ САМОЕ. В логе две строки. 2 и 1. Жаль, нет доступа к access-логам, посмотрел бы еще там. Но его нет.

    Хорошо, подумал я, это проблема хостинга. Там, наверное, неправильно обрабатывают запросы. У них уровнем выше есть .htaccess уровня сервера и там тоже есть правила. Наверное, обрабатываются два раза. И написал им заявку.

    Вместе с хостингом мы убедились, что:

    1. если стереть .htaccess или убрать оттуда RewriteEngine, — все работает,
    2. если воспользоваться Firefox — все работает,
    3. один хром у хостера тоже не выдал проблемы.

    Ребята из хостинга возились три часа. В итоге прислали письмо:

    Здравствуйте, Рауф.

    Проблема, связанная с повторным исполнением скрипта, вызвана исключительно самим
    браузером "Chrome" и не как не связанна с файлом ~/public_html/.htaccess.

    Мы проверили Ваш скрипт на другой площадке, где в каталоге выше нет .htaccess.
    Тоже самое возникает и там. Причем повторная строка возникает, если
    открывать страницу через "Chrome". Например, если открыть страницу через
    "FireFox", то подобной проблемы нет.


    Это письмо я получил дома, в шесть утра. Пока ехал на работу, я понял, в чем проблема. Но стоило еще все проверить.

    Как я и ожидал, дело оказалось в favicon.ico. Браузер посылает запрос на этот файл параллельно с запросом на скрипт. Google Chrome это делает с каждым запросом. Firefox, наверное, однажды получив вместо иконки кусок моего HTML из скрипта, понял, что что-то не так и больше не обращался. А Chrome настойчив — он дергает этот файл. Это и по логам оказалось так. А файла favicon.ico, конечно, на сайте не было. И тут срабатывало правило — надо его перенаправлять на скрипт, /script.php?param=favicon.ico Внутри логика шла по другому пути, и запись в лог срабатывала, а все отладочные echo выводились только для второго запроса.

    Кстати, для прототипа сервиса my.wordrive.com меня порадовала задача написания функции перевода из десятичной в 62-ричную систему и обратно. Ведь появляются же такие задачи!.. И ведь без нее никак.

    Вот за это я люблю программирование.
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 97

      0
      • UFO just landed and posted this here
          +14
          http://wordrive.com/~59
          Способ оформления ссылки, чтобы занимала меньше места и несла информацию о номере фразы. Чем выше основа системы счисления, тем меньше знаков нужно для выражения айдишника. 59 в 62-ричной системе — 319. 1 000 000 — это «4c92» в 62-ричной. То есть на много миллионов хватит четырех знаков. Конечно, дополнительно еще можно несложно шифровать, у меня пока этого нет за ненадобностью.
          • UFO just landed and posted this here
              +4
              Используйте лушче 64-ричную. Можно получить путем base64 преобразования, и последующей замены «+» и «/» на «-» и «_».
                +10
                59 в 62-ричной системе — 319

                Как!? Как такое может быть!?!?
                  +1
                  автор не совсем очевидно выразился (из-за того, что сначала с 59 в одну сторону, а с 4c92 в другую). так понятно:
                  319=62*5+9, то есть 59 в 62ричной
                    0
                    Мистика, уведомление об ответе на пришло, поэтому отвечаю с опозданием. Да, теперь понятно. Так действительно может быть :)
                +13
                26 букв английского алфавита + 26 заглавных букв + 10 символов цифр = 62. С этим можно встретиться например в сервисах: tinyurl, bit.ly, t.co.
                • UFO just landed and posted this here
                    0
                    вопрос — зачем? почему именно 64 должно быть?:)
                      +1
                      64 — это 2 в 6 степени. И если символов будет 64, то самое простое преобразование будет выглядеть как «разрезание» исходных данных на порции по 6 бит.
                +24
                Сплошь и рядом подобные чудеса.
                Изменения в коде никак не хотели отображаться в админке. Часа два искал где косяк…
                (00:34:03) Neutral: кто додумался кроме папки admin сделать папку admingo?
                (00:34:23) xxx: не кроме, она вместо
                (00:34:31) Neutral: я оценил юмор
                (00:34:33) xxx: odmingo к томуже
                (00:34:39) Neutral: да, прости
                (00:34:45) xxx: Эт антидолбоеб
                (00:34:48) xxx: ломали часто раньше
                (00:35:00) xxx: верней брутфорсили
                (00:35:11) xxx: щас не актуально уже
                (00:35:11) Neutral: антидолбоеб говоришь?
                  +2
                  а потому что деплоить надо не копированием, а rsyncом
                  +1
                  Недавно: не сохранялась сессия, вот хоть убейте.
                  В PHP5 и поздних версиях 4-ки есть 5-й параметр set_cookie, а в ранних четверках его нет и функция просто не работает, без всяких ошибок…
                  А уж на что я только не грешил:)
                    +2
                    Вчера обнаружил, что если запустить нижеследующий скрипт в Фаерфоксе или Хроме в двух вкладках последовательно, то первая вкладка замирает на цикле(как и необходимо), а вторая висит в ожидании пока отработает первая и только потом начинает работать(хотя ожидается от неё другое действие).
                    В Сафари всё работает правильно. В 2 разных браузерах работает правильно. Если в 1-й вкладке дописать в адресную строку например ?a=1, а во второй ?a=2, то тоже отрабатывает правильно.

                    Где подвох до сих пор не понял… Предполагаю, что ФФ и Хром видя что страницы имеют одинаковый адрес пытаются прогрузить первую вкладку и потом используя кэш открыть 2-ю.
                    define('ROOT_PATH', dirname(__FILE__));
                    
                    echo 'start <br />';
                    
                    if(file_exists(ROOT_PATH . '/!!lock.txt')) {
                        echo 'script locked<br />';
                    
                        $i = 0;
                        while(file_exists(ROOT_PATH . '/!all_Ok_'.++$i.'.txt')) {}
                    
                        fclose(fopen(ROOT_PATH . '/!all_Ok_'.$i.'.txt', 'w'));
                    
                    } else {
                        fclose(fopen(ROOT_PATH . '/!!lock.txt', 'w'));
                    
                        // sleep 30 sec
                        for($i=1;$i<=30;$i++){
                            sleep(1);
                    
                            // for break script
                            if(!file_exists(ROOT_PATH . '/!!lock.txt')) {
                                die('script stopped');
                            }
                        }
                    
                        unlink(ROOT_PATH . '/!!lock.txt');
                    }
                    
                    echo 'end';
                      0
                      такая проверка на локи работать не будет из-за отсутствия атомарности.
                        0
                        Поясните пожалуйста.

                        ПС: Такая проверка не работает только в ФФ и Хроме. А при запуске скриптов Cron'ом — всё ок.
                        0
                        Как то гемороился с подобным. Использовал Shared memory в PHP
                        +5
                        Отлаживал выгрузку по логинам пользователей из Оракла в Эксель, вводя в качестве примера фамилию коллеги. Ничего не выводило. Правили вывод, смотрели кейсы, джойны, макросы…

                        Много времени ушло, пока сообразили, что в качестве тестового юзера я пытался использовать единственного, наверное, человека в отделе, который работал не под доменной, а под локальной учеткой, в силу чего в логе вообще не появлялся.
                          +18
                          Имхо, нормальный программист вместо writelog ('1')/writelog ('2') сразу напишет writelog ('Exec: '.$param) и не будет дёргать хостеров…
                            +1
                            Ну, очевидно, что в представленном примере так, потому что больше входных данных для селектора нет. В моем случае все сложнее было — поведение блока, в котором было логгирование, зависело от состояния сессии, кук, входной строки, параметров, состояния базы данных, которое еще и при выполнении скрипта меняется. Второй рефреш там уже не то же самое, что первый на чистом браузере. В итоге я так и сделал, просто это все время занимает, надо было уже домой бежать, а хостеры ночные, да и баг был и вправду похож на чудеса RewriteEngine.
                              +3
                              Ну и надо было в лог валить всё, что могло так повлиять.
                                0
                                кстати, удобнее использовать FirePhp вместо такого самопального логирования writelog.
                                у меня была похожая ошибка, но я сразу догадался посмотреть сначала в фаербаге какие запросы отправляются, а потом логировать request_uri.
                                  +1
                                  Вы притомитесь использовать FirePhp, чтобы найти ошибку, которая проявляется только в Хроме.
                                  0
                                  в таких WTF случаях, помогает весь $_REQUEST в лог вывалить, и посмотреть что не так.
                                    0
                                    и $_SERVER['REQUEST_URI'], ага.
                                +2
                                >what is fuck
                                Имеется в видут WTF? — An Internet slang acronym for «what the fuck».
                                  +1
                                  Тьфу, тупо опечатался. Исправил, спасибо)
                                    +11
                                    What a Terrible Failure!
                                      +6
                                      Меня чуть инфаркт не хватил, когда я увидел Log.wtf() в Android SDK…
                                        0
                                        Хаха, класс :) Ну, впрочем, название очень даже органично сочетается с описанием: «Report an exception that should never happen.». Ибо, после долгих поисков того, «что не должно происходить», на языке крутятся только эти три буквы :)
                                    +3
                                    О чудесах. Один мой начинающий коллега любит решать проблемы в программах перестановкой строк туда сюда. Вместо того чтобы разобраться что на самом деле происходит.

                                    Для него то что происходит при этом в программе — Магия. ИМХО настоящий программист должен всегда знать что у него происходит в программах. А если же что-то идёт не так как он рассчитывал, значит надо садится и разбираться! Магии здесь быть не должно.
                                      +15
                                      Особенно радует, когда баги исправляются прибавлением к чему-нибудь единицы :)
                                        +13
                                        Это краеугольный камень разработки. Помогает в 90% случаев
                                          0
                                          При работе с той же графикой — тот самый 1 пиксель, который куда-то постоянно пропадает и вылазеет где не надо. И, как бы не было стыдно признаваться, действительно +-1 в таких случаях — незаменимое средство…
                                            0
                                            Это не программирование, это верстка :)
                                              0
                                              Нет, я говорил как раз о работе с графикой в программах,
                                              а не графических редакторах :)
                                                0
                                                А всё равно верстка :) На js тоже можно «программить» вручную выставляя размеры и позицию элементов, но эта часть работы всё равно вёрстка :)
                                                  0
                                                  То есть создание визуальных компонентов для десктопных приложений Вы называете версткой?
                                                  Ну ладно :)
                                                    +1
                                                    Этап выставления размеров видимых элементов и их позиционирование относительно друг-друга и есть верстка.
                                        +1
                                        Это иногда помогает, честно помогает :))
                                        Иногда такие заковыристые проблемы вылезают, хоть вешайся. В стиле доктора хауса: несколько дней бьешься над проблемой, голова уже пухнет. А потом раз, и внезапно приходит в голову простое и элегантное решение.
                                          +1
                                          Ага. Исправление ошибки должно сопровождаться выкриками вроде «ну конечно, как же я сразу не подумал!», а не «о, почему-то заработало...»
                                            0
                                            «о, почему-то заработало…
                                            ну конечно, как же я сразу не подумал!»
                                              0
                                              более того, если «о, почему-то заработало», то сидишь потом и ищешь, почему. самые мерзкие проблемы:)
                                            +5
                                            Когда находишь ошибку это пол беды, а когда всё реально правильно, начинаешь исправлять методом тыка, не помогает, откатываешься на первоначальный вариант и тут хоп всё работает. В этих случаях я считаю виноватой «зубную фею» =)
                                              +3
                                              а ещё бывает, когда не тот файл правишь, а пытаешься запустить/скомпилить — ошибка не устранена
                                                +2
                                                Бывает, когда я, имея открытым ssh, начинаю править код прямо на сервере, а проверяю его на локалке…
                                                Или когда есть >=2 шаблона у сайта, правишь один, а тестируешь другой.
                                              +1
                                              У нас технический лидер говорит: «В программировании нет ничего невозможного».
                                              И вправду, чего только не бывает/бывало. Где еще может получиться отрицательный вес, или камень может полететь, или функция будет годами делить на ноль, нарушая все законы математики, а из-за какого-нибудь "/EHa" это заметят только чисто случайно, разбираясь с совершенно другой проблемой. )
                                                0
                                                сегодня дебажил отправку формы на сервер с помощью jQuery — не срабатывает обработчик и все! Смотрю файрбагом html — нету тега form)) Смотрю исходный код в файле — никуда не пропадал)) Часа два ломал голову пока не допер что выше формы есть незакрытый select и баг из за него))))
                                                  +1
                                                  Извините, а что лежало на подносе?
                                                    +3
                                                    «В руках держит поднос, на котором два айрана
                                                      +14
                                                      +1
                                                      Мне как то раз надо было запоминать в сессии предыдущую страницу (точнее текущую, а при последующем вызове буду знать, какая была предыдущая)
                                                      Так вот этот favicon.ico в хроме тоже нервы потрепал, правда быстро стало ясно, почему не работает по урлу предыдущей страницы ))
                                                      • UFO just landed and posted this here
                                                        +3
                                                        Давно, когда только начинал осваивать программирование, игрался с Delphi.
                                                        Создал программку с канвасом, или как там оно называлось, уже не помню, и сделал загрузчик картинки в реалтайме (запускаешь программу, тыкаешь кнопку, выбираешь в диалоге картинку — она рисуется на канвасе и сохраняется в папку программы, при следующем запуске грузится уже оттуда сразу).
                                                        После нескольких запусков надо было удалить руками картинку в папке.
                                                        Удалил.
                                                        Запускаю — она все равно подгружается.
                                                        Попробовал еще раз — всё равно.
                                                        Полностью перекомпилировал программу — не помогло.
                                                        Перезапустил Delphi, еще раз перекомпилировал…
                                                        Когда удаление кода, подгружающего картинку при запуске, тоже не помогло — впервые в жизни почти физически почувствовал как едет крыша :)
                                                        Но тут пришла спасительная мысль о том, что картинка просто осталась в той области памяти, которую использует канвас.
                                                          0
                                                          Я не далее, как на прошлой неделе тоже с недоумением созерцал в логах свежезапущенного сайта кучу ошибок насчет необнаруженного favicon.ico. Он у меня лежал не в корневой директории сайта и путь к нему был указан в meta (теперь знаю — это было плохое решение). Тоже долго ломал голову, потом просто скопировал иконку в корневую директорию и забил. :)
                                                          • UFO just landed and posted this here
                                                              +1
                                                              Хм, странно. У меня фавикон в подпапке, и яндекс нормально его увидел, показывается в результатах поиска. А гугл вообще ведь фавиконы не показывает в результатах. Или, может, вы не о поисковиках.
                                                            +13
                                                            У меня один раз был случай, когда крыша почти поехала в реальности.

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

                                                            Стоит у стены дверка, замотанная в пупырчатый полиэтилен, я ее беру аккуратненько в руки, поднимаю и несу к стойке, чтобы там размотать и вставить в стойку и вдруг у меня в руках появляется непонятная легкость, а дверь ВНУТРИ почти герметичного полиэтилена… пропадает, что ли… Вот как в фильмах показывают, как волшебники исчезают, рукой махнул, только что был, пыньк! и нету. Только у меня она исчезла совершенно беззвучно (слышно было через окно, как машины едут).

                                                            Остановился, смотрю остолбенело на руки свои, которые уже ничего не сжимают, сходятся, в них только полиэтилен, двери нет. «Здравствуй, белоч… нет, ну пусть будет барсук или даже большой толстый сурок! Вроде не пил...»

                                                            Потом поглядел вниз — опаньки, а вот она! Внизу спокойненько лежит, компактной кучкой, внутри мешка. Дверь была из закаленного стекла, видимо, строители ее пинали там как-то, и маленькой нагрузки хватило, чтобы она развалилась. А каленое стекло разваливается сразу, одномоментно и на мелкие кусочки. Смотрел-то я не на нее, а куда иду, вот и не заметил движения внутри. Но «приход» был надолго…
                                                              +2
                                                              Это что-то из разаряда ироничного детектива Дарий Донцовой для айтишников? Сразу стало понятно, что убийца дворецкий favicon.
                                                                0
                                                                Зачем спойлеришь, дорогой? :)
                                                                +1
                                                                Вы будете смеяться, но это действительно вина хрома, и вы не первый. У меня чуть крыша не съехала, когда я начала переносить свой старый сайт на фреймворк — баннеры в шапке вызывались трижды. На обычном «спагетти»-движке один раз, а на MVC — трижды. Показывались один раз, а статистика отрабатывала трижды! Я из-за этого отказалась от ZF — была уверена, что это его баг. Каково было мое удивление, когда на Yii оказалось то же самое! Тут уже я решила зарепортить баг, т.к. фреймворк очень приглянулся. И в правилах багрепорта прочла, что надо потестить во всех браузерах. И обнаружила, что «грешны» только Chrome и Chromium, а в остальных все в порядке. Я понятия не имею, как это можно объяснить, но все скрипты MVC в хроме этому подвержены. Независимо от фреймворка. А на обычной «лапше» с require_once это не проявляется, хоть 20 файлов подключи в один.
                                                                  +2
                                                                  А ещё в хроме появилась ненавистная мною, как веб-разработчиком фича — подгрузка страницы ДО завершения набора адреса в строке.
                                                                    +2
                                                                    Хм, а откуда ж он знает, что грузить тогда? Хотя функция прикольная для режима «просто юзер». Набираешь лента.ру, а он тебе уже ее подгрузил и готов показать. Я б на месте маркетологов такую штуку сделал.
                                                                      +1
                                                                      автокомплит. в этом-то и проблема
                                                                  • UFO just landed and posted this here
                                                                      –2
                                                                      Тут живая женщина! Я нашел ее, потсаны!
                                                                      0
                                                                      > Кстати, для прототипа сервиса my.wordrive.com меня порадовала задача написания функции перевода из десятичной в 62-ричную систему и обратно. Ведь появляются же такие задачи!.. И ведь без нее никак.

                                                                      И что тут сложного? Делим число на 62 до посинения, или, наоброт, складываем цифры и умножаем на 62. Единственное — в предел 32-битного числа легко упереться.
                                                                        0
                                                                        Черт, ответил не туда — в общем, вам ответ чуть ниже)
                                                                        +2
                                                                        Сложного абсолютно ничего, принцип перевода из одной системы счисления в другую одинаков для всех систем счисления, а алгоритмы, для этого предназначенные, изучают на первом курсе технического ВУЗа. Я про саму постановку задачи. Не знаю, как у вас, а у меня 62-ричная система счисления вызывает улыбку :)
                                                                          +6
                                                                          Как-то шутили с приятелем, что числа вроде 129, 513 и тд. обычно вызывают у программистов легкий ступор :)
                                                                            +4
                                                                            Ничего себе — лёгкий… я на две минуты завис только что…
                                                                          +1
                                                                          пришел как-то в проект на плюсах. Добавил новый код. Собрал, запустил — программа неверно работает ( никак не связано с патчем ). Пытаюсь сузить место ошибки, убираю весь код до тех пор пока не остается
                                                                          int x=0;
                                                                          когда его убираю — все хорошо, добавляю — прога выдает неверный результат.
                                                                          Через три дня дебага методом «пристального взгляда» нашел ошибку. Это была неинициализированная переменная типа bool. Так как она не была инициализрованна, то значение свое получала из того что было в памяти до тех пор. А было там до этого всегда true ( любое отличное от нуля значение ). Теперь же получила значение 0 — оставшееся от новой переменной.
                                                                            +2
                                                                            Да, вспоминаются лохматые прошлые, когда моя оконная библиотека для турбопаскаля 4.0 начинала глючить вместе с ростом программы, где она была (в начале не глючила вообще). Ну тогда я был вообще молодец — не знал, что такое глобальные переменные и хранил координаты окошек в памяти по прямой адресации. Вот так: mem[3A32:0232] := 32; До определенного момента даже работало)
                                                                            +2
                                                                            И статья хорошая, но и пиар своих ссылок тоже неплох ) ) )
                                                                              +1
                                                                              спасибо :) пиар ссылок пока бесполезен, если честно. Программа еще недели через три будет, когда о ней все уже позабывают, рекламы у меня на сайте нет, сам сайт еще сильно недоделан) но все равно хорошо, много всего насоветовали полезного)
                                                                              0
                                                                              у меня тоже сегодня мистика была… есть старая игра. к ней мы делаем аддон, луа скриптинг и все такое. среди прочего — функция которая создает хттп сервер и поступающие на него команды переадресует луа.
                                                                              отлично, написал несколько функций, протестил из консоли игры — все работает, все супер.
                                                                              Решил протестить через хттп сервер… wtf?? ошибка и все такое, как будто функции не существует вообще.
                                                                              бился, бился… перемещал эти функции туда же где лежали работающие — ошибка оставалась. потом снова злостно жал undo… и вдруг случилось чудо! заработало!
                                                                              собственно я до сих пор не знаю, почему…
                                                                                +3
                                                                                Я когда создаю сайт сразу делаю ему favicon.ico и robots.txt, потому что, изучая логи доступа, понял, что это два таких файла, которые хочешь не хочешь, а запрашиваются постоянно как поисковиками, так и браузерами) Кстати, по-поводу фавиконки, Firefox, конечно, молодец, что один раз запрашивает иконку, кэширует ее в своей sqlite-базе, но во время девелопмента, хочется перескочить на хром, который добросовестно обновляет фавиконку моментально, а в лисичке я вижу фавиконку, которую уже 15 раз успел поменять)
                                                                                  +1
                                                                                  Как я вас понимаю… У меня в программировании и в жизни часто подобное случается. Друзья привыкли. Теперь если что, говорят, что это все от того, что "карма плохая" у меня видите ли.
                                                                                    –1
                                                                                    никогда этого не делаю, но тут почему-то ужасно захотелось насрать тебе в плохую карму. остановился. передумал. жамнул ап. :)
                                                                                    +3
                                                                                    Более 80% проблем возникших на уже работавшей системе — это нехватка места на диске.
                                                                                    Кончилось место — отвалилась БД, репликация и т.д. Буквально вчера ломали голову, какого фига редис жутко грузит диск — я уже сделал запись раз в 10 минут и все равно. Оказалось просто места нет, и он снова и снова пытается начать дамп, а места нет.
                                                                                    Еще 15% проблем — настройки сети и фаервола, когда на одной машине работает на другой нет.
                                                                                      +1
                                                                                      Поправьте маленько текст что ли — видимо торопились и пропустили слова:

                                                                                      > байка случилась лет семь со мной в Турции
                                                                                      и
                                                                                      > Давайте я все-таки полное содержание .htaccess:


                                                                                      И
                                                                                      > Кстати, для прототипа сервиса my.wordrive.com меня порадовала задача
                                                                                      Так и задумано?
                                                                                      Screenshot my.wordrive (c waca.ru)
                                                                                        +1
                                                                                        Ну как, версию обновляли, все упало, чинил «на живом» :) это недолго продолжалось)
                                                                                          0
                                                                                          спасибо, поправил, действительно торопился)
                                                                                            0
                                                                                            > Лет семь со мной в Турции, в отеле, произошла забавная ситуация.
                                                                                            Всё же лучше добавить, что случай произошёл семь лет назад :) если об этом речь ;)
                                                                                          0
                                                                                          я однажды случайно скопировал файл user.ini, который содержал в себе переводы для контроллера User, в корневую папку. Этот файлик переписывал php.ini и я ловил очень крутые глюки пока не понял в чем причина.
                                                                                            0
                                                                                            Когда впервые знакомился с web и php нечто подобное было.
                                                                                            Подумал что схожу с ума :)

                                                                                            php-скрипт — заносит данные в базу, и всё так правильно заносит, но…
                                                                                            в самом скрипте (на самом деле это была страничка), нечто вроде такого:
                                                                                            if (isset($_GET['bla-bla-bla'])) mysql_query(«INSERT INTO… ».$_GET['bla-bla-bla']);
                                                                                            т.е. если есть параметр — его значение заносится в базу.

                                                                                            И вот открываю страничку — всё нормально, появилась запись в базе.
                                                                                            Через минуту заглядываю в базу — а там записей почему то две…

                                                                                            Я сутки не мог понять — почему иногда заносится одна запись, иногда 2-3-4 (причём уже через какое-то время после того как я открывал страницу).

                                                                                            Оказалось, по неопытности, не знал что нельзя сохранять в базу GET параметры, а на страничке была реклама adsense.
                                                                                            И естественно когда я захожу на страничку — через какое-то время её посещает и бот адсенс, с тем же GET-параметром :)

                                                                                            Честное слово — думал с ума схожу :)

                                                                                              0
                                                                                              Любить программирование за поиски ошибок в течение нескольких дней попахивает мазахизмом :)
                                                                                                0
                                                                                                Имхо, автор имел ввиду эмоции, которые испытываешь, когда эти ошибки находишь =)
                                                                                                0
                                                                                                Если вы впервые столкнулись с запросами несуществующих картинок, которые выполняются программной частью, то видимо у вас не очень и богатый опыт, потому что это история встречается часто. Правда обычно это случается так, что где-то на сайте есть:
                                                                                                <img src="<?php echo($some_path_from_result); ?>" width="xx" height="xx" alt="" />

                                                                                                И вот случается, что этот $some_path_from_result оказывается пустым, по каким-то причинам. В таких случаях браузер тоже посылает запрос на открытую страницу еще раз, а если «картинок» несколько — еще несколько раз. Вначале я был сильно удивлен логам и не мог понять, в чем же дело. Это было лет 6 назад.

                                                                                                Другое дело, что у меня был случай, опять же с веб-сайтом, когда дизайнер прислал макет, я его сверстал, написал программную часть, «прикрутил» дизайн, все отлично и готово к показу заказчику. Назначаю время, прихожу с ноутбуком (поднял на нем локально сервер) открываю сайт — стили css не работают. Я стыдливо улыбаюсь, начинаю копошиться, обещая закончить через пару секунд, так верчу, эдак — стиль есть, везде отображается, что файл подключен верно, но не работает. Я почесал голову, извинился и пообещал показать вечером сайт онлайн, а пока показал только функционал (как было возможно, без работающего css). Пришел домой, начал ковырять. Все анализаторы показывают, что с css все в порядке, но ничего не помогает. Удалял почти все стили, копировал из файла в файл. Делал что угодно — не работает и все. И media аттрибут верный, и в файле нет незакрытых классов, или других опечаток. И не работает не только у меня — выложил онлайн, дал ссылку коллегам — у всех стили не работают. Потом я заметил, что если я переписываю класс стиля вручную — он начинает работать. Заметив это, я начал смотреть, в чем же может быть дело. Оказалось, что пробелы в css заменились на какой-то пробельный UTF-8 символ, который браузер распознать не мог. Замена таких пробелов на обычные решила вопрос, однако, я уже тогда начинал думать, что свихнулся. Как там эти пробелы оказались — нераскрытая тайна.
                                                                                                  +1
                                                                                                  Насчет первой части: когда ты досконально знаешь текст своих скриптов, вдруг вызваться картинка ими не может. Разумеется, когда какой-нибудь чужой софт копаешь, там может что угодно вылезти и подход к отладке там другой, там совсем другие предположения и гипотезы лезут :)

                                                                                                  А с ютфными пробелами — это известная ситуация. Несколько раз уже случалось. iconv помог)
                                                                                                  0
                                                                                                  Ха, на двойную запись в лог из за Хрома натыкался буквально в этот понедельник. Правда, медитировать над причиной пришлось всего минут 20, вовремя вспомнил про favicon.ico :)
                                                                                                    –1
                                                                                                    Можно было бы попробывать поанализировать access.log апача.
                                                                                                      0
                                                                                                      Хостинг логол, там все удобно, но вот лог почему-то доступен только через скачивание через веб через контрольную панель. Лог вырос уже к тому времени и стал тяжелым. Длинный и нудный путь, иначе бы с него начал, конечно. Иначе бы глянул, конечно.
                                                                                                        +1
                                                                                                        Я стараюсь тестировать все локально, перед тем как закачивать на продакшен сервер, что бы потом не танцевать с бубном. Локально доступ к access.log можно получить достаточно быстро. Тоже самое можно сделать через ssh на хосте.
                                                                                                    • UFO just landed and posted this here

                                                                                                      Only users with full accounts can post comments. Log in, please.