Search
Write a publication
Pull to refresh
41
0
Anna Subbotina @Gotto

User

Send message

Философия программирования 2 — Миф и язык

Reading time10 min
Views58K
def Миф и язык extends «трёхнаправленное программирование»;

Миф о том, что русские программисты лучшие в мире, запущен вовсе не партийными пропагандистами, он возник на перестроечной волне, вместе с мифами о хозяине-предпринимателе, невидимой руке рынка и ста сортах колбасы. Миф, это то, что человек не читавший взрослых книг называет «мем», а человек вообще не читающий, называет правдой. Передача «Разрушители мифов» берёт поверхностные мифы, которые можно легко опровергнуть, например, бросив бутерброд с маслом на пол тысячу раз. А вот Гордон, в одном из своих первых телепроектов «Собрание заблуждений», брался за раскрытие мифов посложнее, такие мифы нельзя раскрыть затопив машину и проверив, можно ли всё-таки открыть двери до того, как машина полностью наполнится водой, они как плавающий баг у которого нету «steps to reproduce». Вспомните Холмса или Хауса, интеллектуал в первую очередь отличается тем, что видит невидимое — пока паникующие пассажиры всматриваются в туман за бортом, он закрывает глаза и всматривается в свои «чертоги разума», вспоминает карту местности и ТТХ парохода.


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

Сортировка на односвязном списке за O(nlogn) времени в худшем случае с O(1) дополнительной памяти

Reading time11 min
Views59K
Все началось с данного топика на сайте gamedev.ru. Топикстартер предложил найти сортировку, которая обладает следующими свойствами:
  1. Время выполнения — гарантированные O(nlogn).
  2. Использование O(1) дополнительной памяти.
  3. Применимость для сортировки данных в односвязных списках (но не ограничиваясь ими).

Оговорки на все три ограничения:
  1. Гарантированные O(nlogn) означают, что, например, среднее время быстрой сортировки не подходит — должно получаться O(nlogn) для любых, даже самых худших входных данных.
  2. Рекурсию использовать нельзя, поскольку она подразумевает O(logn) памяти на хранение стека рекурсивных вызовов.
  3. Произвольного доступа к элементам сортируемого массива нет, мы можем двигаться итератором от любого элемента только к соседнему (за O(1)), причем только в одном направлении (вперед по списку). Модифицировать сам список (перевешивать указатели на следующие элементы) нельзя.

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

Под катом можно узнать, что в итоге получилось у нас.

Challenge. Прежде чем заглядывать под кат, предлагаю сначала самостоятельно подумать над алгоритмом. Если придумается что-то круче нашего варианта — напишите в комментариях.

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

Искусство виртуального дирижирования OpenStack: работа с Heat

Reading time14 min
Views14K
Heat

В предыдущей cтатье мы описали базовые принципы работы с API и консольными утилитами, управляющими отдельными компонентами платформы Openstack (nova, cinder, glance, neutron). Сегодня мы рассмотрим, как с помощью модуля оркестрации Heat можно построить готовую инфраструктуру из виртуальных устройств.
Читать дальше →

Как сделать греческие буквы в формулах прямым шрифтом в LaTeX

Reading time2 min
Views27K
Как известно, в формулах LaTeX греческие буквы и интегралы являются наклонными. В старой советской литературе в формулах греческие буквы и интегралы были прямые и некоторые люди требуют, чтобы в статьях, диссертациях, авторефератах и прочих документах греческие буквы тоже были прямым шрифтом.
Далее предлагается пакет, который может реализовать такое в LaTeX. Данный пакет я сделал в процессе работы над диссертацией, когда от меня попросили, чтобы греческие буквы в формулах были прямым шрифтом.

Это картинка, которая показывает, как будут выглядеть формулы, написанные в LaTeX, если подключить мой пакет:


Если кому-то такое вдруг понадобилось, то см. под кат.

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

Краткая инструкция: GitHub через I2P

Reading time1 min
Views36K
Навеяно публикацией «Github опять заблокирован».

Новость о блокировке гитхаба заставила задуматься об изготовлении костылей.

Почему-то сразу пришла в голову мысль об I2P.

И это действительно оказалось несложно.
Читать дальше →

Исследование виртуальных серверов с SSD дисками

Reading time5 min
Views34K


