bash.im ithappens.me zadolba.li

Программизмы

11682

Родина ждёт программеров

Пошёл в военкомат. Косил полтора года. Учусь на дневном, но ввиду определённых причин отсрочки не было. Всё шло на удивление ровно. Майор спросил: «Зачем ты пришёл?» Врачи особо не трогали, всё было ОК.

Последним врачом шёл психиатр. Тут-то и началось веселье. Захожу, вижу тётку немногим за 50 достаточно уставшего вида. Удивилась, что я не на заочном, что нет отсрочки, и спросила, где работаю.

— Программистом.

— А ты фронтендом или бекендом занимаешься?

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

Чаще ходите в военкомат. Родина ждёт программеров!

11670

Двум брейкам не бывать, а одного не миновать

Читаю код, а там:

while (1) {
    do {
        // сам код
    } while (1);
}

Это, я так понял, как два презерватива перед половым актом натянуть на случай, если случится неожиданный break.

11657

Кто барашек? Я барашек?

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

Ноут у меня новый, а Delphi я на родине поставить не успел (ну, нету у меня времени переучиваться на C++: другой профиль работ, свободного времени на халтурки хватает, а на освоение — уже не очень). Из рассказов местных я понял, что при малейшей активности торрентов по адресу подключения может приехать пативэн, а дальше разбираться будет уже Министерство Правды (на местном славянском — вот прям так). Ставлю Lazarus, с бубном прикручиваю к нему библиотеки для FTP и ZIP. Оттестировав упаковку, решаю сразу же упаковать с реальным паролем, ибо скоро обещали подавать свежезапечённого барана, зарезанного с утра. Тестовую базу взял на внешнем диске как раз на случай наличия времени. Когда спаковался первый файл, решил его проверить. А вот хрен: тестовый пароль подходит, серьёзный — уже нет. Думать, что за срање, решаю уже после ягнёнка.

Подкрепившись всеми местными специалитетами и вымыв ракией из организма московский воздух, утром, выспавшись, начал ковырять код. Программа получилась умная, умела заполнять поля из INI-файла и сбрасывать новые значения туда же. Только через два часа обращаю внимание на поле ввода пароля под названием txtFilePass. Па јеби га коњем! Хоть и грубо это даже там, но в разговоре допустимо. А прикол был в том, что на этапе проектирования формы я назвал поля логина и пароля от FTP, как привык: txtLogin и txtPass, потом прикрутил автозаполнение и проверил работоспособность, вбив один и тот же тестовый пароль к тогда же установленному серверу FileZilla, а код писал после перерыва и на автопилоте пароль для архивации брал из поля с именем, которое вспомнилось в первую очередь.

11653

Бабы — дуры; царь — зараза

Три девицы под виндой
Кодят сайтик непростой.

«Кабы я была здесь лид,
Я б использовала grid!» —
Говорит одна девица,
Блочной вёрстки мастерица.

«Нам grid’ы помогут мало,
PHP настрой сначала!» —
Говорит иная дева,
Что с дипломами WebDev’а.

«Погодите, вашу мать!
Сервер надобно поднять!» —
Третья дама кипятится,
Чтоб к админу обратиться.

Тут звонит по скайпу царь,
Той конторы государь:
«Где от вас какой-то толк?
Нанял я индусов полк!
Сайт напишут за неделю,
Ну, а вы мне надоели!»

Девы гневно возопили,
Код повсюду удалили
И на форумах всех стран
Разнесли, что царь — тиран…

Нет морали тут ни разу:
Бабы — дуры, царь — зараза.

11651

Тёплая струйка кода

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

ПАРНИ, ПРОГРАММА ПОЛНОСТЬЮ РАБОЧАЯ! КОГДА Я ЕЁ ПИСАЛ, ТО ДЕЛАЛ ПОД СЕБЯ!

Прямо так, капсом. Комментарии:

— Когда делал под себя, штаны снимал хоть? Откровенный ты наш!

— Он в памперсах кодит! Гы.

— Ребзя, не ржите, это от он радости.

Пока я угорала со смеху, автор увидел свой ляп и подредактировал, оставив только первое предложение. А комменты с подколами потёр второй модер.

11644

Не кусаются, пока не рубанёшь инет

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

— Вы не пугайтесь, у нас тут техотдел!

11632

Все точки под ковёр

А вот вам очередной технобаян о том, как Этот® Народ™ Не Победить. Даже ту его часть, что давно уже сдала свой старенький использованный трактор на донейшенс для такс-ката, потому что моргидж и старшего надо в каледж.

Как-то так исторически сложилось, что девелопмент (Шишков, прости…) в нашей шараге как-то чуть более чем полностью состоит из русских и индусов. Да так, что и китайцев-то на нашем фоне мелко видно, а бедные америкосы и вовсе в меньшинстве. И насмотрелся я кода не только знаменитого индусского (наши рабиндранат-тагоры пишут довольно грамотно, но всё равно стиль узнаваемый), но и Могучего Русского Кода. Осмысленность варьируется, но беспощадность местами зашкаливает.

