Обновить
1084.43

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

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

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

OpenSource или история одной любви

Время на прочтение3 мин
Количество просмотров1.4K
Что может подвигнуть разработчика на написание программного обеспечения просто так, не за деньги, не получая изначально ни копейки а только тратя все свое и без того отсутствующее свободное время? Существует на самом деле множество причин и люди не раз пытались их анализировать. На многих сайтах существует огромное количество опросов, с множеством вариантов ответов, на которые люди отвечают примерно равномерно. Оно и понятно, мотивация у всех разная. Однако, моя задача сегодня не попытаться вывести “теорию опенсорса”. Моя задача сегодня – рассказать о небольшом проекте, который я делал совсем недавно. И который помог мне добиться хороших позиций в жизни, хоть о нем так никто и не узнал.
Читать дальше →

Запоздалая оптимизация

Время на прочтение3 мин
Количество просмотров8.5K
Вашему вниманию предлагается перевод статьи Дениса Форбса (Dennis Forbes) "The Sad Reality of Post-Mature Optimization". Превосходные иллюстрации также взяты из оригинальной статьи.

Знаменитое утверждение «преждевременная оптимизация — корень всех зол» принадлежит перу Дональда Кнута. К сожалению, изначальный смысл этой фразы давно утерян, и в последнее время её используют лишь как отговорку, позволяющую отбиться от любых претензий к скорости работы программы.

На каком этапе разработки пора обратить внимание на производительность? В какой момент оптимизация перестает быть преждевременной и становится своевременной?

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

Работа с GtkTreeView и GtkListStore с помощью редактора Glade для начинающих

Время на прочтение17 мин
Количество просмотров15K
В этом посте я хочу рассказать про работу с очень интересными виджетами (объектами) библиотеки графических интерфейсов GTK+: GtkTreeView и GtkListStore. GtkTreeView — виджет для отображения деревьев и списков. GtkListStore — виджет представляющий модель списка.
Создавать их я буду с помощью редактора Glade, в интернете очень мало материала именно по работе с виджетами GTK+ (и особенно с этими) с помощью этого редактора интерфейсов. Я уже писал немного про работу с ним. Те, кто никогда с ним не работал — советую прочитать этот пост.

Возможностей работы с этими виджетами очень много и я планирую написать еще несколько статей по этой теме (если это конечно заинтересует читателей). Этот пост расчитан на начинающих еще только знакомиться с библиотекой GTK+ и её возможностями. Поэтому сегодня я рассмотрю достаточно простой пример.

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


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

Свёртки в Intel Cilk Plus

Время на прочтение8 мин
Количество просмотров3K
Допустим нам зачем-то нужно найти сумму элементов массива. Мы можем разбить массив на две части, просуммировать каждую часть отдельно и сложить результаты. При этом суммировать эти части можно параллельно. Но суммирование части массива это в точности исходная задача, и каждую часть снова можно разбить на две части и просуммировать каждую часть отдельно, а затем сложить результаты и т. д. Такая стратегия вычислений называется «разделяй и властвуй».

Таким способом можно вычислять много других функций от массивов, ниже в первой части статьи будет приведено математическое объяснение этой идеи, а во второй — как с помощью Intel Cilk Plus эту идею использовать в своих программах.

Итак, если есть желание посмотреть на математические формулы и куски кода на C++ в последние дни лета, то добро пожаловать под хабракат.

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

Самая дорогая однобайтовая ошибка

Время на прочтение7 мин
Количество просмотров5.8K
Предлагаю вашему вниманию перевод недавнего поста в электронном журнале Queue авторства Poul-Henning Kamp.

Ошиблись ли Кен, Деннис и Брайан при выборе использовать NUL-завершенные текстовые строки?

ИТ стимулирует и реализует современную западную экономику. Соответственно мы часто видим заголовки про ошеломляюще огромные суммы денег, связанные с ошибками в ИТ. Какое же решение, связанное с ИТ или КН [компьютерными науками], является наиболее дорогим?
Читать дальше →

Передовым IT-компаниям нужны эксперты по «мертвым» языкам

