• PHP, Closures, use & references

      Хочу рассказать об одной особенности использования замыканий в PHP-5.3. Думаю, для многих она покажется очевидной, но тем не менее. Оказывается, используя use ($var1,..) — мы можем передавать переменные по ссылке: use (& $var1,..).

      Пример, иллюстрирующий возможные варианты использования (и просьба не тыкать носом в array_sum() ;) ):
      $rows = array(1, 2, 3);
      $total =  0 ;
      // Случай раз - use ($total) без ссылки
      array_walk($rows, function($row) use ($total) {
              $total += $row;
      });
      echo "Total is $total\n";
      // Случай два - use (& $total) по ссылке
      array_walk($rows, function($row) use (& $total) {
              $total += $row;
      });
      echo "Total is $total\n";

      На выходе получим:
      Total is 0
      Total is 6

      Enjoy!
    • Бюджетные петабайты: Как построить дешевое облачное хранилище. ч. 2

      • Translation
      Продолжение. Начало см. здесь

      Соединяя провода: Как собрать контейнер хранения Backblaze


      Диаграмма разводки питания контейнера хранения Backblaze приведена ниже. Блоки питания (БП) предоставляют бОльшую часть своей мощности по 2-м разным напряжениям: 5V и 12V. Мы используем 2 БП в контейнере, поскольку 45 дисков требуют много 5V-мощности, в то время как мощные ATX БП отдают бОльшую часть своей мощности по шине 12V. Это не случайность: 1500W и более мощные ATX БП спроектированы для мощных 3D-видеоплат, которым нужна дополнительная мощность по шине 12V. Мы могли бы предпочесть 1 серверный БП, но 2 ATX БП дешевле.

      Диаграмма разводки питания сервера
      Читать дальше →
    • MySQL: Поиск по FULLTEXT индексу вешает базу. Решение проблемы

        Ловил несколько месяцев назад один трудноуловимый баг с поиском по базе. А сегодня, прочитав топик HTTP, RFC 3986 и браузеры, решил рассказать общественности, вдруг у кого-то тоже всплывет.

        Проблема
        Есть сайт в UTF8. Есть MySQL база в UTF8 и FULLTEXT индексом. Поиск по нему идет в BOOLEAN MODE. При определенном виде запросов БД перестаёт отвечать. Причем только для одной БД в рамках сервера MySQL. Нормальный перезапуск демона не срабатывает, получается ребутнуть только жестким mysql -9.
        Замечена такая неприятность на MySQL 5.0.51a и выше

        Почему?
        А дело всё в том, что это какой-то странный баг самого MySQL и решать они его почему-то не торопятся. Оказывается, если фраза для поиска будет в cp1251 кодировке, а база в UTF8, то на N-ном таком запросе БД повиснет в состоянии FULLTEXT Initialization, причем залочит все таблицы, а не только одну с индексом. Проявляется не с первого запроса, но раз-два в день может случаться.

        Лекарство
        Перед подстановкой поисковой фразы в запрос переконвертируем её в UTF8, если надо.

        Кто виноват?
        А вот тут я расскажу, при чем тут топик, который мне напомнил эту историю.
        Я поддерживаю один сайт, как хобби. С сайта можно поставить поисковый плагин к браузеру в формате OpenSearch. Как выяснилось, браузеры некоторых пользователей при поиске через этот плагин почему-то думают, что сайту нужна Windows-1251 кодировка. Откуда у них такая уверенность, я не знаю. Возможно Firefox запомнил, что когда-то давно сайт был в Windows кодировке. Возможно на это влияет отсутствие кодировки в коде плагина. А может просто магнитные бури, проблема-то появлялась раз-два в день :)

        Ссылка на багрепорт
        bugs.mysql.com/bug.php?id=37067
      • Тёмная тема для Eclipse+PDT (ZendStudio for Eclipse)

          Преамбула


          Когда-то давно, работая еще в ZendStudio 5.0, а потом и 5.5 нашлась красивая темная тема для подсветки кода. За пару лет работы я так привык к ней, что пересев на Eclipse+PDT, глаза были против белого фона с зелеными буковками.
          Поиски в интернете такой же темы для Eclipse, поиски хоть какой-нибудь тёмной темы а затем и поиски вообще какой-либо темы результата не дали. Оказалось (о ужас!), что Eclipse не поддерживает смену готовых тем.

          Поиски хотя бы какой-то возможности кастомизации Эклипса на хабре вывели на топик хабраюзера olegchir. Вдохновленный идеей самому сделать аналог Parabox Style для Eclipse, я принялся за работу

          Что из этого получилось, можно глянуть на скриншотах ниже:


          Еще скриншоты и инструкция
        • PHP класс для конвертирования кодировки базы Mysql

            Недавно я написал скрипт конвертирования Mysql базы из одной кодировки в другую. После, я решил переписать скрипт, создав класс. Теперь можно подключать эту библиотеку в своих скриптах. Использование данного класса показано ниже.
            Читать дальше →
          • Вопросы с собеседования на должность «C# Developer»

              1. Name ten c# keywords.
              2. What is a 'static' class?
              3. What is difference between overloading and overriding?
              4. Is multiple inheritance supported in .Net?
              5. Class inherits from two interfaces containing methods with the same signature. Is it possible to provide different implementations for these methods?
              6. What can be a root reference?
              7. How 'System.String' class differs from most of other classes?
              8. Will a 'finally' block be executed if there was no exception thrown?
              9. What is a satellite assembly?
              10. How 'protected' access modifier affects visibility?
              11. What does keyword 'mutable'?
              12. Can multiple catch blocks be executed?
              13. What does operator 'as' do?
              14. What does keyword 'final'?
              15. Can different access modifiers be applied on the getter and setter of a property?
              16. Can a class be prevented from being inherited?
              17. What is event?
              18. What is the difference between event and delegate?
              19. Are events synchronous or asynchronous?
              20. What does keyword 'safe'?
              21. Can interface members be private?
              22. What does keyword 'in'?
              23. What is the advantage of using 'System.Text.StringBuilder' class over 'System.String'?
              24. What is special about the declaration of relational operators?
              25. How 'public internal' access modifier affects visibility?
              26. Can a local variable get garbage collected before it becomes out-of-scope?
              27. What implementations of serialization are built in FCL? Where are they used?
              28. How 'protected internal' access modifier affects visibility?
              29. Can 'break' exit a finally block?
              30. How to apply attribute to method return value?
              31. What is the difference between C# class finalizer and C# class destructor?
              32. What is purpose of 'IDisposable' interface?
              33. Can an array be resized at runtime?
              34. Does the size of an array need to be defined at compile time?
              35. Can a destructor have access modifiers?
              36. What is smallest integer type to represent number not greater than 40 000?
              37. What do keywords 'sizeof' and 'typeof'?
              38. What is differece between 'sizeof' and 'Marshal.SizeOf'?
              39. What is array rank?
              40. What does keyword 'stackalloc'?
              41. What encoding uses 'System.String' class?
              42. What is boxing and unboxing?
              43. What is reflection?
              44. What is struct?
              45. What is multicast delegate?
              46. Does C# have “friendship”?
              47. What is the 'using' statement for?
              48. Can a struct have methods?
              49. Can a struct be inherited?
              50. Why do most event handlers use signature 'void(object, EventArgsDerivative)'?
              Наблюдавшиеся результаты: от 12 до 30 правильных ответов.
            • Автоматизация функционального тестирования: что это такое и как это может быть полезно

                В том, что тестирование ПО необходимо, к счастью, никто уже не сомневается. Но так как сама отрасль тестирования достаточно молодая, в ней еще не сформировались общепринятые методологии и правила, как в отрасли разработки ПО. Как обычно производится функциональное тестирование приложений, систем и т.п. Процесс можно разбить на следующие стадии:
                1. Сбор требований (справедливо для «внешнего тестирования»)
                2. Создание тестовой модели (что и как тестируем)
                3. Проведение тестирования
                4. Отчет о тестировании (дефекты, проблемы и т.п)

                Каждая стадия включает в себя исключительно ручной труд. И для каждой новой версии приложения необходимо проводить регрессионное тестирование — повторять следующие стадии:
                1. Дополнение тестовой модели
                2. Проведение тестирования
                3. Отчет
                Причем стадия «Проведение тестирования» включает в себя тестирования всего объема функциональности – и старого, и нового. Таким образом получается, что с ростом функциональности растет и объем ручного тестирования, причем тестирование «старого» функционала совершенно справедливо вызывает у тестировщика отторжение – «я уже 10 раз это смотрел». Следовательно, падает и качество тестирования (снижение внимания), и скорость проведения полного тестирования системы. Регрессионное тестирование ведет к регрессу тестировщиков. Автоматизация призвана и ускорить процесс тестирования, и избежать деградации тестировщиков.

                Читать дальше →
              • Простой способ организации очереди из AJAX-запросов

                  Постановка задачи

                  Асинхронные запросы являются удобным способом разгрузить пользователей сайта от избытка информации, которая «сваливается» на них после отображения страницы. Рассмотрим классический пример — список товаров в интернет-магазине. Пользователь выполняет какой-либо поисковый запрос, в результате чего ему отображается компактный список найденных товаров. Например, это могут быть только одни названия. Под каждым из названий стоит ссылка «подробнее», после клика на которую под названием откроется дополнительный блок, уже с подробной информацией о товаре. Удобство пользователя налицо — быстро пробежав глазами весь список, он «прокликает» только заинтересовавшие его товары, и быстро перейдет к следующим страницам. Выгодно это и со стороны сервера — меньшая нагрузка, меньше исходящего трафика.

                  Однако в такой системе неизбежно возникает следующий момент: пользователь может подряд быстро нажать на несколько ссылок «подробнее», в то время как сервер будет долго обрабатывать входящие запросы. Если в AJAX используется только один объект XMLHttpRequest (обычно так и есть), то все запросы свалятся в нем «в кучу», и результат запроса отобразится не там, где нужно. Таким образом, встает задача организовать очередь из однотипных асинхронных запросов к серверу, так, чтобы последующий выполнялся только после того, как закончится предыдущий.

                  Читать дальше →
                • Установка PHP на ubuntu

                    Зачем?
                    Это самый первый вопрос, который задаст большинство.
                    Отвечу:
                    1) Дефолтный php без зачастую нужных вещей вроде pcntl, и к тому же с вкомпиленным генератором неведомой совокупительной фигни Suhosin Patch.
                    2) Сборка модулей, которых нет в репозитории.
                    3) Нет руководств такого типа. Нет, действительно нету, лишь короткие руководства, которые с оговоркой можно назвать логом ./configure && make && make install, и по которым сложно что-то собрать из-за наличия требований дополнительных библиотек.
                    4) Я не буду писать про фан. Просто не буду, т.к. мы не балуемся, а собираем продукт для работы. Многие найдут это плюсом, но не я.
                    5) Внезапно возник вопрос сборки своего модуля. Навыки сборки под никс очень помогли в сборке под винду, где и был написан экстеншн.
                    Можно конечно было сразу писать под никсами… Но ставить и настраиватькастомизировать никсы только ради одного проекта(в консоли на удаленном сервере разрабатывать как-то не особо приятно) мне не хотелось.

                    Начинаем установку
                    Читать дальше →
                  • Софт со всего мира за WebMoney

                      Покупка программного обеспечения при помощи WebMoney уже давно не являтся проблемой.

                      Но так сложилось, что в крупных отечественных интернет-магазинах ПО в основном представлены программы разработчиков из ExUSSR. Если есть ресселлеры какого-нибудь популярного продукта от западных вендоров, то и его можно купить.

                      Так вот сейчас, балгодаря сотрудничеству WebMoney Transfer и группы компаний Digital River, можно купить любой софт, продажа которого производится через Share*It или Regnow. А это более 40 000 тысяч наименований со всего мира!

                      Итого
                      Покупатель — может купить за WebMoney больше ПО со всего мира
                      Продавец — может получать выплаты прямо на свой WebMoney-кошелек
                    • FineReader Online

                        Неужели, чтобы распознать всего одну страничку нужно лезть на торренты идти в магазин и покупать целый FineReader? Правильный ответ – НЕТ, потому что теперь можно купить половинку FineReader’а недавно специально для таких случаев был запущен в открытое бета-тестирование новый онлайн-сервис от ABBYY!

                        Мы рады представить вам FineReader Online (beta). Теперь те, кому нужно просто распознать парочку страниц, могут зарегистрироваться на нашем сервисе и сделать это совершенно бесплатно. На данный момент после регистрации вам доступно 50 страниц в день.
                        Читать дальше →
                      • Вашей фирме (не)нужна социальность

                          Десять лет назад (кто-то подсказывает: «почти двадцать») на голову фирмам разной масти и толка свалился Интернет. Осмелюсь предположить, что для большей части из них он стал скорее обузой, чем благом. С одной стороны: «у всех уже есть чёртов сайт, что мы хуже, что ли?», с другой: «да нафиг оно надо? We were, так сказать, born in this hole. And we will die in this hole». В конце концов всё как-то устаканилось. У всех появились ужасные сайты-визитки, с ужасными улыбками на лицах гендиректоров, и «новостями» за позапрошлый год. Через некоторое время, когда очки, нанизанные на… скажем, хвост, не помогали, разумный директор средней руки по-своему торжествовал, отечески похлопывая по плечу унылого премиум-айтишника. «Я же говорил, что дурная затея? А ты — «большие возмо-ожности, много новых клие-ентов». Мой клиент — такой же старый бобёр как я (надевая шапку из сородича и кряхтя). Открыл газету, ткнул пальцем, цена низкая? вот и славно, вот и позвонил. Хорошо хоть недорого обошлось...»

                          Сегодня дела обстоят значительно хуже. Казалось бы, и времена другие, и интернет другой. И коллективное сознание, и магия цифр (в том числе — биржевых)… И тот же бобёр-директор сам исправно сидит в «одноглазниках» и удивляется, как люди за рисованные конфетки-бараночки платят кровные. Но всё только хуже и хуже. Теперь на головы сыпется ещё и «два-с-половиной-ноль» во всей своей красе. С социальным продвижением, человеческим лицом компании и Твиттером, не к ночи упомянутым. И снова бодрые айтишники твердят, что «надо». И вроде вправду — «надо». И секретарша-валечка ногти от безделья отрастила, что чеченские кинжалы (лучше бы блог компании вела, честное слово). Но всё-таки рядом (снова) летает здравое «зачем». Которое мне и хочется подоить.

                          — Вам правда хочется услышать, что говорят о вашей компании (продукте, сотрудниках) в Калуге? Ну хорошо, в Москве, на Бауманской? И ещё в тысячах разных мест. Причём услышать прилюдно. И как вариант — ответить прилюдно, с опасностью позже уткнуться лицом в услужливо подставленный архив со своим ответом. Хочется?
                          Читать дальше →
                        • «Когда вы вышлете логотип в кривых ?!»

                            «У нас файл не читается». «У нас другая версия ПО». «У нас каракули вместо текста и название знаками вопроса». «Это файл, который вы выслали вчера или который выслали неделю назад?»

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

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

                            Я хотел бы разобрать его на примере логотипов.

                            Читать дальше →
                          • Идеальный офис для малого бизнеса

                              Многие из хабраюзеров работают в небольших компаниях численностью до 15 человек. Такие компании обычно не имеют помещения в собственности и арендуют 1-2 комнаты в офисных центрах. Эти комнаты выполняют функции и ресепшн, и переговорной, и бэк-офиса, и мини-кухни. Здесь работают, отдыхают, пьют кофе с плюшками, а иногда даже и обедают.

                              Большая часть «офисных центров» — это здания бывших НИИ, проектных институтов, административных корпусов разорившихся фабрик и т.п. (Так называемая офисная недвижимость класса C и D). Вместе с обшарпанными стенами новоявленные офисы унаследовали Администрацию. И если во многих зданиях стены отштукатурили, обои переклеили и вставили евроокна, то Администрация осталась та же.
                              Типичный администратор здания – это тетушка возраста 50-55 лет с выражением лица «оставьте меня в покое, у меня обед!» В паре с администратором всегда идет бухгалтер примерно того же возраста. Третий типовой персонаж Администрации – дедушка-завхоз, самый добродушный из троицы. Но находится под каблуком администратора и самостоятельных решений не принимает.
                              Есть еще владелец здания. Мифическая персона, его никто никогда не видит. Похоже, что ему абсолютно все равно, что происходит в его офисном центре, главное, чтобы поступали деньги на банковский счет.
                              Советские здания унаследовали советский сервис. Мы предоставляем помещение – остальное ваши проблемы, — такова обычно негласная позиция администрации. Лучше обстоят дела в современных бизнес-центрах, но и там сервис не всегда на высоте и тоже бывает администрации с причудами. Кроме того, высокая арендная плата отпугивает многие компании от таких офисов.

                              Так какой же он, идеальный офис для маленькой компании? Давайте немного помечтаем.
                              Удобное рабочее место, не слишком высокая плотность сотрудников на квадратные метры – это то, что в силах организовать силами самого арендатора. Хотелось бы поговорить о вещах, зависящих от арендодателя.

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

                              Скотный двор или чудный сад?
                              Двор здания, где наша веб-студия Магвай арендует сейчас офис, мы в шутку именуем скотный двор. Асфальт там перекладывали последний раз лет 30 назад, мусор не убирается в принципе, навалены земляные холмы. В дождливую погоду там лучше вообще не ходить. Для полноты картины не хватает только хрюшек, валяющихся в грязи. Как здорово было бы, если на этом месте положили бы плитку или новый асфальт, стояли скамейки и беседка, а за ними росла травка и цветы. В обед можно было бы выходить отдохнуть на улицу, немного расслабиться и подышать воздухом.
                              Читать дальше →
                            • Подготовка к сертификации по Linux/Unix. Шаг 1

                                Некоторое время назад у меня появилось желание повысить свои знания в области Unix-подобных операционных систем, а заодно и получить сертификат, эти навыки подтверждающий. Это первая заметка из, как предполагаю, длительного цикла. Пока что просто анализ информации доступной в интернете и некоторые мои замечания по этому поводу. Если вы задумывались о сертификации по RedHat Linux, Sun Solaris, или другим Unix-подобным ОС, то вам, возможно, будет интересно это прочитать.

                                Читать дальше →
                              • Домашний сервер. Часть первая — выбор комплектующих

                                  Появилась у меня как-то потребность обновить мой домашний сервер, который представляет из себя комп с процессором Pentium 400Mhz и 384Mb памяти. Главные задачи, которые я ставил перед собой, были сделать его еще тише, меньше по размерам и быстрее.
                                  Сначала я подобрал комплектующие.
                                  Читать дальше →
                                • Запуск AdobeAIR-приложений на source-based дистрибутивах

                                    Вот уже несколько недель прошло как AdobeAIR под Linux вышел из стадии беты, однако принесла ли эта новость радость в дома пользователей source-based дистрибутивов? К сожалению, нет. AdobeAIR все еще ставится только на дистрибутивы с менеджерами rpm и deb пакетов.

                                    Что же делать остальным? Можно ждать чуда, а можно все же попытаться запустить интересные приложения. Те, кто выбрал source-based дистрибутив, я думаю, привык много работать ручками и головой.

                                    Читать дальше →
                                  • Javascript производительность? А как насчёт производительности перерисовки страниц?

                                    • Translation
                                    Тесты производительности нынче становятся все агрессивней, при этом похоже, что упор делается исключительно на искусственных тестах, которые могут показать нам производительность лишь некоторых компонентов браузеров в частности производительность выполнения JavaScript функций, выбранных для этих конкретных тестов.

                                    Удивительно, что так мало внимания уделяется другим, более соответствующим аспектам производительности современных страниц, либо вообще не уделяется. Например, как быстро работают браузеры с динамично меняющимся стилем страницы (CSS)?

                                    На Velocity 2009 Линдси Симон из компании Google говорил именно об этом. И на слайдах из презентации есть пара итересных графиков.
                                    opera css change perfomance
                                    Выяснилось, что Оперовский движок очень быстро работает с динамично меняющимся контентом страницы, а это именно то, что используется в интернете повсеместно. Что, если в будущем производительность браузера будет измеряться более комплексно, в отличии от простого JavaScript теста?

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

                                    Кроме того Опера очищает кэш от неиспользуемых элементов каждые 10 минут, но не видно что бы это было отражено в отчёте испытания. Мы могли бы очищать кеш все время, но тогда нам пришлось бы пожертвовать производительностью, как по всей видимости, делает Firefox.

                                    В контексте комплексного тестирования JavaScript и памяти Джаракан, похоже, увеличит показатели искусственных JavaScript тестов, но, возможно, за счет использования большего количества памяти.
                                  • Как отследить копирование контента?

                                      Для большинства онлайновых СМИ остро стоит проблема воровства контента. Хочу обратить внимание на сервис Tynt. Он не спасёт вас от рерайта и наглого воровства, но поможет вам понять, какой контент на ваших страницах считается самым интересным, что копируют и куда вставляют простые пользователи. Кроме того, вы привлечёте дополнительный трафик к себе на сайт, получите больше ссылок. Как это работает?
                                      Читать дальше →