Школа разработки интерфейсов Яндекса 2013 г.

С сентября по декабрь 2013г. я учился в Школе разработки интерфейсов Яндекса. Было очень здорово и интересно. Постараюсь позже написать по-подробнее. Сейчас я просто выложу экзаменационную работу, чтобы не забыть о её существовании.)

Итак, экзаменационная работа – http://sky2high.net/etc/projects/shri_exam/ и её исходный код – https://github.com/DimitryDushkin/shri_exam_1

Если кому интересен пример приложения на БЭМ (блок, элемент, модификатор), то можете посмотреть на облегченную версию задания на БЭМ – https://github.com/DimitryDushkin/shri_exam_1_bem

Не включается Macbook Air 13 2013 года выпуска

Это просто жесть, как я сейчас починил MacBook Air 13 2013 года выпуска.)
В общем, он у меня был в сумке и чехле, и сумка упала со стула. Высота небольшая, я даже не парился.

Через минут 10-15 я включил его (открыл крышку) поработал, закрыл крышку, а потом еще раз её открыл и НИЧЕГО. Черный экран. На hard reset (долгое нажатие power) не откликается. Ну, думаю, всё ппц.

Оказывается, я не один такой. По ссылке была горячая дискуссия по этому поводу. И нашёлся ВНЕЗАПНЫЙ способ починить: оказывается дело в сенсоре внезапного движения (SMS, sudden motion sensor). Он как-то глючит на новых моделях.

Короче, чтобы починить, нужно немного приоткрыть крышку, крепко взять мак в руки и сильно трясануть его пару раз (как писалось: «SHAKE IT LIKE YOU MEAN IT!»). Потом открыть крышку до конца и нажать Power. И та-да! Мак включается как ни в чем не бывало.))

Презентация с доклада по защите кандидатской диссертации

28 октября защитил диссертацию!)

Как и обещал, выкладываю презентацию с защиты кандидатской. Работа, кстати, называется «Методы и алгоритмы выбора композиции веб-сервисов в системах с сервисно-ориентированной архитектурой» по специальности 05.13.15 «Вычислительные машины, комплексы и компьютерные сети».

Кому интересны детали, смотрите дополнительные слайды в конце. Основные слайды я старался сократить, как мог, потому что суть доклада – это общая характеристика работ, на детали в 15 минутном выступлении времени нет. Доп. слайды оказались полезны во время ответов на вопросы.

PS: Возможно, позже напишу резюме по всему процессу подготовки диссертации, об аспирантуре и пр. Пока надо морально от этого отдалиться.)

Диссертация и автореферат

28 октября защищаю тут кандидатскую, так что все интересующиеся могут

скачать автореферат моей диссертации, скачать саму диссертацию.

Думаю, такие вещи из диссертации, как:

  • пример решения задачи машинного обучения (определение класса чувствительности),
  • решение задачи многокритериального выбора,
  • архитектура СОА систем,
  • способ определения времени обработки запроса с наименьшим разбросом значений
  • и некоторые другие

могут быть кому-то интересны =)

Позднее выложу презентацию с доклада.

PHP + PDO + SQL Server + SQL-запрос LIKE = возможные проблемы

Если у вас возникает ошибка

SQLSTATE[IMSSP]: Tried to bind parameter number 0.  SQL Server supports a maximum of 2100 parameters.

при запросе типа

SELECT * FROM table_name WHERE name LIKE 'nick'

с использованием подготовленного SQL-запроса в PHP PDO на сервер БД Microsoft SQL Server, то знайте в чем беда: функция prepare() уже сама проставит все кавычки и отметки (юникод или ASCII), за неё это не следует делать. А теперь конкретный пример: есть запрос SELECT * FROM table_name WHERE name LIKE ‘%<something>%’ Дабы использовать всю мощь PDO в борьбе с SQL-инъекциями следует использовать методы prepare и execute. Как это делать неправильно:


$sql = "SELECT * FROM table_name WHERE name LIKE N'%:name%'";

$db = new PDO("...");

$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // catch error via normal "try ... catch"

$statement = $db->prepare($sql);

$statement->execute(array(':name' => 'Наташа'));

Казалось бы, всё правильно. Мы поставили символ N в $sql, который говорит SQL Server, что поиск пойдет по тексту в кодировке юникод, обрамили сам запрос в кавычки. Но нет! Лезут ошибки. А дело оказалось в том, что prepare() сам уже проставит всё, что нужно. Таким образом правильный код выглядит следующим образом:


<strong>$sql = "SELECT * FROM table_name WHERE name LIKE :name";</strong>

$db = new PDO("...");

$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // catch error via normal "try ... catch"

$statement = $db->prepare($sql);

<strong>$statement->execute(array(':name' => '%Наташа%'));</strong>

Помог ответ на этот вопрос (хотя там ошибка другая у товарища). И еще, после дочитал-таки официальный ман по теме и оказалось в последнем примере как раз говорится о такой ошибке. В общем, вся сложность в её выявлении оказалось в неадекватном сообщение об ошибке в SQL Server.

ModX на Linux + удаленный Microsoft SQL Server ≠ love

Так вышло, что надо было реализовать следующую конфигурацию:

Linux (Debian) + Apache + PHP + ModX revolution + удаленный MS SQL Server

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

  1. ModX 2.1+ использует Microsoft SQL драйвер для PHP (это набор функций типа sqlsrv_*). Однако этот драйвер был выпущен только для Windows платформы. Будущий релиз на Linux крайне туманен.
  2. Есть возможность использовать открытый драйвер  FreeTDS, но тогда придётся все функции типа «mssql_*» переназначить на функции «sqlsrv_*«. Некоторые ребята сделали подобный трюк для Drupal, но при этом отмечалась общая нестабильность конфигурации и работало это только для MS SQL Server 2008.

Хорошо, что заказчик согласился сменить конфигурацию, и сейчас ModX отлично работает на Windows Azure (облачный IIS + MSSQL).

Обновлен раздел с интерфейсами

Полностью обновил раздел на сайте с моими интерфейсами. Там вы найдёте как неумелые поделки от 2007 года, так последние наработки по системе, которая реализует некоторые положения диссертации.

Отмечу, что под дизайном я понимаю проектирование взаимодействия: проработка сценариев работы с интерфейсом, расположение, размер и поведение элементов на странице и пр. Под декоративными работами я подразумеваю оформление дизайна: подбор фона, цвета меню, формы кнопок, рамок, таблиц и пр. Я нисколько не умаляю важность декоративных работ, просто для ясности отделяю эти понятия.

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

Исходный код eco.asmon.ru

Выкладывают в свободный доступ исходный код проекта Карты сдачи вторсырья о котором я как-то писал. Код может быть интересен как пример использования Google Fusion Tables, Google Maps и Django.
Код: https://github.com/DimitryDushkin/eco_map.

Интерактивная карта пунктов приёма вторсырья.