Search
Write a publication
Pull to refresh
3
0
Сергей @Vanger13

User

Send message

Lisp разработчик: две стороны одной медали

Reading time6 min
Views21K
Я уже около 20 лет программирую на Lisp и прочитал множество сообщений Usenet и статей в блогах, написанных Lisp — разработчиками. Я часто задавал себе вопрос — А существует ли типичный Lisp — разработчик, как существуют типичные представители наций или других групп людей?

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

Онлайн-фотошкола Fotoshkola.net

Reading time3 min
Views1.8K
Сегодня в онлайн-фотошколе Fotoshkola.net начал обучение тысячный студент. Отличный день для того, чтобы рассказать об этом проекте хабрасообществу.

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



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

JVM падает (2 истории про вызов native library)

Reading time2 min
Views2.3K
Хочу поделиться двумя историями с одинаковым сюжетом, но разными развязками.
Может быть кому то, у кого тоже падает JVM будет полезно

1. Native code вызывается из Явы через JNI. Юнит тест — проходит на ура, приложение (GUI, Swing) крэшится.
Подключаемся через дебагер ddd (это такая оболочка над gdb, ежели кто из яваистов не знает :) ) — видим что падает с длинющим стеком. Выясняем с автором нативной библиотеки, что там они десериализуют через boost (такая библиотека для C++) дерево большой глибины. И там рекурсия.

Возникает идея (не сразу, 3 дня споров и гугления), что при вызове из приложения стек больше и он переполняется. Находим параметер для JVM: -XX:ThreadStackSize=

Работает!

2. Native code вызывается через JNA. Присутствую колбеки обратно в Явы, так как я описывал. Юнит тест бежит, приложение падает!

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

Сказ о том, как я стал разработчиком софта для iPhone

Reading time9 min
Views5.1K
imageГде-то в начале 2010 года я узнал об очень интересной для меня теории, которая очень много чего объяснила для меня в жизни. Я о ней писал уже на Хабре habrahabr.ru/blogs/ui/111401.
Хотя я сам занимаюсь бизнесом сфере консалтинга и психологии, но большýю часть своей жизни был связан с IT и программированием. И вот мне пришла в голову мысль – выпустить приложение для iPhone, выпуск которого очень много всего изменил.
Ну, как и всегда, все началось с идеи. Идея приложения была следующая: дать пользователю инструмент, с помощью которого он бы смог легко распознавать модели поведения других людей, и чтобы это приложение давало конкретные ответы на вопросы «Как?» и «Каким образом?» взаимодействовать с тем или иным человеком в разных ситуациях.

Под катом в деталях описан процесс создания приложения и много всего интересного с суммами в USD и картинками.
Читать дальше →

Erlang и его процессы

Reading time7 min
Views19K

0 Преамбула


Модель – это ещё не мир. Являясь людьми, мы не можем в полной мере познать реальность. Мы можем лишь построить её модель и через неё изучать и использовать реальный мир. От того, какую модель мы выберем, зависит полнота, успешность, живучесть части реальности в информационном пространстве (или в нашей голове).

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

В данной статье автор осветит функциональный язык программирования Erlang, парадигма которого может звучать так: «все является процессами». В первой части данной стати будет дана вводная информация по созданию и коммуникации процессов между собой, во второй мы остановимся на планировании процессов внутри виртуальной машины Erlang и спецификации процессов. Статья адресована для новичков, кто хочет начать создавать сложные, многопоточные и отказоустойчивые приложения на языке Эрланг.
Читать дальше →

Scala + Processing – интересный способ выучить новый язык

Reading time4 min
Views11K
Недавно мне довелось на собственном опыте убедиться: чтобы научиться применять какие-то новые технологии, недостаточно прочитать пару книг по теме, потому что без практики теория мгновенно улетучивается из головы.

Но что можно сделать такого интересного на Scala? На самом деле, выбор не слишком большой. Я как-то придумал небольшую тулзу, неспешно написал ее, и «забил». А через несколько месяцев, к своему стыду, гуглил синтаксис «for loop»…

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

Я переписал на Scala и выложил на GitHub парочку примеров. На скрине как раз один из них — MSA Fluids. Заинтересовавшихся прошу под кат.

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

Unity3d script basics

Reading time13 min
Views111K


Предисловие


Эта статья будет посвящена новичкам в скриптовании Unity, но не совсем новичкам в синтаксисе JavaScript’а или любого другого подобного языка программирования. Тут надо маленько уточнить что JavaScript который использует Unity немного отличается от оригинального в пользу улучшенной поддержки ООП и называется соответственно Unity JavaScript. В нем например появились классы и их наследование, о чем не знают начинающие разработчики на Unity знакомые с объектно ориентированными возможностями оригинального JavaScript, поэтому отвергают его используя C# или Boo.
Читать дальше →