Время на прочтение2 мин
Количество просмотров2.8K
Индустрии финансовых услуг Шотландии угрожает серьезная опасность в области информационных технологий. Нет, это не массированные DOS-атаки враждебных сил. Нет, и даже не безжалостные хакеры, покушающиеся на ценнейшие данные о клиентах. Индустрии грозит недостаток критических ресурсов: программистов, знающих COBOL, ассемблер и другие старые языки программирования. Университеты выпускают очень способных студентов, сведущих в модных языках типа Java и .NET, но многие компании начинают осознавать, что для некоторых устаревших технологий уже не будет нового поколения специалистов.

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

Программирование vs Паттерны

Время на прочтение2 мин
Количество просмотров9.2K
Утро понедельника. Коллега по работе просит выполнить небольшой поисковый запрос. Полчаса и запрос готов. Не проходит и пяти минут, как коллега придумывает парочку условий. Дописываю условия. Теперь он хочет еще больше информации в ответе. Начинаю слеплять таблицы…


И так проходит первая половина дня. Я работаю прослойкой между сотрудником и Базой Данных — не самое лучшее занятие для программиста. Потому решаю составить программу, призванную удовлетворить всевозможные запросы, не заставляя пользователя изучать SQL. Сотруднику отказано с очередным запросом и объявлено о готовящейся программе. Ему идея понравилась, но волнует вопрос "Когда?". Да я и сам не знаю когда… Неделя-две-три… Там будет видно. Просит альфа-версию пораньше. Пришлось пообещать ему дать погонять первую же альфу.
Читать дальше →

Расширение функциональности не имея исходного кода

Время на прочтение4 мин
Количество просмотров3.3K
Думаю, у каждого из вас было ощущение, что в той, или иной программе не хватает какой-нибудь must have фичи. Если программа идет с исходным кодом, то проблем не возникает. Любой желающий может дописать нужную функциональность. А что если программа закрытая? Не стоит отчаиваться, это не пропащий случай. Сейчас расскажу, как можно дописать за автора то, чего не хватает.
Читать дальше →

Headtracking или как увидеть трехмерный чайник на двухмерном мониторе

Время на прочтение4 мин
Количество просмотров9.1K
В прошлом семестре брал я курс компьютерного зрения и под конец надо было делать финальный проект на любую тему, которая с этим связана. Стало мне интересно, можно ли при помощи веб-камеры отслеживать глаза пользователя и показывать ему 3д объекты с правильного ракурса, этим я и решил заняться. Т.е. сделать из монитора эдакое окно в виртуальный мир. Теперь же я хочу поделиться с хабрапользователями о том, как это у меня получилось и какие подводные камни встретились на пути.
Читать дальше →

Еще есть пользователи windows 9x? Пишем утилиту для чтения NTFS

Время на прочтение3 мин
Количество просмотров1.3K
В последнее время найти пользователей windows 9x стало сложно, но возможно. Но все таки они есть такие. Так же известно что использовать жесткие диски с разделами NTFS штатными средствами операционной системы нельзя. Попробуем исправить это написав программу позволяющую читать данные с разделов NTFS.

Что будем требовать от своей программы?
Да вообщем то не многое. Разрабатываемая программа должна осуществлять копирование с разделов жесткого диска с файловой системой NTFS5 в разделы FAT. Данная программа должна быть использована в том случае, если Windows 2000 (которая использует NTFS 5) отсутствует или недоступна. Должны поддерживаться длинные имена файлов, а также жесткие диски любой ёмкости (в т.ч. больше 8Гб). Среда функционирования – ОС DOS, Windows 9x. Программа должна иметь «стандартный» двухпанельный «нортоновский» интерфейс.
Читать дальше →

Как поднять свой уровень в искусстве программирования. План из шести шагов

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

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

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

Функторы в языках программирования

Время на прочтение6 мин
Количество просмотров88K
Интересно, что термин "функтор" означает совершенно разные вещи в разных языках программирования. Возьмем, например, C++. Каждый, кто освоил мастерство C++, знает, что класс, который реализует operator(), называется функтором. Теперь возьмём Standard ML. В ML функторы отображают структуры на структуры. Теперь Haskell. В Haskell функторы — это просто гомоморфизм над категориями. А в Prolog функтор означает атом в начале структуры. Все они различаются. Давайте подробнее рассмотрим каждый из них.
Читать дальше →

