Обновить
22
0
Степанов Игорь @stepio

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

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

Скринкаст: статический анализ Си++ кода

Время на прочтение1 мин
Количество просмотров2.4K
ADD 2011. Скринкаст: статический анализ Си++ кода
На конференции ADD 2011 я выступал с докладом «Статический анализ Си++ кода». Благодаря старанию Стаса Фомина belonesox появился замечательный скринкаст (видео + презентация), который я предлагаю вашему вниманию.

В докладе показано много примеров интересных ошибок, найденных мною в open source проектах. Я расскажу, как можно найти многие подобные ошибки еще на этапе написания кода с помощью методологии статического анализа.
Читать дальше →

Складываем облака в одну корзину

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


Облачные хранилища данных, несомненно, одно из самых интересных и актуальных направлений в IT. Достаточно сказать, что за лидерство здесь идет активная борьба между такими гигантами как Microsoft, Google, Amazon. Интерес к этому активно подогревается также сторонними разработками, активно использующими эти сервисы. Например, менеджер Dropbox, который, как теперь уже кажется, был всегда. Уже не верится, что каких то 2 года назад он почти не был известен.

Со временем я «оброс» различными хранилищами, хранилища в свою очередь обросли сервисами. И недавнее гугление по названию Gladinet при чтении комментариев здесь, на Хабре (извиняюсь, не смог найти комментарий), привело на сайт разработчиков desktop приложения Gladinet, вполне достойного пристального внимания.

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

Приложение встраивается в проводник и другие файл-менеджеры (в моем случае Total Comander) как дополнительный диск, в котором собираются все виртуальные устройства.
Читать дальше →

Необходимость длительного отдыха: очередная ловушка при планировании времени

Время на прочтение3 мин
Количество просмотров43K
Корреляция между трудом и отдыхом на коротком промежутке времени прослеживается очень просто. Если ночь не спал — днем гудит голова, сложно сосредоточиться, работать практически не возможно (подчеркну, что здесь и далее речь идет об интеллектуальном труде).

А вот более длительные фазы, период которых составляет несколько месяцев, проследить значительно сложнее. Хотя эти фазы так же реальны, как и кратковременные фазы.

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

Делаем шифрование в Dropbox Mac (совместимо с Linux)

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

За последний месяц было несколько публикаций на Хабре о безопасности хранения информации на Dropbox. И, судя по всему, информацию там, действительно, хранить не совсем безопасно.
К ней могут получить доступ как минимум сотрудники Dropbox, а как максимум даже не хочу думать кто. Я активно использую хранилище для синхронизации домашнего ноута с рабочим компьютером.
Читать дальше →

Улучшаем интерфейс Java-приложения

Время на прочтение27 мин
Количество просмотров101K
Добрый день, Хабражитель!

Достаточно много различной раздробленной информации существует на тему работы со Swing и графикой в просторах интернета, а также на тему интерфейсов Java-приложений. Кто-то твердит о том, что Java морально устарела и десктоп-приложения на Java не имеет смысла писать, кто-то с пеной у рта доказывает обратное. В то же время работа идет, приложения пишутся и встают очередные проблемы. В предыдущей статье я уже привел небольшой список полезных библиотек для исключительных случаев, но нередко бывает так, что никакая сторонняя библиотека не позволяет сделать то, что Вам нужно. Именно в такой момент стоит задуматься о возможной необходимости написания своих компонентов.

Итак, в данном посте я постарался изложить самые важные и значимые на мой взгляд моменты по работе со Swing и графикой — как создавать компоненты, как стилизовать интерфейс, чего делать не стоит и многое другое…

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

Google App Engine (GAE) против Amazon Web Services (AWS)

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

Вступление:


Наиболее интересная часть разработки обычно приходится на первые 33% жизненного цикла проекта. А самое интересное — это создание чернового прототипа, демонстрирующего вашу идею. После этого момента возбуждение начинает постепенно снижаться по мере того, как вы начинаете высматривать, что бы подштопать, и стараетесь сделать ваше приложение достаточно масштабируемым, чтобы оно могло выдержать свою успешность. В настоящее время я — актёр-одиночка, так что с одной стороны у меня нет ресурсов, чтобы самому возиться с железом, а с другой — у моих проектов нет потребности в дата-центрах.