Программирование по контракту в Java, с использованием библиотеки COFOJA от Google

Reading time9 min
Views7.5K
image

Для чего используется



Данная методика обеспечивает проверку предусловий и постусловий при выполнении методов классов, пользовательских функций.

Как и любая другая проверка, она позволяет повысить надежность программы, гарантируя корректность данных на входе и выходе. Либо, понизить (при некорректном использовании).

В отличие от assert’ов, проверки выполняются в runtime, т.е., непосредственно во время выполнения программы и присутствуют в релизной версии.

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

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

Немного о JIT-компиляции или пишем оптимизированный интерпретатор Brainfuck

Reading time6 min
Views6.8K
Суть языка Brainfuck в том, что мы всегда бегаем по ячейкам ленты, уменьшая или увеличивая значения в них. В циклах мы можем пробегать из одного конца в другой, что-то подсчитывая, зачастую используя много вложенных циклов. Не трудно догадаться, что интерпретация этого языка относительно медленна. Конечно, на современных компьютерах этого практически не заметно, но… Предлагаю небольшой тест: берите написанный вами интерпретатор, и запускайте вот этот не хитрый код:

>+>+>+>+>++<[>[<+++>-
 >>>>>
 >+>+>+>+>++<[>[<+++>-
   >>>>>
   >+>+>+>+>++<[>[<+++>-
     >>>>>
     >+>+>+>+>++<[>[<+++>-
       >>>>>
       +++[->+++++<]>[-]<
       <<<<<
     ]<<]>[-]
     <<<<<
   ]<<]>[-]
   <<<<<
 ]<<]>[-]
 <<<<<
]<<]>.


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

Забавляемся с хешами

Reading time5 min
Views90K
Привет. Я хочу показать вам небольшой фокус. Для начала вам потребуется скачать архив с двумя файлами. Оба имеют одинаковый размер и одну и ту же md5 сумму. Проверьте никакого обмана нет. Md5 хеш обоих равен ecea96a6fea9a1744adcc9802ab7590d. Теперь запустите программу good.exe и вы увидите на экране следующее.
Попробуйте запустить программу evil.exe.
Что-то пошло не так? Хотите попробовать сами?
Тогда добро пожаловать под кат.

Виртуальная клавиатура

Reading time1 min
Views19K

На днях набрел на хорошую виртуальную клавиатуру. Почему-то я ее раньше нигде не встречал, хотя продукт достойный. Наш, русский, даже имеет патент (РОСПАТЕНТа №2009611147 от 20.02.2009).
Читать дальше →

Samsung и море

Reading time4 min
Views25K
Мы уже рассказывали вам, что помимо мобильных телефонов и телевизоров компания Samsung производит боевых человекоподобных роботов военную технику. Вообще почему-то о других направлениях нашей деятельности (кроме потребительской электроники) знают не многие. Может быть, потому что мы сами их не очень часто вспоминаем. Именно поэтому мы решили восполнить этот пробел и рассказать вам о компании Samsung Heavy Industries, входящей в Samsung Group.

Профиль компании — разработка и строительство преимущественно крупнотоннажных грузовых судов. Например, вот таких.

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

Garbage Collection наглядно

Reading time10 min
Views288K
В последнее время я работаю с клиентами над вопросами настроек JVM. Смахивает ситуация на то, что далеко не все из разработчиков и администраторов знают о том, как работает garbage collection и о том, как JVM использует память. Поэтому я решил дать вводную в эту тему с наглядным примером. Пост не претендует на то, чтобы покрыть весь объем знаний о garbage collection или настройке JVM (он огромен), ну и, в конце концов, об этом много чего хорошего написано уже в Сети.
Читать дальше →

Знаешь ли ты JAVA, %username%? Часть вторая

Reading time5 min
Views51K
JAVA Evil EditionВ начале января я написал пост с интересными тестовыми задачками по Java. Он вызвал достаточно большой интерес, интересные задачки еще остались, поэтому продолжим.

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

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

Знаешь ли ты JAVA, %username%?

Reading time11 min
Views150K
JAVA Evil EditionНедавно я сдавал экзамен Oracle Certified Professional Java Programmer (бывший Sun Certified), и за время подготовки прорешал огромное количество различных задачек. Отдельные задачки по джаве иногда появляются на хабре и вызывают немалый интерес, поэтому я решил поделиться накопленным и сделать небольшую подборку.

