Pull to refresh
18
0
Виталий @simplecode

User

Send message

TornadIO2 = Tornado + Socket.IO

Reading time5 min
Views14K

Что такое Socket.IO?


Это библиотека предназначенная для организации постоянного соединения между сервером и браузером.

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

Браузер умеет веб сокеты? Отлично, будем использовать их. Браузер умеет AJAX? Будем использовать long polling. Это древний Internet Explorer? Будем использовать html file object. Ну и так далее.

О socket.io уже писали на Хабре. «Родной» сервер Socket.IO написан на node.js.
Читать дальше →

Идеальная архитектура

Reading time4 min
Views60K
Существует много разных взглядов на разработку архитектуры и дизайна современных приложений. Некоторые архитекторы стремятся продумать все до мелочей, разрисовать use case-ы всех классов и модулей, проанализировать миллион возможных способов их использования, все их обязательно задокументировать и уже потом приступить к этапу кодирования.

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

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

Алгоритм сортировки Timsort

Reading time6 min
Views162K
Timsort, в отличии от всяких там «пузырьков» и «вставок», штука относительно новая — изобретен был в 2002 году Тимом Петерсом (в честь него и назван). С тех пор он уже стал стандартным алгоритмом сортировки в Python, OpenJDK 7 и Android JDK 1.5. А чтобы понять почему — достаточно взглянуть на вот эту табличку из Википедии.



Среди, на первый взгляд, огромного выбора в таблице есть всего 7 адекватных алгоритмов (со сложностью O(n logn) в среднем и худшем случае), среди которых только 2 могут похвастаться стабильностью и сложностью O(n) в лучшем случае. Один из этих двух — это давно и хорошо всем известная «Сортировка с помощью двоичного дерева». А вот второй как-раз таки Timsort.

Алгоритм построен на той идее, что в реальном мире сортируемый массив данных часто содержат в себе упорядоченные (не важно, по возрастанию или по убыванию) подмассивы. Это и вправду часто так. На таких данных Timsort рвёт в клочья все остальные алгоритмы.
Читать дальше →

Qt Quick: лучшие приёмы

Reading time1 min
Views12K
Доброе утро, Хабр!

Мы начинаем вести новую серию постов в блоге, посвящённую лучшим трюкам и приёмам в фреймворке Qt Quick, концентрируя внимание на языке QML. Весь цикл постов пишет Майкл Хассельман. Он работает в Openismus и известен разработкой виртуальной клавиатуры для Nokia N9 (MeeGo Harmattan 1.2).

Посты, написанные Хассельманом, должны показать лучшие приёмы разработки в Qt Quick путём изучения того, как использовать основные концепции рационально, и как оградить себя от распространённых ошибок.

Сразу стоит отметить, что базовые знания Qt Quick в целом и языка QML в частности, приветствуются. Введение в QML и небольшой урок — отличный способ освежить или получить эти начальные знания. Введение в язык можно по-шустрому прочитать во время завтрака — этого будет достаточно для понимания цикла статей, — а вот урок стоит прочитать внимательно, полностью разобравшись со всеми деталями.

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

Линейная алгебра для разработчиков игр

Reading time19 min
Views796K
Эта статья является переводом цикла из четырёх статей «Linear algebra for game developers», написанных David Rosen и посвящённых линейной алгебре и её применению в разработке игр. С оригинальными статьями можно ознакомиться тут: часть 1, часть 2, часть 3 и часть 4. Я не стал публиковать переводы отдельными топиками, а объединил все статьи в одну. Думаю, что так будет удобнее воспринимать материал и работать с ним. Итак приступим.
Читать дальше →

Паттерн Visitor. Продвинутое использование

Reading time7 min
Views49K
Здравствуйте, дорогие хабравчане!

Я хочу поделиться с вами своим опытом использования паттерна проектирования visitor и его интересной модификацией, которую я назвал upcast visitor. К сожалению, непросто придумать простой короткий пример и описать как все работает, также эта статья может показаться сложной для начинающих, тем не менее я постараюсь максимально упростить задачу. Примеры кода приведены на языке С++ и обязательны к прочтению. Без понимания кода вникнуть в суть статьи будет затруднительно.

Предыстория


Представьте, что мы проектируем 2D игру, в которой фрукты падают с дерева, по пути ударяясь о ветки. Цель игры — поймать все фрукты, двигая корзину под деревом.
Строим следующую диаграмму классов:
Читать дальше →

Бесплатные тренинги по QtQuick и QtComponents от FRUCT и Nokia

Reading time2 min
Views5.8K
Всем привет!

Не так давно сообщество университетского сотрудничества FRUCT при нашей поддержке проводило в Москве трехдневный тренинг по Qt для начинающих программистов. Это был интересный опыт и для нас, и для участвовавших разработчиков, так что мы решили провести повторные Qt-тренинги. На этот раз они будут посвящены QtQuick и QtComponents, а проводиться не только в Москве, но и в Санкт-Петербурге и Ярославле. Как и в прошлый раз, это будут бесплатные трёхдневные занятия.