Пишем C/C++ код, который одновременно должен работать и на юниксах, и на виндюках. Потому есть специальные люди, что пишут обёртки для платформозависимых API, чтобы у народа код не состоял из сплошных #ifdef __WIN32. Вот, допустим, bool acmeMkDir(char* dir), который понятно чего делает: пытается создать фолдер, используя родные для платформы API. И возвращает понятно что.

И вот картина салом. Приходит мне баг. Который — долго объяснять как, но упирается в этот самый acmeMkDir(), которому на вход подают «foo.» или «bar ». Юниксу-то что, ему горшком назови, только эскейпы расставь. А на виндузе он, собака такая, создает «foo» или «bar». И, радостно виляя хвостиком, возвращает true. Зацени, хозяин, какой я умный: «foo.» или «bar » произносить я не умею, но так даже лучше! Правда вот, все последующие попытки читать-писать некий foo./bar.txt заканчиваются неоднозначно.

Ну что — ставлю у себя заплатку (ибо починить надо вчера), отдаю баг Серёге, хозяину acmeMkDir(): мол, почини (возвращай false, ибо имя воистину кривое) и свистни — я заплатку-то и уберу. A он поясняет, что это, зараза, виндузовые API так выёживаются, но починка будет.

Короче, можете сами, если виндуза под рукою, попробовать создать «foo.» или «bar » Эксплорером или mkdir — сами увидите, как какая-то тефаль думает за вас и заботливо убирает хвостовые пробелы и точки. Как же, в MS-DOS есть имя, а есть расширение, и «file» — это на самом деле «file.», только точка мозолит глаза, мы её заметем под ковёр. Пофиг, что лет уж двадцать как MS-DOS мёртв, а я ещё нет^H^H^Hвоз и ныне там.

Вчера, довольный, как слон, молвит Серега: починил! Наплясался с бубном, но заставил-таки эту хню создавать папки «foo.» или «bar ». И наши завёртки типа acmeFileOpen() с ними живут ОК. Правда вот, в Эксплорере в эти папки хрен зайдёшь. Ну, и винзипы-винрары всякие непонятно как это возьмут. Так что сам решай, оставлять ли тебе твою заплатку. Но лучше оставь.

Левша, блин, хренов. Подковал блоху, спору нет.

11591

Долог самурая путь к библиотеке

Ещё одна деталь к японскому менталитету.

Вообще-то я на Джаве не программирую. На С++ больше. Но поскольку на Андроиде пользовательские приблуды пишут на этой самой Джаве, а охренеть какой японской «это ж, блин, %businessName%!» захотелось поиметь нашу библиотеку на своём телефоне, то откомпилил я её, написал JNI-прокладку между С++ и Джавой, приложил пример и выкатил японским друзьям попользоваться.

Через месяц пришёл от японцев вопрос: «А можно ли вашу библиотеку грузить из произвольной папки?» А хрен его знает. Сроду так далеко в Джаву не лазил. Погуглил — и нашёл системную функцию, которая именно этим и занимается — грузит либу по абсолютному пути. Задумался. Мысль о том, что андроидные разработчики из такой серьёзной фирмы не знают Джаву, в голову не пришла. Поэтому вопрос в моей голове трансформировался: «Если мы будем грузить библиотеку из другой папки, не нарвёмся ли мы на грабли, которые вы заботливо для нас разложили?» Таковых граблей не было, и я честно ответил: «Можно, грузите из любой папки, разрешаю». И забыл.

Месяца через два приходит истеричное письмо от японцев. Дескать, мы вас третий месяц просим написать функцию, а вы динамите! Удивился, но решил не связываться, поскольку времени было мало. В результате родился шедевральный код:

void LoadLibraryFromAbsolutePath( String path )
{
  System.load( path );
}

Код был отослан в Японию. Через день пришло письмо с благодарностью. Кроме шуток — абсолютно серьёзная и искренняя благодарность. Если бы у нас в конторе не смогли написать три строчки такого кода и отдали бы на аутсорс, уволили бы весь отдел.

Как можно программировать на Джаве без знания основных функций языка, для меня загадка. Равно как загадкой остаётся, как таких программеров наняли на работу и почему в Японии нет Гугла.

11586

«Пошёл на» на всех языках

Знаете, я сейчас понял, что в школах всё-таки нормально учат программированию. Почему? В начальных и средних классах преподают базовую логику. Вроде бы всё просто, но логика — это очень хитрая школа.

Физика. Не знаю, как у вас, а нас заранее заставляют прописывать все данные, которые могут использоваться в задаче. Ничего не напоминает?

А как насчёт функций в математике? f(x)? Разве в базе это не одно и тоже? Разве, задав вместо x любое число, мы не получим что-нибудь в переменной f?

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

Недавно, к слову, был в одном лагере, и была там у нас робототехника. Как самый интересующийся, был допущен к программированию. И знаете что? RobotC — это тот же самый С, просто ты, как ребёнок, вводишь, как быстро крутится моторчик или под каким углом наклоняется элемент. А в основе та же логика. Робот что-то увидел? Пусть он держится возле предмета на расстоянии пять сантиметров. Вроде бы сложно, но на деле — обычное условие.

К чему я? Сидя сейчас на уроке информатики в своём девятом классе, я повторяю все задачи на Паскале в С++. И мне ещё поражаются, да.