Как стать автором
Обновить
44
0
Arseniy Seroka @JagaJaga

Chief executive officer @ Serokell

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

История про 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

Таблицы — Emacs и org-mode

Время на прочтение3 мин
Количество просмотров11K
На хабре уже есть посты про удивительные возможности org-mode — раз, два и три. В этом экскурсе я хочу рассказать ещё об одной возможности, с помощью которой можно пользоваться таблицами в текстовом редакторе (да, я про Emacs) без боли и унижения. А в org-mode таблицы достаточно просты и удобны:

|           ip | description          | users |
|--------------+----------------------+-------|
| 192.168.0.11 | Бухгалтерия          |     2 |
| 192.168.0.12 | Касса1               |     1 |
| 192.168.0.13 | Касса2               |     1 |
| 192.168.0.14 | Приёмная             |     2 |
|--------------+----------------------+-------|
|              | Всего пользователе=> |     6 |
Подробности
Всего голосов 14: ↑13 и ↓1+12
Комментарии4

Загружаемся в Vim или Vim c PID 1

Время на прочтение3 мин
Количество просмотров12K
Boot to Vim (окно загрузки)

Это ответ на отличную статью от Pascal Bourguignon, в которой он рассказывает о том, как запустить Emacs с PID 1.

Как мы все знаем, никто не использует Emacs.

Предложение выше как бы намекает, что это начало очередной священной войны. Пожалуйста, начинайте. Если вам хочется что-то мне сообщить, все мои контакты у меня в блоге.

На самом деле, шутки в сторону. Я считаю, что это отличная статья, и после прочтения мне захотелось посмотреть, смогу ли я сделать что-то похожее с Vim. Не в пользовательском режиме Linux, но в действительности создав ISO для загрузки. Можно сказать, «загрузиться в Vim», если вам так хочется.
Читать дальше →
Всего голосов 29: ↑27 и ↓2+25
Комментарии22

Почему программистам не удается заработать: многомерность и нескончаемое бремя Haskell

Время на прочтение9 мин
Количество просмотров54K
Обсуждение начну с весьма печального твита Криса Аллена (Chris Allen, @bitemyapp):
«Мне немного грустно от того, что некоторые организации твердят мантру „Вы сможете использовать haskell“, чтобы заполучить толковых инженеров подешевке».
Untyped is unsane ( @bitemyapp) 3 июня 2014 г.

Для тех, кто не знает: Haskell — продуктивный и мощный язык, позволяющий программистам, по крайней мере талантливым, быстро писать правильный код. По сравнению с разработкой на Java скорость возрастает в 2–5 раз при сопоставимой производительности и меньшем количестве ошибок. Крис совершенно верно заметил, что разработчик, использующий Haskell, чаще всего не получает достойного вознаграждения. Если вы твердо решили использовать функциональное программирование, то будете зарабатывать меньше коллег, которые разгребают базы кода C++ в банках, накопленные за 30 лет. Как-то это все неправильно. Почему к программистам, применяющим более мощные инструменты, применяются экономические санкции? В отличие от управленцев, ставящих во главу угла выгоду, программисты действительно хотят сделать свою работу как можно лучше. Почему же вместо «пряника» за благие намерения они получают «кнут»?
Читать дальше →
Всего голосов 104: ↑78 и ↓26+52
Комментарии37

Rust на примерах. Часть 1

Время на прочтение7 мин
Количество просмотров50K
Этот цикл статей является вольным переводом книги «Rust by Example», которую пишет Хорхе Апарисио на Github.

На момент написания этого топика автор книги создал 49 глав, в первой части будет перевод первых пяти. Убедитесь, что Rust установлен и под рукой имеется документация.

Давайте начинать!
Читать дальше →
Всего голосов 39: ↑39 и ↓0+39
Комментарии9

Для новичков про stdafx.h

Время на прочтение11 мин
Количество просмотров330K
StdAfx.h, Precompiled headers
Статья рассчитана на людей, которые знакомятся со средой Visual Studio и пытаются компилировать в ней свои Си++-проекты. В незнакомой среде всё кажется странным и непонятным. Особенно новичков раздражает файл stdafx.h, из-за которого возникают странные ошибки во время компиляции. Очень часто всё заканчивается тем, что новичок долгое время везде старательно отключает Precompiled Headers. Чтобы помочь людям разобраться что к чему, и была написана эта статья.
Читать дальше →
Всего голосов 108: ↑100 и ↓8+92
Комментарии35

