steinkrauz

> Recent Entries
> Archive
> Friends
> User Info
> previous 20 entries
> next 20 entries

May 15th, 2014


09:52 am - На почитать
http://javarevisited.blogspot.ca/2014/05/10-articles-every-programmer-must-read.html

(3 comments | Leave a comment)

May 12th, 2014


12:13 pm - Сру на степанова
Вот почему блеать erase в контейнере должен обязательно сдвигать итератор вперёд, а не оставлять его инвалидным, а не рушить принцпип одна функция -- одно действие?

UPD: Возможно, что в С++11 это поправили, создав относительно нормальный foreach, но из-за совместимости есть только С++03. А в легкотрёпе это вообще было, чего бы сразу не слямзить.

(Leave a comment)

April 28th, 2014


12:22 pm - Перлы продолжаются
Вызов:
long item_chk_time = ercSession.mysql.GetItemCheckTime(item_id);
long item_forced = ercSession.mysql.GetItemForced(item_id);

Реализация:
public long GetItemCheckTime(String part_id)     {
        return GetLong("SELECT part_time FROM items WHERE part_id=\"" + part_id + "\"");
}
    
public long GetItemForced(String part_id)    {
        return GetLong("SELECT part_forced FROM items WHERE part_id=\"" + part_id + "\"");
}
И да, как правильно догадался внимательный читатель, part_forced -- это флажок со значениями 0 и 1, имеющий в базе тип bigint(20). Пердыдущий перл 1 Пердыдущий перл 2

(12 comments | Leave a comment)

April 24th, 2014


04:47 pm - Я у мамы дурачок
Типа разбавить унылость на сайте

template <class T>
vector<T>& operator-= (vector<T>& lhs, vector<T>& rhs) {
    for (vector<int>::iterator it=rhs.begin(); it!=rhs.end(); it!=rhs.end()?++it:it) {
        vector<int>::iterator el = std::find(lhs.begin(),lhs.end(),*it);
        if (el!=lhs.end()) lhs.erase(el);
    }	
    return lhs;
}

(2 comments | Leave a comment)

March 17th, 2014


07:15 pm - Стук головой о стенку
Ну запретите уже им

for (int i = 0; i < status.NumberUnloadedDocs; i++) {
    if  (status.GetStatus(i) == 641044) {
        //Console.WriteLine("Doc.open(): {0} {1} {2} {3}", i, status.GetStatus(i), status.GetDocName(i), status.GetStatusDescription(i));
        // не найден файл
    } else if (status.GetStatus(i) == 641044) {
        dsSession.warnings.Add(String.Format("Doc.open(): {0} {1} {2} {3}", i, status.GetStatus(i), status.GetDocName(i), status.GetStatusDescription(i)));
    } else {
        dsSession.errors.Add(String.Format("Doc.open(): {0} {1} {2} {3}", i, status.GetStatus(i), status.GetDocName(i), status.GetStatusDescription(i)));
    }
}

(Leave a comment)

March 11th, 2014


04:53 pm - Нам пишут из Янины
Разбираюсь в коде одного комбайна, сотворённого давно покинувшим нас сотрудником (зовьетише МФТИ, эксперт отраслевой премии, все дела). Нашёл прелестное

Хиндиш-русси пхай-пхай! )

(3 comments | Leave a comment)

August 23rd, 2013


12:26 pm - Хает псто
Сраная ембеднутая жаба не умеет в чтение строк из файла. Сраная ембеднутая жаба не умеет в split этих самых строк.

А я-то, наивный, думал сейчас себе за часик напишу импорт коней Тактов из файлика. Огащаз два раза.

(3 comments | Leave a comment)

August 13th, 2013


10:46 am - Сраный энтерпрайз катится в сраное говно
Было:
ComponentItemType itt = (ComponentItemType)((Session)session).getTypeComponent(strItemType);
ComponentItem newItem= itt.create(ID, name, desc, parentFolder);

Стало:

DataManagementService.ItemProperties[] properties = new DataManagementService.ItemProperties[1];

DataManagementService.ItemProperties property = new DataManagementService.ItemProperties();

property.clientId = clientID;
property.itemId = "";
property.revId = "";
property.revId = "";
property.name = "";
property.type = "Tech Document";
property.description = "Test objects";
property.uom = "";

