| BZIK.INFO |
|
BZIK.INFO |
|
|
{671} {670} {669} {668} {667} {666} {665} {664} {663} {662} {661} {660} {659} {658} {657} {656} {655} {654} {653} {652} {651} {650} {649} {648} {647} {646} {645} {644} {643} {642} {641} {640} {639} {638} {637} {636} {635} {634} {633} {632} {631} {630} {629} {628} {627} {626} {625} {624} {623} {622} {621} {620} {619} {618} {617} {616} {615} {614} {613} {612} {611} {610} {609} {608} {607} {606} {605} {604} {603} {602} {601} {600} {599} {598} {597} {596} {595} {594} {593} {592} {591} {590} {589} {588} {587} {586} {585} {584} {583} {582} {581} {580} {579} {578} {577} {576} {575} {574} {573} {572} {571} {570} {569} {568} {567} {566} {565} {564} {563} {562} {561} {560} {559} {558} {557} {556} {555} {554} {553} {552} {551} {550} {549} {548} {547} {546} {545} {544} {543} {542} {541} {540} {539} {538} {537} {536} {535} {534} {533} {532} {531} {530} {529} {528} {527} {526} {525} {524} {523} {522} {521} {520} {519} {518} {517} {516} {515} {514} {513} {512} {511} {510} {509} {508} {507} {506} {505} {504} {503} {502} {501} {500} {499} {498} {497} {496} {495} {494} {493} {492} {491} {490} {489} {488} {487} {486} {485} {484} {483} {482} {481} {480} {479} {478} {477} {476} {475} {474} {473} {472} {471} {470} {469} {468} {467} {466} {465} {464} {463} {462} {461} {460} {459} {458} {457} {456} {455} {454} {453} {452} {451} {450} {449} {448} {447} {446} {445} {444} {443} {442} {441} {440} {439} {438} {437} {436} {435} {434} {433} {432} {431} {430} {429} {428} {427} {426} {425} {424} {423} {422} {421} {420} {419} {418} {417} {416} {415} {414} {413} {412} {411} {410} {409} {408} {407} {406} {405} {404} {403} {402} {401} {400} {399} {398} {397} {396} {395} {394} {393} {392} {391} {390} {389} {388} {387} {386} {385} {384} {383} {382} {381} {380} {379} {378} {377} {376} {375} {374} {373} {372} {371} {370} {369} {368} {367} {366} {365} {364} {363} {362} {361} {360} {359} {358} {357} {356} {355} {354} {353} {352} {351} {350} {349} {348} {347} {346} {345} {344} {343} {342} {341} {340} {339} {338} {337} {336} {335} {334} {333} {332} {331} {330} {329} {328} {327} {326} {325} {324} {323} {322} {321} {320} {319} {318} {317} {316} {315} {314} {313} {312} {311} {310} {309} {308} {307} {306} {305} {304} {303} {302} {301} {300} {299} {298} {297} {296} {295} {294} {293} {292} {291} {290} {289} {288} {287} {286} {285} {284} {283} {282} {281} {280} {279} {278} {277} {276} {275} {274} {273} {272} {271} {270} {269} {268} {267} {266} {265} {264} {263} {262} {261} {260} {259} {258} {257} {256} {255} {254} {253} {252} {251} {250} {249} {248} {247} {246} {245} {244} {243} {242} {241} {240} {239} {238} {237} {236} {235} {234} {233} {232} {231} {230} {229} {228} {227} {226} {225} {224} {223} {222} {221} {220} {219} {218} {217} {216} {215} {214} {213} {212} {211} {210} {209} {208} {207} {206} {205} {204} {203} {202} {201} {200} {199} {198} {197} {196} {195} {194} {193} {192} {191} {190} {189} {188} {187} {186} {185} {184} {183} {182} {181} {180} {179} {178} {177} {176} {175} {174} {173} {172} {171} {170} {169} {168} {167} {166} {165} {164} {163} {162} {161} {160} {159} {158} {157} {156} {155} {154} {153} {152} {151} {150} {149} {148} {147} {146} {145} {144} {143} {142} {141} {140} {139} {138} {137} {136} {135} {134} {133} {132} {131} {130} {129} {128} {127} {126} {125} {124} {123} {122} {121} {120} {119} {118} {117} {116} {115} {114} {113} {112} {111} {110} {109} {108} {107} {106} {105} {104} {103} {102} {101} {100} {99} {98} {97} {96} {95} {94} {93} {92} {91} {90} {89} {88} {87} {86} {85} {84} {83} {82} {81} {80} {79} {78} {77} {76} {75} {74} {73} {72} {71} {70} {69} {68} {67} {66} {65} {64} {63} {62} {61} {60} {59} {58} {57} {56} {55} {54} {53} {52} {51} {50} {49} {48} {47} {46} {45} {44} {43} {42} {41} {40} {39} {38} {37} {36} {35} {34} {33} {32} {31} {30} {29} {28} {27} {26} {25} {24} {23} {22} {21} {20} {19} {18} {17} {16} {15} {14} {13} {12} {11} {10} {9} {8} {7} {6} {5} {4} {3} {2} {1} Главбух чуть не упала со стула, когда увидела в сделанной мной Еxcel-таблице формулу, описанную функцией в модуле. Формула выглядела так: =НИХ%ЯСЕБЕФОРМУЛА(G17;-1) Несколько несложных правил общения с техподдержкой провайдера: Как только на том конце снимут трубку, сразу, не мешкая, пожалуйтесь, что невозможно дозвониться. Не излагайте суть проблемы — не утруждайте себя. Оператор, конечно, всё видит сам и понимает ваши вполне конкретные «вот тут вот», «у меня», «какая-то ошибка», «пишет чего-то» и прочее. Как? Не понимает? Тогда он некомпетентен. Скажите, что будете жаловаться начальству. Ни в коем случае не называйте имя пользователя. Когда вы заключали договор, вам сказали, что нельзя никому его говорить под страхом смертного дисконнекта. Назвать ФИО того, на кого договор заключён? Вы что? Вы клиент и платите бешеные триста рублей в месяц — техподдержка должна узнавать вас по голосу. И вообще, вчера у вас все работало. Как света нет? Скажите, что будете жаловаться начальству. И пусть оператор не придумывает про какие-то разные фазы в квартире и на техническом этаже. Возмутитесь, что оператор не хочет искать вам настройки почтового клиента, активировать за вас карты оплаты и искать лекарство от порнобаннера. Это его работа! Вообще, вирусы — проблема провайдера, а не ваша. Ваша милая кошечка (собачка, хомячок, страус эму) погрызла провод? Конечно же, эта неисправность должна быть устранена в течение пятнадцати минут после вашего звонка за счёт провайдера? Как? Какие деньги? Нет, вы не согласны. Скажите, что завтра же придете в офис и расторгнете договор, а заодно напишете жалобу. Вы переустановили операционную систему. Не нужно настраивать доступ в интернет самостоятельно — пусть приезжают те, кто в этом разбирается. Опять платить деньги? Завтра же расторгните договор! Этот провайдер только и умеет, что деньги из вас тянуть. Вообще, что это такое: операционная система? Откуда вам знать? Вы ведь не программист. И нет у вас сетевой карточки. У вас кабель сразу вставляется в ту коробку, что под столом. Пусть оператор не морочит вам голову. В любом случае это вина провайдера, а не ваша. Пусть сей же час приезжают и все исправляют, чтобы работало. Ну и что, что сейчас начало второго ночи? Техподдержка же работает! Вот пусть лично этот оператор приезжает и чинит. Напоследок обматерите оператора. У вас был трудный день: вас обругал начальник, обдала грязью машина на пешеходном переходе и достал соседский ребенок, что постоянно орёт за стенкой. Это работа техподдержки — разбираться с вашими проблемами. Ответить-то вам они всё равно не смогут, так что дерзайте. Писали с однокурсниками в качестве дипломной работы «игры для программистов». Основная идея была заимствована из Robocode. Вкратце: игроку необходимо написать класс на языке C++, унаследованный от предоставленного ему класса. Методами этого класса реализовывается логика поведения танка, который ездит по полю брани, подбирает различные бонусы, стреляет в противников, умирает и т. п. У кого больше очков в конце боя, тот и победил. Далее исходники компилируются на стороне сервера, и игрок может сразиться с танками противников. Для удобства клиентская часть позволяла сохранять проведённые бои для последующих повторов. Итак, ночь перед дипломом. Нужно сделать презентацию. Чтобы не быть голословными, решили написать пару ботов и сделать видео с их участием. Один бот должен был просто ездить и собирать бонусы, другой — только стрелять по другим танкам, игнорируя бонусы, третий — ездить полностью рандомно. Написали, запустили. Выяснилось, что правильно ездит только рандомный бот (и то лишь потому, что его трудно проверить). На часах уже пять утра, а ошибку найти не получается. Решили, что глюк у нас где-то в расчётах движения, и оставить следует только «рандомщика», а остальных просто не показывать. Комиссия была в восторге — всем поставили по пятёрке. Только недавно товарищ скинул мне сохранённый бой, где все трое ездят «честно». — Разобрался с физикой? — спрашиваю. — Нет. — Понял, как по существующей физике ездить? — Нет. — А что тогда случилось? Почему они вдруг так хорошо работать стали? — Да у нас угол до цели неправильно считался. Исправил — и сами поехали... Невольно вспоминается шутка о том, что русский программист может написать правильный код даже для в корне неправильного проекта. Ну, коли уж пошли «вредные советы» веб-программистам и дизайнерам, не могу не бросить свои пять копеек. Кнопку отправки формы никогда нельзя делать типа submit, а во всех полях нужно глушить событие onKeyPress, если keyCode==13. Табулятор тоже лучше заглушить. (Любители этого подхода делали, к примеру, сайт Почты России.) Лучше всего, если пользователю после ввода данных нужно будет навести мышку на кнопочку, посмотреть циклическую анимацию и в нужный момент щёлкнуть мышкой. Верх мастерства — если в остальные моменты анимашка делает не form.submit(), а form.reset(). Это отсеет ботов. («Хомяки».) События нажатия стрелок на клавиатуре нужно перехватывать на уровне страницы и полностью менять её содержимое. Проверять в этом случае, не нажат ли Shift (в Опере, к примеру, так осуществляется хождение по ссылкам без мыши), ни в коем случае нельзя. (Яндекс.Почта, Гугл-Картинки.) Нельзя делать отдельную форму для каждого функционального блока на странице. Будет куда лучше сделать одну большую форму с тонной скрытых полей, охватывающую всю страницу, а поля заполнять Яваскриптом по щелчку на ссылке или, что менее приоритетно, кнопке. (Опять Почта России.) При наведении мыши на элемент навигации все остальные элементы должны изменяться, на худой конец меняться местами. Пусть пользователь вспомнит игру «Лабиринт», придумывая безопасный путь мышки до нужной ссылки. (Сайты многих гигантов электроники.) Размещать кнопки управления текстом рядом с полями ввода неинтересно — лучше расположить их поверх, так, чтобы часть вводимого текста была закрыта. (Последний редизайн Гугла.) Системные требования сайта должны выглядеть очень круто: пусть пользователь сначала выбьет из бюджета своего НИИ деньги на последний топовый компьютер вместо печатной машинки с 256 мегабайтами памяти (мы одних скриптов вдвое больше подключим, не говоря уже о картинках), а уж потом зайдёт на три секунды на наш сайт, чтобы получить-таки ссылку на Рапидшару и скачать справочник по радиоэлектронике за 1974 год. Пользовательское соглашение лучше всего поместить в <textarea> — а вдруг пользователь захочет переписать несколько абзацев? (Рамблер несколько лет тому назад.) Вершина мастерства верстальщика — повесить ссылочку на валидатор. Ну а лёгким флиртом может показаться одна-единственная ошибка на странице: XHTML-тег <img> на HTML-странице, соответствующий баннеру «Valid HTML». Новая начальница потребовала перенести серверную из специально оборудованного помещения. Дескать, серверная рядом с кабинетом шефа, шум системы вентиляции раздражает. Старого босса не раздражало, благо он сам электронщик и понимал, что к чему. Новое помещение выделили на противоположной, южной стороне здания. Денег на переоборудование выделили ноль целых хрен десятых, сроки исполнения — позавчера, лейтмотив: «Ну что там делать-то, взяли и перенесли!» То, что старая серверная обита негорючим материалом и толстенными панелями для шумо- и теплоизоляции — это фигня. Перенесли, перекрестились и оставили как есть. Осень, зиму и весну система отстояла неплохо: батарея не давала помещению промёрзнуть, а близость вентшахты обеспечивала циркуляцию воздуха. Но вот вдарило лето всеми 30+ градусами, температура в комнатушке стала расти, близость вентшахты практически никакой роли не играла. Пошли к начальству за деньгами на кондей. Ответ: «Нет денег — кризис». То, что в старой серверной устроили лаунж для избранных — на это внутренние резервы нашлись. Пожали плечами, получили расписку в том, что предупредили о последствиях, и ушли. Частично помог друг из теплосети — сплавил старые изоляционные маты. Но и это не помогло: жара подскочила до 40 градусов (стена-то южная), и начало сыпаться оборудование. После того, как «поплыла» первая стойка, при запахах гари мы стали вырубать оборудование и обследовать его, что называется, «под лупой», не дожидаясь, пока нас не полило из распылителей системы пожаротушения. В пятницу на термометре 42, в помещении чувствуется сильный запах гари и появляется лёгкий дымок. Мы спешно вырубаем оборудование. На шумок к нам заглядывает мимо проходящий электрик: — Мужики, что случилось? — Дым! — Отбой тревоги, там помойку подожгли, весь дым прёт в окна и вентшахту. Как выяснилось чуть позже, наша шефа решила устроить день чистоты и спалить весь мусор. Ковыряю исходник: if (!shift) str+=" B/s"; else if (shift==1) str+=" KB/s"; else if (shift==2) str+=" MB/s"; else if (shift==3) str+=" GB/s"; else if (shift==4) str+=" TB/s"; else str="n/a"; // If this happens, you really have a fast connection Слабый бухгалтерский пол, говорите? Очень слабый, но смертельно сообразительный. Сегодня у нас флешка перестала входить в разъём. Фанатизма в голосе властителя дебета и кредита было много, посему я решила молча разобраться самостоятельно. Прихожу — бухгалтеры расплываются в тролльфейс-улыбке. — Какого? — Ой, я думала, оно мешает входить, вот и... Контактная группа внутри разъёма была выломана, притом удивительно аккуратно: поначалу я даже и не поняла, что меня подсознательно напрягало. Бухгалтеры признались, что очень долго старались, даже пилочкой для ногтей как-то умудрились обработать. Изнутри разъёма, чёрт подери. Как?! Ребёнок подрос, тыкает кнопки на клаве. Есть у меня на ней клавиша выключения — иногда получается неприятно. Решил отключить. Погуглил. Из десяти результатов в девяти предлагают перемапить клавиатуру в регистре; только в одном советуют зайти в Power options > Advanced и выставить реакцию на соответствующую кнопку. Сходятся лишь в одном: виноват Билл Гейтс. Я студент, подрабатываю сейчас у только появившегося провайдера в нашем городе: расшиваем по чердакам 25-парный Ethernet-кабель, укладываем это хозяйство в ящики, — в общем, гордо зовем себя монтёрами. Работаю я в компании моего одногруппника (назовём его Михаилом); с нами по чердакам бродит и наш начальник, он же ведущий инженер и электрик, который подводит питание в ящики. Значит, залезли мы на третий за день чердак, решили перед работой над кабелем перекусить. Миша — человек тёртый, захватил с собой кефир, хлебные палочки и майонез. Во время трапезы замечаем, что чердак давно уже обитаем: на нём куча голубей. Задался Миша целью накормить птичек. Чего он только не пробовал: бросал в голубей куски хлебных палочек, пытался невероятно скрытно подползти к ним и накормить, наконец, захотел просто поймать голубя и силой заставить его покушать. Голуби не поддались на провокации. Миша грустно встал где-то посередине чердака, задумался и изрёк: — Не хотят голуби кушать. Пойду покормлю электрика. Программирую в среде с названием с греческими корнями. Версия среды старенькая — 2002 года, но мне хватает. Нарыл на просторах интернета патч, исправляющий кучу мелких ошибок в среде — крупных тогда старались не делать. Загружаю проект софтинки, которую пишу и сопровождаю. Компилируется, запускается — всё хорошо. Нажимаю кнопку «Выход» — access violation по такому-то адресу. После часового мозгового штурма баг был найден и обезврежен. Программа с ним жила уже почти год, и ошибок не было ни разу. Как там у классиков? «Если в вашей программе не обнаружено ошибок, проверьте компилятор — возможно, ошибка есть в нём». {671} {670} {669} {668} {667} {666} {665} {664} {663} {662} {661} {660} {659} {658} {657} {656} {655} {654} {653} {652} {651} {650} {649} {648} {647} {646} {645} {644} {643} {642} {641} {640} {639} {638} {637} {636} {635} {634} {633} {632} {631} {630} {629} {628} {627} {626} {625} {624} {623} {622} {621} {620} {619} {618} {617} {616} {615} {614} {613} {612} {611} {610} {609} {608} {607} {606} {605} {604} {603} {602} {601} {600} {599} {598} {597} {596} {595} {594} {593} {592} {591} {590} {589} {588} {587} {586} {585} {584} {583} {582} {581} {580} {579} {578} {577} {576} {575} {574} {573} {572} {571} {570} {569} {568} {567} {566} {565} {564} {563} {562} {561} {560} {559} {558} {557} {556} {555} {554} {553} {552} {551} {550} {549} {548} {547} {546} {545} {544} {543} {542} {541} {540} {539} {538} {537} {536} {535} {534} {533} {532} {531} {530} {529} {528} {527} {526} {525} {524} {523} {522} {521} {520} {519} {518} {517} {516} {515} {514} {513} {512} {511} {510} {509} {508} {507} {506} {505} {504} {503} {502} {501} {500} {499} {498} {497} {496} {495} {494} {493} {492} {491} {490} {489} {488} {487} {486} {485} {484} {483} {482} {481} {480} {479} {478} {477} {476} {475} {474} {473} {472} {471} {470} {469} {468} {467} {466} {465} {464} {463} {462} {461} {460} {459} {458} {457} {456} {455} {454} {453} {452} {451} {450} {449} {448} {447} {446} {445} {444} {443} {442} {441} {440} {439} {438} {437} {436} {435} {434} {433} {432} {431} {430} {429} {428} {427} {426} {425} {424} {423} {422} {421} {420} {419} {418} {417} {416} {415} {414} {413} {412} {411} {410} {409} {408} {407} {406} {405} {404} {403} {402} {401} {400} {399} {398} {397} {396} {395} {394} {393} {392} {391} {390} {389} {388} {387} {386} {385} {384} {383} {382} {381} {380} {379} {378} {377} {376} {375} {374} {373} {372} {371} {370} {369} {368} {367} {366} {365} {364} {363} {362} {361} {360} {359} {358} {357} {356} {355} {354} {353} {352} {351} {350} {349} {348} {347} {346} {345} {344} {343} {342} {341} {340} {339} {338} {337} {336} {335} {334} {333} {332} {331} {330} {329} {328} {327} {326} {325} {324} {323} {322} {321} {320} {319} {318} {317} {316} {315} {314} {313} {312} {311} {310} {309} {308} {307} {306} {305} {304} {303} {302} {301} {300} {299} {298} {297} {296} {295} {294} {293} {292} {291} {290} {289} {288} {287} {286} {285} {284} {283} {282} {281} {280} {279} {278} {277} {276} {275} {274} {273} {272} {271} {270} {269} {268} {267} {266} {265} {264} {263} {262} {261} {260} {259} {258} {257} {256} {255} {254} {253} {252} {251} {250} {249} {248} {247} {246} {245} {244} {243} {242} {241} {240} {239} {238} {237} {236} {235} {234} {233} {232} {231} {230} {229} {228} {227} {226} {225} {224} {223} {222} {221} {220} {219} {218} {217} {216} {215} {214} {213} {212} {211} {210} {209} {208} {207} {206} {205} {204} {203} {202} {201} {200} {199} {198} {197} {196} {195} {194} {193} {192} {191} {190} {189} {188} {187} {186} {185} {184} {183} {182} {181} {180} {179} {178} {177} {176} {175} {174} {173} {172} {171} {170} {169} {168} {167} {166} {165} {164} {163} {162} {161} {160} {159} {158} {157} {156} {155} {154} {153} {152} {151} {150} {149} {148} {147} {146} {145} {144} {143} {142} {141} {140} {139} {138} {137} {136} {135} {134} {133} {132} {131} {130} {129} {128} {127} {126} {125} {124} {123} {122} {121} {120} {119} {118} {117} {116} {115} {114} {113} {112} {111} {110} {109} {108} {107} {106} {105} {104} {103} {102} {101} {100} {99} {98} {97} {96} {95} {94} {93} {92} {91} {90} {89} {88} {87} {86} {85} {84} {83} {82} {81} {80} {79} {78} {77} {76} {75} {74} {73} {72} {71} {70} {69} {68} {67} {66} {65} {64} {63} {62} {61} {60} {59} {58} {57} {56} {55} {54} {53} {52} {51} {50} {49} {48} {47} {46} {45} {44} {43} {42} {41} {40} {39} {38} {37} {36} {35} {34} {33} {32} {31} {30} {29} {28} {27} {26} {25} {24} {23} {22} {21} {20} {19} {18} {17} {16} {15} {14} {13} {12} {11} {10} {9} {8} {7} {6} {5} {4} {3} {2} {1} |
|
| BZIK.INFO |
|
BZIK.INFO |