Облако в штанах

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

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

Рынок «облачных хранилищ» очень насыщен: есть как зарубежные решения, так и отечественные.

Например, одни из самых известных зарубежных это: Dropbox.com, GoogleDrive, Microsoft OneDrive
Из отечественных: Yandex.Диск, Облако Mail.ru

У каждого из вышеперечисленного есть как преимущества, так и недостатки.
Так, например, Dropbox бесплатно выдаст Вам всего 2Гб дискового пространства, что по сравнению с бесплатными 10Гб от Yandex.Диск явно меньше, но зато у Dropbox есть система контроля версий файлов, что для кого-то может оказаться очень важным.

Mail.Ru даст Вам 100Гб (давали даже 1Тб, если Вы устанавливаете их ПО, но вроде эту «халяву» прикрыли) но программное обеспечение не работает под консолью Linux, нет даже поддержки WebDAV.
(UPD.: В комментариях писали, что по адресу: https://webdav.cloud.mail.ru/ есть BETA-версия WebDAV, но как оно будет работать сейчас и как оно будет работать дальше — не известно. Используйте на свой страх и риск).
Для кого-то эти тонкости не важны, а кому-то принципиально необходимы, чтобы, например, делать в облако резервные копии своих фотографий с помощью командной строки домашнего роутера.
Так же если на MAIL.RU файлы загружать через web-морду, то работает ограничение на его максимальный объём: 2Гб, а если загружать с помощью родного клиента, то max размер файла может быть 32Гб. Критично это или нет — вопрос индивидуальный.

Лично я отношусь к той категории пользователей, которым нужно как можно больше бесплатного пространства для хранения и чтобы была возможность работать с хранилищем в Linux без графической оболочки. Большим плюсом будет наличие возможности подцепиться к этому хранилищу с мобильного устройства (смартфона/планшета), ведь нам же нужно «облако штанах».

Что же подойдёт под такие критерии? Из бесплатных — не много.
Читать дальше →
Всего голосов 39: ↑32 и ↓7+25
Комментарии78

Что такое IPO и зачем это нужно

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

В сети можно часто встретить истории о том, как компании вышли на биржу и провели IPO, по итогам которых основатели бизнеса стали миллиардерами. Тем не менее, не все знают о том, какой объём работы стоит за этим процессом перехода компании от частной к публичной. Сегодня мы рассмотрим этот процесс по шагам.
Читать дальше →
Всего голосов 56: ↑54 и ↓2+52
Комментарии67

Как ядро управляет памятью

Время на прочтение8 мин
Количество просмотров44K
Ранее мы увидели как организована виртуальная память процесса. Теперь рассмотрим механизмы, благодаря которым ядро управляет памятью. Обратимся к нашей программе:

image
Читать дальше →
Всего голосов 41: ↑36 и ↓5+31
Комментарии6

Является ли Go языком ООП?

Время на прочтение9 мин
Количество просмотров71K
Object-oriented design is the roman numerals of computing.
— Rob Pike, автор Go.

image

Предлагаю вашему вниманию вольный перевод заметки «Is Go An Object Oriented Language?» за авторством Steve Francia, в которой автор наглядно рассказывает об особенностях использования парадигмы ООП в Go. Сразу предупреждаю, что из-за свойств оригинального материала большую часть текста пришлось переформулировать полностью, где-то добавить своего. Флажок перевода убирать не стал.
Читать дальше →
Всего голосов 59: ↑49 и ↓10+39
Комментарии27

Сравнение D и C++ и Rust на примерах

Время на прочтение8 мин
Количество просмотров37K
Данный пост основывается на Сравнение Rust и С++ на примерах и дополняет приведенные там примеры кодом на D с описанием различий.

Все примеры были собраны с помощью компилятора DMD v2.065 x86_64.
Читать дальше →
Всего голосов 63: ↑58 и ↓5+53
Комментарии50

LifeTrak: бюджетные спортивные часы + фитнес трекер

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


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

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

Спортивные часы/фитнес трекеры LifeTrak — как раз бюджетные устройства, с хорошей функциональностью. LifeTrak Move C300 и LifeTrak ZoneC410- две модели от LifeTrak, на которые стоит обратить внимание.

Читать дальше →
Всего голосов 29: ↑25 и ↓4+21
Комментарии29

Бутлоадер с AES-128 и EAX на AVR Assembler в 1024 байта

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

Или как я перестал бояться и полюбил ассемблер

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

Хорошая мера защиты — обновления программного обеспечения. Китайские клоны автоматически отмирают после каждой новой прошивки, а лояльные пользователи получают нашу любовь, заботу и новые возможности. Робин Гуды при таком раскладе, естественно, достанут свои логические анализаторы, HEX-редакторы и начнут ковырять процесс прошивки с целью ублажения русско-китайского сообщества.

Хоть у нас и не было проектов, которые требуют подобных мер защиты, было понятно: заняться этим надо, когда-то это пригодится. Погуглено — не найдено, придумано — сделано. В этой статье, я расскажу, как уместить полноценное шифрование в 1 килобайт и почему ассемблер — это прекрасно. Много текста, кода и небольшой сюрприз для любителей старого железа.
Читать дальше →
Всего голосов 152: ↑151 и ↓1+150
Комментарии75

Онлайн LaTeX редактор Papeeria. Весенние новости

Время на прочтение3 мин
Количество просмотров8.1K
Вы же ведь уже начали писать дипломы и курсовые, да? Если уже и закончили и защитили, то поздравляем, а если процесс в самом разгаре, то вам будет, возможно, интересно узнать о новостях Папирии.

Папирия — это облачный ЛаТеХ редактор. Мы уже пиарились на Хабре год назад и в прошлом декабре, так что не будем снова расписывать про то, что не устанавливать латех — это очень приятно. Лучше нас об этом говорят наши пользователи, чьи отзывы можно почитать на странице Папирии в Chrome Web Store (выберите All languages). А мы поговорим об основных новинках зимы и весны и будущих планах.
Новости и планы
Всего голосов 25: ↑22 и ↓3+19
Комментарии19

Steam Files. Часть 1 — GCF/NCF

Время на прочтение21 мин
Количество просмотров22K
Steam LogoКак и обещал в предыдущей статье, начинаю публиковать статьи о той части инфраструктуры Steam, которую смогло открыть Anti-Steam сообщество путём реверс-инжиниринга и продолжительных мозговых штурмов.

Файлы формата GCF до недавнего времени являлись стандартом для всех игр, выпускаемых компанией VALVE, а NCF — для всех остальных. Сами по себе эти файлы представляют образ файловой системы с несколькими уровнями защиты. Отличие NCF от GCF заключается в том, что первые содержат только заголовки, а файлы, принадлежащие им, расположены в отдельном каталоге (<каталог Steam>/SteamApps/common/<имя игры>). Поэтому описывать буду GCF, а все особенности NCF приведу после.

В данной статье я подробно разберу структуру данных файлов и работу с ними на примере своей библиотеки (ссылка на неё — в конце статьи). Начало будет достаточно скучным — описание структур и назначения их полей. Самое «вкусное» будет после них…

Весь код, приведенный здесь, является плодом реверс-инжиниринга библиотек Steam. Большая часть информации о формате файлов была почерпнута из открытых источников, я же немного её дополнил и значительно оптимизировал работу с файлами кеша (даже по сравнению с самой популярной на то время библиотекой HLLIB).
Читать дальше →
Всего голосов 43: ↑41 и ↓2+39
Комментарии31

Настройка резервного копирования в Ubuntu

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

Настройка резервного копирования в Ubuntu за 20 минут.


Для работы над проектами использую svn, который находится на удаленном виртуальном выделенном хосте, под управлением ubuntu 8.04. Со временем объемы данных выросли, как и критичность этих данных. Потеря чего-то снилась в кошмарах. Время от времени копировал репозитории на локальный компьютер. Недавно мне это надоело. И я стал искать возможности автоматизировать это дело. Не буду говорить о поисках и вариантах, расскажу о результатах.

Итак, мы имеем удаленный хост под управлением ubuntu, с некоторым массивом довольно критичных данных. Довольно логичным было бы настроить бэкап прямо на удаленном хосте, с помощью tar по крону, rsyns и т.д. Но, т.к. место на виртуальном выделенном хостинге довольно дорого и использовать его лучше по делу, идеально было бы, чтобы данные автоматически копировались на какую нибудь локальную машину, место на которой хоть отбавляй. В моем случае это файловый сервис в офисе, под управлением все той же Ubuntu.

Итак, приступим
Всего голосов 58: ↑53 и ↓5+48
Комментарии23

Краткая шпаргалка по tmux (менеджеру терминалов)

Время на прочтение1 мин
Количество просмотров419K
tmux — это менеджер терминалов, к которому удобно подключаться и отключаться, не теряя при этом процессы и историю. Как screen, только лучше (в первую очередь потому, что использует модель клиент—сервер).

image

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

Читать дальше →
Всего голосов 59: ↑53 и ↓6+47
Комментарии50

Давным-давно, когда Хабр был без инвайтов, а Баш можно было прочитать за 2 дня полностью, мы делали спутниковый интернет в Астрахани

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


Это был тот прекрасный период, когда диалап начал проходить, GPRS и EDGE были непонятными словами для буржуев, а вместо социальных сетей были городской форум, аська и ночной чат. В качестве основного источника коннекта для счастливчиков работали ADSL-линии (перегруженные до предела, и новые подключали месяца через три после заявки). Плюс разные хитрые кабельные технологии с топологией «звезда» от точек провайдеров. До кучи — часто соединённые несогласованными Wi-Fi-пролётами по 1-2 километра из «бытовых» антенн и крашеных банок от ананасов и кофе. Магистральный провайдер в городе был только один, в качестве экстренного резерва использовались каналы РЖД. Мегабайт диалапа стоил 7-8 рублей, час – 50-70 рублей. Карточки продавались по всему городу. ADSL тоже считался помегабайтно.

И тут появился спутниковый интернет. Относительно дешевый, около рубля-двух за мегабайт. Но ни о каком безлимите речь не шла, понятно дело. На один из первых монтажей мы поехали по заявке с записью «Дед из 38-й квартиры кусается».
Читать дальше →
Всего голосов 257: ↑253 и ↓4+249
Комментарии86

Разъяснение http2

Время на прочтение25 мин
Количество просмотров194K
На днях Даниэль Штенберг, один из участников группы HTTPbis IETF, которая ведёт разработку протокола http2, опубликовал в своём блоге крайне интересный документ «http2 explained». Небольшой PDF-документ на 26 страницах весьма доступным языком рассказывает о предпосылках и деталях реализации протокола http2.

Как мне кажется, на сегодняшний день это одно из самых лучших разъяснений о том, что такое протокол http2, зачем он нужен, как он повлияет на веб-разработку и какое будущее ждёт Интернет в связи с его появлением. Думаю, что всем людям, причастным к веб-разработке и веб-строению, информация будет полезна, ведь ожидается, что стандарт http2 будет принят уже в июне этого года после завершающей встречи группы HTTPbis в Нью Йорке.
Читать дальше →
Всего голосов 162: ↑153 и ↓9+144
Комментарии51

(Само)идентификация процессоров. Часть первая. Сравнение архитектур

Время на прочтение9 мин
Количество просмотров25K
Я работаю с программными моделями центральных процессоров в составе полноплатформенного симулятора. Занятие это, конечно же, очень интересное — приходится иметь дело с технологиями интерпретации, двоичной трансляции, виртуализации (об этом я уже писал здесь). Однажды моё внимание привлёк тот факт, что значительную часть времени я вожусь над единственной, казалось бы, не самой вычислительно интенсивной инструкцией. Причина в том, что типов процессоров существует много, и все они во многом похожи; однако при этом критически важно очень точно представлять различия между ними.
В этой статье я описываю, зачем и как процессоры умеют сообщать о своих возможностях, и как к этому вопросу подошли разные производители. В её продолжении я расскажу об эволюции и особенностях инструкции CPUID для Intel IA-32, например, почему её описание занимает в Intel SDM [1] около 40 страниц.


Читать дальше →
Всего голосов 43: ↑43 и ↓0+43
Комментарии4

Информация

В рейтинге
Не участвует
Откуда
Санкт-Петербург, Санкт-Петербург и область, Россия
Дата рождения
Зарегистрирован
Активность