Pull to refresh
1
0
bashor @bashor

User

Send message

Перевод интерактивного учебника «Problem Solving with Algorithms and Data Structures»

Reading time3 min
Views67K
imageПривет, Хабр!

Мы (@ali_aliev и avenat) с удовольствием представляем вашему вниманию перевод интерактивного учебника «Problem Solving with Algorithms and Data Structures» от Брэда Миллера (Brad Miller) и Дэвида Ранума (David Ranum) из Luther College, что в Айове, США.

О чём?

В учебнике подробно рассматриваются, объясняются и анализируются наиболее часто используемые структуры данных и алгоритмы. Изложение идёт от простого (что такое алгоритм, как оценить его производительность) к сложному (деревья, графы) с живыми примерами и кодом. В качестве языка программирования выбран Python, а для тех, кто с ним плохо знаком, в первой главе есть большой раздел с его концентрированным описанием.

Авторы рассказывают о таких структурах данных, как стеки, очереди (в том числе с приоритетом), деки, хэш-таблицы, списки, деревья и графы. Последним двум вообще посвящены весьма не маленькие главы. Изложение не просто описательное: для каждой структуры предлагается вариант (а иногда и не один) её реализации на Python. Упор, естественно, делается на объектно-ориентированное программирование: создаётся класс, к нему пишутся методы, некоторые из которых авторы оставляют читателям для самостоятельной доработки. Затем идут примеры использования рассмотренной структуры и описание алгоритмов с её участием.

Одна из глав учебника посвящена рекурсии, в том числе её графическому представлению (фракталы). Разбирается несколько известных рекурсивных задач, а в конце наглядно демонстрируется, что эта методика, несмотря на её элегантность, отнюдь не «серебряная пуля».

Не обделены вниманием и классические алгоритмы для сортировки и поиска. И, естественно, для каждого из них анализируются производительность и «подводные камни», а так же даются рекомендации по применению. В последних главах, посвящённых деревьям и графам, даётся много материала об их разновидностях и связанных с ними алгоритмах. Изложение тут становится более сжатым, многие моменты просто описываются с тем, чтобы после прочтения главы читатель реализовал их самостоятельно.
Читать дальше →

Межпроцедурный анализ и оптимизации (I)

Reading time14 min
Views9.3K
Одной из самых интересных и важных компонент современного оптимизирующего компилятора является межпроцедурный анализ и оптимизации. Хороший стиль программирования и необходимость разделения работы между разработчиками диктует необходимость разбиения большого проекта на отдельные модули, в которых основные утилиты реализованы как «черные ящики» для всех основных пользователей. Детали реализации, в лучшем случае, известны паре-тройке конкретных разработчиков, ну а иногда, за давностью лет, и вообще никому неизвестны. (А что поделаешь – специализация, глобализация). Ваш код, зачастую, содержит вызовы внешних функций, тела которых определены во внешних файлах или библиотеках и ваши знания о этих функциях минимальны. Ну и помимо этого при разработке больших проектов плодятся всякие глобальные переменные, с помощью которых компоненты большого проекта обмениваются ценной информацией, и для того, чтобы разобраться в работе вашей части кода в случае каких-то проблем, бывает необходимо перелопатить массу кода. Очевидно, что все это сильно осложняет и работу оптимизирующего компилятора. Какие негативные эффекты порождает модульность и есть ли в компиляторе специальные средства для их преодоления – тема для большого разговора. Сейчас я попытаюсь начать такой разговор. Я расскажу о некоторых интересных особенностях работы оптимизирующего компилятора на примере работы компилятора Intel. Ориентироваться буду на OS Windows, поэтому опции компилятора привожу характерные для этой платформы. Ну и чтобы облегчить себе жизнь, я иногда буду использовать аббревиатуры IPA для межпроцедурного анализа и IPO для межпроцедурных оптимизаций. А начну я с рассказа о моделях межпроцедурного анализа и графе вызовов.
Читать дальше →

Критерий выгодности подстановки и динамическая профилировка

Reading time13 min
Views8.2K
image

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

Есть ли жизнь с телефоном за <1000 рублей?

Reading time2 min
Views1.4K
Привет.

Что-то давно не видно хороших обзоров, а я так мечтал попробовать себя в роли автора одного из них) За мою недолгую жизнь у меня было около десятка телефонов. Дорогие и как вы узнаете из этого обзора дешевые. Знакомьтесь Philips Xenium:

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

Спать мало, но правильно?

Reading time7 min
Views904K
Навеяно этим постом от юзера case. Пост не новый, и на главную он не попал.
Но я вот наткнулся на него сегодня и решил написать кое-что о сне. Уверен, что это будет полезно многим хабравчанам, да и случайным читателям тоже.
Читать дальше →

Роль сна в контексте личной эффективности