В последнее время SSD накопители стали заметно дешеветь и все чаще их можно увидеть как преимущество того или иного виртуального сервера. Например, тарифов с SSD дисками сейчас — 370 штук от 65 хостеров. Естественно, SSD диски намного дороже, чем диски других типов, поэтому для сохранения низкой стоимости услуги хостеры предлагают меньшее количество места за аналогичную цену по сравнению с SATA или SAS тарифами.

Я и мой друг amoskvin из https://theideahosting.com решили провести небольшое исследование дешевых тарифов на виртуальные серверы с SSD дисками. Хотелось бы поблагодарить всех хостеров, которые бесплатно предоставили виртуальные серверы для тестирования.

Для проведения тестирования была выбрана максимальная планка цены — 5 долларов за месяц. Единственное, сразу хочу заметить, что тестирование производилось в неспешном порядке и из-за колебаний курса валюты на момент публикации этой статьи планка в 5 долларов может быть немного сдвинутой, но общая идея осталась прежней: – протестировать хостеров и дешевые тарифы с SSD дисками.
Читать дальше →

Многозадачность в ядре Linux: прерывания и tasklet’ы

Reading time6 min
Views77K
Котейка и младшие братьяВ предыдущей своей статье я затронула тему многопоточности. В ней речь шла о базовых понятиях: о типах многозадачности, планировщике, стратегиях планирования, машине состояний потока и прочем.

На этот раз я хочу подойти к вопросу планирования с другой стороны. А именно, теперь я постараюсь рассказать про планирование не потоков, а их “младших братьев”. Так как статья получилась довольно объемной, в последний момент я решила разбить ее на несколько частей:
  1. Многозадачность в ядре Linux: прерывания и tasklet’ы
  2. Многозадачность в ядре Linux: workqueue
  3. Protothread и кооперативная многозадачность

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

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

10 гаджетов для путешественников

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

Etón Axis



Eton Axis — прекрасный и, что немаловажно, небольшой (162 x 168 x 54 мм) 3-в-1 гаджет для выживания, включающий в себя светодиодный фонарик, радио и зарядное устройство. Если батарея в устройстве разрядилась, используя ручку как генератор, за минуту кручения вы получите еще 15 минут работы. Самое приятное — встроенный USB-порт, с помощью которого легко поделиться зарядом Eton Axis с любым другим вашим гаджетом.

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

Адреса памяти: физические, виртуальные, логические, линейные, эффективные, гостевые

Reading time6 min
Views112K
Мне периодически приходится объяснять разным людям некоторые аспекты архитектуры Intel® IA-32, в том числе замысловатость системы адресации данных в памяти, которая, похоже, реализовала почти все когда-то придуманные идеи. Я решил оформить развёрнутый ответ в этой статье. Надеюсь, что он будет полезен ещё кому-нибудь.
При исполнении машинных инструкций считываются и записываются данные, которые могут находиться в нескольких местах: в регистрах самого процессора, в виде констант, закодированных в инструкции, а также в оперативной памяти. Если данные находятся в памяти, то их положение определяется некоторым числом — адресом. По ряду причин, которые, я надеюсь, станут понятными в процессе чтения этой статьи, исходный адрес, закодированный в инструкции, проходит через несколько преобразований.



На рисунке — сегментация и страничное преобразование адреса, как они выглядели 27 лет назад. Иллюстрация из Intel 80386 Programmers's Reference Manual 1986 года. Забавно, что в описании рисунка есть аж две опечатки: «80306 Addressing Machanism». В наше время адрес подвергается более сложным преобразованиям, а иллюстрации больше не делают в псевдографике.
Читать дальше →

Перевод интерактивного учебника «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. Упор, естественно, делается на объектно-ориентированное программирование: создаётся класс, к нему пишутся методы, некоторые из которых авторы оставляют читателям для самостоятельной доработки. Затем идут примеры использования рассмотренной структуры и описание алгоритмов с её участием.

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

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

Anki DRIVE — возвращаемся в детство

Reading time2 min
Views58K
Anki DRIVE.

С 10 по 14 июня 2013 года в выставочном комплексе Moscone West в Сан-Франциско проходила всемирная конференция разработчиков Apple — WWDC 2013. Это событие прошло мимо Хабра. Ну я не смог найти записи этого года. Однако, на этой конференции была представлена новая игрушка, точнее игрушки — умные гоночные машинки Anki DRIVE.

