pigmeich: (Default)
Предыдущий пост в силе. Кстати, после него отвалилось пол-Интернета. Пишу слегка хакнув блокировщик.

От чего происходят все проблемы в IT? Не берусь сказать, что все, но большинство происходят от неумения вести бизнес.

Вот например, кому-нибудь придёт в голову, что специалист по диагностике машин может 3 часа поработать в диагностике, 3 часа — сварщиком, а ещё два часа водопроводчиком? А в IT этого требуют везде и всюду.

Есть, как минимум, три специальности в Ай-Ти: системный администратор, программист и специалист по безопасности (в просторечии — хакер).

Системный администратор — это тот, с кем знакомы большинство людей на планете Земля. Он тыкает кнопочки, пишет в консоли загадочные фразы, но главное: настраивает компьютер и программы (написанные программистами) на нём. Эта работа требует великолепной памяти, поскольку каждое действие уникально, а их могут быть тысячи.

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

Программисты пишут программы. Текстом, иногда, но никогда полностью, курсором. Программисты не могут заниматься системным администрированием, потому что им надо помнить ещё и свой код. Максимум, они могут администрировать одну-две программы написанные самостоятельно. Программисты не занимаются хакингом, поскольку это (а, особенно, в РФ) незаконно. Дураков отвечать свободой и имуществом, когда можно заниматься другими вещами, как всегда, мало.

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

Типичный проект выглядет как следующее пожелание заказчика: «Так, дайте мне программиста, пусть он натсроит обмен модулей 1С между собой, а также файрволл и антивирус».

Я уже объяснил почему это неправильно, но почему это происходит? Очевидно, заказчик просто не умеет управлять своим бизнесом и считает, что все профессии взаимозаменяемы и организовывать взаимодействие не надо. В условиях рентной экономики это господствующая парадигма. Действительно, все продажники взаимозаменяемы, а если нужно что-то реально сделать, то всегда можно нанять подрядчика.

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

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

И закон Яровой из той же оперы. Где-то услышали, что в США хранят все переговоры (правда гораздо меньший срок и в государственном порядке). Никаких дата-центров, ничего, но всем провайдерам (а не только сотовым операторам) приказ: «Сделать!».

И никто не задумывается как организовать взаимодействие и найти нужных людей. Сейчас гномики саморганизуются, наймут спецов из Китая и выкатят.
pigmeich: (Default)
Есть такая частая бухгалтерская задача: распределение по базе. Эти слова означают, что сумму или список (выборку, обычно) сумм нужно разделить между другим списком пропорционально долям.

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

Сначала код:

CC-SA

Функция ЗаписатьНаПроцентИВозвратитьОбщее(Откуда, Куда, Доля, ЗнаковОкругления, Знач Общее = 0)
	Значение = Окр(Откуда * Доля, ЗнаковОкругления);
	Куда = Значение;
	Возврат Общее - Куда;
КонецФункции


Теперь объяснения:

Есть несколько проблем в распределении по базе:
1. Сделать так чтобы сумма получившихся чисел была расна изначальной сумме.
2. Применить стратегию округления.
3. Применить стратегию распределения остатков округления (а они будут).

Тут я пожалуюсь на 1С: система прекрасная за счет объектой базы данных. Язык -- ужасный: как раз объектов и нет. Все остальные достижения языков программирования тоже прошли мимо. Встроенные и конфигурируемые объекты, из-за этого Java-шпагетти-style.

Тем не менее, можно применить процедурный подход. Например, как код выше. :) Возможно непонятно что такое общее: я объяснюю.

Вызов функции выглядит так (на каждое исходное число): ОбщаяСумма = ЗаписатьНаПроцентИВозвратитьОбщее(ИсходнаяСумма, ЗначениеДляЗаписи, Доля, ВДанномСлучаеОбыно2НоМожетБытьИМинус6, ОбщаяСумма).

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

Почему общее упоминается два раза? Это нестандартный подход, поэтому я считаю, что изменение Общего в функции должно быть выделено в соответствии с хорошем стилем кода.

Также потоково считается к какому элементу будет прибавляться Общее (то есть остаток округления) по окончанию обработки. Тут, если речь идет о регистре бухгалтерии, я рекомендую сделать отдельную проводку с пометкой "остатки окгругления". Хорошим бухгалтерам нравиться, проверено.

Что же?
1. Первая проблема решена, что само по себе самое главное в бухгалтерии (ну или кому как, есть варианты, короче).
2. Стратегию окгруления можно ставить, передавая параметр, к сожалению, если округление зависит от получившихся чисел, потоково посчитать не получается (в остальных случаях, ничего сложного нет).
3. Применение стратегии распределения остатков округления становиться легким, поскольку остаток аккамулируются в переменной.

Keeks.

PS расчет доли разделен на две строчки для удобства отладки: во второй строчке -- неявное преобразование с возможной потерей данных.
pigmeich: (Default)
http://community.livejournal.com/ru_php/1326378.html