Под хабракатом вы найдёте подробное описание нового тренинга, полезную информацию для принятия в нём участия, а также видеозаписи с предыдущего Qt-тренинга.
Читать дальше →

Видеозаписи с нашего Qt-тренинга для начинающих

Reading time3 min
Views38K
Всем привет!

Сегодня мы бы хотели поговорить про нашу образовательную программу для начинающих программистов. Кто-то из вас наверняка знает, что мы регулярно проводим бесплатные образовательные тренинги для всех желающих писать программы на Qt — и кто-то из вас на них даже успел побывать. Для тех же, кто про эти тренинги не слышал, но с радостью бы на них сходил, мы предлагаем под катом посмотреть полную видеозапись одного подобного мероприятия.

Видеозаписи, представленные ниже, были сделаны на трехдневном тренинге по Qt, который мы проводили с 16 по 18 мая этого года в Москве. Он был рассчитан на начинающих Qt-программистов, у которых всё же был опыт программирования на C++. Тренинг проводил Кирилл Кринкин, руководитель лаборатории FRUCT Open Source & Linux Lab, целью которой является продвижение знаний в массы.

День первый


Знакомство с Qt

В первом видеоролике рассказывается про историю Qt, различные отличия этого фреймворка от других. Кирилл Кринкин рассказывает про основные компоненты Qt SDK, отдельно останавливаясь на основных модулях Qt. В окончании видео речь заходит о сравнении Qt в GTK.



Остальные записи под хабракатом

Blender 2.49b + Python 2.6 – используем клавиатуру в своей игре

Reading time5 min
Views6.1K
Blender – свободно распространяемая программа с открытым исходным кодом для создания трехмерной графики и компьютерных игр, которая поддерживает Python в качестве «встроенного» языка программирования.

Python – интерпретируемый язык программирования.

Данный топик пытается укрепить иллюзию, что, обладая минимальными познаниями в Блендере и Питоне, каждый сможет создать свою игру. Из всего, что можно сделать с помощью Питона в Блендере, для начала рассматривается простейшее взаимодействие с клавиатурой. Так же в топике пошагово в скриншотах описаны минимально необходимые методы работы с Блендером: запуск, сохранение сцены, манипуляции с объектом, добавление сенсоров и контроллеров и т. д.
Читать дальше →

Qt+OpenGL — Основы. Часть 1

Reading time5 min
Views129K
Данная cтатья вводная, рассчитана на знакомство с Qt+OpenGL для новичков, которые планируют изучать Qt (как кросс-платформенный инструментарий разработки ПО на языке программирования C++) + OpenGL (как графическую библиотеку).

Что потребуется новичку:
1) Qt Creator (имеет хорошую встроенную документацию и подсказки во время набора кода). Скчаать
2) doc.qt.nokia.com — официальная документация на английском языке
3) doc.crossplatform.ru — документация на русском языке
4) Обязательно прочесть про Qt и OpenGL
5) Отличная статья для начала изучения

Что мы будем делать
Поскольку данная статья посвящена конкретно основам, в нашей задаче будет следующее:
1) Разобрать как создается приложение
2) Как рисовать объекты
3) Как работать с указателем мыши и событиями(нажатие клавиш на клавиатуре и на мышке)
4) Работа с таймером
5) Создадим нашу первую банальную игру. Будем с помощью таймера, случайным образом перемещать квадрат. После наведения на квадрат указателя и кликнув по нему левой кнопки мышки, в случае попадания по квадрату, будем прибавлять к полученным очкам +1.

Этапы построения

Как работает yield

Reading time6 min
Views728K
На StackOverflow часто задают вопросы, подробно освещённые в документации. Ценность их в том, что на некоторые из них кто-нибудь даёт ответ, обладающий гораздо большей степенью ясности и наглядности, чем может себе позволить документация. Этот — один из них.

Вот исходный вопрос:
Как используется ключевое слово yield в Python? Что оно делает?

Например, я пытаюсь понять этот код (**):
def _get_child_candidates(self, distance, min_dist, max_dist):
    if self._leftchild and distance - max_dist < self._median:
        yield self._leftchild
    if self._rightchild and distance + max_dist >= self._median:
        yield self._rightchild

Вызывается он так:
result, candidates = list(), [self]
while candidates:
    node = candidates.pop()
    distance = node._get_dist(obj)
    if distance <= max_dist and distance >= min_dist:
        result.extend(node._values)
        candidates.extend(node._get_child_candidates(distance, min_dist, max_dist))
        return result


Что происходит при вызове метода _get_child_candidates? Возвращается список, какой-то элемент? Вызывается ли он снова? Когда последующие вызовы прекращаются?

** Код принадлежит Jochen Schulz (jrschulz), который написал отличную Python-библиотеку для метрических пространств. Вот ссылка на исходники: http://well-adjusted.de/~jrschulz/mspace/

