Рубрика «Программирование» - 1042

Недавно в своем проекте столкнулся с необходимость сортировать строки в UTF-кодировке в PHP.

Как известно дефолтные функции сортировки в PHP работают в однобайтовой кодировке, и строки в UTF сортируются совсем не так, как хотелось бы, ибо, как известно, в кодировке UTF в обозначении некоторых символов участвует более 1 байта.
Читать полностью »

Онлайн курсы на русском языке

Предыстория

Здравствуйте! Меня зовут Рахим, я учился по программе Computer Science (B.Sc) в университете Карлтон и писал об этом на Хабре пару лет назад в рамках проекта Computer Science Student (в профиле можно найти все выпуски). Потом здесь же я нашел множество людей, заинтересованных в создании коллективного блога о математике и информатике. Тогда даже написал в комментариях:

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

К сожалению, блог через некоторое время перестал обновляться, активность упала до минимума. Я закончил университет и первый год работал разработчиком, но в январе 2012 приблизился немного к реализации того комментария: стал преподавателем Международного университета информационных технологий (IITU) в южной столице Казахстана. В своем первом семестре читал лекции по операционным системам и веб-разработке, иногда проводил открытые лекции, изредка публиковал что-то на хабре. Но «hexlet.ru» на доске не писал.

Этой осенью Хекслет превратился из коллективного блога в свободную образовательную платформу. Суть проста: можно стать студентом и проходить разные курсы, можно стать учителем и вести собственные курсы. Формат схож с форматами Coursera или Udacity. 23 октября начинается первый онлайн-курс – Разработка приложений для Mac OS X.
Читать полностью »

Оригинальный текст: semitwist.com/articles/article/view/dispelling-common-d-myths
Reddit: www.reddit.com/r/programming/comments/118y4m/dispelling_common_d_myths/

Вступление

Как постоянный пользователь и поклонник языка D, я не мог не заметить ряд заблуждений и недопониманий, которые регулярно встречаются среди новичков.

Все эти заблуждения вполне объяснимы. Многие связаны с проблемами, которые играли важную роль в прошлом, так что не удивительно, что эти устаревшие представления продолжают существовать. Мне кажется, что это как раз те области, которые сообщество D должно как можно лучше объяснить остальным программистам. Вот эти темы:

  • Для D есть IDE
  • DSource угасает, но проекты на D активны как никогда ранее
  • Разделения на D1 и D2 больше нет
  • Phobos — стандартная библиотека? А как же Tango?
  • D — open source
  • D позволяет ручное управление памятью
  • Статическая типизация НЕ означает непродуктивность

Читать полностью »

Ray tracing не только в 3DМногие в общих чертах представляют, как работает лучевая трассировка: через каждый пиксель сцены алгоритм пропускает луч и вычисляет, с какими объектами сцены он пересекается и как в результате данный пиксель должен быть освещён. Алгоритм по сути требует, чтобы у нас была функция, которая для каждой позиции возвращает цвет точки. Разумеется, тот же подход можно применять не только для трёхмерной графики: любое изображение можно растеризовать таким образом, если у нас есть подходящая функция. Рассмотрим для примера, как с помощью такого подхода решить задачу визуализации диаграмм разложения на простые множители, о которой написал helarqjsc.

Моя реализация здесь. На картинке изображено 10! = 3628800, хотя всех деталей, разумеется, не видно.
Читать полностью »

Визуализация характеристической функцииМногие в общих чертах представляют, как работает обратная лучевая трассировка: через каждый пиксель окна вывода алгоритм пропускает луч и вычисляет, с какими объектами сцены он пересекается и как в результате данный пиксель должен быть освещён. Алгоритм по сути требует, чтобы у нас была функция, которая для каждой позиции возвращает цвет точки. Разумеется, тот же подход можно применять не только для трёхмерной графики: любое изображение можно растеризовать таким образом, если у нас есть подходящая функция. Рассмотрим для примера, как с помощью такого подхода решить задачу визуализации диаграмм разложения на простые множители, о которой написал helarqjsc.

Моя реализация здесь. На картинке изображено 10! = 3628800, хотя всех деталей, разумеется, не видно.
Читать полностью »

