Как стать автором
Обновить
10
0
Илья Подшивалов @Harrowmont

Программист

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

История про realloc (и лень)

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

Простой макрос


Все началось с простого макроса: (приблизительный код)
#define ADD_BYTE(C) do {            \
  if (offset == capa) {             \
    if (capa < 16) {                \
      capa = 16;                    \
    } else {                        \
      capa <<= 1;                   \
    }                               \
    buffer = realloc(buffer, capa); \
    assert(buffer != NULL);         \
  }                                 \
  buffer[offset++] = (C);           \
} while(0)


Для тех, кто не знаком с языком программирования C, поясню: этот простой макрос добавляет байт «C» в динамически выделяемый буфер (buffer), размер которого (в байтах) равен capa. Следующая позиция для записи определяется при помощи параметра offset. При каждом заполнении буфера происходит двукратное увеличение его объема (начиная с минимального размера в 16 байт).

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

Но как понять, насколько эффективна стратегия перераспределения?
Читать дальше →
Всего голосов 103: ↑102 и ↓1+101
Комментарии51

Input — новый шрифт для программирования

Время на прочтение1 мин
Количество просмотров99K
Компания Font Bureau разработала новое семейство шрифтов Input, важнейшим из которых в данном случае для нас является шрифт Input Mono. Кириллица присутствует. Для персонального использования шрифты бесплатны.

Читать дальше →
Всего голосов 81: ↑72 и ↓9+63
Комментарии142

Мега-Учебник Flask, Часть 1: «Привет, Мир!»

Время на прочтение6 мин
Количество просмотров578K
Это первая статья в серии, где я буду документировать мой опыт написания веб-приложения на Python, используя микрофреймворк Flask.

Здесь список всех статей в серии:
Часть 1: Привет, Мир!
Часть 2: Шаблоны
Часть 3: Формы
Часть 4: База данных
Часть 5: Вход пользователей
Часть 6: Страница профиля и аватары
Часть 7: Unit-тестирование
Часть 8: Подписчики, контакты и друзья
Часть 9: Пагинация
Часть 10: Полнотекстовый поиск
Часть 11: Поддержка e-mail
Часть 12: Реконструкция
Часть 13: Дата и время
Часть 14: I18n and L10n
Часть 15: Ajax
Часть 16: Отладка, тестирование и профилирование
Часть 17: Развертывание на Linux (даже на Raspberry Pi!)
Часть 18: Развертывание на Heroku Cloud

Моя предыстория


Я разработчик ПО с двузначным числом лет опыта разработки комплексных приложений на нескольких языках. Впервые я познакомился с Python для создания привязок к C++ библиотеке на работе. Вдобавок к Python, я писал веб-приложения на PHP, Ruby, Smalltalk и, верите вы или нет, еще на С++. Из всего этого, я нахожу комбинацию Python/Flask самой гибкой.
Я хочу начать это долгое и удивительное путешествие
Всего голосов 63: ↑60 и ↓3+57
Комментарии31

25+ видеоуроков по Android для начинающих

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

Приветствую вас, уважаемый хабрачеловек!
Предлагаю вашему вниманию бесплатно серияю видеоуроков в котрых рассмотренно базовые понятия разработки под Android.
Читать дальше →
Всего голосов 111: ↑108 и ↓3+105
Комментарии33

Запуск VMWare образов на реальном железе и другие нюансы Zalman VE-300

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

Предисловие


Был обычный вечер. Заняться было нечем, а скоротать время до сна каким-то образом надо было.
Решил я почистить свой внешний HDD от хлама, а заодно и проверить, есть ли новая прошивка на любимый карман Zalman VE-300. Зайдя на сайт Zalman, я как раз такую и обнаружил. Пока прошивка скачивалась через невероятно медленный EDGE, я просматривал changelog. Мой взор привлекла такая строчка:
Support VHD of MS / VMDK of VMWare which is virtual Hard disk file (Still not support for Dynamic)
Читать дальше →
Всего голосов 43: ↑40 и ↓3+37
Комментарии67

Разбираемся с прямым и обратным порядком байтов

Время на прочтение11 мин
Количество просмотров203K
Перевод статьи Халида Азада — Understanding Big and Little Endian Byte Order

Проблемы с порядком байтов очень расстраивают, и я хочу избавить Вас от горя, которое довелось испытать мне. Вот ключевые тезы:
  • Проблема: Компьютеры, как и люди, говорят на разных языках. Одни записывают данные “слева направо” другие “справа налево”. При этом каждое устройство отлично считывает собственные данные — проблемы начинаются, когда один компьютер сохраняет данные, а другой пытается эти данные считать.
  • Решение: Принять некий общий формат (например, весь сетевой трафик передается в едином формате). Или всегда добавлять заголовок, описывающий формат хранения данных. Если считанный заголовок имеет обратный порядок, значит данные сохранены в другом формате и должны быть переконвертированы.

