Все потоки
Поиск
Написать публикацию
Обновить
1041.64

Программирование *

Искусство создания компьютерных программ

Сначала показывать
Порог рейтинга
Уровень сложности

Создавая хтонических чудовищ, документируй

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

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


Нижележащий текст преследует несколько целей:


  1. Дать краткий обзор (читай — немного погундеть на тему) неудовлетворительного состояния инструментария, применимого к хтоническим чудовищам мира C/C++;
  2. Предложить своё альтернативное решение (бесплатно-без-СМС-и-регистрации — проект некоммерческий и выложен на GitHub под MIT-лицензией);
  3. Призвать сообщество пообщаться на тему и собрать идеи;
  4. Пригласить присоединиться к разработке проекта на GitHub.

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



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

«Программист — Аналитическое мышление = 1С программист» и другие результаты GoToHack

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

С 9 по 11 декабря состоялся наш второй хакатон GoToHack для ребят до 20 лет, посвященный применению технологий машинного обучения в сфере образования и HR.

По итогам каждая команда презентовала результаты перед экспертами, лучшие были награждены различными призами: от поступления в университет до гранта размером 100 000 рублей на поездку на международную конференцию.

О проектах и забавных моментах можно прочесть под катом.
Читать дальше →

Искусственный интеллект «Мира дикого запада» HBO: тогда и сейчас

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

Так же, как и сегодня, в 1973 году (в год, когда Майкл Кричтон выпустил «Мир дикого запада») всех завораживала идея искусственного интеллекта. Фильм имел огромный кассовый успех, хотя был выпущен в том же году, когда люди начали охладевать к идее ИИ: массивное истощение ресурсов ИИ, обманутые ожидания и, как следствие, угасающий интерес в последующие годы.

В 2016, «Мир дикого запада» вернулся на экран, и коренные изменения в технике глубинного обучения машин, общедоступные информационные ресурсы и вычислительные мощности фундаментально меняют будущее для ИИ. Вычислительные мощности и возможности технологий сейчас достаточно развиты, чтобы ИИ мог дополнить и подтолкнуть развитие общества по сравнению с полным крушением надежд в 1973 года.

Новая версия «Мира дикого запада» от HBO, созданная Джонатаном Ноланом и Лизой Джой стала на сегодняшний день одним из самых популярных сериалов. Футуристические западные реалии подливают масла в огонь повсеместной одержимости ИИ, и популярность шоу доказывает, что люди заворожены потенциалом ИИ. Успех «Мира дикого запада» отражает устойчивую экосистему ИИ, в котором венчурные фонды, корпорации и потребители активно взаимодействуют.

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

Неинициализированные переменные: ищем ошибки

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

Большое количество научных исследований используют код, написанный на языке Фортран. И, к великому сожалению, «научные» приложения тоже не застрахованы от банальных ошибок, таких как неинициализированные переменные. Стоит ли говорить, к чему могут приводить подобные вычисления? Иногда эффект от таких ошибок может довести до «серьёзных прорывов» в науке, или стать причиной действительно больших проблем – кто знает где полученные результаты могут быть использованы (но, мы догадываемся где)? Хотелось бы привести ряд простых и эффективных методов, которые позволят проверить существующий код на Фортране с помощью компилятора Intel и избежать подобных неприятностей.
Читать дальше →

Использование send для удобства, от безысходности и ради развлечения

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


Один из методов библиотеки Sidekiq. Объяснение смайла


send в Ruby вызывает методы объектов по имени. Вот очевидный способ применения:


# До: явно используем присваивание. Неудобно, если полей много или они определяются в рантайме.
user.name = "Иван"
user.age = 29

# После: передаём имя атрибута параметром. Решает проблемы первого способа.
def set(field, value)
  send("#{field}=", value)
end
user.set(:name, "Иван")
user.set(:age, 29)

А ещё вы наверняка видели такие строки:


after_create :send_email

Да-да, коллбэки в рельсах внутри реализованы тоже с помощью send.


Что ещё умеет send?

