Search
Write a publication
Pull to refresh
18
0
Владимир Шишминцев @Pingvi

Разработчик Web решений

Send message

Back-инжиниринг Caesar III

Reading time11 min
Views73K
Мне нравится играть в игры, особенно в экономические стратегии, хочу рассказать про градостроительный симулятор из детства — Caesar III, как принято говорить, тёплый и ламповый. Игра была выпущена в 1998 году, знатоками своего дела, Impressions Games. Это экономический симулятор управления древнеримским городом в реальном времени. Через много лет я решил вновь пройти её, а затем постараться продлить удовольствие от игры, посмотреть ресурсы и вникнуть в игровую логику с точки зрения программиста.

Под катом я опишу процесс извлечения текстур, поиск игровых алгоритмов и расскажу как хобби превратилось в самостоятельный проект. А еще будет палитра RGB555, IDA, HexRays и немного кода.

Посмотреть, что под капотом

Программирование и стриптиз

Reading time1 min
Views99K


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


Читать дальше →

Графовая база данных Neo4j в PHP

Reading time5 min
Views58K
В последнее время я все чаще слышу о NoSQL и о графовых базах данных в частности. Но воспользовавшись хабропоиском с удивлением обнаружил, что статей на эту тему не так и много, а по запросу «Neo4j», так вообще 4 результата, где косвенно упоминается это название в тексте статей.

Что такое Neo4j?


image
Neo4j — это высокопроизводительная, NoSQL база данных основанная на принципе графов. В ней нет такого понятия как таблицы со строго заданными полями, она оперирует гибкой структурой в виде нод и связей между ними.

Как я докатился до этого?


Уже более года я не использовал в своих проектах SQL, с того времени, как попробовал документо-ориентированную СУБД "MongoDB". После MySQL моей радости не было предела, как все просто и удобно можно делать в MongoDB. За год, в нашей студии создания сайтов, переписали тройку CMS, использующих основные фишки Mongo c её документами, и с десяток сайтов работающих на их основе. Всё было хорошо, и я уже начал забывать, что такое писать запросы в полсотни строк на каждое действие с БД и все бы ничего пока на мою голову не свалился проект с кучей отношений, которые ну никак не укладывались в документы. Возвращаться к SQL очень не хотелось, и пару дней я потратил чисто на поиск NoSQL решения, позволяющего делать гибкие связи — на графовые СУБД. И по ряду причин мой выбор остановился на Neo4j, одна из главных причин — это то, что мой движок был написан на PHP, а для неё был написан хороший драйвер "Neo4jPHP", который охватывает почти 100% REST-интерфейса, предоставляющегося сервером Noe4j.
Читать дальше →

Простой индикатор загрузки картинки на Jquery

Reading time2 min
Views35K
Коль скоро быстрый интернет пока еще доступен не везде, не на всех устройствах, пришла мысль что неплохо бы облагородить процесс загрузки картинок. Задача эта не слишком функциональна, однако дизайн-фрики, полагаю, не раз задавали себе вопрос, как просто реализовать индикацию подгрузки картинки.

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

Читать дальше →

Простой мониторинг нагрузки на сервер в реальном времени с веб-интерфейсом

Reading time2 min
Views81K
Сегодня существует довольно много профессиональных инструментов для мониторинга состояния серверов с обилием настроек, плагинов, поддержкой сразу множества машин и т.д., это известные Nagios, Zabbix, Munin, Cacti и многие другие.


Но в этом посте речь пойдет об очень маленьком и простом, но от этого не менее полезном инструменте: инструменте для мониторинга Scout Realtime. Этот написанный на Ruby open source проект позиционируется разработчиками как современная замена консольной утилите top с выводом статистики использования диска, памяти, сети, CPU и запущенных процессов. Все это отображается в реальном времени с плавными графиками. Во время диагностики работы сервера, иногда полезно пару минут понаблюдать за показателями, и проследить их изменение во времени (в отличие от гирлянды мерцающих чисел в терминале, отображающих данные исключительно на текущий момент).
Читать дальше →

Приемы неявного вызова php кода, применяемые во вредоносных скриптах

Reading time2 min
Views34K
В процессе лечения сайтов обнаруживается множество разновидностей хакерских шеллов и бэкдоров. Скрипты отличаются функционалом и способом обфускации исходного кода, но у всех есть общая черта — это неявное объявление переменных и функций, а также косвенный вызов функций.