Reading time2 min
Views31K
Оказывается, физиология полезная наука, если слушать, понимать и делать практические выводы. Расскажу своими словами не претендуя на академичность и научную достоверность.

Роль сна в контексте личной эффективности

Ночью, во время полноценного сна, наш мозг фильтрует все, что прошло через него за день и либо складывает это дело в долгосрочную память (и тогда мы про это помним), либо сбрасывает то, что по разным причинам в памяти нам не нужно. Самый простой пример, который иллюстрирует этот механизм — видеомагнитофон с лентой, которая перематывается назад каждую ночь, потом проматывается с той же скоростью весь день (и это важный момент: скорость проигрывания примерно равна скорости записи) и вырезает из него куски, которые сбрасывает. На эту работу мозгу нужно примерно столько же времени, сколько на само проживание заполненных кусков жизни (то есть не каждый вдох-выдох, а тему, разговор, вопрос, письмо, строку или блок кода, тест-кейс и т.д.). Есть люди, у которых эти процессы идут медленнее или быстрее, тогда им надо соотв. меньше или больше времени на поспать. Но, в среднем по больнице, если ты работаешь мозгами часов 8, то и поспать надо те же 8 часов.

Отсюда простое прямое правило и не очень очевидное правило обратное, про которое мы и поговорим далее.

Прямое правило: сколько поработал, столько и поспал.
Обратное правило: сколько поспал, столько и поработал.

Если ты ночью поспал 3 часа и «бодрячком» поехал на работу, то в твоем наличии «кассета магнитофона», которая свободна только на 3 часа.
Читать дальше →

50 цитат о программировании всех времён

Reading time6 min
Views164K
Перевёл после прочтения комментариев к статье «О ненависти к C++». В цитатах можно найти ответы на большинство возникших там вопросов.

50. Программирование сегодня — это гонка разработчиков программ, стремящихся писать программы больше и с лучшей идиотоустойчивостью, и вселенной, которая пытается создавать больших и лучших идиотов. Пока вселенная побеждает.
— Rick Cook

49. Lisp — это не язык, а строительный материал.
— Alan Kay

48. Ходить по воде и разрабатывать программы, следуя спецификации, очень просто… если они заморожены.
— Edward V Berard
Читать дальше →

Уникальное торговое предложение SaaS сервисов

Reading time1 min
Views740
Есть такая книжка у Джефри Мура, называется «Внутри торнадо». Он рассказывает о стратегиях завоевания рынков. Основная мысль — это завоевание сначала нишевого рынка путем создания целостного продукта. Например, Directum сначала поставлял приложения для фармацевтической отрасли. А потом пошел на смежные рынки, а потом стал технологическим лидером. Основная мысль — хотя бы для небольшой ниши создать целостные продукт. Это называется стратегия кегельбана.
Вспомнилось мне это в связи с моими недавними рассуждениями на тему проблем развития SaaS-сервисов (в моем блоге). А ведь действительно, я не знаю ни одного SaaS сервиса, который предоставлял бы целостное решение для какой-либо ниши.
Читать дальше →

Симбиоз идей: примеры хорошего совмещения идей в дизайне логотипов и рекламы

Reading time2 min
Views7.7K
Здравствуй, хабр! Сегодня я хочу представить вам всем дозу дизайнерского вдохновения для мозга.

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

Для чего это нужно


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

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

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

Короче, ближе к делу. Всего две глобальные части: идейные логотипы и идейная реклама.

Логотипы










Еще четыре десятка логотипов и рекламы под катом

15 Вопросов на собеседовании в Google, из-за которых вы можете почувствовать себя глупым

Reading time2 min
Views320K
15 вопросов от Google
Google снова набирает людей.
Это отличная новость для тысяч начинающих менеджеров и разработчиков ПО, желающих найти спокойную пристань в эти сложные дни.
Теперь плохие новости:
  • Google предпочитает людей из «Лиги Плюща»
  • Им интересны ваши оценки (в институте), даже если вам уже за 30
  • Они ищут людей, которые хотят изменить мир

Хуже того, если вы подходите по всем этим параметрам, вам все равно надо проходить собеседование.
Льюис Пин (Lewis Pin), тренер по поиску работы из Сиэтла, собрал 140 вопросов, которые в Google спрашивали его клиентов.

Сколько шариков для гольфа поместится в школьный автобус?


Сколько шариков для гольфа поместится в школьный автобус?
Позиция: Менеджер проекта

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

Как работает управление интерфейсами через жесты пальцами и прикосновения

Reading time1 min
Views863
Доступно видео, в котором объясняется как работает система управления интерфейсами через разные касания, жестами пальцами или прикосновения к коже. Научный проект разрабатывается Microsoft и носит кодовое имя «Skinput».

Программа Calibre. Управление библиотекой и универсальный конвертер электронных книг

Reading time4 min
Views220K

Предисловие


