Обновить
51
0
Андрей Кравчук @prefrontalCortex

Software Engineer

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

Идеальная маркерная доска

Время на прочтение5 мин
Количество просмотров173K
Доска маркерная или whiteboard является практически обязательным атрибутом любой, уважающей себя, команды разработчиков. При должном умении и желании обычная доска способна сэкономить массу времени и существенно улучшить результат работы команды — быстрый и эффективный способ коммуникации всегда был очень критичным и непосредственно влиял на результат коллективных усилий.

Но можно ли сделать сам инструмент приятнее? Добавить изюминку?


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

Bash-скрипт для искрографиков

Время на прочтение1 мин
Количество просмотров3.5K
Искрографик (англ. sparkline) — это термин, который придумал Эдвард Тафти для обозначения миниатюрных (word-sized), но информационно-плотных графиков. Они показывают общую картину там, где нет места для размещения нормальных графиков с осями координат. Особенно полезными могут быть в таких областях как финансы и трейдинг, спортивные события, научный и медицинский анализ, системное администрирование.



Зак Холман (Zach Holman) из Github написал shell-скрипт Spark, который строит инфографику простой командой spark прямо из шелла (достаточно добавить скрипт куда-нибудь в $PATH).
Читать дальше →

Корова десятого уровня

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


Работать по 12 часов в сутки, тащить на себе миллионы, быть кумиром тысячей хомячков, напиваться до безумия каждый релиз, экспериментировать и фанатично строчить фичекат до 3-х утра.
Забудь.

Ты в мейнстриме, бро.

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

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

Время на прочтение5 мин
Количество просмотров129K
Данная 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.

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

Теория шести рукопожатий: еще одно подтверждение

Время на прочтение4 мин
Количество просмотров78K
Однажды в студеную зимнюю пору я столкнулся с упоминанием того, что кто-то в Facebook пытается подтвердить теорию шести рукопожатий. Для тех кто не в курсе, эта теория заключается в том, что все жители земли в среднем знакомы друг с другом через цепочку из пяти друзей (т.е. шести рукопожатий). Подробнее об истории этой теории можно прочитать в википедии, там же можно узнать о том, что Майкрософт несколько лет назад пыталась подтвердить эту теорию на основе данных о контакт-листах мессенджера MSN — в результате у них получилось 6,6 рукопожатий, что вполне вписывается в теорию.

Очень мне захотелось эту теорию подтвердить самому, используя данные, которые есть под рукой — ВКонтакте. Для претворения моей странной идеи в жизнь надо было решить целый комплекс проблем:
  1. На каких данных это все расчитывать.
  2. Где эти данные взять.
  3. Как эти данные сохранять.
  4. Каким алгоритмом воспользоваться для расчетов.
подробнее о том, что получилось

zsh :: настраиваем «правое» приглашение командной строки

Время на прочтение2 мин
Количество просмотров8.6K
Ковыряясь с настройками zsh, наткнулся на весьма интересное решение для приглашения командной строки, которое размещается в этом шелле справа. Обычно туда принято помещать часы, но мне весьма приглянулась идея разместить там также нотификатор заряда батареи. В зависимости от уровня заряда, нотификатор показывается зеленым, желтым или красным цветом. Автор идеи зачем-то приплел к решению python, я все переписал на родном шелле.
Выглядит это как-то вот так:
Command line prompt, zsh
Читать дальше →

Типичные случаи утечки памяти в Java

Время на прочтение4 мин
Количество просмотров75K
Большинству разработчиков известно, что сборщик мусора в Java не является универсальным механизмом, позволяющим программисту полностью забыть о правилах использования памяти и о том, в каких случаях осуществляется его работа. Ниже описаны типичные случаи утечки памяти в java-приложениях, встречающиеся повсеместно.
Итак, о чём должен помнить каждый java-программист.
Читать дальше →

Процессор

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

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

HTML5-консоль от Google

Время на прочтение1 мин
Количество просмотров3.3K
HTML5-консоль, который вы могли видеть в одном из выступлений на майской конференции Google I/O, работает в онлайне (судя по всему, только в браузере Chrome).



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

Как люди принимают решения

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

В этом выпуске вебинаров UXRussia раскрываются 5 феноменов, обнаруженных в экспериментах психологов, показывающих, как люди принимают решение. И даются рекомендации дизайнерам о том, что делать с этим знанием:
  • Люди, в основном, принимают решения неосознанно.
  • Сознание медленнее познаёт мир.
  • Люди хотят больше выбора и информации, чем они могут переработать.
  • Людям нужно чувство контроля, когда они делают выбор.
  • Люди заботятся о времени больше, чем о деньгах.

Продолжение темы

Sisyphus.js — защищаем данные форм пользователя от случайных потерь

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

В чём проблема?


Бывали ли у вас случаи, когда во время долгого заполнения нудной формы или написания красноречивого и пылкого комментария *внезапно* крашился браузер? Или вы закрывали вкладку, в которой работаете, или отключалось электропитание (а ИБП, по известному закону, нет)? Если нет — то вам повезло, но страховки от подобных происшествий ни у кого нет.

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

Введение в Template Haskell. Часть 1. Необходимый минимум

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

Данный текст является переводом документации Template Haskell, написанной Булатом Зиганшиным. Перевод всего текста разбит на несколько логических частей для облегчения восприятия. Далее курсив в тексте — примечания переводчика.



Template Haskell (далее TH) — это расширение языка Haskell предназначенное для мета-программирования. Оно даёт возможность алгоритмического построения программы на стадии компиляции. Это позволяет разработчику использовать различные техники программирования, не доступные в самом Haskell’е, такие как, макро-подобные расширения, направляемые пользователем оптимизации (например inlining), обобщённое программирование (polytypic programming), генерация вспомогательных структур данных и функций из имеющихся. К примеру, код
yell file line = fail ($(printf "Error in file %s line %d") file line)

