Как стать автором
Поиск
Написать публикацию
Обновить
1
0
Константин @Lord_Prizrak

Программер

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

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

Время на прочтение6 мин
Количество просмотров729K
На 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/

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

Процессор

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

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

Минимальная Arduino своими руками

Время на прочтение4 мин
Количество просмотров379K
Arduino — это хорошо, когда хочется быстро реализовать идею, не заморачиваясь мелочами. Но когда идея проверена, лишняя функциональность начинает просто мешать.
Собирая робота на гусеничном шасси, я столкнулся с тем, что бутерброд из Arduino + MotorShield + Sensor Shield плюс ко всему аккумулятор и прочие компоненты обросли проводами и стали с трудом помещаться на не самом крошечном шасси. Городить еще кучу шилдов, чтобы избавиться от лишних проводов не хотелось.
Появилась идея избавиться от всего, что в Arduino не требуется в готовом девайсе. Попутно хотелось снизить стоимость робота.
Многих интересующихся электроникой отпугивает еще и стоимость Arduino в магазинах. С ebay и китайских магазинов посылка идет долго, изобретательский пыл успевает остыть, поэтому приобретение откладывается «на потом», «когда сын подрастет». Поэтому я решил собрать Arduino-совместимую плату из деталей, которые всегда можно купить в городе.
В итоге я получил Arduino-совместимую плату, стоимостью в 210 рублей на макетной плате и в ~270 рублей в готовом для наращивания функционала виде.
Minimalist Arduino
«Minimalist Arduino»
С нуля до полной готовности собирается с дешевым 40Вт паяльником за 1 выходной без каких-то особых навыков.
Читать дальше →

Конкурс по программированию от фонда Викимедиа

Время на прочтение1 мин
Количество просмотров969
Фонд Викимедиа сообщает о начале конкурса по программированию October 2011 Coding Challenge. Авторы Википедии хотят найти программистов, которым близки ценности мира, в котором каждый человек обладает свободным доступом к любому знанию. Гран-при в каждой задаче — оплата расходов на какое-нибудь (по выбору победителя) событие фонда в 2012 году. Все успешные участники получат сертификат с отличием от фонда. На мой вкус — намного более осмысленное мероприятие, нежели гонять муравьёв.
Читать дальше →

Bitcoin-монеты в оффлайне

Время на прочтение2 мин
Количество просмотров17K
image
текст на монете: «Cила в числах» (лат.)

Основным недостатком «Биткойна», анонимной криптовалюты на основе одноранговых сетей, указывается отсутствие любой обеспеченности материальными средствами, хэш не представляет собой никакой реальной ценности, не идет речи и о наглядности валюты. Попытка решения подобной проблемы от casascius тоже не особенно радует.

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

Google AI Challenge. Как написать своего бота. Часть 1, 2

Время на прочтение5 мин
Количество просмотров3K
Этот топик — перевод первых двух частей руководства по написанию своего бота для Google AI Challenge.
Весь код написан на языке Python.


Шаг 1: Как избежать столкновений


План

Чтобы муравьи не сталкивались надо:
1) Предотвратить перемещение одного муравья на другого;
2) Предотвратить перемещение двух муравьев в одну и ту же точку;
3) отслеживать информацию о местонахождении всех наших муравьёв.
Читать дальше →

Разворачивание образов ОС при помощи FOG

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

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

Первые главы «Основы Blender 2.6» готовы

Время на прочтение1 мин
Количество просмотров14K
image
Сегодя завершил оформление первой четверти книги «Основы Blender 2.6».

Книга представляет собой учебное пособие по преподаванию 3D-графики в Школе и ВУЗе. Книгу написал Джеймс Кронистер — преподаватель компьютерной графики из Central Douphile School, США. На протяжении нескольких лет он вел предмет по собственной методике и в конце концов решил собрать все в одном издании.

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

После завершения перевода книга будет отличным пособием для преподавания 3D-графики в школах.

Книга «Основы Blender 2.6»
Читать дальше →

Слово в защиту Bitcoin

Время на прочтение5 мин
Количество просмотров15K
За последние несколько месяцев интерес к криптовалюте сильно уменьшился, и вместе с ним уменьшилась и её стоимость. Многие, не вникнув в суть, любят говорить: «эта валюта ничем не обеспечивается», «эти фантики ничего не стоят», «любой может сгенерировать себе сколько захочет, как это может быть валютой», и так далее. Печально то, что на этой волне рождаются целые статьи, делающие упор на вещи, не слишком близкие к истине. У читателя, не знакомого с темой, сразу укореняются в голове неверные представления о криптовалюте, благодаря которым он, возможно, ещё долгое время им не заинтересуется. В этой статье я постараюсь осветить Bitcoin с нужной стороны в пользу равновесия, открыв взгляд на реальное положение вещей тем, кто пока не в курсе дела.

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

