herm1t LIVE!ng room - Погромисты [entries|archive|friends|userinfo]
herm1t

[ website | twilight corner in the herm1t's cave ]
[ userinfo | ljr userinfo ]
[ archive | journal archive ]

Погромисты [Jun. 9th, 2011|09:52 am]
Previous Entry Add to Memories Tell A Friend Next Entry
[Tags|, , , , ]
[Current Mood | bitchy]

Jan Hruska (Sophos):
int ishexdigit(c)
int c;
{
        switch(c) {
        case '0': return 0;
        case '1': return 1;
...........................
        case 'f': case 'F': return 15;
        default: return (-1);
        }
}
Если за это не убивать, то что же тогда делать?

P.S. Помимо очевидного решения, мне пришла в голову и такая мысль:

return c>=48&&c<128?(c=(c&223)-16)<10?c:(c-=39)&240||c==9?-1:c:-1;

Update. Занятно, как заходит речь о какой-нибудь сложной задачке - тишина, зато сишные примитивы обсуждаются с завидным рвением. :-)

Update 2 Код был взят из книги Jan Hruska "Computer viruses and anti-virus warfare", Ellis Horwood, 1992

LinkLeave a comment

Comments:
From:[info]qulinxao
Date:June 9th, 2011 - 02:38 pm
(Link)
ну... у человека кристально чистый китайский код

будь лента if .. else if ... было бы индусятней.

альтернативой в данном случае может послужить настойчивая рекомендация ознакомится с :
Язык программирования Си
Практика программирования
UNIX. Программное окружение

все 3 пера Кернигана свят-свят Браена.
достаточно 1 из. если не вконя корм ну программисты-дворники тоже полезны.

ps. return какой то переусложнёный как то в исток(начал) где в устье www.ioccc.org
[User Picture]
From:[info]herm1t
Date:June 9th, 2011 - 02:52 pm
(Link)
> программисты-дворники тоже полезны.
вот он этот "дворник":
http://www.sophos.com/en-us/about-us/board-of-directors/jan-hruska.aspx

> ps. return какой то переусложнёный
дык, такое как раз писать легко - в начале пишеься по-человечески (if ... if ... & ~32...'A' - '0' - 10...а потом делаем (вместо компилятора) constant folding, заменяем if'ы условными выражениями и получаем красотищу. :-)
From:[info]qulinxao
Date:June 9th, 2011 - 03:27 pm

не понимая шуток

(Link)
ну есть же Keep it Simple

честно честно

я ещё класическая преждевременая оптимизация

у дядьки повторюсь кристально ясный китайский код в отличии от.

Эрик_Стивен_Реймонд-Искуство_программирвания_для_Unix
глава 13.Сложность: просто, как только возможно, но не проще.
рис. 13.1 Источники и виды сложности.

и/или
http://www.faqs.org/docs/artu/graphics/complexity.png
на http://www.faqs.org/docs/artu/ch13s01.html

[User Picture]
From:[info]herm1t
Date:June 10th, 2011 - 07:42 am

Re: не понимая шуток

(Link)
> честно честно

Я хацкер. Мне можно. :-)

P.S. Эк вас зацепило, я же не говорю, что так нужно писать, просто смешное.
From:[info]qulinxao
Date:June 10th, 2011 - 01:07 pm

а где лопата?

(Link)
я понимаю что соль шутки сложно(часто не возможно) обьястит не расмеявшемуся , однако какие факты в исходном сообщение дисгормонируют в вашем восприятии что возникает эфект удивления и "да не может быть"/"ппц" и т.д?
[User Picture]
From:[info]herm1t
Date:June 10th, 2011 - 02:00 pm

Re: а где лопата?

(Link)
То что надутый индюк из Софос выдал такую хуйню, за которую даже студентов по рукам бьют.
From:[info]qulinxao
Date:June 10th, 2011 - 02:54 pm

ясно.