property.extendedAttributes = new DataManagementService.ExtendedAttributes[1];

DataManagementService.ExtendedAttributes theExtendedAttr = new DataManagementService.ExtendedAttributes();

theExtendedAttr.attributes = new HashMap();
theExtendedAttr.objectType = "Tech Document";
theExtendedAttr.attributes.put("object_desc", "my value");

property.extendedAttributes[0] = theExtendedAttr;
properties[0] = property;

DataManagementService.CreateItemsResponse itemResp = dservice.createItems(properties, parentFolder, "");
ComponentItem newItem= itemResp.output[0].item;

Сраные индусы совсем превратили говножабу в какой-то дерьмовый макроассемблер.

(4 comments | Leave a comment)

April 23rd, 2013


09:50 am - .NET garbage collector
A basic overview
http://blogs.telerik.com/justteam/posts/13-04-02/understanding-net-garbage-collection

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

January 9th, 2013


01:58 pm - .NET JIT wonders
Once upon a time there was a difference between 'for' and 'foreach': http://www.codeproject.com/Articles/6759/FOREACH-Vs-FOR-C
Well, the article is now 8 years old, and instead of ugly and clumsy .NET 1.1 we have .NET 4.0 with tons of useful features and handfuls of sweet syntax sugar. But had anything change under the hood? Let us repeat the test from the article.
Here is the C# code:
    class Program {
        static void testFor() {
            int[] myInterger = new int[1];
            int total = 0;
            for (int i = 0; i < myInterger.Length; i++) {
                total += myInterger[i];
            }
        }

        static void testForeach() {

            int[] myInterger = new int[1];
            int total = 0;
            foreach (int i in myInterger) {
                total += i;
            }
        }

        static void Main(string[] args) {
            testFor();
            testForeach();
        }
    }
}


OK, following the original article the next step is to disassemble actual binary code created by JIT compiler.
This one is for 'for'
; Function ForForeach.Program.testFor (code starts at 0x2700a0).
; Offsets are relative to function start.

push        ebp
mov         ebp,esp
mov         edx,1
mov         ecx,6B4F4186h
call        FFF52103
mov         ecx,eax
xor         edx,edx
mov         eax,dword ptr [ecx+4]
test        eax,eax
jle         0000000B
cmp         dword ptr [ecx+edx*4+8],eax
inc         edx
cmp         eax,edx
jg          FFFFFFF9
pop         ebp
ret

And this is 'foreach'
; Function ForForeach.Program.testForeach (code starts at 0x2700e0).
; Offsets are relative to function start.

push        ebp
mov         ebp,esp
mov         edx,1
mov         ecx,6B4F4186h
call        FFF520C3
mov         ecx,eax
xor         edx,edx
mov         eax,dword ptr [ecx+4]
test        eax,eax
jle         0000000B
cmp         dword ptr [ecx+edx*4+8],eax
inc         edx
cmp         eax,edx
jg          FFFFFFF9
pop         ebp
ret


Judging from this huge difference in the disassembled samples I'm able to say that Microsoft had definitely introduced some improvements in the most recent versions on .NET framework and, therefore, the article I've mentioned in the beginning is no longer relevant.

(7 comments | 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)

April 27th, 2012


10:28 pm - QDVM всё
Собственно, репозиторий. Кто хочет, может заглянуть и кинуть в меня пару камней.

Умеет оно две вещи: многопоточный Hello, word! в консоль и звёздное небо а-ля Нортон Коммандер. Собирается/работает как под Виндой, так и под Линухом, если есть .NET2.0 или Mono. "Ассемблерные" сырцы надо скомпилить до запуска, естественно.

Выводы:
+: таки смог довести проект до слегка вменяемого состояния; более-менее осилил понравившуюся идею.
-: программер из меня хуёвый.

(10 comments | Leave a comment)

April 20th, 2012


12:26 pm - Продолжаем играться
;test suite for init
#include syscalls.inc

#defnum ThreadCount 2

lsb ThreadCount
.make:
  lsi .code
  lsi .name
  cal .MakeThread
  dec
  dup
jnz .make
.loop:
  lsi .name
  scl FindThread
  hlt
  lsi -1