может быть преобразован с помощью TH в
yell file line = fail ((\x1 x2 -> "Error in file "++x1++" line "++show x2) file line)

Другой пример, код

data T = A Int String | B Integer | C
$(deriveShow ''T)

может быть преобразован в

data T = A Int String | B Integer | C
instance Show T
    show (A x1 x2) = "A "++show x1++" "++show x2
    show (B x1)    = "B "++show x1
    show C         = "C"

В TH код на Haskell’е генерируется обычными Haskell’евскими функциями (которые я буду для ясности называть шаблонами). Минимум того, что вам необходимо знать, чтобы использовать TH — это следующие темы:
  1. Как Haskell-код представляется в шаблонах (TH-функциях)
  2. Как монада цитирования используется для унификации имён
  3. Как сгенерированный TH-код вставляется в программу
Читать дальше →

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

Время на прочтение3 мин
Количество просмотров2.7K
image

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

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

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

Начальная настройка ИБП APC в Linux с точки зрения чайника

Время на прочтение3 мин
Количество просмотров57K
Купив источник бесперебойного питания от APC (а именно — APC Back-UPS ES 550VA ), я с удивленьем обнаружил, что «из коробки» он не может похвастаться тесной дружбою с Linux. Конечно, XFCE Power Manager, входящий в состав XFCE 4.6, подхватил и разпознал UPS, но всё, на что он оказался способен — отображение в трее уровня заряда. Какие-либо настройки отсутствовали начисто, нельзя было даже задать выключение ПК при достижении определённого уровня заряда.

Обратившись за консультацией в гугл, я узнал о существовании замечательного демона apcupsd, чья роль заключается в — никогда не поверите — управлении ИБП от APC. Но, как оказалось, практически все руководства по его начальной настройке были откровенно устаревшими — включая, как ни странно, официальный мануал. Споткнуться приходилось уже в самом начале о «cat /proc/bus/usb/devices». Поговорив с гуглом серьёзным и доверительным тоном, я добился от него ссылки на действующий мануал, художественным переводом коего с дополнениями из иных источников сия статья и является.
Читать дальше →

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

Время на прочтение3 мин
Количество просмотров5.3K
image

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

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

Я вижу вас насквозь, а вы при этом наивно полагаете, что находитесь в полной безопасности

Время на прочтение5 мин
Количество просмотров8.2K
Кевин Митник в одном из своих интервью журналистам, сказал, что самое слабое звено в системе безопасности — это человек. Именно благодаря навыкам социальной инженерии, ему удалось стать одним из известнейших хакеров современности. Если вы считаете, что Кевин, как показывают в фильмах про хакеров, сидел в темной комнате с кучей мониторов с циферками и взламывал всех и вся оттуда, никогда эту комнату не покидая, то вы глубоко заблуждаетесь.

Ладно. Задайте себе вопрос — что уже интернет знает о Вас? Скорее всего, интернет о вас знает уже все, а что, как говорится, seen can not be unseen в глобальной сети. Теперь второй вопрос — как этим могут воспользоваться злоумышленники.

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

У вас есть блог? Твиттер? Страничка во вконтакте или фейсбуке? Вы активный пользователь форумов? Тогда мы идем к вам…

Я перечитал свой же текст и мне стало страшно. Серьезно.
Читать дальше →

Еще немного про P и NP

Время на прочтение7 мин
Количество просмотров30K
image

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

Чтобы проиллюстрировать центральную роль этого понятия, можно вообразить пять различных возможных миров (возможных — потому что еще не доказано, что они нереальны, и наш может оказаться любым из них) и посмотреть как условия в них будут влиять на информатику и жизнь вообще.
Читать дальше →

Страсть vs профессионализм

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

Прочитайте пару объявлений об открытых вакансиях в геймдеве, и Вы увидите, что в большинстве из них наниматель ищет людей со страстью к компьютерным играм. Это звучит очень заманчиво, романтично и оптимистично. Объявления рассказывают, как много всего интересного делается в компании, как увлечены играми её работники — и вот они ищут себе таких же коллег. «Вау!» — говорит себе молодой наивный читатель — «У меня огромная страсть к играм! Эта работа для меня!»
Читать дальше →

Эффективное использование Vim

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

Введение


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

Эта статья — не набор “волшебных команд” и рецептов (cookbook, как называют такие наборы по-английски), хотя они тут тоже присутствуют, а, скорее, попытка описать, как общие принципы построения эргономичных интерфейсов можно применить в практике использования Vim, чтобы сделать из него удобную и эффективную среду работы с текстами.

Эта статья также не является tutorial’ом для начинающих пользователей Vim, хотя и им (а также пользователям Emacs) может быть интересна, поскольку некоторые упоминаемые принципы являются достаточно общими и действуют не только в системах редактирования текстов, а вообще везде, где идет речь об использовании компьютера для редактирования чего-либо. Тем не менее, я предполагаю, что читатель знаком с основными концепциями, применяемыми в Vim (режимы, регистры, буфера, команды) и не останавливаюсь на их подробном описании.

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

Опыт использования GPU для финансового моделирования

Время на прочтение5 мин
Количество просмотров8.3K
В этой статье я вкратце описываю свой опыт оптимизации одной задачи перебора, начиная от однопроцессорного алгоритма к многопроцессорному и к версии на OpenCL.



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

Информация

В рейтинге
Не участвует
Откуда
Подгорица, Подгорица, Черногория
Работает в
Дата рождения
Зарегистрирован
Активность

Специализация

Десктоп разработчик, Фулстек разработчик
Старший
От 5 000 €
Lisp
Clojure
Unix
Linux
Docker