Если ты, %хабраюзер%, застал времена «За рулём», помнишь игрушечные железные дороги, которые в 90-х заменили машинки на пультах управления (в том числе по трекам) или в настоящее время увлекаешься робототехникой, коптерами и вертолетиками, то прошу под кат.
Читать дальше →

Структура белка: введение для айтишников

Reading time17 min
Views158K
Приятно видеть, что хабравчане регулярно интересуется другими предметными областями – например, биологией (более конкретно – структурой и функцией биологических макромолекул). Однако некоторые посты (например, этот), вызывают у специалиста просто физическую боль из-за обилия совершенно диких фактологических ошибок. В этом посте мне хочется рассказать о структуре и функции белка. О том, что мы знаем и о том, чего не знаем, а так же об имеющихся в этой области вычислительных задачах, требующих решения и интересных IT-специалистам. Постараюсь рассказывать сжато и тезисно, чтобы информации было больше, а воды – меньше. Всех, интересующихся структурой белков, прошу под кат, там очень много букв.
Читать дальше →

Как накормить мозг программиста… или feed your brain

Reading time12 min
Views375K

Введение


Из всех наслаждений, отпущенных человеку в жизни,
самое изысканное — шевелить мозгами.
(Борис Акунин)


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

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

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

Зима близко: правильные зимние перчатки для любителей тачскринов

Reading time5 min
Views21K
Во времена Nokia 3310 все было просто. Даже в самый лютый мороз можно было легко нажать на кнопку приема звонка или отправить СМС прямо из кармана (да-да, были такие умельцы). Однако с приходом сенсорных экранов все заметно усложнилось. И если весной и летом тыкать по экрану голым пальцем удается вполне комфортно, то зимой и промозглой осенью этот квест дается с трудом.

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



На рынке существует несколько моделей, поддерживающих так называемый Glove Mode – режим работы в перчатках. Однако их слишком мало, чтобы хоть как-то влиять на рынок, и вообще, лучшие телефоны по соотношению цена/качество обычно этой функции лишены. Поэтому я решаю этот вопрос с помощью сенсорных перчаток. Удивительно, но эта простая штука до сих пор ставит в ступор многих знакомых. В том числе тех, кто давно с техникой на «эй, ты». Собственно, выбору правильных зимних перчаток и будет посвящен этот топик.
Читать дальше →

Сравнительное тестирование флешек стандарта USB On-The-Go

Reading time4 min
Views103K
Для многих в наше непростое время встает вопрос о расширении памяти смартфона либо планшета, потому как в большинстве случаев производители перестали снабжать их продукты слотами для карт памяти различных форматов. На помощь приходят «флешки» выполненные по стандарту USB On-The-Go (OTG).

Стандарт USB OTG существует уже на протяжении продолжительного времени, однако только недавно многие производители стали использовать его для интеграции коннекторов micro-USB типов А и В и стандартных для персональных компьютеров разъёмов USB 2.0 и 3.0. Это избавляет пользователей при подключении к мобильным устройства от необходимости использования переходников типа USB – micro-USB. Под катом легкий выбор из небольшого количества моделей =).
Читать дальше →

Разбираем и собираем обратно стек USB

Reading time14 min
Views108K
Иллюстрированная проекция модели сетевого взаимодействия OSI на универсальную последовательную шину.

Три «замечательных» уровня стека USB


Меня не устроил вид стека USB, который можно встретить чаще всего на просторах сети:

Не сильно полезный стек USB

Уровень шины, логический, функциональный… Это, конечно, замечательные абстракции, но они скорее для тех, кто собирается делать драйвер или прикладной софт для хоста. На стороне же микроконтроллера я ожидаю шаблонный конечный автомат, в узлы которого мы обычно встраиваем свой полезный код, и он сперва будет по всем законам жанра глючить. Или же глючить будет софт на хосте. Или драйвер. В любом случае кто-то будет глючить. В библиотеках МК тоже с наскока не разобраться. И вот я смотрю на трафик по шине USB анализатором, где происходящие события на незнакомом языке с тремя замечательными уровнями вообще не вяжутся. Интересно, это у меня от гриппозной лихорадки в голове такой диссонанс?