Итак, ниже представлен десяток наиболее, на мой взгляд, интересных задач по Java SE из более чем 1000, проработанных мной. Сложность варьируется от средней до ооооооочень сложной. Решение большинства задач практически не требует знания API, достаточно логики и фундаментальных основ Java.

К слову, сложность экзамена Oracle Certified Professional Java Programmer гораздо ниже чем сложность данного теста, поэтому все, кто правильно ответит хотя бы на половину этих вопросов, может смело сдавать этот экзамен без всякой подготовки.

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

ВНИМАНИЕ: во второй половине статьи — ответы и подробные пояснения по соответствующим нюансам JAVA.

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

Вынеси мусор!

Reading time5 min
Views4.7K
Речь пойдёт о сборке мусора и утечках памяти в разных браузерах.

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

Что такое 1G, 2G, 3G, 4G и все что между ними

Reading time8 min
Views701K
Трудно в это поверить, но когда-то мобильные телефоны действительно называли «телефонами», не смартфонами, не суперфонами… Они входят в ваш карман и могут делать звонки. Вот и все. Никаких социальных сетей, обмена сообщениями, загрузки фотографий. Они не могут загрузить 5-Мегапиксельную фотографию на Flickr и, конечно же, не могут превратиться в беспроводную точку доступа.

Конечно, те мрачные дни уже далеко позади, но по всему миру продолжают появляться перспективные беспроводные высокоскоростные сети передачи данных нового поколения, и многие вещи начинают казаться запутанными. Что же такое «4G»? Это выше, чем 3G, но означает ли, что лучше? Почему все четыре национальных оператора США неожиданно называют свои сети 4G? Ответы на эти вопросы требуют небольшой экскурсии в историю развития беспроводных технологий.

Для начала, «G» означает «поколение», поэтому когда вы слышите, что кого-то относят к «сети 4G», это означает, что они говорят о беспроводной сети, построенной на основе технологии четвертого поколения. Применение определения «поколения» в данном контексте приводит ко всей той путанице, в которой мы попробуем разобраться.
Читать дальше →

Метод имитации отжига

Reading time7 min
Views52K
Дорогие друзья, доброго времени суток!

Уже не один раз здесь обсуждалась такая разновидность оптимизационных алгоритмов, как генетические алгоритмы. Однако, существуют и другие способы поиска оптимального решения в задачах с многими степенями свободы. Один из них (и, надо сказать, один из наиболее эффективных) — метод имитации отжига, о котором здесь ещё не рассказывали. Я решил устранить эту несправедливость и как можно более простыми словами познакомить вас с этим замечательным алгоритмом, а заодно привести пример его использования для решения несложной задачки.

Я понимаю, почему генетические алгоритмы пользуются такой большой популярностью: они очень образны и, следовательно, доступны для понимания. В самом деле, несложно и крайне интересно представить решение некой задачи, как реальный биологический процесс развития популяции живых существ с определёнными свойствами. Между тем, алгоритм отжига также имеет свой прототип в реальном мире (это понятно и из самого названия). Правда, пришёл он не из биологии, а из физики. Процесс, имитируемый данным алгоритмом, похож на образование веществом кристаллической структуры с минимальной энергией во время охлаждения и затвердевания, когда при высоких температурах частицы хаотично движутся, постепенно замедляясь и застывая в местах с наименьшей энергией. Только в случае математической задачи роль частиц вещества выполняют параметры, а роль энергии — функция, характеризующая оптимальность набора этих параметров.

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

Unity3d и развеивание некоторых мифов

Reading time8 min
Views94K
Недавно я прочитал очередную статью про Unity3d на Хабре, в очередной раз были интересные комментарии — и грамотные, и грамотные не совсем.
Я вдохновился и решил немного прокомментировать происходящее.
Надеюсь, кто-нибудь почерпнет для себя здесь что-то новое и интересное.
Читать дальше →

Разоблачение алгоритмов растеризации шрифтов (1/2)

Reading time15 min
Views14K
Попытка улучшить алгоритмы растеризации шрифтов, пользуясь исключительно общедоступной информацией.

От переводчика


В первый раз я столкнулся с этой статьей в 2008 году. С тех пор я неоднократно задумывался о переводе (так как лучшего материала по теме не найти), и вдруг ссылка на оригинал всплыла на Хабре в обсуждении топика «Сглаживание шрифтов, анти-алиасинг, и субпиксельный рендеринг». Это стало решающим фактором (раз на материал ссылаются, значит, он кому-то нужен), и работа была, наконец, закончена.
Читать дальше →

Information

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