Bitcoin. Как это работает

Время на прочтение10 мин
Количество просмотров758K
О Bitcoin я узнал относительно недавно, но он меня сразу подкупил своей идеей p2p. Чем глубже я зарывался в их Wiki, тем больше проникался этой идеей. Ее реализация красива и элегантна с технической точки зрения.

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

Чемпионаты по программированию и не только

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

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

Телефон в основе спутника

Время на прочтение1 мин
Количество просмотров8.3K
Принято считать, что космические технологии это дорого и очень сложно.
Оказывается, что спутник можно построить менее чем за $1000.
Мэтью Райес (Matthew Reyes), Крис Бошайзен (Chris Boshuizen) и Уилл Маршал (Will Marshall) запустили спутник SmallSat, который в качестве сенсоров и бортового компьютера использует коммуникатор Nexus One и Arduino.
Запуск спутника был произведен с помощью двухступенчатой ракеты Intimidator-5 Джеймса Дагерти (James Dougherty).
Для управления использован SL4A — Scripting Layer for Android.
Второй телефон был использован в качестве черного ящика на ракете. Он использовал свои GPS и акселерометры, а также камеру, для записи запуска с борта ракеты:


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

Основы стереозрения

Время на прочтение10 мин
Количество просмотров121K
В данной статье содержатся базовые сведения о математическом аппарате, используемом в стерео зрении. Идея ее написания появилась после того как я начал работать с методами стерео зрения, в частности использовать алгоритмы реализованные в OpenCV. Эти алгоритмы зачастую ссылаются на различные понятия, такие как "фундаментальная матрица", "эпиполярная геометрия", "триангуляция". Существуют очень хорошие книжки по компьютерному зрению, в которых описывается, в том числе и стерео зрение и все необходимые понятия, но в них, нередко, бывает представлено слишком много информации для новичка. Здесь же, в краткой форме изложены базовые сведения о том, как работает стерео зрение и основные связанные с ним необходимые понятия:
  • проективная геометрия и однородные координаты
  • модель камеры
  • эпиполярная геометрия (epiporal geomerty), фундаментальная и существенная матрицы (fundamental matrix, essential matrix)
  • триангуляция стереопары точек
  • карта глубины(depth map), карта смещений(disparity map) и идея, лежащая в основе ее вычисления
Практически весь материал статьи основан на книге "Multiple View Geometry in Computer Vision" by Hartley, R. I. and Zisserman, A., а раздел про построение карты глубины описан на основе материала из "Learning OpenCV" by Gary Bradski, Adrian Kaehler.

Для понимания содержимого статьи достаточно иметь общее представление об аналитической геометрии и линейной алгебре: знать, что такое матрица, вектор, скалярное и векторное произведение.

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

PNG — not GIF!

Время на прочтение4 мин
Количество просмотров88K
Доброго времени суток!
Вам когда-нибудь хотелось узнать как устроены файлы PNG? Нет? А я все равно расскажу.
Формат PNG(Portable Network Graphics) был изобретен в 1995 году, чтобы стать заменой GIF, а уже в 1996, с выходом версии 1.0, он был рекомендован W3C, в качестве полноправного сетевого формата. На сегодняшний день PNG является одним из основных форматов веб-графики.

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

Разработка цифровых устройств на базе СБИС программируемой логики

Время на прочтение9 мин
Количество просмотров40K
На хабре периодически появляются статьи, посвященные разработке аппаратуры. Однако большинство из них исходят из теоретических позиций (что такое логические элементы, триггеры и т.д.) и на этом останавливаются, либо рассматривают вопрос в аспекте «сделай сам», т.е. что человек может создать самостоятельно в домашних условиях. Мне бы хотелось рассказать о том, как выглядит процедура проектирования аппаратных средств с точки зрения небольшой компании, зарабатывающей этим себе на хлеб с маслом.
Но сначала несколько слов о специфике данной области (по крайней мере в нашей стране). Приходится исходить из следующих реалий:
  1. невозможно в наших условиях соревноваться с интелом или хотя бы TI в выпуске процессоров и прочих разных микросхем — цена вхождения очень высока, рынки сбыта поделены, и, по большому счету, нет необходимых знаний и опыта;
  2. бессмысленно соревноваться с китайцами в производстве всевозможной массовой электроники — стоимость труда у них ниже, производственные мощности находятся у них же, рынки сбыта в руках крупных компаний;
  3. можно окучивать отечественные рынки различной несложной электроникой — от сигнализаций до елочных гирлянд. Кто-то живет этим, но норма прибыли невысока, а мороки много;
  4. можно участвовать в государственной программе поддержки бедных (РосПил). Отличная тема, но меня пригласить забыли.