Данный подход популярен среди разработчиков вредоносного кода, так как с одной стороны значительно усложняет анализ исходного кода, а с другой позволяет хранить код в текстовых данных. Например, часть вредоносного кода может загружаться со стороннего сайта, из базы данных, мета-данных jpeg/png/gif или передаваться в запросе к скрипту. Кроме того, часть кода, представленная в виде обычной текстовой строки, может быть легко зашифрована.

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

Несмотря на все многообразие вредоносного кода, существует не так много вариантов объявления и косвенного вызова функций. Ниже представлены примеры различных техник скрытого вызова кода. Для простоты и наглядности пусть «вредоносный код» представлен вызовом

echo "Test"


который выводит слово «Test» на странице. Естественно, в реальных шеллах и бэкдорах имена переменных и функций, а также исполняемый код не хранятся в открытом виде и в большинстве случаев обфусцированы.

Читать дальше →

Релиз KPHP и движков

Reading time6 min
Views164K
Довольно часто, выступая на различных конференциях, мы делились желанием выпустить под открытой лицензией KittenPHP, согласно традиции, заложенной крупными IT-компаниями, такими как Google и Facebook.

Это событие несколько раз откладывалось в связи с опасением, что нам не хватит сил и времени на взаимодействие с opensource-сообществом, однако в конце концов заветный день настал, и код KPHP и некоторых других инструментов, используемых внутри проекта, был выложен в открытый доступ.

В связи с этим под катом вас ждет более подробный рассказ о внутреннем устройстве ВКонтакте и тех инструментах, которые сегодня стали доступны opensource-сообществу.


Читать дальше →

Сравнение сервисов для автодополнения адресов в форме

Reading time3 min
Views95K
Автодополнение адреса


На Хабре не раз поднимался вопрос автодополнения адресов в форме (раз, два, три).

Но вот и перед мной появилась задача реализовать такое автодополнение для небольшого интернет магазина. Критерии были такие:
  • Автодополнение адресов только Москвы
  • Автодополнение адреса одной строкой
  • Решение должно быть бесплатно (лимит запросов не менее 1000 в сутки)
  • Возможность подключить без дополнительных JS библиотек. (Я использую AngularJS Bootstrap-UI, в котором есть директива Typeahead, реализующая автодополнение формы)
  • Стопроцентный uptime не обязателен


Но какой источник данных выбрать? Я выбрал целых четыре, и решил их сравнить: в одном углу ринга заморские Google Geocode и Google Autococomplete, а в другом отечественные КЛАДР в облаке и DaData подсказки.

DISCLAIMER: Автор никак не причастен к разработчикам ни одного из представленных сервисов.
Интересно? Тогда прошу под кат

Новый интерфейс Яндекс.Диска. Как мы его делали и почему вообще этим занялись

Reading time5 min
Views51K
Сегодня Яндекс.Диск полностью обновил свой веб-интерфейс. Причём он получил не только новый внешний вид – он сменил концепцию и логику, которые за ним стоят. Более того, многие части этого — начало важных изменений для интерфейсов Яндекса в целом. Мы двигаемся к тому, чтобы перестать быть сборкой разных сайтов под одним логотипом, а стать в некоторой степени единым веб-приложением.

В первой версии Яндекс.Диска логика его веб-интерфейса мало чем отличалась от той, что используют другие облачные хранилища: это были такие же папки и файлы, но внутри нашей Почты. Теперь важен контент и его подача.

image

Меня зовут Сергей Томилов, я был одним из тех, кто работал над новым дизайном. Сегодня я хочу рассказать вам о том, как шла работа, какие у нас были сложности, какая за всем этим стоит концепция и как она влияла на дизайн.
Читать дальше →

PHP и различные виды NoSQL

Reading time11 min
Views69K


В последнее время набирают популярность различные NoSQL базы данных. Эта статья начиналась как изучение особенностей графитовой графовой базы данных Neo4j. Но, в процессе подбора информации, мне захотелось систематизировать информацию о NoSQL решениях и о графовых базах данных, в частности.
В ходе этого небольшого исследования, были выбраны для подробного рассмотрения СУБД, успешно применяющиеся в области Web. И, поскольку в тегах присутствует «PHP», я выбирал СУБД, которые уже можно использовать с этим языком.

