И снова всем привет! Спешу поделиться, у меня были отличные выходные! Полтора дня я обдумывал вариант подачи материала, пилил макет и вообще всячески старался сделать хорошо. Что такое хорошо в контексте обучающего материала? На мой взгляд это «интересность», краткость, корректность и наглядность. Для меня лично написать такую статью — это подвиг. А вот серию статей — просто емкая и ответственная задача. Изучать Scene2d мы будем в процессе написания игры с нуля! Процесс нашего творчества растянется на долгие десять-двенадцать дней. Мне хочется верить что периодичность материалов будет примерно раз в день. Для меня лично это очень амбициозная задача, ведь требуется не столько запрограммировать, но и описать в статьях с детальным разбором. Я не сторонник бросаться в бушующий океан, в надежде научиться плавать. Мы прыгнем у лужу и будем последовательно ее углублять и расширять. Итак начинаем.
User
Важнейшие структуры данных, которые вам следует знать к своему собеседованию по программированию
7 min
75KTranslation
Никлаус Вирт, швейцарский ученый-информатик, в 1976 году написал книгу под названием «Алгоритмы + Структуры данных = Программы».
Через 40 с лишним лет это тождество остается в силе. Вот почему соискатели, желающие стать программистами, должны продемонстрировать, что знают структуры данных и умеют их применять.
Практически во всех задачах от кандидата требуется глубокое понимание структур данных. При этом не столь важно, выпускник ли вы (закончили университет или курсы программирования), либо у вас за плечами десятки лет опыта.
Иногда в вопросах на интервью прямо упоминается та или иная структура данных, например, «дано двоичное дерево». В других случаях задача формулируется более завуалированно, например, «нужно отследить, сколько у нас книг от каждого автора».
Изучение структур данных — незаменимое дело, даже если вы просто стараетесь профессионально совершенствоваться на нынешней работе. Начнем с основ.
Переведено в Alconost
+6
Куча различных способов считывания битов
27 min
40KTranslation
Возобновляя старую традицию своего блога, я возьму простую задачу, рассмотрю чрезмерно длинный список её альтернативных решений и оценю их достоинства.
Наша простая задача будет заключаться в следующем: мы хотим считывать из байтового потока данные, значения закодированные переменным количеством бит. Считывание отдельных байтов, машинных слов и т.д. непосредственно поддерживается большинством процессоров и многими языками программирования, но при вводе-выводе с переменной битовой длиной обычно необходимо реализовывать решение самостоятельно.
Это звучит достаточно просто, и в каком-то смысле так и есть. Первый источник проблем заключается в том, что эта операция будет активно использовать кодеки — и да, она будет ограничена вычислениями, а не памятью и вводом-выводом. Поэтому нам нужна не просто рабочая, но и эффективная реализация. И по дороге мы столкнёмся со множеством других сложностей: взаимодействия с буферизацией ввода-вывода, обработка конца буфера, тупиковые ситуации в битовых сдвигах, определённых в C/C++ и в разных архитектурах процессоров, а также другие особенности битовых сдвигов.
В этом посте в основном сосредоточусь на множестве различных способов реализации считывателя; по сути, все рассмотренные здесь техники аналогично применимы и к записывающей части, но я не хочу удваивать количество вариаций алгоритмов. Их и так будет достаточно.
+30
Задачка на std::multiset или поиск по полям структуры
6 min
12KПопалась небольшая задачка, где-то на 4 часа кодирования, которую счел занимательной.
Есть база пользователей 10 миллионов:
class User{
int id;
time_t birthday; // дата рождения
int gender; // пол
int city_id; // место проживания
time_t time_reg; // дата регистрации
};
Нужно сделать быстрый поиск по базе, с учетом ее не частого обновления. Поиск может проходить по полям: возрасту, полу, городу. Поля поиска могут быть указаны в группировке или отдельно, например:
- город;
- город, пол;
- пол, возраст.
Данные выдачи должны быть отсортированы по дате регистрации пользователей, и выдаваться постранично по 100 пользователей.
Подсказка 1: СУБД не даст нужной скорости.
Подсказка 2: Вспомнить сложность операций со множествами, сложность стандартных алгоритмов.
Подсказка 3: Проверить время поиска реализованного алгоритма, неплохой результат это порядка 0.005 сек.
+10
Работа с почтой на MS Exchange сервере через EWS. Часть 1
5 min
103KЗдравствуйте, читатели Хабрахабр!
В рамках серии этих постов я хочу рассказать о такой технологии как EWS и о том, как ее использовать для работы с почтой, хранящейся на серверах MS Exchange 2007 — 2010. Я постараюсь показать, как просто и удобно использовать EWS.
Мы начнем с самого начала, с знакомства с это технологией и создания первого проекта, а закончим более сложными манипуляциями с почтой.
Данный пост является вводным и он, скорее всего, окажется неинтересен тем, кто уже знаком с EWS.
+11
Реверс-инжиниринг режима разработчика Animal Crossing
16 min
4.3KTranslation
Прошлым летом я приступил к реверс-инжинирингу игры Animal Crossing для GameCube. Я хотел исследовать возможность создания модов для этой игры. Кроме того, мне хотелось задокументировать процесс, чтобы создать туториалы для людей, заинтересованных в хакинге ROM-ов и обратной разработке. В этом посте я расскажу о отладочных функциях разработчика, которые остались в игре, а также поделюсь тем, как я обнаружил чит-комбо, с помощью которых их можно разблокировать.
+25
std::stringstream и форматирование строк
3 min
240KВвод и вывод информации — критически важная задача, без выполнения которой любая программа становится бесполезной. В C++ для решения данной задачи традиционно применяются потоки ввода-вывода, которые реализованы в стандартной библиотеке IOStream.
Плюсами такого подхода являются:
— универсальность: не важно, с чем связан поток, — ввод-вывод с консоли, файла, сокета, процесса происходит одинаково;
— прозрачность: программисту не нужно явно указывать тип вводимого или выводимого объекта;
— расширяемость: программист может добавить поддержку ввода-вывода в поток для любого своего объекта, просто перегрузив соответствующие операторы.
В библиотеке IOStream есть также класс
Он позволяет делать весьма забавные вещи, например, осуществлять преобразование типов:
Плюсами такого подхода являются:
— универсальность: не важно, с чем связан поток, — ввод-вывод с консоли, файла, сокета, процесса происходит одинаково;
— прозрачность: программисту не нужно явно указывать тип вводимого или выводимого объекта;
— расширяемость: программист может добавить поддержку ввода-вывода в поток для любого своего объекта, просто перегрузив соответствующие операторы.
В библиотеке IOStream есть также класс
stringstream
, который позволяет связать поток ввода-вывода со строкой в памяти. Всё, что выводится в такой поток, добавляется в конец строки; всё, что считыватся из потока — извлекается из начала строки.Он позволяет делать весьма забавные вещи, например, осуществлять преобразование типов:
+24
Насколько хорошо ты знаешь bash?
4 min
39KПользуешься командным интерпретатором каждый день? Готов решить несколько логических задачек и узнать что-то новое? Добро пожаловать под кат.
+35
CES 2015 глазами программиста
6 min
10KConsumer Electronics Show (CES) ежегодно привлекает 3000+ компаний — участников выставки и 150-160 тысяч посетителей и размещает их в нескольких комплексах. Центральным считается Las Vegas Convention Center (LVCC), где на нескольких этажах располагаются корпорации типа Samsung и Sony. Однако в этом году меня поразили на CES не огромные кривые зеркала (извините, телевизоры), не стаи самокоординирующихся дронов, не невесомые ноутбуки от больших корпораций, а маленькие компании, делающие маленькие вещи с большим потенциалом, которые разместили в небольшом (по сравнению с LVCC) выставочном зале Sands.
Думаю, не будет преувеличением, что в этом году произошел взрыв IoT. Если до этого IoT скромно ютилось на немногочисленных разрозненных стендах, теперь оно заняло чуть ли не целый выставочный комплекс, где можно было увидеть десятки умных часов, роботы, умеющие управлять домом и даже готовить, 3D-принтеры, фитнесс-устройства, измерители композиции мышц, жира, плотности костей, умные кровати, всевозможные wearables и даже hearables. IDC предсказывает, что к 2020 году рынок IoT будет измеряться уже в триллионах.
Это, конечно, очень интересно для нас — потребителей, но что это значит для нас — программистов?
Думаю, не будет преувеличением, что в этом году произошел взрыв IoT. Если до этого IoT скромно ютилось на немногочисленных разрозненных стендах, теперь оно заняло чуть ли не целый выставочный комплекс, где можно было увидеть десятки умных часов, роботы, умеющие управлять домом и даже готовить, 3D-принтеры, фитнесс-устройства, измерители композиции мышц, жира, плотности костей, умные кровати, всевозможные wearables и даже hearables. IDC предсказывает, что к 2020 году рынок IoT будет измеряться уже в триллионах.
Это, конечно, очень интересно для нас — потребителей, но что это значит для нас — программистов?
+14
Еженедельник io.js, 20 февраля 2015
2 min
8.8KTranslation
Релиз 1.3.0, MongoDB, планы развития и многое другое.
+19
Поиск похожих документов с MinHash + LHS
2 min
13KВ этой публикации я расскажу о том, как можно находить похожие документы с помощью MinHash + Locality Sensitive Hashing. Описание LHS и Minhash в «Википедии» изобилует ужасающим количеством формул. На самом деле все довольно просто.
+9
STM32 и FreeRTOS. 4. Шаг в сторону HAL
5 min
84KTutorial
HAL 9000: I'm completely operational, and all my circuits are functioning perfectly.или это должно быть первой статьей, но я почему-то всегда пишу подобное ближе к концу
Раньше было про потоки, про семафоры и очереди
Одним из основных препятствий для перехода на STM32 является обилие текстов, инструкций и мануалов, описывающих работу с контроллером. Виновником этого обилия стала сама STMicroelectronics, которая поначалу планомерно запутывала своих пользователей, а затем предлагала неверные варианты выхода.
Проблема заключается в многообразии выпускаемых контроллеров, которые почему-то требовали разных процедур инициализации даже для одной и той же периферии. И код, работающий на одном контроллере, отказывался работать на другом. В результате по сети гуляют сборники шаманских рецептов, для понимания которых требуется куча времени и воскуривание даташитов.
Но не так давно ST поняла, в какую яму она угодила и начала усиленно из нее выбираться, привлекая новые силы. И именно благодаря этому сейчас время старта сократилось до несуразно маленьких величин. Как это выглядит на практике? Добро пожаловать под кат.
+20
cocos2d — фреймворк для создания игр для iPhone
2 min
5.5KCocos2d — это небольшой opensource фреймворк для создания 2D игр. Изначально он создавался для программ, написанных на python'е для платформ Windows, Linux и Mac, но потом появились версии для iPhone и даже для Android.
Мы использовали его для написания своей игры iTreasure (ссылка в iTunes) — ремейка «Тайны Океана» и ни разу не пожалели об этом.
— Богатые возможности.
Все, что нужно от движка для двумерной игрушки в нем есть. Ниже я еще расскажу подробнее о функциональности.
— Простота.
Если вы уже писали что-нибудь для iPhone, то начать использовать cocos2d вам практически ничего не будет стоить.
— Открытость.
У движка очень хорошая лицензия — GNU Lesser GPL, что позволяет свободно использовать его в коммерческих продуктах.
— Большое комьюнити.
Уже более 200 программ игр сделано с использованием cocos2d. В интернете можно найти огромное количество информации о тонкостях и проблемах, связанных с использованием движка (правда, на английском языке).
— Множество рабочих примеров и приложений с открытым кодом.
Во-первых, очень много рабочих примеров включено в дистрибутив фреймворка. Кроме того, многие люди открывают исходники своих приложений (даже продающихся в appstore), для того, чтобы другие могли найти в них готовые решения и ответы на свои вопросы.
Мы использовали его для написания своей игры iTreasure (ссылка в iTunes) — ремейка «Тайны Океана» и ни разу не пожалели об этом.
Почему cocos2d
— Богатые возможности.
Все, что нужно от движка для двумерной игрушки в нем есть. Ниже я еще расскажу подробнее о функциональности.
— Простота.
Если вы уже писали что-нибудь для iPhone, то начать использовать cocos2d вам практически ничего не будет стоить.
— Открытость.
У движка очень хорошая лицензия — GNU Lesser GPL, что позволяет свободно использовать его в коммерческих продуктах.
— Большое комьюнити.
Уже более 200 программ игр сделано с использованием cocos2d. В интернете можно найти огромное количество информации о тонкостях и проблемах, связанных с использованием движка (правда, на английском языке).
— Множество рабочих примеров и приложений с открытым кодом.
Во-первых, очень много рабочих примеров включено в дистрибутив фреймворка. Кроме того, многие люди открывают исходники своих приложений (даже продающихся в appstore), для того, чтобы другие могли найти в них готовые решения и ответы на свои вопросы.
+16
Information
- Rating
- Does not participate
- Registered
- Activity