Цель моего анализа — сравнить двух основных игроков в мире облачных вычислений, Google App Engine (GAE) и Amazon Web Services (AWS). Оба неслабо разогнались за последние годы, но кто из них больше мне подойдёт? Давайте разбираться.
Читать дальше →

Откуда берутся NaNы?

Время на прочтение3 мин
Количество просмотров5.3K
Пользователь yruslan опубликовал хорошую статью про арифметику с плавающей запятой: «Что нужно знать про арифметику с плавающей запятой».

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

Возможно, я сейчас буду рассказывать прописные истины, но вызывает удивление частота, с которой люди забывают, что числа которые описывает стандарт IEEE754 это не то же самое, что вещественные числа.
Читать дальше →

Реализация Singleton в JAVA

Время на прочтение4 мин
Количество просмотров284K
В этой статье я хочу затронуть тему одного из наиболее распространенных паттернов объектно-ориентированного программирования – Singleton. Но в данном случае я не буду описывать преимущества/недостатки и области применения этого паттерна, а попытаюсь изложить свой взгляд на его имплементацию в JAVA.

Общие сведения
Паттерн Singleton гарантирует, что у класса есть только один экземпляр, и предоставляет к нему глобальную точку доступа.
Читать дальше →

Собираем данные с помощью Scrapy

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

scrapy

  • создать паука, выполняющего GET запросы,
  • извлекать данные из HTML документа,
  • обрабатывать и экспортировать данные.





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

java.util.concurrent. Часть первая: Зачем и почему?

Время на прочтение4 мин
Количество просмотров29K
Часть первая, в которой множеством слов раскрывается смысл существования этого API
Эта статья, хоть и не является прямым переводом, основана на статье Брайана Гетца Concurrency in JDK 5.0

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

Амазонки мобильного мира

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

В завершающий день такой продолжительной рабочей недели хотим поздравить вас с наступающим праздником — 8 марта! Мы не смогли не воспользоваться таким замечательным поводом, и решили рассказать вам о самых влиятельных и успешных женщинах в мире мобильных и интернет-технологий, настоящих воительницах индустрии.

Марисса Майер, Google.
Вице-президент по поисковым продуктам и удовлетворенности пользователей.

image

Марисса возглавляет направление по управлению самым главным в Google проектами — поисковыми. В ее ведении находятся запуски, связанные с основными сервисами компании: веб-поиск, Картинки, Новости, Книги, Карты Google, Google Планета Земля, Панель инструментов и другие. Она пришла в команду в 1999 году и была первой девушкой-инженером. Кроме этого, Марисса долгое время читала популярные лекции по программированию в Стэнфордском университете.
Читать дальше →

B-tree

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

Введение


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

Основные операции в деревьях выполняются за время пропорциональное его высоте. Сбалансированные деревья минимизируют свою высоту (к примеру, высота бинарного сбалансированного дерева с n узлами равна log n). Большинство знакомо с такими сбалансированными деревьями, как «красно-черное дерево», «AVL-дерево», «Декартово дерево», поэтому не будем углубляться.

В чем же проблема этих стандартных деревьев поиска? Рассмотрим огромную базу данных, представленную в виде одного из упомянутых деревьев. Очевидно, что мы не можем хранить всё это дерево в оперативной памяти => в ней храним лишь часть информации, остальное же хранится на стороннем носителе (допустим, на жестком диске, скорость доступа к которому гораздо медленнее). Такие деревья как красно-черное или Декартово будут требовать от нас log n обращений к стороннему носителю. При больших n это очень много. Как раз эту проблему и призваны решить B-деревья!

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

Частный опыт установки и настройки Asterisk с нуля

Время на прочтение17 мин
Количество просмотров346K
Во-первых, дисклаймер