Так как являюсь большим поклонником чтения, то в какой момент взор мой упал на электронные книги. Преимущества были для меня налицо. Особенно с частыми командировками. Вес, размер, удобство, ну и цена электронных версий книг (предпочитаю честную покупку текстов). Попользовавшись несколькими экземплярами остановился на Sony PRS-505. Сначала смутил формат lrf, но выход был быстро найден — онлайн-конвертеры fb2 в lrf. Онлайн — потому что являюсь пользователем Linux и дома и на работе, плюс дома для игр использую WinXP. В общем полный разброд. Но когда начал искать книги на английском, то наткнулся на кучу других форматов от pdf до epub и еще более экзотические варианты. Плюс книг на компах стало много и разбираться в них стало трудновато (я не единственный пользователь еКниги в семье). В общем назрела необходимость в каком то управлении этим хаосом и удобным конвертированием форматов, плюс нативная поддержка Linux. В одном из комментов на Хабре увидел упоминание про Calibre. Скачал, поставил — понравилось. Теперь пользуюсь полностью ей. Поэтому хотелось бы сделать краткий обзор данной программы.
Читать дальше →

VKFS — Файловая система для VKontakte на основе Fuse

Reading time1 min
Views48K
Не так давно на хабре (и на лепре, и еще где-то) появилась такая гифка:
image
Я посидел и подумал: «А почему бы и нет?»
Прошло некоторое время и, как я и обещал
Встречайте! VKFS — файловая система vkontakte, основаная на fuse.
Это не релиз — пока что реализована только возможность чтения собственной стены, но уже готов весь «каркас» для этого всего.
Читать дальше →

23 логотипа со скрытым смыслом

Reading time4 min
Views156K
Логотипы не всегда являются тем, чем они кажутся. Некоторые из таких логотипов могут содержать в себе много информации о бренде, и всё что вам нужно сделать — вглядеться в детали. Я выбрал двадцать три отличных логотипа, у которых есть такое «скрытое послание». Я уверен, что ранее вы видели некоторые из этих «скрытых посланий», но надеюсь, что смогу показать новые.

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

Студенты vs Разработчики

Reading time4 min
Views1.1K
Существует два противоположных мнения о найме программистов. Сторонники первого мнения считают, что опытные разработчики лучше, чем студенты. Разработчики продуктивней и их карьере ничего не угрожает. Противоположное мнение состоит в том, что нанять 3-5 студентов дешевле.

Пора разобраться в странном положении фигур на доске...

Файловые системы — отстой

Reading time3 min
Views16K
Компьютеры пришли в народ из мира инженеров. А в мире инженеров реализация всегда превалирует над интерфейсом. Вот и с файловой системой так. Несмотря на на колоссальный скачок от перфокарт к EXT3 или NTFS, интерфейс файловой системы остается таким
Каким?

Вышла opentodo 0.91

Reading time1 min
Views667
Буду писать о новых релизах в персональном блоге :)

Новое в версии 0.91
  • Теперь для перехода к задаче из списка достаточно кликнуть по ряду таблицы (не обязательно по названию задачи).
  • Ссылки для автоматической вставки html-тегов в textarea (описание задач и проектов, комментарии).
  • Переработан парсинг html, исправлены ошибки. Библиотека Beautiful Soap больше не используется.
  • Исправлен баг — при ответе на комментарий его автору не приходило уведомление по почте.
  • Теперь в настройках MEDIA_URL не имеет значения, есть слэш в конце или нет, все корректно работает в любом случае.

Страница проекта на Google Code
Онлайн демо

Обзор open source — систем для баг-трекинга.

Reading time2 min
Views12K
Недавно на работе был поднят такой вопрос: пора бы завести наконец-то систему баг-трекинга, но вот только какую? Условия были поставлены следующие: система должна быть open source, должна без проблем ставиться на не-виндовс системы, использовать в качестве БД MySQL и желательно быть написанной на PHP, на случай, если очень захочется доработать напильником.

Варианты предлагались такие: Jira (отпадает в виду небесплатности), BugZilla (отпала в виду того, что админ обвинил ее в требованиях «каких-то специфичных настроек MySQL-я»), Trac (в нем долго сомневались, т.к. у нас svn).

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

Итак: краткий обзор систем баг-трекинга.

1. BugZilla.
image
О ней, наверно, знают все, но на всякий случай кратко для тех, кто еще не знает.

Система от разработчиков FireFox, вообще ребята очень ответственно подходят к проблеме багов.

Установка: Гарантируется поддержка Linux или Solaris, для работы нужен Perl и одна из СУБД: MySQL, PostgerSQL, Oracle.

Список использующих BugZilla, впечатляющий: Mozilla Foundation (ну это в общем-то не удивительно), Open Office, RedHat, NASA, Facebook и еще сотня довольно известных и тысячи неизвестных компаний.
Читать дальше →

Information

Rating
Does not participate
Location
Россия
Date of birth
Registered
Activity