Обновить
33
0
Alex@eaa

Пользователь

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

Учимся думать и писать на Erlang (на примере двух комбинаторных задач)

Время на прочтение12 мин
Охват и читатели37K
— … Тут я даю ему по морд… Нет, бить нельзя!
— В том-то и дело, что бить нельзя, — лицемерно вздохнул Паниковский. — Бендер не позволяет.
И.Ильф, Е.Петров. Золотой теленок.

Мозголомная Брага жила в прозрачном сосуде и была такая
крепкая, что даже ужас. Она не то что из живота — прямо изо рта
бросилась в голову и стала кидаться там из стороны в сторону,
ломая умственные подпорки и укрепы.
М.Успенский. Там, где нас нет.

Пожалуй каждый, кто впервые приступает к изучению Erlang, ощущает себя в положении Шуры Балаганова, которому запрещено было применение единственного доступного и понятного метода: «бить нельзя...». В Erlang отсутствуют такие привычные для большинства современных языков понятия, как повторное присвоение переменной и, соответственно, накопление результата в одной переменной. (Справедливости ради следует отметить, что поведение типа «глобальная многократно меняющаяся переменная» в Erlang все же можно реализовать. Для этого в каждом процессе имеется словарь хешей, хранящий определяемые программистом пары ключ — значение. Имеются встроенные функции put(Key, Value), get(Key) и еще несколько вспомогательных функций. Но использование такого словаря в приложениях считается плохим стилем и рекомендуется только в исключительных случаях (http://www.erlang.org/doc/man/erlang.html\#put-2)). Как следствие, итерации в цикле невозможно реализовать с помощью привычного наращивания значений итерационной переменной. Накопление результата осуществляется только через рекурсию, а организация циклов — через хвостовую рекурсию. (Конечно, и итерации, и накопление результата в цикле можно реализовать через библиотечные функции для списков lists:foreach(Function, List), lists:foldl(Function, StartValue, List), lists:foldr(Function, StartValue, List) (http://www.erlang.org/doc/man/lists.html) и их аналоги для наборов (http://www.erlang.org/doc/man/sets.html, http://www.erlang.org/doc/man/ordsets.html, http://www.erlang.org/doc/man/gb_sets.html) и массивов (http://www.erlang.org/doc/man/array.html). Но наша цель — научиться писать циклы, а не использовать готовые решения, поэтому здесь мы воздержимся от употребления подобных библиотек).

Таким образом, в Erlang приходится ломать привычные шаблоны мышления и заменять их новыми паттернами, характерными только для этого языка программирования. Конечно, идеальное средство — мозголомная брага, способная ломать все «умственные подпорки и укрепы». Но для нас это, пожалуй, слишком радикальное средство, и мы пойдем другим путем.

В житии святого Антония Великого есть рассказ об одном из его учеников. Ученик стоял в храме и слушал, как святой Антоний читал Псалтырь. Как только прозвучал первый стих первого псалма:
Блажен муж, который не ходит на совет нечестивых...
ученик вышел из храма. С тех пор его никто не видел почти 30 лет, а когда он вновь появился в храме, Антоний Великий спросил, почему он оставил их так надолго и куда исчез. Ученик ответил: «отче, я услышал слова псалма, и удалился в пустыню, чтобы постараться выполнить то, о чем говорится в этих словах, т.е. не ходить на совет нечестивых мыслей». Другими словами, он усвоил практический урок этих слов, и теперь пришел чтобы читать дальше. К сожалению, у нас нет такого резерва времени, да и цели наши не столь возвышенны. Но основной концепт можно перенять.
Мы рассмотрим две стандартные комбинаторные задачи:
  1. поиск всех возможных перестановок (permutations) из данного множества по N элементов
  2. поиск всех возможных сочетаний (combinations) из данного множества по N элементов

и разберем различные подходы и способы их решения средствами языка программирования Erlang, чтобы на конкретных примерах понять и освоить некоторые особенности программирования на этом языке.
Читать дальше →

Как установить 1С Предприятие 8.2 (релиз 8.2.16.368 от 05.10.12) на линукс CentOS 6.3 (статья, HowTo)

Время на прочтение38 мин
Охват и читатели225K
Предупреждение: Никаких подробных инструкций не будет! Только последовательность действий, необходимые шаги и наводки. Это руководство только для опытных администраторов Линукс!

Примеры некоторых моих конфигов прилагаются...

Замечание: эта статья написана на основе экспериментов с 32-битным CentOS 6.3 (Для сервера необходимо использовать 64-битную ОС. Но так получилось, что на доступном мне для экспериментов железе 64-битный CentOS не установился.) Однако разницы для методики установки нет (32 vs 64bit) — она только в суффиксах дистрибутивных файлов: либо i686 (или i386), либо x86_64…

Содержание:


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

Используем Cmake для автоматической генерации makefile в проектах

Время на прочтение8 мин
Охват и читатели75K
  Вступление большое, так как подробно объясняет зачем нужен cmake. Можете сразу под кат, если уже знаете.

Вступление


  Компилирование проекта руками — пустая трата времени. Это фактически аксиома и об этом знают те, кто программирует. Но чтобы всё скомпилировалось автоматически необходимо задать правила, так ведь? Часто и по-старинке используют makefile для *nix или какой-нибудь nmake для windows.
  Я хоть и не первый год программирую, и руками составлял простые автосборщики проектов на основе makefile, но стоит немного подзабыть и приходится заново изучать как же составить эту хитрую схему. В основном приходится делать проекты расчитанные на какую-то одну систему, будь то linux или windows, и часто между собой не кросскомпилируемые. Для переносимости makefile используется automake и autogen, но их синтаксис ещё более запутан. Не скажу, что выбор идеальный, но для себя я решил перейти на cmake, благо он портирован под всё доступное. Мне он показался более человекопонятным. Попробую объяснить основы. Вы пишите словами правила, а из них генерируется makefile, который вы уже запускаете стандартным способом.

Ликбез

  Зачем он нужен? Чтобы при переносе на другую машину, с другими путями вы двумя командами собрали проект ничего не исправляя в файле makefile. Но есть же configure? Это альтернатива. И configure не кросплатформенный, для его генерации нужен autoconf/autogen, для которых идёт ещё свой набор правил. Только преимущества? Компиляция автосгенерированным makefile получается немного медленнее старого способа. Например, в KDE-4 является официальным инструментом выпуска.
Приступим

MIMB – Мульти-установочная и мульти-загрузочная флэшка

Время на прочтение2 мин
Охват и читатели58K
Привет, Хабрачитатели!

В повседневной практике часто нужен набор инструментов – Linux и иногда Windows LiveCD, а также установочные диски различных дистрибутивов. Диски легко подвергаются механическим повреждениям. Учитывая, что набор используемого инструментария и дистрибутивов у каждого не так велик (во избежания развода зоопарка) и зачастую вполне умещается на USB-носителе до 4G, целесообразно поместить все на одну флэшку.
К вашему вниманию флэшка для загрузки Live сборок Linux и Windows и установки дистрибутивов Linux. Подготовлен образ .img, который легко разворачивается при помощи dd. Кому интересно, подробности под катом.
Читать дальше →

Несколько интересных приемов и особенностей работы с MySQL

Время на прочтение3 мин
Охват и читатели89K
Я думаю, что в процессе изучения той или иной СУБД каждый из вас не раз изобретал велосипеды для решения своих задач, не зная о существовании той или иной функции или приема, которые бы могли в разы ускорить выполнение запросов и уменьшить объем кода. В данной статье я хочу поделиться с вами своим опытом работы с очень «добрым» и «отзывчивым» MySQL, часто позволяющему программисту делать вещи, которые другие СУБД переварить бы не смогли. Материал будет полезен скорее тем, кто только решил углубиться в чудесный мир запросов, но возможно и опытные программисты найдут тут что-то интересное.
Читать дальше →

SOAP Web-сервис средствами Spring-WS

Время на прочтение8 мин
Охват и читатели113K
image
Когда-то поставили передо мной задачу начать разработку Web-сервисов и дали мне сорцы простейшего проекта без каких-либо объяснений. Проект, конечно же, не запускался. Что такое Spring и как он работает, я тоже представления не имел. Адекватных статей по разработке Web-сервисов средствами Spring ни русскоязычных, ни англоязычных я тоже не смог найти. Пришлось разбираться во всем самому, оказалось все не так страшно.
И вот недавно я решил посмотреть, какие новые возможности добавились в Spring с тех пор, и обновить старые сервисы, что в результате и сподвигло меня на написание данной статьи.

Данная статья является руководством по разработке простейшего Web-сервиса, использующего SOAP-протокол, средствами Spring-WS.
Читать дальше →

Быстрый поиск неповрежденных областей на умирающем жестком диске

Время на прочтение3 мин
Охват и читатели5.3K
Как известно, жесткие диски — штука шаткая. Особенно верно это в малом пользовательском классе, в котором и не мечтают о надежности, скажем, серверного оборудования. Однако отказы милых нашему сердцу железок в самый неподходящий для этого момент могут даже домашнему пользователю доставить очень много неприятных минут, часов или даже дней (об одном таком случае я недавно рассказывал, в резюмирующих строках статьи, к сожалении, не выразить, сколько времени было убито на борьбу с неверным оборудованием). Столкнувшись с задачей максимально быстро выяснить, в какой участок едва живого внешнего жесткого диска емкостью 160 Гб. воткнуть раздел размером хотя бы 10 и быть в нем более-менее уверенным, я с удивлением обнаружил, что, по крайней мере оставаясь верным операционным системам семейства Linux, сделать это существующими средствами не получится. Как пришлось выкручиваться — добро пожаловать под кат.
беря в руки молоток и пилы

Фоткер — комфортный просмотр Яндекс.Фоток

Время на прочтение2 мин
Охват и читатели11K
Я — фотолюбитель и я очень люблю Яндекс.Фотки. Они служат мне одновременно и витриной моих снимков, и памятью о поездках, и одним из бэкапов. Но в случае, когда я хочу дать ссылку на просмотр какого-то альбома, мне становится бесконечно стыдно.
Почему же тебе стыдно, дорогой Хабраюзер?

Отправка бесплатного sms сообщения в linux

Время на прочтение3 мин
Охват и читатели43K
UPD: Рыская на просторах интернета набрел на новый более простой способ, без танцев с питоном( а можно и с ним если необходимо).
Оказалось что сайт sms.ru уже более полугода предоставляет Бесплатные СМС для программистов.image

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

После регистрации можно отправлять до 60смс в день на свой номер, указанный при регистрации. Уже почти месяц как перевел все свои сервисы с гугла на данный сервис. Радует отсутствие минутной задержки перед отправкой и возможность получения статуса сообщения.

Отправить можно разными способами, на сайте, в разделе «Программистам» есть множество готовых примеров:

  • HTTP
  • curl для командной строки (UTF-8)
  • php (с включенным модулем curl)
  • php (без curl)
  • php (усиленная авторизация)
  • PERL (усиленная авторизация)
  • Python

Самый простой способ это открыть страницу:

sms.ru/sms/send?api_id=xxxx-xxxx-xxxxx-xxxx-xxxx&to=номер_телефона&text=hello+world
,где - xxxx-xxxx-xxxxx-xxxx-xxxx это id доступный после регистрации.

Так же есть возможность пересылки email на смс. В разделе «Почта sms.ru» можно настроить свой почтовый ящик name sms.ru письма на который будут пересылаться на телефон в виде смс. При включенной опции «обрезать до 1смс» все сообщения на свой номер будут бесплатны.



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

Калькулятор для Android с рукописным вводом

Время на прочтение1 мин
Охват и читатели32K
Совершенно магическое приложение — калькулятор, который распознает рукописные формулы.

MyScript Calculator может распознавать +, -, ×, /, √, число Pi, скобки, возведение в степень и выдавать результат вычислений в реальном времени.

Формулы можно писать прямо на экране (для смартфонов — пальцем, для падофонов — стилусом, например) и это настоящее развлечение — почище, чем сочетание рогатки и птиц.



Приложение доступно на Android, бесплатно.

Фотоальбом

Время на прочтение2 мин
Охват и читатели5.6K
Случилось-таки свершение и дошли мои руки до родительского фотоальбома. Фотографий в нём насчитывается не менее 1000 штук. В своё время у моего родителя был такой фотоаппарат:



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

Отсканировать это, конечно, дело долгое и очень важное в процессе оцифровки снимков. А что делать потом?

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

Простой цифровой термометр своими руками

Время на прочтение3 мин
Охват и читатели174K
Наткнулся недавно в интернете на интересный материал, идея заинтересовала, но после сборки отказалась корректно работать, погуглив дальше наткнулся на другой вариант, который и представляю.

Простой цифровой термометр с подключением через COM-порт.


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

Блокировка мобильных паразитов

Время на прочтение2 мин
Охват и читатели163K
Многие пользователи мобильных телефонов жалуются на то, что с телефона списываются большие суммы, на то, что им приходит раздражающая ненужная реклама, на то, что операторы постоянно подключают им ненужные сервисы, которые ещё и начинают списывать средства, если их вовремя не отключить (музыка вместо гудков, погода и т.п.).

Но очень немногие знают, что все эти проблемы можно просто и быстро устранить.



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

Просмотр RAW-файлов средствами Windows

Время на прочтение2 мин
Охват и читатели188K
Если говорить о программе для просмотра RAW-файлов под Windows 7, ранее я бы, без сомнений, посоветовал вам на infranView с установленными плагинами. Другие наверняка бы рекомендовали ACDSee.

«Продвинутые» для этого используют LightRoom либо Aperture — если речь идёт не о Windows, а о Mac OS. Эти пакеты, без сомнений, необходимы для пакетной обработки изображений, но вот для предварительного просмотра и навигации по твоей съёмке — не очень.

Однако, на сегодня оказывается, есть более «нативное» и приятное для работы под Windows решение:
Читать дальше →

Верстаем PDF для Kindle

Время на прочтение2 мин
Охват и читатели48K
Доброе время суток, Хабр!

Недавно, я приобрел Kindle 4 и обнаружил, что читать на нем pdf не очень удобно из-за того, что шрифт слишком мелкий. Как говорится если нельза, но очень хочется, то можно!

Для экспериментов я создал тестовую pdf страничку, с помощью которой, подбирал различные параметры.

Замечание 1


Для того, что бы максимально использовать весь экран книги, я изменил размеры страницы и межстрочный интервал:
\usepackage{geometry}
\geometry{left=0.2cm}
\geometry{right=0.2cm}
\geometry{top=0.5cm}
\geometry{bottom=1.25cm}

\linespread{0.95}


Версия 1.0. Оригинал


\documentclass[12pt, a4paper]{article}


image

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

Я презираю Arduino

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


Я радуюсь, когда будущие инженеры создают свои устройства и расстраиваюсь, когда слышу, как кто-то говорит об использовании Arduino в них.

Это не первая моя статья на эту тему: у меня возникает желание написать такую сразу после прочтения фразы о безграничных возможностях платформы в DIY-топике на Хабре. У меня возникает желание написать об истинной цене деталей после прочтения статьи о покупке конструктора за $200 почти ничего не содержащего (уж простите, запамятовал где видел).

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

Ставим Google Play Store на виртуальный девайс с Jelly Bean (API 16)

Время на прочтение3 мин
Охват и читатели19K
Меня всегда смущали циркулирующие по интернетам способы установки маркета: что-то откуда-то качать, запускать какие-то скрипты. Всё можно сделать гораздо проще и безопаснее.

Сразу предупрежу, что на API 15 описанный способ не работает, там маркет приложения не скачивает, хотя и ставится.

Сначала краткое описание процедуры:

  • создаём виртуальный девайс на основе Google API образа;
  • запускаем эмулятор девайса шаманским образом;
  • удаляем «лишние» пакеты;
  • достаём пакет с маркетом из имеющегося телефона через USB-кабель;
  • закачиваем пакет с маркетом;
  • финальное шаманство.


Все происходит в линуксе, но в других операционках всё абсолютно так же.
Читать дальше →

Помогаем KeePassX работать с Indicator Applet Complete в последних версиях Ubuntu

Время на прочтение3 мин
Охват и читатели3.6K
После новости про украденную базу паролей на LinkedIn, задумался о безопасности своих паролей.

Стал искать менеджер паролей под Ubuntu 12.04, остановился на KeePassX. Он меня полностью устроил, если бы не одна мелочь: в Ubuntu 12.04 я пользуюсь Gnome Classic, и Indicator Applet Complete для часов/systray. А этот апплет рисует меню по нажатию на иконку программы левой клавишей мышки, а при нажатии на правую — рисует свои меню. И если свернуть KeePassX в трэй, то восстановить его оттуда нельзя никак.

Пытался решить проблему несколькими путями: попробовал написать на форуме, нашел такой же баг, висящий аж с 2011 года, но, похоже, автор все силы бросил на KeePassX 2, и первую версию забросил.

Ну что же, тварь я дрожащая, или право имею программист? Я решил исправить проблему самостоятельно, а именно, путем добавления нового пункта в Systray меню, то есть чтобы можно было показать главное окно из меню systray.

Предупреждаю сразу, многим статья не будет интересна, это мой первый опыт с Qt, да и на C/C++ последний раз писал году в 1999, и помню лишь базовые вещи. Статью решил написать, т.к. это мой первый успешный опыт изменения OpenSource программ на Qt, может, кому-то это пригодится.

UPD Оказалось, я изобрел велосипед. Всему виной пакет sni-qt, который переделывает QSystemTrayIcon в StatusNotifierItems. После удаления пакета иконка встала в другой трэй, где клик работает как надо. Спасибо inkvizitor68sl за комментарий.

Если все еще интересно, добро пожаловать под кат.
Читать дальше →

О полетном контроллере MultiWii (коптеры, самолеты и вертолеты)

Время на прочтение7 мин
Охват и читатели52K
ВНИМАНИЕ, статья устарела, но её всё еще можно использовать в ознакомительных целях
Захотелось внезапно рассказать подробнее об открытом и свободном проекте для управления различными летательными аппаратами (ЛА). Вообще до недавнего времени он был рассчитан только на мультиротороные системы (коптеры), стабилизацию подвеса камеры и в бета версии была стабилизация для летающего крыла, но судя по dev прошивкам в скором времени будут официально добавлены самолеты и вертолеты, а стабилизация полета летающего крыла уже вышла из стадии бета тестирования.
Если вам всё еще интересно что это за зверь, прошу под кат

Информация

В рейтинге
5 784-й
Откуда
Москва, Москва и Московская обл., Россия
Зарегистрирован
Активность

Специализация

Специалист
Ведущий
От 600 000 ₽