• Знакомство с Coarray Fortran: будем параллельны?

      Очень давно хотел написать о том, на какой стадии сейчас находится один из «прародителей» популярных сегодня языков программирования. Да, я говорю о Фортране. Попытаюсь разрушить стереотип, который существует в умах многих разработчиков – что Фортран древний язык без каких либо перспектив, и уж точно никто на нём уже не пишет. Наоборот, он очень активно эволюционирует и уже давно предлагает богатый набор различных функциональностей, закреплённых в стандартах, вполне, кстати, сопоставимых с тем же С/С++.
      От «старого» 77-го Фортрана осталось уже не так и много… в 95 стандарте мы могли вполне себе создавать свои типы данных, динамически выделять и очищать память, работать с указателями, перегружать функции и операторы и много чего ещё. По сути, от С своим набором средств он отличается несильно. Тем не менее, я не хочу пытаться сравнивать языки – это вопрос философии. Скажу только, что фортрановский компилятор Intel пользуется очень большим спросом, и, собственно, приобретается даже активнее, чем тот же С++.
      Цель же данного поста – рассказать о текущем состоянии дел. Собственно, Фортран на сегодняшний день — параллельный язык, и стал он таковым после принятия стандарта Fortran 2008, в котором появились Coarray’и.
      Читать дальше →
      • +29
      • 9,2k
      • 2
    • Почти во всех реализациях двоичного поиска и сортировки слиянием есть ошибка

      • Перевод
      Это перевод статьи Джошуа Блоха «Extra, Extra — Read All About It: Nearly All Binary Searches and Mergesorts are Broken» 2006 года.

      Я живо помню первую лекцию Джона Бентли в университете Карнеги-Меллон, на которой он попросил нас, свежеиспечённых аспирантов, написать функцию двоичного поиска. Он взял одно из решений и разобрал его на доске, и, разумеется, в нём оказалась ошибка, как и во многих других наших попытках. Этот случай стал для меня наглядной демонстрацией к его книге «Жемчужины программирования». Мораль в том, чтобы внимательно расставлять инварианты в программе.

      И вот, теперь 2006 год. Я был потрясён, узнав, что программа двоичного поиска, корректность которой Бентли доказывал формально и тестами, содержит ошибку. Не подумайте, что я придираюсь; по правде сказать, такая ошибка вполне может ускользать от тестеров десятилетиями. Более того, двоичный поиск, который я написал для JDK, тоже был багнутым лет девять. И только сейчас, когда она сломала кому-то программу, о ней сообщили в Sun.
      Читать дальше →
    • Meeting C++ 2013

      Meeting C++, Dusseldorf


      Так вышло, что у меня получилось принять участие в работе конференции, посвящённой C++. Уровень, конечно, не GoingNative: доклады были разного уровня. Как очень сильные и интересные, так и совсем пустые. Самым главным для меня была атмосфера — давно я ни с кем лично не обсуждал столько интересных тем. Это мне так понравилась, что я загорелся идеей создать в Санкт-Петербурге C++ User Group, чтобы больше общаться лично с коллегами по цеху. Но об этом как-нибудь потом, а пока о конференции. Не буду описывать и пересказывать все доклады, отмечу только наиболее интересные мне темы и темы, которые затрагивались почти в каждом докладе.
      Читать дальше →
      • +30
      • 8,5k
      • 8
    • Компактный USB HID Bootloader для ATtiny85


      Представляю вашему вниманию новый компактный Bootloader для AVR Tiny 45/85. Данный автозагрузчик распространяется под лицензией GNU GPL, как того требует лицензия V-USB. Основой для данного автозагрузчика послужил ATtiny85 USB Boot Loader от Embedded Creations и его потомок micronucleus-t85, используемый платами Digispark.
      Также как и вышеупомянутые, TinyHID Loader основан на библиотеке V-USB.

      Ключевые особенности:


      • Работает под ATtiny45 и ATtiny85
      • Компактен (2кб с базовыми функциями)
      • Расширяем (есть ряд дополнительных функций, включение которых увеличит размер)
      • Не треубет драйверов (что особенно важно под новые версии Windows)
      • Не работает с AVRdude, использует вместо этого кросплатформенное API на C#
      • Умеет обновлять сам себя

      Читать дальше →
      • +23
      • 32,6k
      • 5
    • Создаем платформер за 30 минут

      • Tutorial
      Здравствуйте! Сегодня мы будем писать платформер, используя C++, Box2D и SFML, а также редактор 2D карт для игр Tiled Map Editor.

      image

      Вот результат (карта создавалась 5 минут + во время сьемки игра тормозила + экран не так растянут — дефект Bandicam):



      Исходники и exe — внизу статьи.
      Читать дальше →
    • Не надо бояться солнечных панелей

      Искал в гугле «солнечная панель 100 Вт» и в первом десятке выдается ссылка на Хабрахабр, статья от 2011 года. В комментариях правильные вещи, но актуальностью на сегодняшний день — бред. Сегодня солнечная панель 100 Вт (на Украине) стоит до 100 долларов, контроллеры, аккумуляторы — все это не очень напряжно. Но самая большая загвоздка зеленого прогресса в том, что люди просто не понимают, что такое солнечная энергия, как правильно и по уму все реализовать, зачем это надо и вообще…

      Не в рекламных целях. Я торгую на рынке солнечными панелями и 90 человек из 100 отталкивают это новшество, как отталкивали мобильники 15 лет назад — дорого, не нужно, не выгодно, и так хорошо. Многие хотят набрать панелей по 100 долларов на 10 килоВатт и не платить за электроэнергию. Сами посчитайте — 100 Вт х10 = 1кВт * 10 = 10 кВт = 10 000 долларов. Это только на панели, без аккумуляторов и контроллеров. Аккумуляторов на час работы нагрузки в 10 кВт надо еще 12-13 шт по 100 А/ч (еще по 200 долларов каждый) и т.д. В итоге, смотрят на продавца как на идиота, выбрасывают из головы все, что им рассказываешь и в этой самой голове остается одно: «мне это не интересно». На самом деле все обстоит немного иначе.

      Зачем созданы солнечные панели? В чем смысл жизни человека? Почему мы дышим грязным воздухом? Спаси планету, освободите Вилли!

      На эти вопросы может быть множество ответов, постараюсь изложить более-менее понятно как это вижу я.
      Читать дальше →
    • FindBugs против CDK

        Мне всегда интересно читать посты от PVS-Studio о том, как они ищут баги в каком-нибудь опенсорсном проекте. Я решил, что я тоже смогу написать такой пост, только про Java. Существует совершенно замечательный бесплатный статический анализатор Java-кода FindBugs. О нём на удивление мало писали на Хабре.

        Помимо анализатора кода для такой статьи требуется подопытный кролик. Нужен довольно большой проект, но при этом не настолько распространённый, чтобы разработчики идеально вылизывали код. Я выбрал проект Chemistry Development Kit (версия 1.4.19), которым доводилось пользоваться. FindBugs я установил как плагин к Eclipse, потому что мне так привычнее.


        Читать дальше →
      • Пример использования статического анализатора

          Когда PVS-Studio сообщили о том, что они наконец-то выпустили standalone версию, не требующую для своей работы Visual Studio, я, конечно же, не мог пройти мимо :) До этого я уже игрался с пробной версией на коде одного из старых проектов. Сейчас же появилась возможность посмотреть на код нашего последнего проекта, собирающегося в среде разработки AVR Studio (которая eclipse-based).

          Для работы требуются файлы сразу после препроцессора. Среда AVR Studio это умеет, с одним маленьким исключением — после включения флага «Только препроцессор» на выходе действительно появляются файлы после препроцессора — но по-прежнему с расширением.о вместо ожидаемого .i. Ну что ж, 5-минутный скрипт на Питоне решает это недоразумение, и анализатор отлично запускается!

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

          В паре мест обнаруживаются реальные опечатки и ошибки копи-паст. Например, переменная типа одного enum-a сравнивается со значением из другого enum-a. Или же одной переменной присваивается два разных значения подряд (хотя, как указано выше, в большинстве случаев это было ложным срабатыванием для записей последовательности в регистр).

          Но самой интересной, из-за чего я и пишу этот пост, была одна-единственная строчка «Possible NULL pointer dereferencing»…
          Что же за ней скрывалось?
        • KiCad и ГОСТ. Библиотека УГО

          Дополняем цикл статей по УГО для различных САПР-схемотехники. В данном топике описывается процесс создания компонента УГО для KiCad.



          KiCad — распространяемый под лицензии GNU GPL программный комплекс класса EDA с открытыми исходными текстами, предназначенный для разработки электрических схем и печатных плат.

          Внимание! Под катом трафик!
          Читать дальше →
        • Как мы делали Wiren Board

            Последние 9 месяцев мы разрабатывали Wiren Board — компактный индустриальный компьютер с множеством встроенных интерфейсов (Wi-Fi, GPRS, GPS, NFC, Ethernet и т.д.) Мы уже писали о нём, и получили кучу отзывов и пожеланий. В итоге в новую версию было внесено много изменений, и эта статья про самые значительные из них.

            По сравнению с апрельским прототипом на плате появились 2 USB-host, интерфейс RS-485 и разъём с 8 GPIO. Кроме этого мы сделали новую схему питания, поддерживающую входные напряжения от 5 до 22 вольт, Passive PoE и подключение Li-Pol аккумулятора, добавили управление низковольтной нагрузкой и аналоговые входы на клеммниках.



            Как мы это делали, с какими трудностями столкнулись и что получилось в итоге — читайте в нашей статье.
            Читать дальше →