steinkrauz

> Recent Entries
> Archive
> Friends
> User Info

February 4th, 2022


08:59 pm - Запретите уже Си
Потому что у меня лапки и я в Си не могу.

Полдня исправлял странный баг, при котором документ с одной привязкой отображался в системе нормально, а с двумя и более — рушил всё намертво. А оказалось совершенно элементарно, я написал
*docs[i++] = sp_tags[j];


вместо того, чтобы
(*docs)[i++] = sp_tags[j];


Ну да, забыл про приоритеты.

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

(15 comments | Leave a comment)

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);


то всё заработает как полагается.

Не, полминуты чесания тыковки, и причины становятся совершенно очевидными, а тем, кто сразу видит выжимку из кода так и ещё быстрее всё понятно станет. Но изначально это проявилось при тестировании уже рабочего куска кода, который внезападно вдруг начал крашиться. Омерзительное ощущение.

(14 comments | Leave a comment)

February 16th, 2018


09:22 pm - String Builder
Дело было вечером, делать было нечего — в общем на всякий случай переписал свой string builder на чистом Си.

Код всё там же:
https://bitbucket.org/steinkrauz/string_builder

(Leave a comment)

May 13th, 2014


11:45 pm - В кладовочку
Мелкая и простая криптобиблиотека для С/С++
http://tweetnacl.cr.yp.to/
Tags: ,

(Leave a comment)

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`.

(Leave a comment)

October 10th, 2012


04:56 pm - Ути-ути-ути-литка
Наверняка есть что аналогичное, и даже лучше, но мне лень было гуглить и тестить, когда я за то же время могу себе сам нужное сделать.

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

binedit -file=<filename> -src=<src string> -dst=<dest string>

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

Качать тут.

Сырцы тут. Pure C, так что должно собираться и работать под *nix тоже. (Хотя зачем?)

(10 comments | Leave a comment)

October 5th, 2011


01:14 am - Fuck da memory management
Совсем отвык наСИльничать, шарп и скриптовые расслабили. Битый час искал странную плавающую ошибку, пока не обнаружил, что в вызове malloc(strlen(str)) забыл добавить +1. (Если что, там не родной malloc, так что strdup was out of question).
/*мрачно*/ В следующей версии ввели API на C++ и обещают дальше развивать только его. Я туда посмотрел, меня стошнило.

(2 comments | Leave a comment)

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)

(5 comments | Leave a comment)


> Go to Top
LJ.Rossia.org