Оптимизация для начинающих, или о пользе профилирования

Автор: admin от 4-11-2014, 23:01, посмотрело: 350

Попалась мне задача написать на PHP оптимальный алгоритм вставки нового значения в упорядоченный массив. Причем этом аргументировано доказать, что именно этот алгоритм лучший. Для этого предлагалось написать три варианта и выбрать из них лучший. Конечно же я знаю, что лучший метод поиска — бинарный, но раз сказали доказать, что он лучший, так и быть, напишу еще два. С таким настроем и уверенностью в будущем результате я и принялся кодить.

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

Категория: Программирование

 

Пишем плагин для XBMC с собственным интерфейсом: часть III — API и микро-фреймворк

Автор: admin от 4-11-2014, 22:40, посмотрело: 1164

Вступление


Это III часть цикла статей, посвященных написанию плагинов для XBMC с собственным интерфейсом. В предыдущих частях (часть I и часть II) я рассказал об основных принципах создания интерфейса плагинов XBMC и дал несколько простых примеров. В этой части я хочу совсем кратко рассказать о различных API для взаимодействия с XBMC, продемонстрировать написанный мною микро-фреймворк, упрощающий компоновку интерфейса.

Категория: Программирование » Веб-разработка

 

Типы данных наносят ответный удар

Автор: admin от 4-11-2014, 22:27, посмотрело: 385

Это вторая часть моих размышлений на тему «Python, каким бы я хотел его видеть», и в ней мы более подробно рассмотрим систему типов. Для этого нам снова придётся углубиться в особенности реализации языка Python и его интерпретатора CPython.

Если вы программист на языке Python, для вас типы данных всегда оставались за кадром. Они где-то там существуют сами по себе и как-то там взаимодействуют друг с другом, но чаще всего вы задумываетесь об их существовании только когда возникает ошибка. И тогда исключение говорит вам, что какой-то из типов данных ведёт себя не так, как вы от него ожидали.

Python всегда гордился своей реализацией системы типов. Я помню, как много лет назад читал документацию, в которой был целый раздел о преимуществах утиной типизации. Давайте начистоту: да, в практических целях утиная типизация — хорошее решение. Если вы ничем не ограничены и нет нужды бороться с типами данных по причине их отсутствия, вы можете создавать очень красивые API. Особенно легко на Python получается решать повседневные задачи.

Практически все API, которые я реализовывал на Python, не работали в других языках программирования. Даже такая простая вещь, как интерфейс для работы с командной строкой (библиотека click) просто не работает в других языках, и основная причина в том, что вам приходится беспрестанно бороться с типами данных.

Не так давно поднимался вопрос добавления статической типизации в Python, и я искренне надеюсь, что лёд, наконец, тронулся. Постараюсь объяснить, почему я против явной типизации, и почему надеюсь, что Python никогда не пойдёт по этому пути.

Категория: Программирование

 

Анонс Brackets 1.0 и Extract for Brackets (Preview версия)

Автор: admin от 4-11-2014, 21:23, посмотрело: 1106

Анонс Brackets 1.0 и Extract for Brackets (Preview версия)
Я думаю, что большое количество людей, занимающихся или интересующихся веб-разработкой давно уже опробовали open-source IDE Brackets. На хабре не раз упоминали о ней (например, тут), поэтому не буду много разглагольствовать и перейду к сути.

Сегодня, спустя почти 3 года, в течение которых участвовало 245 контрибьюторов, наконец вышла версия 1.0 — способ объявить миру, что Brackets готов.

Отдельно заслуживает внимания плагин Extract for Brackets, который наконец доступен для публичного тестирования, предназначенный упростить верстку веб-сайтов.

Категория: Программирование » Веб-разработка

 

Почему только hard и hardcore

Автор: admin от 4-11-2014, 19:34, посмотрело: 388

Так получилось, что мы играем в игры на высокой сложности. Причина вовсе не в том, что мы упорные обдолбанные гики, а в простой рациональности — желании получить от игры удовольствие.

Дело ведь в чём: раньше все игры были достаточно сложными, потому что были рассчитаны на куда более хардкорных геймеров. Когда у тебя нет интернета, картриджей всего 5 штук, а делать нечего — ты играешь в то, что есть. И пройти игру для ребёнка в 90-х означало вовсе не то, что сегодня.

Почему только hard и hardcore

Сегодня «пройти» — это потратить какое-то время на то, чтобы «просмотреть» сюжет и сделать 200 save-load. А раньше «пройти» — это целый подвиг. Без гарантии результата. Вот хотя бы советская «Ну, погоди!». Я до сих пор помню, как зашёл на долгожданный финал… и увидел, что игра циклична как тетрис. Мультфильм тоже не показали.

Но вернёмся к тому, почему только hard или hardcore. И какое это имеет отношение к GameDev и бизнесу.

Категория: Программирование » Game Development

 

«Программирование мышкой» в XCode 6 для Swift

Автор: admin от 4-11-2014, 19:01, посмотрело: 718

Привет, Хабрахабр!

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

Категория: Веб-разработка, iOS

 

Королева щелчка: рассказ о самой выдающейся клавиатуре в истории

Автор: admin от 4-11-2014, 18:50, посмотрело: 424

30 лет ей подражают, копируют, модифицируют — речь идет об IBM Model M, прародительнице дизайна современной клавиатуры.

Королева щелчка: рассказ о самой выдающейся клавиатуре в истории

Категория: Game Development, Железо

 

Quotient filter

Автор: admin от 4-11-2014, 16:04, посмотрело: 388

Quotient filter — это вероятностная структура данных, позволяющая проверить принадлежность элемента множеству. Она описана в 2011 г. как замена фильтру Блума. Ответ может быть:
— элемент точно не принадлежит множеству;
— элемент возможно принадлежит множеству.

Категория: Программирование

 

Изменение ConcurrentDictionary во время перебора

Автор: admin от 4-11-2014, 16:02, посмотрело: 511

Недавно решил разобраться с внутренним устройством потокобезопасных коллекций, отправной точкой в изучении устройства ConcurrentDictionary была выбрана публикация на Хабре. Принцип его работы описан просто и понятно, за что отдельное спасибо автору.

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

Категория: Программирование

 

Почему буфер должен расти экспоненциально

Автор: admin от 4-11-2014, 16:00, посмотрело: 412

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

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

Так вот. Представим, что наш изначальный 1-байтный буфер растёт по 1 байту до тех пор, пока не достигнет размера 1 МиБ. Сколько памяти мы задействовали для него кумулятивно?



1 + 2 + 3 + … + 1,048,575 + 1,048,576 = 549,756,338,176 байт


Неслабо, да?

Категория: Программирование

 
Назад Вперед