Если у читателя бывали сходные ощущения, предлагаю альтернативное, явившееся мне неожиданно ясно в перегретом мозгу видение стека USB, по мотивам любимой 7-уровневой модели OSI. Я ограничился пятью уровнями:



Я не хочу сказать, что весь софт и библиотеки уже сделаны или должны проектироваться, исходя из этой модели. Из инженерных соображений код c уровнями будет сильно перемешан. Но я хочу помочь тем, кто начинает своё знакомство с шиной USB, кто хочет понять протоколы обмена устройств и терминологию предметной области, подобраться поближе к готовым примерам, библиотекам и лучше ориентироваться в них. Эта модель не для загрузки в МК, но в ваши блестящие умы, дорогие друзья. А ваши золотые руки потом всё сами сделают, я не сомневаюсь:)
Разобрать стек USB

История собаченьки. Создание персонажа для новой игры «Эволюция: Битва за Утопию»

Reading time6 min
Views25K
Каждая игра, будь то маленький инди-проект или глобальная игра ААА класса, начинается с предпродакшена. Это, если вы не знали, смутное время, когда разработчики пытаются понять, что за игру, собственно, они собираются делать. Будучи художником, я очень люблю этот этап разработки, поскольку именно в этот период процесс еще не встал на отлаженную колею, нет выматывающей рутины и можно креативить от души.

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


Итак…
Читать дальше →

Как мы делали остров Хозяйки Медной Горы

Reading time7 min
Views22K


Привет! Меня зовут Андрей Саенко, я живу в Воронеже, работаю в Allods Team и создаю астральные острова для игры «Аллоды Онлайн». Астральные острова — это приключения для 6 игроков, наш аналог общеизвестных данжей. Обычно концепции своих приключений я придумываю самостоятельно, но в моей практике был очень необычный опыт — мне довелось воплотить в игре астральный остров, придуманный одним игроком. На его примере я хочу рассказать о своей работе.

«А давайте запустим конкурс астральных островов?», — предложил нам однажды комьюнити-менеджер. Я согласился, подумав, что речь идёт о каком-то художественном конкурсе: я не раз сталкивался с тем, что фанаты нашей игры рисуют просто превосходно. Но объём взятых на себя обязательств я осознал лишь после того, как мне показали черновик новости о начале конкурса. Участникам не просто предлагалось придумать общую концепцию, они должны были продумать каждую деталь. И все это я должен был реализовать в игре!
Читать дальше →

Подробный обзор Wolfram Programming Cloud (Облака Программирования Wolfram)

Reading time3 min
Views17K


23 июня 2014 г., менее недели назад, после долгой разработки, вышел в свет новый продукт от компании Wolfram Research, который называется Wolfram Programming Cloud (Облако Программирования Wolfram). Об этом своем блоге написал Стивен Вольфрам и его пост был переведен на Хабрахабре.

Wolfram Programming Cloud позволяет вам программировать на языке Wolfram в любом браузере и с любого устройства, а также создавать готовые приложения (веб-формы ввода и скоро мобильные приложения), работать с прямым API, создавать автоматически генерируемые отчеты, отсроченные задания, веб-страницы, CDF и многое другое. При этом у всех желающих есть возможность попробовать и использовать Wolfram Programming Cloud бесплатно.

Мне бы хотелось поделиться с вами первым подробным видео-обзором на русском языке этого продукта, а также его реализации для обычного рабочего стола — Wolfram Desktop.


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

Wolfram Programming Cloud (Облако Программирования Wolfram) теперь доступно

Reading time7 min
Views22K

Перевод поста Стивена Вольфрама (Stephen Wolfram, CEO Wolfram Research).
Оригинал поста: Wolfram Programming Cloud Is Live!


Двадцать шесть лет назад в этот самый день мы выпустили Mathematica 1.0. И я очень рад, что сегодня тоже станет историческим днем: мы выпускаем Wolfram Programming Cloud (Облако программирования Wolfram) — первый объект в линейке продуктов, основанных на новом Wolfram Language (Языке программирования Wolfram).

Wolfram Programming Cloud
Читать дальше →

Information

Rating
Does not participate
Location
Москва и Московская обл., Россия
Date of birth
Registered
Activity