Подробный и обстоятельный ответ

Makefile — умные шелл-скрипты для Джанго

Reading time4 min
Views8.8K
Make — одна из базовых утилит Юникса, есть на каждой юниксовой машине, и, к сожалению, неизвестная многим веб-разработчикам. В этой стате я покажу, как она может упростить работу, а сначала — постановка проблемы.

Как не держать всю эту схему в голове?

Процессор

Reading time8 min
Views155K
Сколько я себя помню, всегда мечтала сделать процессор. Наконец, вчера я его сделала. Не бог весть что: 8 бит, RISC, текущая рабочая частота — 4 кГц, но он работает. Пока что в программе моделирования логических цепей, но все мы знаем: «сегодня — на модели, завтра — на деле!».

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

MongoDB или как разлюбить SQL

Reading time6 min
Views67K
Введение

Коллеги, при разработке приложений, мы каждый день сталкиваемся с потребностью в гибком хранении информации (обновлении, поиске по ней, и т.д.). Класс продуктов, которые решают этот круг задач, как все мы знаем — Базы данных. Но что это такое в нашем понимании? У многих «база данных» твердо ассоциируется с MySQL, таблицами и SQL-запросами. И это устраивает до определенного момента. Действительно, реляционные базы данных дают массу преимуществ в работе: поскольку данные имеют сильную связанность, не нужно контролировать целостность базы данных. Используя простой под-запрос можно выбрать количество комментариев к каждому посту в блоге. Используя JOIN нетрудно делать сложные связанные выборки и получать данные сразу о нескольких сущностях.
Читать дальше →

Организация текучих (fluent) интерфейсов в Python

Reading time4 min
Views6K
Вдохновлённый недавним постом про текучие интерфейсы на PHP, я сразу задумался как можно реализовать подобное на питоне проще и красивее (на питоне всегда всё проще и красивее). Предлагаю несколько способов в порядке поступления мыслей.



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

Стековые переменные — быстрые и иногда мертвые

Reading time4 min
Views26K
FAILПрограммы на C++ используют под локальные и временные переменные так называемую автоматическую память (automatic storage). Обычно автоматическая память реализована поверх стека программы, поэтому ее называют стековой. Ее большой плюс – выделение и освобождение памяти выполняется крайне быстро (обычно одна инструкция процессора). Ее большой минус – относительно небольшой объем, попытка выделить память сверх этого объема приводит к так называемому переполнению стека и тогда программа аварийно останавливается.

Из этого вытекает ограничение – нельзя пытаться выделить на стеке слишком много памяти. Слишком много? Сколько это? Ответ не так очевиден, как можно подумать на первый взгляд.

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

Библия проектирования. Часть первая. Создание мира

Reading time3 min
Views5.3K
image

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

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

Библия проектирования. Часть вторая. Костыли, изгнание из рая, Каин, Авель, и снова с чистого листа

Reading time3 min
Views2.6K
image

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

Из последних сил и отбросив такт, ты начинаешь свой рассказ.

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

Генерация псевдослучайных чисел

Reading time5 min
Views136K
Довольно часто программисты в своей работе встречаются с необходимостью работать со случайными числами. Чаще всего случайные числа требуются в задачах моделирования, численного анализа и тестирования, но существует и множество других весьма специфических задач.
Конечно, во всех современных языках программирования есть функция random или её аналоги. Эти функции чаще всего дают действительно хорошие псевдослучайные числа, но мне всегда было интересно, как эти функции работают.
В этом топике я постараюсь объяснить, как работает линейный конгруэнтный метод (который чаще всего используется в функции random), и метод получения случайных чисел с помощью полиномиального счётчика (который часто используется для тестирования аппаратуры).
Читать дальше →

Темы дипломов

Reading time4 min
Views87K
В продолжение темы топика Готовимся к выступлению. Доклад, диплом, диссертация. Структура изложения.

В ВолгГТУ, где я являюсь осьмушкой (1/8) старшего преподавателя, как и в большинстве ВУЗов страны, есть практика написания дипломных работ. Все знают, что это такое.

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

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

1. Тема.
2. Развернутая постановка задачи.
3. Практическая ценность.
4. Новизна (задел на будущее, когда человек станет магистрантом или аспирантом).
5. Примерные темы глав работы.
6. Требования к программному средству.

Может быть, в других ВУЗах так делается давно, но для меня, например, эта практика нова и я встречаю ее с удовольствием. Студентам тоже будет проще; возможные конфликты с руководителем диплома будут разбираться заведующим предметно и содержательно.

Но довольно литдыбра. Основную часть времени я занимаюсь вебом, преподаю этот же предмет в ВУЗе, и поэтому вполне очевидно, что темы моих дипломов тоже связаны с Интернетом.
Читать дальше →

Information

Rating
Does not participate
Location
Дмитров, Москва и Московская обл., Россия
Registered
Activity