Настройке Asterisk посвящены сайты, форумы и целые порталы типа voip-info.org. Но всегда есть люди, для которых эта тема – дремучий лес, а запустить продукт надо «вчера». Ещё полтора месяца назад я про Asterisk знал только то что он есть. Данный труд призван лишь несколько облегчить жизнь тем, кто окажется в такой же ситуации после меня. В нём могут быть ошибки любой степени «чайниковости». Если вы гуру настройки Asterisk – укажите на ошибку, я поправлю, потомки будут вам благодарны.
Читать дальше →

Паттерн Visitor для обработки иерархии исключений

Время на прочтение4 мин
Количество просмотров4.1K
Исключения в C++ являются одним из самых серьезных механизмов языка. Предоставляя достаточно мощные возможности для анализа и обработки ошибок. Но работа с исключениями не всегда бывает такой уж удобной.

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

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

Машина Тьюринга на чистом SQL

Время на прочтение3 мин
Количество просмотров8.7K
Пару месяцев назад прочитал пост, в котором уважаемая ksusha написала эмулятор машины Тьюринга используя MySQL и хранимые процедуры. Статья дала толчок к идее сделать машину Тьюринга на чистом SQL, без использования хранимых процедур. Для реализации был использован знакомый и любимый Firebird версии 2.1.

Существует две принципиальные проблемы при создании машины Тьюринга на голом SQL:
  • 1) лента машины может быть и модифицирована и дописана, что требует операторов INSERT и UPDATE в одной конструкции;
  • 2) машина Тьюринга требует как минимум одной переменной для состояния. Обычные SQL(DML)-запросы не могут хранить промежуточных переменных, по крайней мере в Firebird.

Тем не менее, мне удалось обойти эти ограничения
Читать дальше →

А мы пойдем другим путем. Перемещаем модель в базу данных

Время на прочтение6 мин
Количество просмотров5.1K
А мы пойдем другим путемВ последнее время веб-разработка из наколенного поделия превратилась в серьезную инженерную дисциплину. Все это стало возможным стараниями легиона специалистов, которые разработали общие практики, которые позволяют писать веб-проекты, с использованием некой архитектуры, а не подобно исследователю, сбрасывающему ящик типографского шрифта с крыши небоскреба, в надежде, что тот чудесным образом сложится в первый том «Войны и Мира». Самой распространенной парадигмой веб-программирования является, вне всякого сомнения, MVC — Model-View-Controller. Говоря примитивно, эта парадигма предусматривает разделение кода приложения на слой управления (Controller), слой представления (View) и слой управления данными (Model). При этом MVC предусматривает, что Controller и View могут (но не обязаны) зависеть от Model, в то время как Model ни при каких условиях не должен зависеть от них.
Есть много различных подходов, как отделить бизнес-логику приложения от логики отображения и управления. Все они предусматривают, что модель является частью приложения и взаимодействует с БД, использую последнюю лишь в качестве хранилища данных. Мы же попытаемся пойти иным путем и по возможности максимально вынести бизнес-логику приложения на уровень БД.
Предупреждение: лицам с тонкой душевной организацией лучше не видеть того, что будет твориться под катом.
Читать дальше →

Удобный поиск банкоматов на карте Украины

Время на прочтение2 мин
Количество просмотров1.1K
Здравствуйте меня зовут Андрей и обычно я занимаюсь Интернет-магазинами.

Но сегодня я хочу Вам рассказать о проекте, который я создал несколько недель назад для себя и друзей, а теперь решили показать людям. Это сервис поиска банкоматов в Украине – gdebankomat.com.
image

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

Онлайн генератор схем баз данных

Время на прочтение1 мин
Количество просмотров252K
Хочу представить онлайн генератор схем баз данных dbdsgnr. Сервис сделан на питоне и google app engine. Залогиниться в него можно имея аккаунт в гугле. Вкратце о сервисе: вы рисуете схему баз данных, а сервис создает вам код. На данный момент можно получить только для MySQL, но обещают поддержку PostgreSQL, SQLite, MySQL, MSSql, Oracle. Под катом пример работы с данным сервисом.
Читать дальше →

Информация

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