Читать дальше →
Всего голосов 71: ↑55 и ↓16+39
Комментарии32

О бедном C++ API замолвите словцо!

Время на прочтение15 мин
Количество просмотров42K
Желание написать об C++ API у меня возникло давно, и вот наконец выдался спокойный вечер. По роду деятельности я и мои ребята пишем код на C++ для программистов на C++ и Python, общее ядро функционала, который используется во всех продуктах нашей компании. Разумеется это подразумевает, что код должен иметь интуитивно понятный API, с общей логикой как для низкоуровневого C++, так и для высокоуровневого Python, вне зависимости от разночтения в языках некоторых базовых конструкций. Об объединении C++ и Python я много писал ранее в статьях про Boost.Python, сейчас я очень благодарен архитектуре и логике языка Python, я многое понял и перенял в С++ именно благодаря опыту построения общего API для этих двух таких разных языков, но сейчас речь пойдёт только и исключительно о C++, про API и про то, что такой зверский гибкий язык позволяет сделать с интерфейсом вашей замечательной библиотеки, если не учитывать ряд важных особенностей языка C++.
Читать дальше →
Всего голосов 38: ↑29 и ↓9+20
Комментарии71

Режим «Разделенного экрана» или Split Screen своими руками

Время на прочтение15 мин
Количество просмотров88K
Многие из нас проводили вечера перед теплым ламповым телевизором с друзьями, играя на приставках. Всегда особенно приятно было играть одновременно вдвоем, не ожидая своей очереди.


Ностальгия.

К сожалению, в настоящее время многие разработчики игр не добавляют подобного режима — новые игры со splitscreen можно пересчитать чуть ли не на пальцах одной руки. В один весенний вечер пришла идея в голову попробовать обойти ограничение, накладываемое разработчиками, и сделать игровой режим с разделением экрана более доступным.
Что из этого получилось...
Всего голосов 38: ↑34 и ↓4+30
Комментарии32

Разбор задач четвертого квалификационного раунда Russian Code Cup 2014

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


В воскресенье, 1 июня, прошел четвертый, заключительный, квалификационный раунд Russian Code Cup 2014.

На участие в раунде зарегистрировалось 5428 человек. Как минимум одно решение прислали 730 участников. Всего за раунд было прислано 4793 решения, из них правильных — 1531.

Больше всего решений на GNU C++ — 1786.
Решений на Python — 307, из них правильных 86.
Решений на PHP — 93, из них правильных 15.
Решений на Perl — 6, из них правильных 2.
Читать дальше →
Всего голосов 26: ↑24 и ↓2+22
Комментарии7

MongoDB от теории к практике. Руководство по установке кластера mongoDB

Время на прочтение9 мин
Количество просмотров88K
     Доброго времени суток, уважаемые читатели. В этом посте я хотел бы описать несколько примеров развертки mongoDB, отличия между ними, принципы их работы. Однако больше всего хотелось бы поделиться с вами практическом опытом шардирования mongoDB. Если бы этот пост имел план, он бы выглядел скорее всего так:

  1. Вступление. Кратко о масштабировании
  2. Некоторые примеры развертки mongoDB и их описание
  3. Шардинг mongoDB

    Пункты 1 и 2 — теоретические, а номер 3 претендует на практическое руководство по поднятию кластера mongoDB и больше всего подойдет тем, кто столкнулся с этим в первый раз.
Читать дальше →
Всего голосов 56: ↑52 и ↓4+48
Комментарии11

Управление роборукой при помощи leap motion

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


В прошлом году я собрал роборуку, написал для неё «драйвер» для linux, научил держать разные предметы. И как-то забыл про неё. Но вчера мне доставили leap motion и придумалась новая идея — научиться управлять роборукой по средством движений своих рук.
Читать дальше →
Всего голосов 29: ↑27 и ↓2+25
Комментарии16

Работа с usb видеокамерой в Linux. Часть 1

Время на прочтение4 мин
Количество просмотров36K
   По популярности видеокамера, сегодня, стоит в одном ряду с микрофоном и наушниками. Она используется в различных направлениях, таких как распознавание объектов, дополненная реальность, видеоконференции и множество других. Но что же скрыто под капотом этих сложнейших программ? Как мы получаем картинку с видеокамеры? Этот цикл статей позволит взглянуть на простоту работы с видеокамерой на низком уровне, обработку полученного изображения.
Читать дальше →
Всего голосов 23: ↑21 и ↓2+19
Комментарии5

Отыскание периодических решений одного класса неавтономных систем дифференциальных уравнений

Время на прочтение2 мин
Количество просмотров9.2K
В прикладной математике иногда возникает задача построения периодических решений нормальной системы обыкновенных дифференциальных уравнений вида

image

где функция image представляет собой сумму

image

многомерного многочлена image и тригонометрического полинома image, являющегося image-периодической векторной функцией.