Читать дальше →

Адаптивные изображения без шаманства

Reading time5 min
Views40K
Все, кто сталкивался с задачей сделать адаптивную графику, знает, что решений уже масса, но никакого единогласно принятого не существует. Зачастую выбор и применение решения для адаптивных изображений становятся головной болью фронтенд-разработчиков. Им приходится заменять src картинок, подгружать однопиксельные изображения и лепить прочие костыли. Нас это не устроило и мы решили сделать свой мотороллер.

На типичных сайтах изображения могут появляться тремя способами.
  1. Быть элементами дизайна сайта (бекграунды, кнопки и т.д.).
  2. Загружаться через специальные модули (например, изображения в фотоальбом).
  3. Вставляться через WYSIWYG-редактор CMS (например, в текст статьи).


Мы захотели получить такое решение, которое было бы некой «надстройкой» над сайтом. Чтобы можно было не лезть в код CMS, через которую загружаются изображения на сайт, а также не готовить адаптивные картинки вручную.

Сначала на помощь приходит реализация Adaptive Images
Но что происходит потом?

Как устроен мир семантической микроразметки

Reading time13 min
Views155K
Я работаю в команде семантического веба в Яндексе. Мы занимаемся тем, что создаем продукты на основе семантической разметки, делаем свои расширения и участвуем в развитии стандарта Schema.org.

Мир семантической разметки устроен не вполне просто и на первый взгляд даже не всегда логично. Для того чтобы облегчить жизнь тем, кто хочет в нём разобраться, мы решили написать рассказ о том, какой бывает разметка, что дает и как ее внедрить.



Под микроразметкой (или семантической разметкой) мы подразумеваем разметку страницы с дополнительными тегами и атрибутами в тегах, которые указывают поисковым роботам на то, о чем написано на странице.

Микроразметка состоит из словаря и синтаксиса.
Что и как, подробно...

Использование EXPLAIN. Улучшение запросов

Reading time10 min
Views192K
Когда вы выполняете какой-нибудь запрос, оптимизатор запросов MySQL пытается придумать оптимальный план выполнения этого запроса. Вы можете посмотреть этот самый план используя запрос с ключевым словом EXPLAIN. EXPLAIN – это один из самых мощных инструментов, предоставленных в ваше распоряжение для понимания MySQL-запросов и их оптимизации, но печальным фактом является то, что многие разработчики редко его используют. В данной статье вы узнаете о том, какие данные предлагает EXPLAIN на выходе и ознакомитесь с примером того, как использовать его для оптимизации запросов.
Читать дальше →

Плагин для Bootstrap 3, повышающий accessibility интерфейсов

Reading time2 min
Views17K
Набор инструментов Bootstrap пользуется достаточно большой популярностью среди разработчиков. Тем не менее, интерфейсы, получающиеся с его помощью, зачастую имеют проблемы с accessibility, то есть с доступностью для пользователей с ограниченными возможностями. В результате, получившийся интерфейс может не соответствовать предъявляемым к нему требованиям, так как часто accessibility является одним из пунктов технического задания, да и в принципе не очень доступный интерфейс — это уже плохо.

Команда разработчиков PayPal некоторое время работала над решением ряда проблем доступности в Bootstrap 3, итогом чего стало появление accessibility плагина, который недавно был выложен в открытый доступ. Фактически он позволяет реализовать доступность интерфейса на базовом уровне без каких-либо особых знаний в этой области.
Читать дальше →

Горизонтальное масштабирование PHP приложений. Часть 1

Reading time5 min
Views32K

Итак вы сделали сайт. Всегда интересно и волнительно наблюдать как счетчик посещений медленно, но верно ползет вверх, с каждым днем показывая все лучшие результаты. Но однажды, когда вы этого не ждете, кто-то запостит ссылку на ваш ресурс на каком-нибудь Reddit или Hacker News (или на Хабре — прим. пер.), и ваш сервер ляжет.

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

Пишем виртуальный буфер обмена на C#