Одна из немногих успешно работающих моделей — контрактные разработки для западных заказчиков. Идея проста: у нас заказывают наукоемкие исследования/разработки, результаты собирают вместе где-нибудь в Калифорнии (обычно по цепочке через нескольких посредников) и продают в конечном итоге какой-нибудь крупной корпорации-производителю электроники. Тому же Интелу, к примеру. Года через 2-3 все это возвращается к нам в составе сложных агрегатов (телефонов, мониторов и т.д.) в красивой коробке с клеймом “Made in USA” (что редко) либо “Made in China” (значительно чаще) по червонцу за пучок. Ситуация с одной стороны грустная — мы не владеем технологической цепочкой, а способны решать лишь отдельные задачи. Но есть и основания для оптимизма — таким образом российские разработчики входят в общемировую систему и получают ценный опыт. Компания, в которой я работаю, специализируется в основном на исследовательских разработках в области беспроводных коммуникаций. Исходя из этого я и буду вести дальнейший рассказ.

Как же выглядит процесс разработки?
Читать дальше →

Алгоритмы отсечения

Время на прочтение5 мин
Количество просмотров56K
С ростом мощности компьютеров всё большая часть людей пробует работать с графикой. На первый взгляд многие алгоритмы кажутся интуитивно понятными, но, если вы хотите, чтобы ваше приложение работало с приемлемой скоростью, вам придётся изучить классические алгоритмы.

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

Взгляд изнутри: CD и HDD

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


Предисловие


Моя предыдущая статья была посвящена внутреннему устройству чипа от Nvidia, да и, пожалуй, внутреннему устройству любого современного процессора. В этой статье мы перейдём к средствам хранения информации, и я расскажу, что представляют собой CD и HDD диски на микроуровне.
Под катом много трафика

Взгляд изнутри: Вскрытие чипа Nvidia 8600M GT

Время на прочтение6 мин
Количество просмотров98K
image
Предисловие

Года 3-4 назад судьба распорядилась так, что в руки мне попал ноутбук Asus G2S. Счастье моё длилось ровно до прошлой зимы, когда ни с того, ни с сего на экране стали появляться артефакты, особенно при запуске игрушек или «мощных» приложений, активно работающих с видеочипом. В результате оказалось, что проблема именно в нём. Nvidia для практически всей геймерской линейки G2 поставляла видеочипы с браком (отслоение контактов между самим кристаллом и подложкой), который обнаруживался лишь через пару лет интенсивной работы. Решение было однозначным – замена видеочипа. Но что делать со старым?! Ответ на этот вопрос пришёл на редкость быстро…
Много трафика под катом
Читать дальше →

Алгоритмы на графах — Часть 0: Базовые понятия

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

Вступление


Как оказалось тема алгоритмов интересна Хабра-сообществу. Поэтому я как и обещал, начну серию обзоров «классических» алгоритмов на графах.
Так как публика на Хабре разная, а тема интересна многим, я должен начать с нулевой части. В этой части я расскажу что такое граф, как он представлен в компьютере и зачем он используется. Заранее прошу прощения у тех кто это все уже прекрасно знает, но для того чтобы объяснять алгоритмы на графах, нужно сначала объяснить что такое граф. Без этого никак.

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

Реализация графов и деревьев на Python

Время на прочтение17 мин
Количество просмотров291K
Продолжаем публикацию наиболее интересных глав из книги Magnus Lie Hetland «Python Algorithms». Предыдущая статья расположена по адресу habrahabr.ru/blogs/algorithm/111858. Сегодня же речь пойдет об эффективной работе с графами и деревьями и особенностях их реализации в Python. Базовая терминология теории графов уже обсуждалась (например здесь: habrahabr.ru/blogs/algorithm/65367), так что я не включил часть главы о терминах в эту статью.

Реализация графов и деревьев


Многие задачи, например, задача обхода точек по кратчайшему маршруту, могут быть решены с помощью одного из мощнейших инструментов — с помощью графов. Часто, если вы можете определить, что решаете задачу на графы, вы по-крайней мере на полпути к решению. А если ваши данные можно каким-либо образом представить как деревья, у вас есть все шансы построить действительно эффективное решение.
Читать дальше →
12 ...
91

Информация

В рейтинге
Не участвует
Откуда
Сахалин, Россия
Дата рождения
Зарегистрирован
Активность