jne .loop
ret

#defnum NameAddr 100
; Args: Name->File->
; ret: void
.MakeThread:
  stv NameAddr
  scl CreateThread
  dup
  ldv NameAddr
  swp
  scl NameThread
  pop
  scl KickThread
  pop
ret

.code:
ds "hello.qdm"
.name:
ds "hello"


В общем, осталось прикрутить графичьку, закодить жизненный цикл звёздочек, и влажная школьная мечта таки сбудется. Но блин, как же это лениво делать, ибо мозги не задействованы будут вообще. (Не то, чтобы я их особенно использовал для ВМ, но всё-таки...)

(9 comments | Leave a comment)

April 10th, 2012


10:40 pm - Гггг
An open letter to language designers: please, for the good of humanity, kill your sacred cows. Yes, i know those calves look so cute with big brown eyes and soft leathery skin, but you know what? Veal is delicious!

(5 comments | Leave a comment)

April 3rd, 2012


05:17 pm - Это заразно
;test suite
#defnum max_count 10
#defnum DebugPrint 7

lsb max_count
rnd
.loop:
  lsi .msg
  scl DebugPrint
  pop
  lsb 1
  sub
  dup
  lsb 0
jls .loop
ret

.msg:
ds "Hello, World!"

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

(19 comments | Leave a comment)

February 6th, 2012


05:09 pm - Chaos software
Присоединюсь-ка и я к разработке боевой магической программы

Консольная утилита для POSIX-совместимых систем. Pure C, UNIX-way, все дела.

Исходники тут:
https://bitbucket.org/steinkrauz/stkchaosact/

UPD: понятная картинка
18.22 КБ

(12 comments | Leave a comment)

December 20th, 2011


04:29 pm - string switch
Жаба медленно, но верно поедает мой мозг. Одно радует: если я прекращу прокрастинировать, то кончу уже сегодня и сбагрить эту бадью программистам.

while (true) {

    if (verb.equals("shutdown")) {

        doShutdown();

        break;

    }

    if (verb.equals("reload")) {

        doReload();

        break;

    }

    if (verb.equals("test")) {

        doTest();

        break;

    }

    if (verb.equals("autotest")) {

        System.out.println("Not implemented yet");

        break;

    }

    printUsage();

    return;

}



 

(3 comments | Leave a comment)

December 17th, 2011


12:21 am - Жабское
Когда читаю всякие более-менее теоретический рассуждения о языках, к Жабе отношусь вполне нейтрально: достаточно приличный язык, со своими плюсами и минусами и т.п. Но стоит начать на ней писать, как банально начинает тошнить. Хуже ощущение только от написания объёмных скриптов на разных диалектах Вижуал Васика.
Причём если от языка просто тошнит, то пакеты вообще кажутся написанными каким-то слизистыми инопланетными гнидогадоидами. Потому что вроде бы архитектура в них заложена правильная, но форма и способ реализации настолько странные, что просто диву даёшься.
Интересно, это такие специфические программисты выбирают язык, или же написание софта на Жабе необратимо рушит мозг?
(Навеяно впиливанием логов в софтину, да).

(6 comments | Leave a comment)

November 28th, 2011


01:43 pm - День сраных
Пописывал я себе на Си, или даже на плюсах, но с сишными либами, и горя не знал.
И тут заставила нелёгкая писать на плюсах с плюсовыми же библиотеками.
Взял пример, разобрал, понял, допил до своей задачи. Не работает.
Почитал гайд, проверил, выпилил всё лишнее. Не работает.
Запустил анализатор пакетов, данные все, что нужно уходят-приходят. Не работает. А тут уже и воскресенье закончилось.

И только с утра я обратил внимание, что кроме стандартных директорий lib/wnti32 и lib/wnti64 там есть lib/wntivc8. Быстро ставлю VS2005, и таки да, всё с полпинка летает.

В общем, сраный ЦэПэПэ, потому что сраный. Сраный мелкософт, потому что не может ни в бинарную совместимость, ни в предупреждения об её остуствии. Ну и сраный я потому что обо всём этом забыл и занимался весь день какой-то хернёй.

(Leave a comment)

> previous 20 entries
> next 20 entries
> Go to Top
LJ.Rossia.org