Монады с точки зрения теории категорий

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

Введение

Кажется, монады в программировании стали загадкой века. И для этого есть две причины:
  • недостаточное знание теории категорий;
  • многие авторы стараюстся не упоминать категории вообще.
Это как говорить об электричестве не используя мат. анализ. Достаточно для замены предохранителя, не хватит, чтобы спроектировать усилитель.

Мы начнём с простого введения в категории и функторы, затем дадим определение монады, приведём простые примеры монад в категориях и в конце приведём монадическую терминологию используемую в языках программирования.

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

Содержание

  1. Категория
  2. Функтор
  3. Естественное преобразование
  4. Монада
  5. Монады исключения и состояния
  6. Монады в программировании
  7. Ссылки
Читать дальше →

Программирование на калькуляторах МК: как я делал графические игры

Время на прочтение4 мин
Количество просмотров27K
После прочтения статьи о программируемом микрокалькуляторе на iOS на меня накатил такой приступ ностальгии, что я полез копаться в книжный шкаф, и, после продолжительного поиска, нашёл старую тетрадь с конспектами по программированию и самостоятельно разработанными играми.
Что за шедевры я там нашёл?

Введение в технику оптимизации циклов

Время на прочтение4 мин
Количество просмотров59K
Большая часть времени исполнения программы приходится на циклы: это могут быть вычисления, прием и обработка информации и т.д. Правильное применение техник оптимизации циклов позволит увеличить скорость работы программы. Но прежде, чем приступать к оптимизациям необходимо выделить «узкие» места программы и попытаться найти причины падения быстродействия.
Читать дальше →

Как работает многозадачность

Время на прочтение2 мин
Количество просмотров8K
В ответ на Как вы считаете, как работает многозадачность на 80386?. По моему мнению, ни один из предлагавшихся вариантов ответа не верен, а верен такой:

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

Особенности паттернов параллельного программирования для бизнес приложений [PoEAA]

Время на прочтение9 мин
Количество просмотров9.9K
Параллельное программирование давно уже перестало быть уделом матёрых гуру. Трудно представить современное приложение, реализация которого игнорировала бы этот вопрос. Аналогично трудно представить прикладного программиста, который бы не держал на вооружении паттернов корпоративных приложений от Фаулера с компанией. Собственно об особенностях присущих этим паттернам и пойдёт речь в этом посте. Материал представленный далее почти не коррелирует с технологиями реализации, поэтому может быть интересен любым прикладным программистам не смотря на то, что примеры базируются на Java и PostgreSQL. И ещё одно замечание, чтобы не вносить путаницу с названиями паттернов, я буду использовать их оригинальные названия на английском языке.
Читать дальше →

Как я СКАДу писал

Время на прочтение20 мин
Количество просмотров98K
Введение

Данная история началась примерно год назад. Сам я по специальности автоматчик, занимаюсь разработкой и внедрением систем автоматического управления технологическими процессами (АСУТП). В основном работа состоит в разработке прикладного программного обеспечения в специализированном ПО, так называемом SCADA-пакете. Для тех, кто не знаком с понятием SCADA и с чем его едят — подробно можно ознакомиться здесь. Достаточно долго проработал в компании отечественного разработчика подобной системы, начав с тестировщика, прошел через техподдержку, дорос до уровня руководителя отделом системной интеграции, выполнял разработку проектов автоматизации под ключ на базе ПО, которое разрабатывала компания. В процессе разработки проектов, очутившись в шкуре конечного пользователя продуктом, часто приходилось дорабатывать инструментарий под конкретные задачи напильником, потому как функционал или глючил, или не дотягивал до должного уровня. А все прения с разработкой и маркетингом по развитию продукта либо упирались в нежелание что-либо делать со стороны разработки, либо все списывалось на то, что у меня руки кривые и я ничего не понимаю в колбасных обрезках. Долго так продолжаться не могло, и вот в один прекрасный момент наши пути с этой компанией разошлись, я ушел к одному из своих крупных заказчиков продолжать делать то, что делал им же на заказ, но уже в штате этого заказчика.
Читать дальше →

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