Многие из теорем существования периодических решений системы (1) используют тот фундаментальный факт, что такие решения полностью определяются неподвижными точками оператора сдвига по траекториям системы. Однако использование данных теорем для непосредственного нахождения нужного периодического решения, скорее всего, не представляется возможным.
Читать дальше →
Всего голосов 22: ↑20 и ↓2+18
Комментарии7

Рабочее место Попкорн: Как стать Супер-продуктивным работая на себя

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

Коллеги, представляю вам перевод статьи про Супер-продуктивность, которая меня сильно зацепила. Надеюсь, что перевод будет вам полезен для организации своего рабочего времени.

Я познакомился с этой идеей где-то на Hacker News несколько недель назад и адаптировал концепцию для моего собственного образа жизни, и это изменило мой подход к работе.

Супер-продуктивность — как начать работать больше, чем когда-либо
Читать дальше →
Всего голосов 113: ↑94 и ↓19+75
Комментарии69

Просто о make

Время на прочтение6 мин
Количество просмотров464K
Меня всегда привлекал минимализм. Идея о том, что одна вещь должна выполнять одну функцию, но при этом выполнять ее как можно лучше, вылилась в создание UNIX. И хотя UNIX давно уже нельзя назвать простой системой, да и минимализм в ней узреть не так то просто, ее можно считать наглядным примером количество- качественной трансформации множества простых и понятных вещей в одну весьма непростую и не прозрачную. В своем развитии make прошел примерно такой же путь: простота и ясность, с ростом масштабов, превратилась в жуткого монстра (вспомните свои ощущения, когда впервые открыли мэйкфайл).

Мое упорное игнорирование make в течении долгого времени, было обусловлено удобством используемых IDE, и нежеланием разбираться в этом 'пережитке прошлого' (по сути — ленью). Однако, все эти надоедливые кнопочки, менюшки ит.п. атрибуты всевозможных студий, заставили меня искать альтернативу тому методу работы, который я практиковал до сих пор. Нет, я не стал гуру make, но полученных мною знаний вполне достаточно для моих небольших проектов. Данная статья предназначена для тех, кто так же как и я еще совсем недавно, желают вырваться из уютного оконного рабства в аскетичный, но свободный мир шелла.
Читать дальше →
Всего голосов 104: ↑98 и ↓6+92
Комментарии112

Переадресуем уведомления о входящих звонках и смс на компьютер

Время на прочтение7 мин
Количество просмотров49K
Очень часто находясь дома за ноутбуком, я пропускал входящие звонки, так как телефон был вне зоны слышимости. Тогда родилась идея, а почему бы не научить ноутбук показывать информацию о звонках с телефона?

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

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

Для тех, кому интересно как у меня это получилось, добро пожаловать под кат.
Читать дальше →
Всего голосов 36: ↑36 и ↓0+36
Комментарии11

COOLRF: правильный выбор розеток и выключателей умного дома

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


Какими качествами должны обладать розетки и выключатели умного дома? Они должны быть недорогими, симпатичными внешне, иметь минимальные размеры «в глубину» и уметь работать в «кнопочном» режиме (подобно стандартной кнопке звонка). Найти один такой выключатель в серии какого-нибудь производителя — задача не из легких. Найти серию таких выключателей — задача из области фантастики. Но и фантастика иногда случается. Сегодня мы познакомим вас с розетками и выключателями LK60, которые прекрасно подойдут для инсталляции встраиваемых модулей COOLRF. Под катом довольно много фотографий (трафик!).
Читать дальше →
Всего голосов 58: ↑48 и ↓10+38
Комментарии58

Использование событий MySQL на практике

Время на прочтение3 мин
Количество просмотров66K
how does events workДля тех, кто активно пользуется MySQL, не секрет, что начиная с версии 5.1, MySQL поддерживает события (events). Если вам нужно выполнять запросы или отдельные процедуры по расписанию, а перейти с запуска консоли на встроенный функционал MySQL было лень не было времени,
добро пожаловать под кат
Всего голосов 84: ↑82 и ↓2+80
Комментарии27

Тонкости анализа исходного кода C/C++ с помощью cppcheck

Время на прочтение27 мин
Количество просмотров60K
В предыдущем посте были рассмотрены основные возможности статического анализатора с открытым исходным кодом cppcheck. Он показывает себя не с худшей стороны даже при базовых настройках, но сегодня речь пойдёт о том, как выжать из этого анализатора максимум полезного.

В этой статье будут рассмотрены возможности cppcheck по вылавливанию утечек памяти, полезные параметры для улучшения анализа, а также экспериментальная возможность по созданию собственных правил. Сегодня никаких сравнений анализаторов «кто лучше», статья полностью посвящена работе с cppcheck.
Читать дальше →
Всего голосов 59: ↑59 и ↓0+59
Комментарии16

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность