Как стать автором
Обновить
45
0
Артём Курапов @tot_ra

Пользователь

Отправить сообщение

Путь к Федеративному GraphQL

Время на прочтение11 мин
Количество просмотров6.6K

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

[Если вы спешите, проскрольте ниже к урокам и гляньте на открытый код graphql-schema-registry]

Читать далее
Всего голосов 11: ↑10 и ↓1+9
Комментарии3

Конференции для разработчиков c видео презентациями

Время на прочтение2 мин
Количество просмотров17K
Для разработки надо идти в ногу со временем, и хорошее место узнать что-то новое и получить ценный опыт — концеренции и мастер классы. Я вот решил собрать некоторые значащие конференции и их видеоканалы с выступлениями. Старался не включать мелких конференций, слишком отдалённых от программирования (по PM и маркетингу), или не выкладывающих видео.

К сожалению некоторые конференции
  • заказывают сторонних людей, которые выкладывают всё на свой канал вместе с другими конференциями или личным хламом;
  • встраивают в свой сайт без возможность шаринга, а порой и вообще закрывают под ключ или с оплатой;
  • не выкладывают материалы и трёхлетней давности;
  • не заботятся о качестве видео — тёмный зал, совершенно не видно презентации, нет монтажа, неполадки со звуком, неслышно вопросов и т.п.

Понятно что у организаторов своя бизнес-модель и возможности, но хочется унифицировать и мотивировать организаторов относиться к докладам и их авторам с уважением, выкладывать видео со временем, синхронизировать со слайдами.
С видео Без нормального видео

Читать дальше →
Всего голосов 27: ↑25 и ↓2+23
Комментарии30

А вы форматируете откровенное содержание?

Время на прочтение1 мин
Количество просмотров713
Предлагаю форматировать содержание со всякой жестью дополнительными атрибутами у html-элементов…

Читать дальше →
Всего голосов 65: ↑22 и ↓43-21
Комментарии20

Гуглобаг

Время на прочтение1 мин
Количество просмотров328
Поелику до Гугла достучаться не так то просто, особенно когда ребята заняты своим модным офисом, обращаю внимание общественности на такие перлы перевода. Если это не ляп а «особенности работы с русскоязычной аудиторией» то уж простите.

image
Всего голосов 21: ↑7 и ↓14-7
Комментарии15

О тестировании web-приложений

Время на прочтение7 мин
Количество просмотров13K
Тестирование софта это процесс, участвующий во всех жизненных циклах его разработки, который занимается проверкой и планированием требований продукта, подготовкой и проведением изменений в разрабатываемой системе. Как следствие — находятся несоответсвия требованиям и ошибки, оцениваются инструменты которые были использованы.
А если отвлечься и рассматривать системно, то роль тестера на самом деле лежит в каждом человеке. Если смотреть на проект как на человека, то роли
  • управляющего проектом это позвоночник и вегетативная нервная система
  • программисты это скелет и моторика
  • аналитики это органы чувств
  • тестеры это совесть

Quality Assurance часто считается синонимом тестирования, но на самом деле это методика предотвращения ошибок, а не их поиска и исправления. Качество в этом смысле — характеристика сделанного продукта.

Формально говоря, тестер должен проверять даже техническое задание, план проекта и анализ на логичность и понятность, а не только код и интерфейс программы. Тестирование как независимая дисциплина в общем потоке разработки ПО появилась в начале девяностых, когда стали более важны аудитория (клиенты), качество и время разработки.
Важность тестирования ПО особенно важна в критических системах. К примеру аппарат по лучевой терапии Therac (1985) облучил смертельной дозой радиации 6 человек из-за отсутсвия проверки состояния агрегата в коде и валидации. Или марсоход в 1999 году принёс убыток в 125 млн долларов из-за непродуманности единой системы измерения между коммандами разработчиков. И даже в Эстонии при электронных выборах были проблемы из-за плохого нагрузочного тестирования.
Основные принципы тестирования воплощены в небольшом документе ISTQB и в книге «Foundations of software testing».
Вся «прелесть» специальности тестера в том что как правило для этого не нужны большие познания в программировании и люди далёкие от web-строительства могут себя попробовать в этой роли.
Читать дальше →
Всего голосов 27: ↑21 и ↓6+15
Комментарии6