Метод Speeded Up Robust Features (SURF) положительно зарекомендовал себя в задачах поиска объектов на изображениях, 3D реконструкции, при сравнении изображений. Рассмотрим применение этого метода в биометрических системах, осуществляющих аутентификацию по васкулярному рисунку руки.

Метод SURF решает две задачи – поиск особых точек изображения и создание их дескрипторов (описательного элемента, инвариантного к изменению масштаба и поворота). Кроме того, сам поиск ключевых точек тоже должен обладать инвариантностью, т.е. повернутый объект сцены должен обладать тем же набором ключевых точек, что и образец.

Метод ищет особые точки с помощью матрицы Гессе. Детерминант матрицы Гессе (т.н. гессиан) достигает экстремума в точках максимального изменения градиента яркости. Для двумерной функции ее детерминант определяется следующим образом:

image

где H — матрица Гессе,
f (x,y) — функция изменения градиента яркости.

Гессиан инвариантен относительно поворота. Но не инвариантен к масштабу. Поэтому метод SURF использует разномасштабные фильтры для нахождения гессианов. Для каждой ключевой точки считается градиент и масштаб. Градиент в точке вычисляется с помощью фильтров Хаара. Размер фильтра берется равным 4s (где s – масштаб особой точки). Вид фильтров Хаара показан на рис. 1.

image
Рис. 1. Фильтры Хаара. (черные области имеют значения «-1», белые «+1»)

После нахождения ключевых точек, метод SURF формирует их дескрипторы. Дескриптор представляет собой набор из 64 (либо 128) чисел для каждой ключевой точки. Эти числа отображают флуктуации градиента вокруг ключевой точки. Поскольку ключевая точка представляет собой максимум гессиана, тем самым гарантируется, что в окрестности точки должны быть участки с разными градиентами. Таким образом, обеспечивается дисперсия (различие) дескрипторов для разных ключевых точек, за счет чего достигается инвариантность дескриптора относительно поворота. Размер области, на которой считается дескриптор, определяется масштабом матрицы Гессе, что обеспечивает инвариантность относительно масштаба.

На рис. 2-5 приведены набор тестовых изображений, полученных в результате применения метода SURF в биометрических системах, осуществляющих аутентификацию по васкулярному рисунку ладони.

image
Рис. 2. Слева находится образец, справа – сцена. Локализован.

image
Рис. 3. Образец имеет больший масштаб, чем на сцене. Локализован.

imageЧитать полностью »

— Тебе так повезло, что ты программист. Хотел бы я быть программистом.
— А почему ты не научишься?
— Я пытался, заходил на codeacademy и другие сайты, но это не моё.
— Да, программирование, действительно, не для всех.
— Тебе хорошо платят и ты можешь создавать разные вещи. Почти каждый день к тебе поступают сумасшедшие предложения минимум на 100 тысяч долларов.
— Да, это очень лестно. Немножко сносит крышу, если честно.
— Ты получаешь свою долю в компании, все уважают инженеров. Ты можешь воплотить любую идею в приложение и стать богатым. И тебе не нужно для этого никого нанимать.
— Вообще-то программирование делает меня несчастным.Читать полностью »

ObjectScript — новый встраиваемый и очень легкий объектно-ориентированный язык программирования с открытым исходным кодом. ObjectScript расширяет возможности таких языков, как JavaScript, Lua и PHP. Синтаксис в основном взят из JavaScript, множественное присваивание — из Lua, работа со свойствами — из PHP.

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

Вопрос довольно щекотливый, т.к. от результата булевского выражения зависит, не много не мало, выполнится кусок кода или нет. Русская пословица «одна голова хорошо, а много лучше» подсказывает мне, что лучше обратится к программерскому сообществу и разобраться наверняка в том, какое поведения при сравнении (это операторы >=, >, <=, <, ==, !=) разных типов данных в скриптовом языке является наиболее уместным. Выработать коллегиональное решение и закрепить результат в спецификации ObjectScript.Читать полностью »

ObjectScript — новый встраиваемый объектно-ориентированный язык программирования с открытым исходным кодом. ObjectScript расширяет возможности таких языков, как JavaScript, Lua и PHP.

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

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

Есть люди, которым нравится писать .NET приложения. Есть люди, которые любят системы компьютерной алгебры. В этой статье круги Эйлера пересекутся!

Используем возможности Wolfram Mathematica в .NET приложениях
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js