Самые востребованные языки программирования 2016

Время на прочтение1 мин
Количество просмотров113K
Под конец этого непростого года наша служба исследований собрала двадцатку самых востребованных языков программирования на hh.ru. По каждому языку отдельно посчитали динамику за год. А по первой пятерке заодно посмотрели изменения за 5 лет.

Что произошло: PHP в этом году стал самым востребованным у работодателей, отняв пальму первенства у Java. За год выросли оба, но PHP вырос сильнее. Go и Swift «выстрелили» на 161% и 100% соответственно, хотя до лидеров по количеству вакансий им еще далеко. А вот Python заметно сдал позиции, сразу на 32%.

Если сравнить с индексом TIOBE, то сразу заметно, что PHP у нас заметно выше, а Visual Basic, например, заметно ниже. Go рванул и там и тут, а вот Objective-C у TIOBE в лидерах роста, а у нас он упал на 9%. С у них, кстати, упал сильнее всех, а у нас, наоборот, вырос на 46%.


А где же 1С, спросите вы? В табличку не включили, но если интересно, то все неплохо: 2015 — 9 473, 2016 — 13 735. Прирост: 45%. В абсолютных цифрах — самый востребованный язык.
Посмотреть динамику первой пятерки за 5 лет

Отладочная плата ПЛИС — Франкенштейн. Часы. Altera EPM7064 VS Lattice LC4064v

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

Продолжение предновогодней серии приключений маленькой ПЛИС Altera EPM7064 на отладочной плате — Франкенштейн. В предыдущей серии...


Настала пора сравнить две ПЛИС из одной весовой категории: Altera EPM7064 и Lattice LC4064v. Хотя, один у них — только вес — это 64 макроячейки. В остальном, судя по параметрам, у этих ПЛИС совсем разные назначения. ПЛИС от Altera, судя по документации 2005 года, является просто не молодой, от этого и обладает низким количеством ячеек. Так же, обладает популярным по тем временам напряжением питания — 5 вольт. Максимальная рабочая частота не превышает 200 МГц. В то же время Lattice может работать до частот в 400 МГц, но при этом, питается от напряжения — 3.3 вольта. Да, это не так удобно, как 5 вольт, если мы хотим взаимодействовать со старыми схемами (однако, заявлена толерантность к 5В). В документации на Lattice этой серии указан 2014 год, поэтому я предположу, что это современные высокоскоростные ПЛИС, но малого объема, и судя по "SuperFAST CPLD" в описании, позиционируются они несколько иначе.


Как нам их сравнить? Попробуем решить на них одну и ту же задачу. Часы на Lattice LC4064v мы уже попробовали сделать и у нас получилось. Теперь попробуем сделать часы на Altera EPM7064 — на нашем Франкенштейне.


Узнать, что вышло

Голос Сиэтла: разговариваем с Сергеем Тепляковым

Время на прочтение16 мин
Количество просмотров6.8K
Последние две мои статьи — интервью со спикерами одной прошедшей конференции. Мне показалось интересным поговорить с человеком, который в свое время отказался выступать на этой конференции, “из за одного маленького семейного обстоятельства”. Этот человек — Сергей SergeyT Тепляков, MVP, автор отличной книги про паттерны проектирования, адепт TDD, ныне разработчик Tools for Software Engineers в Microsoft и мейнтейнер библиотеки Code Contracts.

Под катом много текста про конференции, TDD, парное программирование, архитектуру Code Contracts, Хабру.
Чем же занимаются разработчики в Сиэтле

10 новых сказок о потерянном времени

Время на прочтение19 мин
Количество просмотров14K
Привет Хабр! Я решил продолжить серию статей про гипотезу Эйлера, написав несколько улучшенных версий программ для решения диофантова уравнения вида a5 + b5 + c5 + d5 = e5.


Как известно, для того, чтобы решить какую-либо сложную вычислительную задачу, нужно обратить внимание как минимум на следующие пункты:

  1. Эффективный алгоритм
  2. Быстрая реализация
  3. Мощное железо
  4. Распараллеливание

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

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

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