Пишем Facebook приложение

Время на прочтение4 мин
Количество просмотров1K
Facebook — популярная социальная сеть где можно написать своё приложение. Не люблю толочь воду в ступе, поэтому сразу к делу. Встраивать можно двумя направлениями: внешнее приложение в Facebook или Facebook-данные во внешнее приложение (aka Facebook Connect). Тут я буду говорить о первом, что в принципе более трудоёмко и интересно. Как правило смысл facebook-приложение несёт две функциональности — взаимодействие с друзьями и информативное интегрирование в профиль пользователя.

Основы


Встраивать приложение можно в следующие места..
  • Canvas — собственно страница с приложением. Доступна по ссылке apps.facebook.com/НАЗВАНИЕ_ПРОГРАММЫ
  • Profile box — маленький бокс внутри самого профиля пользователя
  • Profile tab — новый таб в профиле
  • Boxes tab — небольшой блок в табе boxes
  • News feed — доступ к потоку обновлений
  • Requests box — интерактивные сообщения другим пользователям

Интеграция производится смешанными возможностями..
  • REST API (http://api.new.facebook.com/restserver.php) который даёт «тяжёлый» доступ для backend-а с возможностями загрузки фото, видео, получении списков друзей, событий, комментариев и тп.
  • FQL — способ запрашивать данные по REST не просто через параметры метода, а уже через SQL-подобный синтаксис
  • FBML — урезанный HTML + свои тэги которые Facebook интерпретирует в окне в своём стиле и дизайне и кэширует при инлайновом показе. Куча заморочек с встроенным валидатором тэгов
  • xFBML — FBML-тэги используемые в своём приложении
  • FBJS — урезанный JS

Два пути


Теперь когда основные термины понятны перейдём к самому приложению которое размещается в Canvas. После создания нового приложения через developer app, скачивания REST-библиотеки для php, выкладывании приложения на свой сайт и установки в настройках URL для Canvas становится видно что доступно два способа запуска — через iframe (+XFBML) либо чистый FBML который будет храниться на facebook. Понятное дело первый вариант самый простой. После создания программы и добавления/подтверждения в своём профиле, показ Canvas'а будет сопровождаться обычным iframe + GET-параметрами с префиксом fb_sig_, из которых самый важный это fb_sig_canvas_user. Второй вариант более муторный, но более тесно связан с FB.



Читать дальше →
Всего голосов 13: ↑13 и ↓0+13
Комментарии4

Транзакции InnoDB

Время на прочтение4 мин
Количество просмотров4K
InnoDB это транзакционный, реляционный движок работающий на основе MySQL сервера. Начиная с 2001 года он поставляется в стандартной сборке, а с версии 5.1 может устанавливаться в качестве плагина (без необходимости перекомпилировать ядро сервера). Синтаксис очень простой.
START TRANSACTION;
...
COMMIT; -- или же ROLLBACK; если что-то пошло в логике не так

Про определение


Определение транзакционности и реляционности значат во-первых значат полноценную связанность таблиц через FK и как следствие — целостность данных при удалении рядов. С MyIsam как известно приходилось вручную удалять связанные данные в нескольких таблицах, в InnoDB — каскадное удаление одним запросом. Во-вторых поскольку для БД немыслимы параллельные версии данных как в SVN и некому эти версии объединять в одну ветку, но при этом необходима параллельная работа нескольких процессов (пользователей) с одними данными, то в качестве решения становится транзакции.
Очередь из запросов-автомобилей теперь пополняется атомарной транзакцией-автобусом. Естественно это плохо, поскольку чем длиней и дольше выполняется транзакция тем больше параллельных процессов будут ждать его. Для ускорения работы создаются остановки — типы и уровни блокировки данных. Для InnoDB по умолчанию это блокирование на уровне строки (по PK), тогда как в MyIsam атомарная операция блокирует всю таблицу.

Читать дальше →
Всего голосов 13: ↑12 и ↓1+11
Комментарии2

Диа(в)логи от bloggingheads.tv

Время на прочтение1 мин
Количество просмотров597

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

Есть две поговорки — в «споре рождается истина» и «заставь дурака молиться, он и лоб расшибёт». Диавлоги имеют свою нишу, и наблюдать за такой встречей третьим лицам очень интересно. Сайт активно сотрудничает с NYTimes и позволяет слушать диалоги многих экспертов по разным темам.

Оригинал
Всего голосов 3: ↑2 и ↓1+1
Комментарии1

20 критических уязвимостей в программе

Время на прочтение1 мин
Количество просмотров505
Я думаю самая главная ошибка — между креслом и клавиатурой, но если разбирать больше чем «не заметил» и предположить что новички не совсем знают о критических ошибках которые могут вызвать серъёзные последствия типа потери данных, вызова инородного кода, недоступность сервиса или кражи данных, то чёрный список выстроится следующим образом:
  1. Неверная валидация ввода данных
  2. Неправильная кодировка или отсутсвие обработки данных вывода
  3. SQL-инъекция
  4. Cross-site scripting
  5. Неограниченность в консольном доступе (OS-инъекция)
  6. Передача личных данных по малозащищённому каналу
  7. Межсайтовый запрос как подделка внутреннего запроса
  8. Соревнование потоков использующих один ресурс и неверное закрытие его использования
  9. Слишком информативное содержание об ошибке
  10. Выход указателя программы за пределы отведённой памяти
  11. Внешнее управление внутренними переменными и файловыми путями
  12. Генерируемый код и его потенциальная инъекция
  13. Автообновление программы полученным кодом без подтверждения источника
  14. Грязная инициализация — доступны данные предыдущих инициализаций
  15. Математика с ограниченными числами
  16. Ненадёжная авторизация и за-hard-коденые пароли
  17. Использование подверженного риску или взломанному алгоритму криптографии
  18. Исполнение с повышенными привилегиями
  19. Использование недостаточно случайных чисел
  20. Валидация на стороне клиента но не на стороне сервера
Читать дальше →
Всего голосов 22: ↑16 и ↓6+10
Комментарии18

Пишем Flex приложение с BlazeDS, Jboss и JMS

Время на прочтение5 мин
Количество просмотров1.9K
Я как и многие веб-разработчики краем уха слышал о Flex, которая по сути — тот же Flash и swf-файл, но в сути не разбирался. Недавно узнал об интересных возможностях передачи сообщений от сервера клиенту, известной как server push. Это значит что можно обходиться без периодических ajax-запросов, а обновлять данные в режиме реального времени (отсюда возникает понятие потока), например для чата. Я постараюсь описать создание и архитектуру приложения = браузер / Flex / JBoss / BlazeDS / JMS, откуда уже информация может идти в (Spring / Hibernate / Mysql) и обратно.

Читать дальше →
Всего голосов 13: ↑10 и ↓3+7
Комментарии5

Об информационной войне

Время на прочтение4 мин
Количество просмотров542
Я недавно делал свой скромный вклад в «первую блоггерскую» как писала Лента.ру, описывая своё мнение на английском в меру своих сил. Информационное противостояние — сродни риторике и рэпу. Серъёзные мужики из штаба вооружённых сил естественно плевали на общественное мнение, потому что для них главное это контролировать свои действия. А зря, потому что это может не просто ограничить их возможности, но и повлиять на моральный дух (как это было при первой мировой с коммунистическими листовками например).
Семь типов пропаганды:
  1. Эмоциональная привлекательность. Надо создать ощущение безопасности, любви, счастья у человека например при помощи фотографий таких людей использующих товар; показать мужественность и заботу о народе
  2. Девиз. Используйте короткую запоминающуюся фразу, лозунг, slogan. Вспоминаются как корпоративные «connecting people», так и «в сортире замочим».
  3. Признание. Возьмите знаменитость, Вахтанга Кикабидзе например, что-бы он поддержал идею или стал лицом революции/товара/идеи.
  4. Автобус музыкантов. Создайте ощущение что так поступают все — восстанавливают территориальную целостность или защищают своих граждан.
  5. Причина и следствие. Отбросьте все другие факторы и скажите что — только благодаря этому товару вы стали умней; раз взорвали небоскрёб, то виноваты только террористы.
  6. Сравнение возможностей. При совмещении с эмоциональной привлекательностью — отличный пример при сравнении «плохого» моющего порошка с хорошим. В нашем случае — может усиливать разницу в силе армий, в числе жертв и тп.
  7. Символ. Как правило графический знак или персонаж, вызывающий явную ассоциацию, как например у религий.

Читать дальше →
Всего голосов 22: ↑15 и ↓7+8
Комментарии5

Пространство имён в php 5.3 и php 6

Время на прочтение2 мин
Количество просмотров6.2K
Пространство имён (namespace/package) знакомо java и c# программистам, теперь доступно и в php. Нужно оно для того, что-бы не писать длинные перефиксы к названиям классов, как сейчас делается в Zend, PEAR и других библиотеках и платформах для совместимости.
Вместо этого классы, функции, интерфейсы (абстрактные классы) и константы могут быть объединены в одно пространство имён. Глобальные переменные в это пространство не входят.

Простой пример


Определяется пространство ключевым словом namespace
//определяем класс в пространстве
namespace MyCMS::Core;
class System{}

Использование этого класса в третьих библиотеках осуществляется ключевым словом use
require_once('mycms/core.php');
use MyCMS::Core::System; //импортируем только заданный класс
$objSystem=new System;

Читать дальше →
Всего голосов 38: ↑33 и ↓5+28
Комментарии78

Кэширование js сжатием gzip

Время на прочтение2 мин
Количество просмотров4K
Cache — временные данные или устройство по их хранению, созданные для ускорения чтения/записи. Все программисты это знают. Ускорение загрузки web-сайтов тема обширная, начинающаяся с сервера и заканчивающаяся клиентом. К сожалению я не нашёл более-менее подходящих решений по объединению и кэшированию js-кода, поэтому к своему блогу я написал свою схему, о которой вкратце и расскажу..
Существует сжатие «packer», которое убирает все символы форматирования и переименовывает имена функций и переменных в js и предоставляет т.н. minified-версию скрипта. Все с этим прекрасно знакомы на примере больших библиотек jQuery, TinyMCE, prototype. Кроме того что код становится совершенно не читаемым, это может вызвать неработоспособность кода, когда имена переменных динамические.
Моя идея простая — разделять js/css по файлам разработчикам надо для поддержания модульной структуры. Обычно я в контроллере создаю список файлов которые надо присоединить к данному документу, вместо того что-бы прописывать это вручную в темплейте. Но теперь надо сделать так, что-бы до показа темплейта вызывалась функция кэширования, которая проходилась бы по списку, проверяла из них локальные файлы на время изменения, объединяла в один файл и создавала или перезаписывала gz-файл с именем, сформированным из md5-хэша имён входящих файлов.
Всё просто и в сумме заняло часа 4 на раздумье. Привожу метод cache_js из класса Controller.
Читать дальше →
Всего голосов 28: ↑24 и ↓4+20
Комментарии29

MySQL rownum

Время на прочтение1 мин
Количество просмотров3.1K

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


Есть таблица меню в БД с полем порядка order_id, но порядок неправильный и надо порядок обновить по алфавиту другого поля title. Сортировка по полю title исключается, потому что таблица представляет из себя иерархическое меню, где порядок может менять пользователь устанавливая order_id. Использовать отдельно серверную обработку (php) тоже невыгодно — лишнее разделение бизнес логики если это можно сделать в БД, да и на случай больших объемов данных это займёт больше ресурсов.

Решение


В MySQL к сожалению отсутсвует такая возможность ROWNUM, RANK(),
ROW_NUMBER() как в ORACLE или MSSQL. Присутсвие _rowid никак не влияет
на ситуацию. В нашем случае можно использовать переменные, введённые с пятой версии (или раньше):
SET @rank=0;
SELECT @rank:=@rank+1 AS rank, id FROM menu;

Для обновления такой таблицы через саму себя у меня не получилось, поэтому я просто скопировал таблицу под другим именем и выполнил такой запрос:
SET @rank=0;
UPDATE `menu` SET order_id=(
SELECT @rank:=@rank+1 FROM `menu2` WHERE `menu`.id=`menu2`.id LIMIT 1
) WHERE parentID=0 ORDER BY `title` ASC;



Оригинал
Всего голосов 9: ↑9 и ↓0+9
Комментарии1

Десять забытых тэгов

Время на прочтение2 мин
Количество просмотров562
Тэги как кирпичи всякого документа основанного на XML должны выбираться с большим прагматизмом, что-бы потом не удалять ненужные (т.н. deprecated) и не тормозить внесение новых (sound, video). В свете того что я сам этой темой пристально занимаюсь решая что нужно оставить в WYSIWYG-редакторе и что добавить, а так-же меня интересует типографика и семантика, то читая Никиту решил тоже поштудировать эту тему.
  1. a — мало кто помнит почему самый популярный тэг ссылки использует такое название да ещё и параметр href. Ещё меньше пишущих статьи используют этот тэг по прямому назначению, а именно в качестве якоря к участку документа, определённому параметром name. С переходом на динамическое содержание при помощи ajax, якорь получил новую жизнь, поскольку в URL после # можно прописать адресс открытого письма (см. gmail), но мало кто это замечает.
  2. address — единого мнения нет, то-ли это физический почтовый адресс, то-ли это часть описания документа с email-ом.
  3. abbr — отличный тэг для сокращений. Используя параметр title как в картинках, при наведении курсором появится полное название
  4. ins и del — очень часто статьи в блогах и ЖЖ меняются, при этом люди пишут что-то типа «upd. вопрос разрешился», тогда как логичней использовать для этого соответсвующие тэги. Само собой когда статья имеет историю изменений типа wiki, то система должна быть посложней.
  5. sub и sup — эти тэги находят как правило те кто хочет оформить простейшую математику или химию. Впрочем степени, атомарные и изотопные индексы не единственная функция. Если вы когда-либо писали дипломную работу то наверняка столкнулись с научным оформлением ссылок на источники, а сноски с использованием sup вкупе с anchor активно используются взамен неподдерживаемого тэга fn.

Читать дальше →
Всего голосов 37: ↑32 и ↓5+27
Комментарии35

Редакторы кода с помощью javascript

Время на прочтение2 мин
Количество просмотров1.4K
Очень часто в web-проектах надо использовать визуальный редактор кода (richtext code editor), похожий на существующие IDE, с номерами строк и подсветкой кода. Наиболее часто он используется в редактировании исходного кода статьи или шаблонов в админке. В этой статье я перечислю существующие скрипты по аналогии со списком WYSIWYG-редакторов.
Практически все существующие визуальные редакторы создают iframe и генерируют внутри страницу в соответсвии с данными javascript-объекта, занимающимся всеми задачами по генерации кода и обработке клавиш.
Основанные на iframe:
  • EditArea — наиболее популярный редактор благодаря табуляции, gzip, совместимость пространства имён с другими библиотеками
  • CodePress — парсит SQL, Perl, C#, XSL, ASP, VBscript. Отдельные движки для разных браузеров (gecko=firefox, ie, opera). Создаётся iframe со внутренним CodePress'объектом с обращением через contentWindow. Сразу внутри скрипта идёт поиск textarea-элементов по классу, так что с динамическими ajax-редакторами прийдётся изменять скрипт. Кроме того нумерация (до 1500) строк сделана при помощи одной картинки
  • CodeMirror — парсит JS, HTML, CSS

Напомню что iframe не соответсвует XHTML спецификации, а с использовать
предложенный тэг object с не сильно получится, из-за ограничения на
доступ внутренних dom-элементов (поправьте если я неправ).
Основанные на div'ах
  • MDK-editor — самый нормальный редактор, есть контекстное меню. В минусы можно отнести некрасивый скин, небольшую тормознутость и неизвестную лицензию на использование.
  • Helene — вместо iframe используется фоновый div и динамически позиционируемая textarea поверх. Поскольку изменяется только один ряд, то невозможно выделить нескольких строк сразу
  • 9ne — похож на консоль, но нет возможности выделения всей строки Shift+End. Эмулирует каретку мигающим div'ом.

PS. Аннонсирую что в скором времени выйдет блог-движок моего производства…

Оригинал
Всего голосов 17: ↑16 и ↓1+15
Комментарии7
1

Информация

В рейтинге
Не участвует
Откуда
Таллин, Эстония, Эстония
Зарегистрирован
Активность