Вкратце:

Как быстрее вырезать два участка из строки: подменив их на пустую строчку или применив sub_str. При условии, что перед этим был вызван preg_match() (в PHP регулярные выражения не прекомпилируются).

Копипаста на всякий случай:
какой вариант быстрее?
Код - пример #1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
function convert_bla_bla($numb)
{
    $numb = (string)$numb;
    $leng = strlen($numb);
    if($leng==9) $numb = '0'.$numb;
    elseif($leng!=10) return 'error: invalid input data.';
    if(preg_match('/[^0-9]/',$numb)) return 'error: invalid input data.';
    $numb[4] = '';
    $numb[6] = '';
    $numb[7] = '';
    $numb = '101'.$numb;
    return $numb;
}
print convert_bla_bla('2709073792');
?>
или
Код - пример #1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
function convert_bla_bla($numb)
{
    $numb = (string)$numb;
    $leng = strlen($numb);
    if($leng==9) $numb = '0'.$numb;
    elseif($leng!=10) return 'error: invalid input data.';
    if(preg_match('/[^0-9]/',$numb)) return 'error: invalid input data.';
    $numb = substr_replace($numb,'',4,1);
    $numb = substr_replace($numb,'',5,2);
    $numb = '101'.$numb;
    return $numb;
}
print convert_bla_bla('2709073792');
?>
pigmeich: (Default)
Часть доменов то ли Винда, то ли шлюз на пути к NSS закешировал, они работают.

Оказалось, что до ЖЖ нужного человека невозможно достучаться, используя IP вместо доменного имени. При запросе на /users/username перекидывает на username.livejournal.com. Которое не работает.

Есть всё-таки недостатки у красивых доменчиков третьего уровня.

Дописывать в host'ы не предлагать — сам знаю.
pigmeich: (Default)
[livejournal.com profile] insooo подбросил задачку:

Один человек загадал два числа от 2 до 100, не равных друг другу. Подошел к другому человеку (С) и сказал ему сумму этих двух чисел. Подошел потом еще к одному человеку (П) и сказал произведение этих же двух чисел. С знает, что П сказали произведение, П знает, что С сказали сумму. Потом эти двое (С и П) встречаются друг с другом и говорят:

С: Я не знаю свои два числа.
П: И я не знаю свои два числа.
С: Тогда я знаю свои два числа.
П: Тогда и я знаю свои два числа.

Найти эти два числа.

Ответ для ленивых

[livejournal.com profile] _winnie, расскажи почему я python не знаю, пожалуйста.
pigmeich: (Default)
... а тут меня еще и на раздумья о диапозонах потянуло.

Какая операция над C-строками одновременно частая и O(N) дорогая?
ответ, код и все, все, все )
pigmeich: (Default)

Для чего нужно программирование в режиме постоянного рефакторинга? Очевидно, не для того чтобы задокументировать код. И не только для того, чтобы улучшать код - это цель ревью и "обычного" рефакторинга. Главную мысль можно выразить в одном предложении: "думайте о проектировании только над готовым кодом".
Read more... )

pigmeich: (Default)
По сети часто путешествуют тексты, определяющие компьютерные интересы человека по стертым клавишам клавиатуры. Например, “w” — означает любителя шутеров, “backspace” — интернет-серфера, ну и так далее.

Про программистов там ничего не говорится. Действительно, можно только сказать, что у программиста, обычно, затерта вся клавиатура. А если на клавиатуре не затерта ни одна клавиша — значит, программист купил новую клавиатуру.

Хотя... вот по клавиатурным сочетаниям кое-что нагадать программисту можно. Итак...
Read more... )
pigmeich: (Default)
Мда, тема преследовала меня уже давно, но сегодня, похоже, дошёл до очередного уровня дзен.

Вы все видели как происходит Это. Каокй-нибудь человек со специальностью программист (обычно студент) нажимает два заветных сочетания клавиш ctrl+C и ctrl+V. Наука ещё не выснила, что он при этом испытывает, но ему хочется нажимать эти комбинации снова и снова. Снова и снова.

...Встретился со старым знакомым. Он перешёл на 4-ый курс программисткого факультета престижного ВУЗа нашей страны. Вдруг разговор зашёл о стиле. Я произнёс дежурную фразу: "стиль не в конкретных правилах для себя, а в том что ты можешь под чужие правила подстроиться и писать удобочитаемый код", ну и отметил, что копи-пастить код, вообще-то, нельзя. В ответ мне сказали, что я - дурак, а без копипаста невозможно писать курсовые.
Вот я сейчас думаю: а ведь без копипаста, действительно, курсовые писать невозможно. Им...
Read more... )

Profile

pigmeich: (Default)
pigmeich

June 2017

S M T W T F S
    1 23
4 5678910
11121314151617
18192021222324
252627282930 

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 28th, 2017 06:59 pm
Powered by Dreamwidth Studios