Преамбула


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

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

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

Интуитивное программирование

Время на прочтение5 мин
Количество просмотров25K
За свой относительно небольшой опыт работы (порядка 6 лет) я довольно часто слышал фразы опытных и начинающих программистов — «Я чувствую, что это должно работать», «У меня есть ощущение, что этот метод работать не будет», «Давайте сделаем интуитивно-понятный интерфейс» и так далее. Всё это — проявление интуиции в процессе разработки и программировании.
О ней и пойдёт дальше разговор.


Взято с сайта oprah.com
Читать дальше →

Сколько нужно времени на изучение новой технологии?

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


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

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

Модуль HTML::Phl для обработки HTML-документов, содержащих инструкции с кодом Perl

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


В статье приведена спецификация модуля HTML::Phl для работы с HTML-документами, содержащими код языка программирования Perl.

Задача модуля HTML::Phl — выбрать из текстового документа формата HTML, размещенный в нем особым образом perl-код, выполнить кое-какие манипуляции над ним и остальным кодом, объединить полученное в единый код perl и «скормить» всё это 'eval', получая на выходе сгенерированную HTML-страницу, воспроизводимую веб-браузером.

Пример
1   <HTML>
2   <HEAD>
3   <META content="text/html; charset=UTF-8" http-equiv="Content-Type">
4   <TITLE>Пример PHL</TITLE>
5   </HEAD>
6   
7   Создаем два дочерних процесса f1 и f2<br>
8
9   %pl  include("process_win.phl", "fork decode=cp1251", "f1");
10  %pl  include("process_utf.phl", "fork decode=utf8", "f2");
11
12  Ждем завершения процессов<br>
13
14  <%pl my %join = include("JOIN", "f1 f2"); %>
15
16  Результаты выполнения процессов<br>
17
18  <%pl
19     foreach my $key(keys(%join)) {
20        if (ref $join{$key}) {
21           print "процесс '$key' - результат: ";
22           for (my $i = 0; $i <= $#{$join{$key}}; $i++) {
23              print "'${$join{$key}}[$i]' ";
24           }
25           print "<br>";
26        } else {
27           print "процесс '$key' - результат: '$join{$key}'<br>";
28        }
29     }
30  %>
31   
32  </HTML>


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

Ближайшие события

Компьютеры Советской России с троичной сбалансированной системой счисления

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

компьютер сетунь


"Возможно, самая красивая система счисления — это сбалансированная троичная" — Дональд Е. Кнут, Искусство программирования, Издание 2.

Многие знают, что компьютеры хранят данные и работают с ними с помощью двоичной системы счисления. Одно из главных объяснений этому можно найти в схеме современных компьютеров, которые состоят из миллиардов простых и массово производимых транзисторов и конденсаторов, которые могут вместе представлять два состояния: высокое напряжение (1) и низкое напряжение (0).


Такая конструкция сегодня настолько распространена, что трудно себе представить, как компьютеры могут работать иначе. Но, в Советской России 50-х годов они работали иначе. Если вы вдруг не слышали про такое, загуглите "Сетунь" — сбалансированный трехкомпонентный компьютер, разработанный в 1958 году небольшой группой во главе с Брусенцовым, в МГУ.


Перед тем, как говорить о Брусенцове и Сетуни, давайте я немного объясню вам троичную сбалансированную систему счисления.


Сбалансированная троичность


Тернарная или троичная — это система счисления, в которой есть три вероятных значения: 0, 1 и 2. В её сбалансированной версии существуют три вероятности -1, 0 и +1, часто упрощённые до -, 0 и + соответственно.

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

Вызов методов через reflection

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

Все программисты на Java явно или неявно пользуются reflection для вызова методов. Даже если вы не делали этого сами, это за вас наверняка делают библиотеки или фреймворки, которые вы используете. Давайте посмотрим, как этот вызов устроен внутри и насколько это быстро. Будем глядеть в OpenJDK 8 с последними обновлениями.

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

