|
February 4th, 2022
08:59 pm - Запретите уже Си Потому что у меня лапки и я в Си не могу.
Полдня исправлял странный баг, при котором документ с одной привязкой отображался в системе нормально, а с двумя и более — рушил всё намертво. А оказалось совершенно элементарно, я написал
вместо того, чтобы
(*docs)[i++] = sp_tags[j];
Ну да, забыл про приоритеты.
В общем, заберите нах это пакость, где ссылки на ссылки на куски памяти передают, и дайте с нормальными контейнерами подеградировать.
|
July 30th, 2020
12:14 am - Нюансы сишечки Я в принципе сишечку довольно-таки люблю, и даже к плюсам отношусь тепло. Но иногда как вляпаешься...
Если написать вот так:
char *str = "1111-2222-333-444/001";
char *pC = strstr(str, "/");
if (pC!=NULL) *pC = '\0';
puts(str);
то получим segmentation fault (core dumped).
А вот если мы напишем вот так
char str[] = "1111-2222-333-444/001";
char *pC = strstr(str, "/");
if (pC!=NULL) *pC = '\0';
puts(str);
то всё заработает как полагается.
Не, полминуты чесания тыковки, и причины становятся совершенно очевидными, а тем, кто сразу видит выжимку из кода так и ещё быстрее всё понятно станет. Но изначально это проявилось при тестировании уже рабочего куска кода, который внезападно вдруг начал крашиться. Омерзительное ощущение.
|
February 16th, 2018
May 13th, 2014
March 6th, 2013
02:45 pm - mod_access_filter Накорябал по случаю фильтр для апача. Девелоперская документация к нему, кстати, говно полное.
http://bitbucket.org/steinkrauz/mod_access_filter
Simple Apache access filter based on IP/login pairs for HTTP-based applications without such a future.
# Enabling Add following directives to httpd.conf:
`LoadModule access_filter_module modules/mod_access_filter.so`
`UseAccessFilter On`
# Configuring Main module config is expected in `conf/access_filter.txt`. Each line in the file should be in the following form: ``
* Network address is the literal part of an allowed IP address. I.e. 10.1.1 will match both 10.1.1.10 and 10.1.100.10 * Tab is one tabulation character. No spaces allowed. * File name is a path to a file with a list of logins allowed in the given network. One login per line, no extra characters.
# Logging The module will log _allowed_ and _denied_ events in the error log. The messages are logged at the 'error' level. The messages' format is following: `User <login> from <remote IP> blocked|allowed`.
|
October 10th, 2012
04:56 pm - Ути-ути-ути-литка Наверняка есть что аналогичное, и даже лучше, но мне лень было гуглить и тестить, когда я за то же время могу себе сам нужное сделать.
В общем, вдруг кому понадобиться: тулза, чтобы менять в бинарниках одну строку на другую.
binedit -file=<filename> -src=<src string> -dst=<dest string>
Тупо грузит заданный файл и заменяет в нём исходную строку на целевую. Строки, понятное дело, должны быть одинаковой длины. Во-первых, потому что утиль тупая, во-вторых, потому что в бинарниках лишний раз лучше ничего никуда не двигать.
Качать тут.
Сырцы тут. Pure C, так что должно собираться и работать под *nix тоже. (Хотя зачем?)
|
October 5th, 2011
01:14 am - Fuck da memory management Совсем отвык наСИльничать, шарп и скриптовые расслабили. Битый час искал странную плавающую ошибку, пока не обнаружил, что в вызове malloc(strlen(str)) забыл добавить +1. (Если что, там не родной malloc, так что strdup was out of question). /*мрачно*/ В следующей версии ввели API на C++ и обещают дальше развивать только его. Я туда посмотрел, меня стошнило.
|
August 31st, 2011
12:46 am - Мелкоглюк На днях, разбираясь с утилитой, обнаружил, что её очень тормозит вывод сообщений в консоль. Там в цикле (как оказалось потом, по 3.5Е6 элементам) на каждой итерации писалось "номер такой-то загружен" и возврат каретки. Не, я знал, что вывод в консоль тормозит, но не ожидал, что настолько. Поначалу я грешил на добавленный в семёрке пятое колесо conhost.exe, позволяющий хомячкам натягивать свои уютненькие темки на консольное окно. Но, как показала практика, Колумб почти не виноват. Чтобы не быть голословным, я смоделировал свою проблему, обвязал бенчмаркой и запустил разных средах. Ну чо, под семёркой разница во времени исполнения между наличием и отсутствием вывода в консоль составила 300 раз. Соответственно, под XP эта разница упала аж до 250 раз. То есть, похоже, несчастный conhost, таки добавляет тормозов в консоль, но на фоне двух порядков разницы эта добавка не так уж и важна. Ну и контрольная проверка на линухе: разница составляет 3 (прописью: три) раза. Правда, на линухе стоит простенький WindowMaker, и для полноты правильности надо бы проверить на линуховой машине с няшненьким полупрозрачным терминальчиком.
А дальше я решил посмотреть, как поведут себя разные языки в разных средах.
OS |
C |
C++ |
C# |
Win7 |
130 |
300 (23) |
200 (0,67) |
Win8 |
130 |
N/A |
180 (0,86) |
WinXP |
170 |
250 (12) |
150 (0,75) |
Interix |
4 |
10 (23) |
200 (23) |
Linux |
3 |
3 (8) |
110 (103) |
Цифры в скобках — это отношение времени вывода в консоль на данном языке к выводу на С. UPD:Цифры без скобок — это отношение времени выполнения с выводом в консоль к времени выполнения без вывода. UPD2: Добавил данных по Win8 (15.09.11)
|
|
|