(Link)
не для холивара :
1. да он индюк.
2. а вот это мне не ясно - в чём код хуйня? не для спора - что вам хуёвого в нём видно чего я вижу :( и за что пиздят студентов.
[User Picture]
From:[info]herm1t
Date:June 10th, 2011 - 11:00 pm

Re: ясно.

(Link)
потому что программист должен думать, а не "кодить", вышеописанный стиль мышлению не способствует. пиздить нужно, чтобы душить быдлокодинг в зародыше, а то потом вырастут и станут пациентами govnokod.ru (сходите, там много _работающих_ примеров в том же стиле, и почему же они туда попали?) кроме того этот код не обладает преимуществами других вариантов, он не самый быстрый, не самый читаемый, не интересный, одним словом - ...

Ы, http://govnokod.ru/5859 ? Нравится?

/*!
* \brief is Printable Character
* \param c Character
* \return true/false
*/
static int isPrintableChar(char c)
{
if ((c < 'A' || c > 'Z') && (c < 'a' || c > 'z')
&& (c < '0' || c > '9') && (c != ' ') && (c != '\'')
&& (c != '(') && (c != ')') && (c != '+') && (c != ',')
&& (c != '-') && (c != '.') && (c != '/') && (c != ':')
&& (c != '=') && (c != '?') && (c != '_') && (c != '\\')
&& (c != '@') && (c != '"') && (c != '%') && (c != '$')
&& (c != '&') && (c != '#') && (c != ';')
//&& (c != 'В_')
&& (c != '<') && (c != '>') && (c != ']') && (c != '{')
&& (c != '}') && (c != '*') && (c != '^')) {
return 0;
} else {
return 1;
}
}
From:[info]qulinxao
Date:June 11th, 2011 - 01:16 pm

Всё яснее в негодование. всё менее ясно о недостатках к

(Link)
исходно govnokod.ru - вау прикольно
но в целом примеры "плохого кода" на сайте не настолько плохи - чтобы быть эталоными "плохими практиками" и тем более из вполне хороших частей часто такие архитектурные мазанки из соломы и навоза строият что охо хох.
т.е govnokod.ru уныл - тоже время мона тратить на просмотр открытых реализаций из ракетной области.

ну код(http://govnokod.ru/5859 ) из ряда добавим,добавим и получим кучу - уверен автор знает заклинание рефакторинг и применяет его при создании классов.

всё таки что конретно "плохая практика" в коде вашего топик-старто-примере?
[User Picture]
From:[info]herm1t
Date:June 14th, 2011 - 09:54 am

Re: Всё яснее в негодование. всё менее ясно о недостатка

(Link)
> всё таки что конретно "плохая практика" в коде вашего топик-старто-примере?

тупость. приведенный код - не самый быстрый и не самый короткий, преимуществ по сравнению с прочими "средними" вариантами не имеет (это не трейдофф). в бо'льших масштабах ведет к атрофии мозга. просто запустите objdump -d на нескольких примерах, и вы увидите разницу. так же рекомендуется к просмотру, что-нибудь из ранних юниксов из архивов PUPS, для сравнения, тык скыть.
From:[info]qulinxao
Date:June 14th, 2011 - 10:29 am

ясно. окончательно.

(Link)
A,B:=точка{82IQ,Милиард},точка{140IQ,диоген_в_бочке}

A выше B но(:( ) ведь B правее A => печаль.

из динамического программирования, точнее принципа Белманна :

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

спасибо за разьяснение что следовать KISS тупо.
[User Picture]
From:[info]herm1t
Date:June 14th, 2011 - 10:44 am

Re: ясно. окончательно.

(Link)
> спасибо за разьяснение что следовать KISS тупо.

simple != stupid
[User Picture]
From:[info]ketmar
Date:June 9th, 2011 - 11:14 pm
(Link)
>вот он этот "дворник"
ну так написано же: «хрюшка». как назвали — так и кодит.
[User Picture]
From:[info]herm1t
Date:June 10th, 2011 - 08:47 am
(Link)
И выглядит. Такой розовенький... :-)
From:(Anonymous)
Date:June 9th, 2011 - 03:01 pm
(Link)
Что это, почему это? Откуда старый стиль? strtol() по base 16 религия запрещает позвать?
За return c>=48&&c<128?(c=(c&223)-16)<10?c:(c-=39)&240||c==9?-1:c:-1; я бы казнил не меньше. И не только за однострочник, но и за предположение, что у Вас всегда будет ASCII. А я строю код на системе с EBCDIC и - что?
[User Picture]
From:[info]herm1t
Date:June 9th, 2011 - 03:06 pm
(Link)
> Что это, почему это? Откуда старый стиль?
это из книжки 92-го года выпуска.
> За return c>=48&&
вы что, шуток не понимаете? ;-)
From:[info]qulinxao
Date:June 9th, 2011 - 03:40 pm

схоластика на трудах создателей

(Link)
из http://golang.org/src/pkg/fmt/scan.go
799 // hexDigit returns the value of the hexadecimal digit
800 func (s *ss) hexDigit(digit int) int {
801 switch digit {
802 case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':
803 return digit - '0'
804 case 'a', 'b', 'c', 'd', 'e', 'f':
805 return 10 + digit - 'a'
806 case 'A', 'B', 'C', 'D', 'E', 'F':
807 return 10 + digit - 'A'
808 }
809 s.errorString("Scan: illegal hex digit")
810 return 0
811 }

сырцы исходного С Кена дабудетмониторв2колонки Томпсона где та
так что мона предположить что на Ся это как то так :
int hexdigit(int digit){
switch(digit){
case '0': case '1': case '2': case '3':
case '4': case '5': case '6': case '7':
case '8': case '9': return digit - '0';
case 'a': case 'b': case 'c': case 'd':
case 'e': case 'f': return 10 + digit - 'a';
case 'A': case 'B': case 'C': case 'D':
case 'E': case 'F': return 10 + digit - 'A';
}
return -1;
} // очевидное?!

[User Picture]
From:[info]herm1t
Date:June 10th, 2011 - 08:37 am

Re: схоластика на трудах создателей

(Link)
> // очевидное?!
Очевидное, это:
char (а лучше int) ishex[256] = {
[0 ... 255] = -1,
[0x30] = 0,1,2,3,4,5,6,7,8,9,
[0x41] = 10,11,12,13,14,15,
[0x61] = 10,11,12,13,14,15,
};
(если нужна скорость).
Если нужна читаемость, то if (c >= '0' "ну, ты понЕл"...
А поучительное вам покажут gcc -Os и objdump -d.

P.S. ishexdigit, я полагаю, исчерпан? Может быть перейдем к strlen() и вы сюда насыпете еще ссылок на св. св. Кена, Денниса, Брайана и Роба? (Никого не забыл?) :-)))
From:[info]qulinxao
Date:June 10th, 2011 - 01:04 pm

ну вот конвеер то форд изобрёл

(Link)
его конвеерство Дуг МакИлрой с его вертикальной палкой

для закругления http://ru.wikipedia.org/wiki/Философия_UNIX

ну и конечно :
Настоящие(первоночальные) открытия-докозательства-творения редко бывают элегантными.
From:[info]qulinxao
Date:June 12th, 2011 - 01:32 pm

Update как бегство :)

(Link)
сложная задачка часто оказывается достаточно специализированной .

да сишный Примитив - но не "плохой код" :)

конечно посторение своей произодственной линии начиная с каменного топора - не промышленный метод производства.

http://ershov.iis.nsk.su/russian/second_literacy/article.html
зы. название настолько на слуху что Я сильно удивил себя обнаружив при чтении статью - что совершенно не помню что её читал при том что до сих пор уверен что читал