Как стать первым в спортивном программировании: Университет ИТМО делится опытом. Часть 1

Время на прочтение8 мин
Количество просмотров22K
В этом материале мы расскажем о новом курсе, который был запущен Университетом ИТМО на платформе edX в этом году. Под катом – рассказ о проекте «How to Win Coding Competitions: Secrets of Champions» и большое интервью с авторами и инструкторами курса, в котором они рассуждают о том, что должен знать и уметь будущий победитель, и делятся своим опытом и воспоминаниями от участия в олимпиадах по программированию.

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

«Дайджест 1cloud»: 25 материалов о безопасности, работе программистов и опыте создания IaaS-провайдера

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

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


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

Почему Hackintosh уже актуален. Развенчание мифов

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

Каждому iOS разработчику нужен свой уголок с печеньками, плюшевой уточкой и шайтан-машиной на OSX.


В свете перехода на Swift, мощность железа стала особенно востребована. Чтобы комфортно разрабатывать под айфоны, нужен как минимум процессор с частотой 3+ ghz, SSD на 120-250Gb и оперативы гигов 16. Все это как раз для того, чтобы не было желания посмотреть футбол, пока запускается проект или открывается interface builder.


А знаете, что еще было всегда актуально? Сумасшедшие цены на яблочные устройства:


image


PC с таким же, плюс-минус, железом можно запросто собрать всего за 30.000 рублей! (инфа на ноябрь 2016). Многие, конечно, думают, что раз компания покупает железо, то значит финансы бесконечные, можно не стесняться в средствах. Если вы работаете в Google, то вам повезло и жизнь хороша. Но в остальных случаях это не так.


Что же делать? Не разрабатывать же под Android в конце концов?


Под катом мы узнаем о современном Hackintosh, его роли в разработке, способам безболезненной установки и настройки, услышим мнение людей, работающих на нем не первый год, и проведем тест на iOS инструментах.


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

Отладочная плата ПЛИС — Франкенштейн. Телеграфный передатчик

Время на прочтение6 мин
Количество просмотров14K
Бегут последние деньки уходящего года. Предновогодняя суета. А для тех, у кого выдалась свободная минутка на работе, я предлагаю серию статей про самодельную отладочную плату на базе ПЛИС Altera EPM 7064.



Недавно мне потребовалось найти пару 1U корпусов под мой проект. И в качестве альтернативы новым, мы решили поискать старые приборы в 1U формате, внутренности выкинуть, а корпус использовать по назначению. Но, открыв корпус, я был приятно удивлен! Целых четыре ПЛИС от Altera, да к тому же 5 вольтовых. Я не смог удержаться, чтобы одну из них не попробовать в деле!

Паяльной станции у меня нет, ЛУТ технологию я не практикую. Поэтому я взял строительный фен на 250 градусов и отковырял микросхему ПЛИС от платы. Переходной платы для такого корпуса у меня тоже не было, поэтому я взял обычную макетку, впаял в нее стойки и с помощью накрутки и пайки, соединил выводы микросхемы со стойками. Вывел разъем JTAG и питания, прикрутил генератор. Это все, что нужно для начала работы с микросхемой

Что можно сделать из такой маленькой ПЛИС? Радиолюбители решают такую проблему очень просто: в любой непонятной ситуации мы делаем передатчики! Из чего? Да из чего угодно, что под руку попало в данный момент! А сегодня у нас Altera EPM7064.
V - Я люблю трэш!

Создание редактора квестов и диалогов для Unreal engine: Часть 2 технические аспекты

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

Здравствуйте меня зовут Дмитрий. Я занимаюсь созданием компьютерных игр на Unreal Engine в качестве хобби. Сегодня я продолжу рассказывать про плагин для редактирования квестов и диалогов. В предедущей статье я рассказал как пользоваться плагином, сегодня я расскажу что нужно знать чтобы плагин мог взаимодействовать с миром игры и её интерфейсом.
Читать дальше →

Вклад авторов