Истории с тегом: программизмы

Всего историй: 900

8314

За мухой с гранатомётом

— Мне срочно нужен молоток забить гвоздь в стену.

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

Программисты-перфекционисты, охотящиеся за мухой с гранатомётом, узнали себя? Если мне нужно написать небольшой скрипт или quick&dirty-программу для мелкой локальной задачи в кратчайшие сроки, то не надо мне предлагать вместо велосипеда создавать вездеход-везделёт-вездеплав, у которого есть режим работы «велосипед». Во-первых, у меня на это нет времени (дедлайн на носу), во-вторых, мне не нужна универсальность и гибкость для программы-однодневки.

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

Закончу, пожалуй, цитатой из Антуана де Сент-Экзюпери: «Идеал — это не когда нечего добавить, а когда нечего убрать». Отечественный вариант: «Отличное — враг хорошего».

8308

Большими надеждами и малой кровью

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

Трудятся лучшие умы над правильной базой месяц, второй; начальство всё негодует, что же так долго. И вот настаёт светлый день презентации руководству отдела этого чуда рукотворного. Через проектор на лист А1 (экран у нас, увы, появился чуть позже) выводят красивую схему объектно-ориентированной базы, в которую при желании можно запихать что угодно. Далее — минут на сорок рассказов с горящими глазами, что, для чего и почему, собственно, так долго. Начальство смотрит, слушает и выдаёт замечательную фразу, над которой мы потом несколько дней посмеивались: «А зачем вам эти кучи таблиц и связей? Хватило бы двух таблиц. В первой — ФИО и телефон, а во второй — отдел/бюро/группа. А вы тут накрутили». Посмеялись и забыли.

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

Надоело админу, и создал он две таблички: в первой — ФИО и телефон, а во второй — отдел/бюро/группа. Связал их по кодам, загрузил данные и велел пользоваться. И вот не знаем теперь: то ли начальство было право, что хватит двух табличек (а их с трудом, но хватает), то ли неправо, что такую разработку нескольких бюро так просто из-за своего непонимания и незнания загубило.

8299

Хоп-бот, или Туда = обратно

Писал я как-то для мобилок deathmatch в 2D. Однажды замечаю: у ботов фраги идут в минус. Сила оружия такова, что убиться, в принципе, можно, но крайне трудно. В чём дело? Отключаю технический интеллект, чтобы больше не стреляли, и наблюдаю. Бот перепрыгивает через яму, затем разворачивается и падает в неё с понятным результатом.

Наставил кучу операторов вывода и в конце концов понял. Когда я ввёл новый тип узла — «перепрыгнуть через яму», — в экспортёре спутал лево и право. Бот бежит вправо, нарывается на узел, подпрыгивает, оказывается на противоположной стороне, а там «вправо» — это влево. То есть в яму.

8293

Who watches the watchmen?

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

Решение было однозначным. Я поставил второй таймер, который проверяет, работает ли первый.

8289

Не время для ромбов

Военный институт. Одногруппник сдает зачёт по архитектуре ЭВМ. Задание: написать программу для вывода текущего времени на ассемблере. В распоряжении есть только откомпилированная программа, которая сначала показывает ромб, а дальше уже время. Одногруппник, недолго думая, переименовывает romb.exe в time.exe, запускает — о чудо, ромб больше не показывается, выводится только время!

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

Не знал друг, что в консоли винды есть команда time, которая выводит текущее время. Как, ну вот как он так угадал название? Вот так закаляется военный софт.

8274

Одичалый указатель лицо ладонь

Учу С++. Завис на указателях, полез в Гугл. Наткнулся на один хелп по ним. Выдержки из статьи:

Например. блок [3] будет синонимно с * (array+3), намеревающся * (0x1000 + 3*sizeof (внутренне)), который говорит «dereference значение хранило на 0x100C, in this case 0x0001».

Это объявляет деньг как указатель к интежеру. В виду того что не гарантированы, что будет содержание памяти любого специфически значения в c, необходимо позаботиться для того чтобы обеспечить что адрес то деньг пункты к действительны. This is why предложены, что выступает указатель с иничиативой к NULL.

Напечатанные на машинке указатели и отливка

В много языков, указатели имеют дополнительное ограничение которому предмет, котор они указывают к имеет специфический тип. Например, указатель может быть объявлены, что указал к интежер; язык после этого попытает предотвратить программник от указывать он к предметами не будут интежеры, such as floating-point номера, исключающ некоторые ошибки.

Делающ указатели безопасно

Указатель не имеет NIKAKой адрес заданный к ему вызван a одичалый указатель. Любая попытка использовать такие uninitialized указатели может причинить непредвиденное поведение, то потому что первоначально значением не будет действительный адрес, или потому что использование его может повредить систему продолжитеную по времени и другие unrelated части программы.

Долго ржал. Даже Промт, земля ему пухом, на такое не был способен.

8267

Пишу код за сладости

Счастье привалило: посылают меня на неделю в офис крупнейшей американской компании, производящей шоколад и прочие сладости, дабы помочь им наш продукт установить, небольшой проектик написать и посмотреть, нельзя ли им ещё чего-нибудь продать. Домой пришёл, рассказал. Дочь подошла, в глаза заглянула и вкрадчиво так говорит:

— Папа, а научи меня делать то, что ты на работе делаешь! Я с тобой поеду!

Жалко было ребёнка разочаровывать, но пришлось рассказать суровую правду: не день и не два учиться придётся… А шоколадку я ей и так купить могу.

8266

Невнятный код с умным лицом

Работаю над новым проектом: решил посмотреть, что такое браузерный WPF. Создал проект из двух страниц: логин с настройками и основная. Набросал пару менюшек. Понимаю: переделывать буду раза три, потому что WPF — это нечто. Cоздаю папку kuski nevnyatnogo koda, сохраняю туда проект.

Запускаю. Страница логина отрабатывает, настройки работают, всё окей. Нажимаю «Войти» — и всё рушится с ошибкой: «Не найдена страница». «Как это не найдена?» — спрашиваю я у Студии. На проект посмотри, она там лежит! Перезапускаю — не найдена. Переименовываю — не найдена…

И только когда я создал новый проект в папке razrabotka и копипастом перенёс туда исходники, всё запустилось и заработало сразу и без багов. Любите свой труд.

8262

На полпути выделялка сломалась

Найдено в коммерческом коде. Пишет бывший московский студент. Ну что, не только индусы получают деньги за объём программного кода.

if (isSelected) {

component.setBackground(Color.BLUE);

} else if (!isSelected) {

component.setBackground(Color.WHITE);

} else {

throw new IllegalStateException(

"Table row should be either selected, or not"

);

}

8259

Код из прошлой жизни

Работал над утилитой в популярной в прошлом среде разработки. Сама утилита состоит из откомпилированного файла и файлов формы, которые можно править, не закрывая программу. Собственно, в форму я и засунул большинство логики.

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

Всё стало ясно, когда я посмотрел бэкап утилиты. Всё правильно, в текущем варианте кода не было. Всё дело в том, что создавались временные таблицы для списка значений, а так как сама программа не перезапускалась, объекты остались. К ним программа и обращалась.

Вывод первый: созданные динамические объекты нужно уничтожать. Вывод второй: чудес не бывает.