Reading time16 min
Views34K
VirtualClipBoard Очень много приходится работать с текстовыми данными, такими как код, статьи, посты и т.д. В то время когда жил под Linux — пользовался менеджерами истории буфера обмена, которые запоминали, то что попадало в виде текста в буфер и по клику в трее я мог вернуть нужное значение в буфер, не возвращаясь к источнику.
Недавно пришлось большую часть времени проводить в Windows, удовлетворяющей альтернативы для такого простого приложения я не нашел. Что-то в найденных вариантах не устраивало: не свободное ПО, много ненужного функционала (который просто мешал) или работали неудобно для меня (например: получить предыдущее значение буфера, приходилось открывать окно программы). Недолго думая решил сделать, так как мне хотелось.

Поскольку, приложение должно работать исключительно в Windows, было принято решение написать ее на C# — к тому же, никогда ранее на нем ничего не писал — появился повод попробовать.

Задача


  • Программа должна слушать и запоминать изменения в текстовом буфере обмена.
  • Через контекстное меню в трее или через окно программы по клику на выбранном элементе истории, нужное значение должно автоматически попадать назад в буфер.
  • История не должна пропадать после перезагрузки системы


Читать дальше →

intro.js — пошаговое руководство для веб-страницы

Reading time1 min
Views52K


Эта маленькая библиотека позволяет очень просто создать пошаговое введение для сайта или приложения. Достаточно добавить атрибуты data-intro и data-step с описанием и номером шага соответственно к нужным элементам страницы. Вот так:

<a href='http://google.com/' data-intro='Hello step one!' data-step='1'></a>
Читать дальше →

Введение в HTML5 History API

Reading time4 min
Views242K
До появления HTML5 единственное, что мы не могли контролировать и управлять (без перезагрузки контента или хаков с location.hash) — это история одного таба. С появлением HTML5 history API все изменилось — теперь мы можем гулять по истории (раньше тоже могли), добавлять элементы в историю, реагировать на переходы по истории и другие полезности. В этой статье мы рассмотрим HTML5 History API и напишем простой пример, иллюстрирующий его возможности.

Основные понятия и синтаксис


History API опирается на один DOM интерфейс — объект History. Каждый таб имеет уникальный объект History, который находится в window.history. History имеет несколько методов, событий и свойств, которыми мы можем управлять из JavaScript. Каждая страница таба(Document object) представляет собой объект коллекции History. Каждый элемент истории состоит из URL и/или объекта состояния (state object), может иметь заголовок (title), Document object, данные форм, позиция скролла и другую информацию, связанную со страницей.

Основные методы объекта History:
  1. window.history.length: Количество записей в текущей сессии истории
  2. window.history.state: Возвращает текущий объект истории
  3. window.history.go(n): Метод, позволяющий гулять по истории. В качестве аргумента передается смещение, относительно текущей позиции. Если передан 0, то будет обновлена текущая страница. Если индекс выходит за пределы истории, то ничего не произойдет.
  4. window.history.back(): Метод, идентичный вызову go(-1)
  5. window.history.forward(): Метод, идентичный вызову go(1)
  6. window.history.pushState(data, title [, url]): Добавляет элемент истории.
  7. window.history.replaceState(data, title [, url]): Обновляет текущий элемент истории
Читать дальше →

Несколько JavaScript хаков для хипстеров

Reading time3 min
Views55K
image
JavaScript занимательный язык программирования.

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

Вот почему важно, чтобы код был аккуратный, компактный и изящный. Такой, в который можно влюбиться. В противном случае, JavaScript может и отпугнуть.

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

Все это я узнал, изучая проекты с исходным кодом, но здесь я пишу так, как будто бы это я их придумал.
Читать дальше →

Пишем плагин для CKEditor 4

Reading time8 min
Views25K
CKEditor — это WYSIWYG редактор HTML-кода для браузеров. Всякий раз, сталкиваясь с его документацией или же с его исходным кодом, с исходным кодом его плагинов я терялся. И это не мудрено, ведь CKEditor это очень большой продукт, имеющий довольно сложную инфраструктуру. Но, зачастую, стандартных возможностей не хватает и требуется добавить свою. В этой статье я хотел бы остановиться на плагине, который позволяет встраивать и оперировать в редакторе Yandex-картами.

Вот так это будет выглядеть по окончанию редактирования:


А вот так в режиме редактирования:
Читать дальше →

Information

Rating
Does not participate
Location
Каменск-Уральский, Свердловская обл., Россия
Date of birth
Registered
Activity

Specialization

Backend Developer, Web Developer
Lead