Изучение знаменитых (и не очень знаменитых) ошибок. Глава из книги "Наука отладки" 2005 г. Представьте, что сейчас 1986 год. И представьте, что вы - ныне покойный Ричард Фейнман (Richard Feynman). Звонит телефон, вы поднимаете трубку. Звонит Уильям Грэхэм (William Graham), исполняющий обязанности администратора в NASA1. Вы знаете, что это не может быть просто дружеский звонок, поскольку космический челнок Челленджер потерпел катастрофу несколько дней назад, 28 января 1986 года. Вы правы. Он звонит для того, чтобы просить вас принять участие в работе комиссии по исследованию причин катастрофы Челленджера. В действительности, доктор Фейнман обнаружил причину инцидента, перемещаясь по всей стране и беседуя с инженерами и персоналом и не поддаваясь политическому давлению.
К счастью, наша работа по устранению ошибок в программных системах намного легче той задачи, с которой столкнулся доктор Фейнман. Во многих смыслах наша книга - это кульминация многих лет посмертного анализа ошибок, о которых мы узнали и которые провели сами. Сценарий История: компания Y Выводы Therac-25. Out from corp. Четыре паттерна вызова функций в JavaScript. Язык JavaScript был представлен как язык функционального программирования. Причина заключается в том, что функции в JS не просто разделяют логику на операционные блоки, функции являются объектами первого класса, способными создавать другие объекты. Подобная зависимость от функций одновременно является как сильной стороной, так и настоящим проклятием этого языка.
Сильная сторона заключается в том, что язык, обладая подобными особенностями, становится легковесным и быстрым (каким JavaScript изначально и видели его создатели). Однако если вы не знаете что делаете — однозначно ждите беды. Я предлагаю посмотреть на паттерны вызова функций, а точнее на то, как значительно изменяется результат в зависимости от выбранного паттерна. Итак, существует четыре пути вызова функций: Вызов метода — Method InvocationВызов функции — Function InvocationВызов конструктора — Constructor InvocationВызов apply и call — Apply And Call Invocation Выполнение функции Четыре паттерна Вызов метода — Method Invocation. Асинхронные запросы к MySQL. В mysqlnd появилась возможность выполнять запросы к MySQL асинхронно, то есть продолжить работу скрипта не дожидаясь выполнения запроса и формирования результата. Преимущество такого подхода очевидно, ведь можно выполнить массу полезной работы во время ожидания запроса, но для начала я приведу немного другой пример: Допустим у Вас есть 3 запроса (q1, q2, q3), каждый запрос выполняется за определенное время (t1, t2, t3), например так: SELECT 1 AS val, SLEEP(1) AS sleep SELECT 2 AS val, SLEEP(2) AS sleep SELECT 3 AS val, SLEEP(3) AS sleep В случае синхронного выполнения запросов, Вы сможете получить результаты их выполнения через t1 + t2 + t3 (ex: 6 секунд), а в случае асинхронного выполнения запросов уже за max(t1, t2, t3) (ex: 3 секунды) Примеры работы с асинхронными запросами, а также другие примеры работы с mysqlnd можно найти на github Выполнение асинхронных запросов Для выполнения асинхронных запросов достаточно указать специальный флаг MYSQLI_ASYNC.
Получение результатов запроса P.S. 1. Видеозапись доклада «Вся соль одностраничных приложений» с 404fest / Блог компании Ostrovok.ru. 17 октября 2012 в 14:20 Федя Шумов и Арсений Заречнев, фронт-енд разработчики из команды Островка, рассказали о «Всей соли одностраничных приложений» на 404fest в Самаре. Содержание доклада: Single-Page Apps. Вся соль. Backbone.jsMVC на клиентеТестирование JSModel-View BindingsОсвещение Batman.jsExtranet.Ostrovok.ru (система администрирования для отелей). Презентацию доклада можно посмотреть тут: Арсений Заречнев и Федор Шумов — Одностраничные приложения Только зарегистрированные пользователи могут оставлять комментарии.
Clustered index в InnoDB и оптимизация запросов / Блог компании Badoo. В последнее время в сети часто пишут про clustered index в InnoDB и таблицах MySQL, но, несмотря на это, на практике используют довольно редко. В данной статье мы покажем на двух реальных примерах, как мы оптимизировали достаточно сложные системы Badoo, основываясь на понимании принципов работы clustered index. Clustered index – форма организации таблицы в файле.
В InnoDB данные хранятся в дереве, в таком же, в котором лежат обычные B-TREE ключи. Таблица InnoDB сама по себе уже является большим B-TREE. В качестве значений ключа используется clustered index. Согласно документации, в качестве clustered index выбирается PRIMARY KEY. Если PRIMARY KEY отсутствует – выбирается первый UNIQUE KEY. Что же вытекает из такой организации данных на диске? Вставка в середину таблицы может быть медленной из-за того, что надо перестраивать ключ. Мы же расскажем о двух видах оптимизации, которые помогли значительно ускорить работу наших скриптов. Тестовое окружение Оборудование: Было: Стало: Новое для веб-дизайнера за сентябрь 2012. 4 октября 2012 в 22:44 Сделал небольшую подборку новых полезных материалов для веб-дизайнеров за сентябрь 2012.
Надеюсь, будет полезна хабровчанам. Полезные сервисы Easel.io — отличный сервис для прототипирования прямо в браузере. Fluid UI — похожий сервис для прототипирования мобильных приложений. CSSFilterLab — наглядное применение CSS-фильтров от Adobe. On/Off FlipSwitch — генератор красивых переключателей на CSS. Infogr.am — помощник при создании красивой инфографики. Screenqueri.es — удобный сервис для проверки адаптивного дизайна при разных разрешениях экрана. Golden Grid System — удобная сетка для тестирования адаптивного дизайна. Бесплатные плюшки Jarallax — бесплатная js-библиотека для реализации красивого parallax-эффекта. TiltShift.js — jquery-плагин для красивого rollover-эффекта. .Casper Typeface — очень качественный бесплатный шрифт, автор Михаил Череда.
SlickMap CSS — необычный способ отображение карты сайта, используя CSS. Отличная подборка UX/UI работ на Pinterest. Занятное. Понимание ООП в JavaScript [Часть 1] — Прототипное наследование — это прекрасно JavaScript — это объектно-ориентированный (ОО) язык, уходящий корнями в язык Self, несмотря на то, что внешне он выглядит как Java. Это обстоятельство делает язык действительно мощным благодаря некоторым приятным особенностям. Одна из таких особенностей — это реализация прототипного наследования.
Этот простой концепт является гибким и мощным. Он позволяет сделать наследование и поведение сущностями первого класса, также как и функции являются объектами первого класса в функциональных языках (включая JavaScript). К счастью, в ECMAScript 5 появилось множество вещей, которые позволили поставить язык на правильный путь (некоторые из них раскрыты в этой статье). 1. Объект в JavaScript — это просто коллекция пар ключ-значение (и иногда немного внутренней магии). Вы можете спросить: «Да как так?» Чтобы ответить на все эти вопросы необходимо забыть о классическом ОО-подходе и начать всё с нуля. 1.1.
Пустой объект — это объект без родителя, без свойств. Как правильно ставить задачи для сайта / Блог компании Кельник. Все веб-студии или интерактивные агентства начинают общение с обратившимся к ним клиентом с того, чтобы выяснить, а что же, собственно, ему нужно. Тем не менее, за 15 лет развития индустрии мало что изменилось, и до сих пор встречаются вот такие перлы. При этом во время общения с клиентом прямо чувствуется его отношение типа «давайте пропишем уже эти скучные цели-задачи, и наконец-то поиграем шрифтами». В массе заказчики не измеряют отдачу от сайта: удивительно, но их интересует сам процесс работы над сайтом, а не выгода, которую он принесёт. В то же время и исполнители, говоря о целеполагании для сайтов, часто говорят скорее о функциональности, нежели собственно о целях.
«Цели-задачи» — это что-то вроде веб-девелоперского карго-культа: большинство студий ставит макет аэропорта из соломы («Сайт должен предоставлять посетителю всю необходимую информацию и формировать солидный имидж компании») и ждёт, когда с неба свалится ящик с консервами. Поведение потребителя в «цифровую эпоху» 1. 2. 3. Книги для тимлидов и руководителей проектов. Часть 2 / Блог компании DevRain Solutions. 20 декабря 2012 в 14:32 Предыдущая статья очень хорошо была воспринята читателями, поэтому, как и обещал, сегодня подготовил статью-бонус. Итак, я просил ответить на вопрос какие книги из статьи вы читали? Результаты опроса: А теперь еще один бонус — список книг по заданной тематике, которые прислали нам читатели:Фергус О'Коннел. Идите на, пожалуйста.
Спасибо, пойду заниматься. А вам приятного чтения! Только зарегистрированные пользователи могут оставлять комментарии. Книги для тимлидов и руководителей проектов / Блог компании DevRain Solutions. Какими свойствами должен обладать хороший тимлид? Он, несомненно, должен быть технарем, иметь разносторонний опыт, уметь налаживать диалог внутри команды и с начальством, вести дискуссии и принимать решения, брать на себя ответственность, понимать бизнес-процессы, думать как заказчик и владелец бизнеса. Ну и быть немного психологом. В отечественном IT я часто наблюдаю следующую картину: тимлидом часто становился лучший (?) Разработчик из команды (aka 23-летний сеньор).
А чтобы стать руководителем проекта (project manager) иногда достаточно просто знать английский и «павэрпойнт» на уровне пользователя. Это реалии отечественного аутсорсинга и с этим нужно как-то жить. В итоге часто получается как-то так: Потому что на десять сеньоров по статистике девять тупят. Чтобы стать хорошим тимлидом, нужно перелопатить очень большое количество бизнес кейсов, побывать в шкуре не только разработчика, но и product owner и владельца бизнеса. Том ДеМарко. Спасибо за внимание!
P.S. Web Standards Days в Яндексе / Блог компании Яндекс. Редко в московском офисе Яндекса в 10 утра бывает столько разработчиков, сколько их было утром субботы 24 ноября. И это был не очередной Я.Субботник, как вы могли подумать, а встреча Web Standards Days. В этот раз её совместными усилиями организовали Яндекс и объединение разработчиков «Веб-стандарты» при поддержке W3C. Мы поговорили с организаторами WSD и некоторыми докладчиками, в том числе представляющими W3C. Они рассказали о том, как появилось мероприятие, какие задачи оно призвано решать и над чем они сами сейчас работают.
Сегодня мы делимся с вами слайдами презентаций, но скоро здесь будут доступны видео самих докладов. Bert Bos, W3C — Current work on CSS at W3C [pdf] Felix Sasaki, W3C — New developments in Semantic Web and Internationalization at the W3C [pdf] Charles McCathieNevile, Yandex — Yandex and W3C [zip] Кир Белевич, Яндекс — SVGO: оптимизатор SVG [pdf] Вадим Макеев, Opera Software — Чётко и резко. Артём Сапегин, Badoo — Grunt. Что нужно знать каждому разработчику о кодировках и наборах символов для работы с текстом, часть 2. Это вторая часть перевода статьи What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text, первая часть — тут.
Мой документ – полная чушь в любой кодировке! Если последовательность бит не выглядит разумной(с точки зрения человека), то это случай, когда документ скорее всего был неверно сконвертирован в определенный момент. К примеру мы берем текст ÉGÉìÉRÅ[ÉfÉBÉìÉOÇÕìÔǵÇ≠ǻǢ, и, не придумав ничего лучше, сохраняем его в UTF-8. Текстовый редактор предположил, что он правильно прочитал текст с кодировкой Mac Roman и теперь его надо сохранить в другой кодировке. В конце концов, все эти символы валидны в Unicode. В смысле, в Unicode есть пункт для É, для G, и так далее.
Так что мы просто сохраняем его в UTF-8: Вот так теперь текст ÉGÉìÉRÅ[ÉfÉBÉìÉOÇÕìÔǵÇ≠ǻǢ представляется последовательностью бит UTF-8. Множество раз конкретная битовая последовательность оказывается неверной в конкретной кодировке. И как же правильно менять кодировки? Что нужно знать каждому разработчику о кодировках и наборах символов для работы с текстом. Это первая часть перевода статьи What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text Если вы работаете с текстом в компьютере, вам обязательно нужно знать про кодировки.
Даже если вы посылаете электронные письма. Даже если вы их только получаете. Необязательно понимать каждую деталь, но надо хотя бы знать, что из себя представляют кодировки. Эта статья о кодировках и наборах символов. Статья Джоеэля Спольски под названием «Абсолютный минимум о Unicode и наборе символов для каждого разработчика(без исключений!)» Основы Все более или менее слышали об этом, но каким-то образом знание испаряется, когда дело доходит до обсуждения, так что вот вам: компьютер не может хранить буквы, числа, картинки или что-либо еще.
Чтобы с помощью битов представлять нечно полезное, нам нужны правила. 01100010 01101001 01110100 01110011 b i t s В этой кодировке, 01100010 представляет из себя ‘b’, 01101001 — ‘i’, 01110100 — ‘t’, 01110011 — ‘s’. И все. A Closer Look Into PHP Arrays: What You Don’t See. PHP is one unique language where the array data type has been highly generalized to suit a very broad set of use cases. For example, in PHP you can use an array to create both ordered lists as well as dicts (key/value pairs or maps) with a single data type. A PHP array isn’t an array in the traditional sense, but in fact it’s actually implemented as an ordered hashmap. There are good reasons for this. One of those reasons is that arrays traditionally do not allow you to mix types. They also don’t normally provide a simple means of random access such as mapping a key to it’s value.
At least not in the sense that we’re used to doing in PHP. To start off with a basic example: you can do the following in PHP… $array[12] = 1; $array[1] = 2; $array[17] = 3; foreach ($array as $num) echo "$num\n"; This outputs the following… As you can see, despite the numbering of the keys in our array, the elements of the array remain in the same order we defined them. array = [] array[12] = 1 var_dump($array); Over-abstractionism | Mario Peshev on WordPress Development. Coming from the JEE world, I was used to adding several layers of abstraction for high level enterprise projects.
Even back then, I was trying to evaluate the necessity of some of the layers. PHP is an interesting language, currently the most popular scripting (or maybe any programming) language at all for web projects. Developed naturally for non-developers without OOP nature (added in the next versions), loading everything on every single request, it lacks the concept of a number of complex layers with enterprise design patterns. Most projects follow flat-hierarchy, simple and straight forward structure (PHP doesn’t support multithreading as well) which leads to a simple code (easier to read), hardly maintainable and incredible to scale and extend when the project gets old and expands enough.
I’m usually ‘for’ that, as most of the projects lack any kind of maintainability. But, please, don’t overuse abstraction. Spooky Scary PHP. Web developer. Practical Code Refactoring, Part 1 - What is Good Code? Practical Code Refactoring, Part 2 - Readability. Practical Code Refactoring, Part 3 - Extensibility. Practical Code Refactoring, Part 4 - Efficiency. SQL support and Database tools. Базовые sql-инъекции в приложениях, использующих язык SQL. Руководство для чайников. «Мнемотехника» и «изучение иностранного языка» несовместимые понятия?! Давайте разберемся. Рекомендации по интерфейсу форм. Использование конструктора форм - Полное руководство по Yii - YiiFramework.ru.
Конструктор форм в Yii. Реализация пошаговой работы PHP-скрипта с помощью AJAX. Опыт создания системы навигации на Ajax. Попытка номер раз создать почти идеальный htaccess. Быстрое развертывание небольших web-приложений на сервере посредством git push. Вопросы потенциальному работодателю (перепост) PHP Unit. Опыт тестирования классов, работающих с Базой Данных. OAuth на практике. Аутентификация и авторизация пользователей сайта через популярные социалки. Unit-тестирование от начинающего начинающим. Техническое задание на сайт.