Все потоки
Поиск
Написать публикацию
Обновить
0.3

Говнокод

Код, за который должно быть стыдно

Сначала показывать
Порог рейтинга
Уровень сложности

[Неочевидные алгоритмы очевидных вещей] Алгоритм 1. Корень квадратный

Время на прочтение1 мин
Количество просмотров30K
Серия постов [Неочевидные алгоритмы очевидных вещей] будет содержать алгоритмы действий, которые кажутся очевидными и простыми, но если задать себе вопрос «как это делается?», то ответ является далеко не очевидным. Разумеется, все эти алгоритмы можно найти в литературе. Под катом располагается алгоритм вычисления корня квадратного числа X.

Читать дальше →

Прямые в гексагональном растре

Время на прочтение4 мин
Количество просмотров11K
Данное исследование не претендует на оригинальность, я полагаю, что на самом деле изобретаю велосипед, но никаких деталей от него при (признаю, довольно поверхностном) изучении интернета мне найти не удалось.

Понаблюдав за разнообразными игрушками, передвижение персонажей в которых производится на плоскости, вымощенной правильными шестиугольниками, меня зацепил вопрос — а как должна выглядеть прямая на такой плоскости. Собственно, задача оптимального перемещения персонажа из шестиугольника A в шестиугольник B (подразумеваю, что на плоскости нет препятствий, под оптимальным перемещением подразумеваю такое, чтобы оно происходило через наименьшее количество шестиугольников) может быть решена кучей разных способов, маршрут далеко не единственен, так же, как, впрочем, и на плоскости, покрытой квадратами. Но мне хотелось бы, чтобы маршрут был приближен к отрезку прямой, как приближено к отрезку прямой изображение, построенное по алгоритму Брезенхэма, и в то же время реализация должна быть достаточно прозрачной и простой.
Читать дальше →

Скрипт проверки наличия свободных дат в посольстве

Время на прочтение7 мин
Количество просмотров77K
Предисловие:

В Беларуси стоит острая проблема с получением виз в Еврозону (т.е. Шенген). Все из-за того, что Польское посольство предоставляет так называемые мульти-визы за покупками (т.е. многократные). Регистрация производится на сайте посольства онлайн. Но вся проблема состоит в том, что свободных дат не словить. Единственный вариант — круглосуточно чекать страницу, и если появится дата — быстро «ловить» ее и заканчивать регистрацию. Т.к. свободного времени для круглосуточного чека нет, было принято решение об автоматизации данного процесса.
Сразу оговорюсь, что существуют различные скрипты, которые вылавливают свободные даты и за которые люди получают деньги. Мой скрипт не претендует на их место по быстроте, качеству и т.д. Данный скрипт был сделан только для себя, никакой коммерческой и иной выгоды я не преследовал.
Читать дальше →

И снова сертификат Mail.ru

Время на прочтение1 мин
Количество просмотров60K
Напоминаю, начало истории тут.

На этой странице был обнаружен фишинговый баннер flash-плеера:
oracle-fl-player.com/update2.php (уже заблокирована, зеркало для файла)

Прошло уже три месяца, но ничего не изменилось. Файл подписан сертификатом LLC Mail.Ru. Если у них была утечка — они до сих пор его не отозвали, если утечки не было — какого черта?
Читать дальше →

Что-то посложнее факториала

Время на прочтение14 мин
Количество просмотров28K
Давным-давно, когда трава была зеленее, а деревья выше, жил-был тролль, по имени Xenocephal. Жил он, в принципе, во многих местах, но мне повезло встретить его на одном форуме, где я, в то время, набирался ума-разума. Я уже не вспомню топика, в котором протекала беседа, но суть ее сводилась к тому, что Xenocephal пытался убедить всех окружающих, что Lisp (с его макросами) — всему голова, а C++, с его шаблонами, жалкое подобие левой руки. Также утверждалось, что наметапрограммировать в нем что-то сложнее набившего оскомину факториала не представляется возможным.
Читать дальше →

Квадратное уравнение? Да раз плюнуть!

Время на прочтение4 мин
Количество просмотров83K
Бытует мнение, что только 10% программистов способны написать двоичный поиск. Это мнение мы испытывать не будем, но что насчёт квадратного уравнения?

Поставим задачу конкретнее: решение квадратного уравнения вида ax2+bx+c=0 с целочисленными коэффициентами. На вход подаются три целых числа в рамках int (коэффициенты a, b и c). Программа должна всегда выдавать результат.
Казалось бы, плёвое дело: пять минут и готово! И вот спустя те самые пять минут имеем на выходе следующий код:
Читать дальше →

Читаем с экрана красиво

Время на прочтение6 мин
Количество просмотров18K


Лирика


Желаю доброго дня уважаемому Хабра-сообществу.

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

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

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

SSH и FTP через Dropbox

Время на прочтение2 мин
Количество просмотров15K
Всем доброго хабрадня!

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

Внимание! Всё нижеописанное не является руководством к действию и воспринимать это стоит не иначе как юмор. А то больно всерьёз все восприняли… =)

Для начала немного предыстории. Недавно возникла очень острая необходимость в ssh доступе на некоторый unix-based компьютер, дабы выполнить там svn diff > mypatch.diff и перекинуть результат по ftp. Но оказалось, что целевая машина по некоторым причинам не хочет пинговаться! Причём, по словам админов, и не предвидится пинг к ней, хотя выход в интернет она имеет. И я решил, что неплохо бы пробросить ssh через что-то стороннее. В голову сразу начали лезть VPN, reverse ssh, туннели и прочее. Но для большинства решений нужна дополнительная машина и/или дополнительный софт, либо это требует перенастройки самой сети (что для меня совсем не вариант — сеть-то не моя). Я уже готов был отчаяться и гуглить упорнее, но тут в мою не совсем здоровую голову пришла мысль: а что если заюзать дропбокс?
И вот что получилось...

Цзяньшицзы и tcl

Время на прочтение4 мин
Количество просмотров5.2K
Есть такой редкий малоизвестный язык программирования tcl. В википедии он расписан хорошо, но при написании программы возникнут вопросы.
Цзяньшицзы — это такая китайская(судя по названию) игра, переводится как «выбирание камней», интересна сама по себе: есть две кучки камней с любым количеством камней, играют двое. Каждый игрок может взять любое число камней из любой кучи, а также равное количество сразу из обоих. Побеждает тот, кто возьмет последний камень. Более подробное описание тут. Игра на сохранение баланса: с одной стороны, нужно чтобы числа в кучах различались, с другой, чтобы различие было не слишком большим. Начнем с того, что игра имеет выигрышную стратегию, происхождение которой мы рассматривать не будем. Возьмем лишь краткое описание. Существуют сочетания размеров куч, при которых игрок, который будет делать следующий ход, проигрывает.




Квадратные скобки обозначают взятие целой части. Нет, первая формула — это не числа Фибоначчи, хотя коэффициент тот же, но тут арифметическая прогрессия, а не геометрическая. Сразу заметим, что разница между числами пары составляет n.

Ранее на хабре были Реверси на TCL в 64 строки и Пятнашки на TCL в 10 строк, в которых был компактный и красивый код, здесь вы такого не увидите. Также он, возможно, далек от правил хорошего тона. Вобщем, если вам что-то покажется говнокодом, скорее всего так оно и есть. С другой стороны, это даже хорошо, потому что будет что улучшать в дальнейшем. Отчасти из-за того, что язык для меня новый, отчасти чтобы было удобнее делать пояснения. Также отсутствуют необязательные проверки.
Далее будут идти куски программы. Она далеко не оптимальна, но показывает особенности языка и работает.
Читать дальше →

Лучший неудобочитаемый код

Время на прочтение2 мин
Количество просмотров9.3K
Все мы привыкли иногда/много писать плохой, часто — неудобочитаемый код, в результате получая недовольные лица коллег. Но если мы уж очень любим писать неудобочитаемый код, то постараемся быть лучшими. И так, лучшие неудобо-кодеры 2011.

Победитель конкурса

#include <iostream>

class ___000___
{
public:
  ___000___(int _) { m_____ = _; }
  ~___000___() {}

  void _1_2_3_4_5_() { std::cout << m_____; }
  int ____2_2___() { return m_____ * m_____; }
private:
  int m_____;
};
Читать дальше →

Статика в языке программирования: что кроме типов?

Время на прочтение5 мин
Количество просмотров3.6K
Известно, что языки программирования бывают статические и динамические. В статических языках типы всех значений известны в момент компиляции. В результате компилятор может проверить, правильно ли используется значение, применима ли к нему та или иная операция. Узнавать об ошибке в момент компиляции приятнее, чем во время исполнения — меньше ошибок выйдет при тестировании и дойдет до пользователя. За это ошибок и ценят статические языки.

Но почему дело ограничивается только типами данных? Попробуем немного по-фантазировать, что еще мог бы делать компилятор.
Читать дальше →

GeoIP, попытки нетрадиционного использования

Время на прочтение5 мин
Количество просмотров14K
Делать было вечером, делать было нечего...

Предыстория


В один прекрасный момент, случайно наткнулся на старый сервис, который позволяет вешать картинку на свой сайт, которая показывает географическое положение посетителей. Их много и разных.
Вещь сама по себе не такая уж полезная, мне как то данные awstats'а хватает за глаза.
Но для демонстрации посетителю, что он не случайный идиот прохожий забредший на мертвый сайт это дело подходит.
Дальше как и полагается раскинул мозгами на тему, а как же они это делают, разобрался и вроде успокоился…

Но больная голова покоя рукам не дает, так что сейчас я вам покажу один забавный и не несущий смысловую нагрузку эксперимент.
image
Это выборка всех возможных координат IP-шников (с округленные до целых).
Можно сказать, что это фотография интернета ареал обитания TCP/IP

Внимание, автор не является кодером в хорошем смысле этого слова, поэтому лиц, которых может шокировать копрокод прошу удалиться.
Читать дальше →

Говнокод: врага надо знать в лицо

Время на прочтение4 мин
Количество просмотров57K


Все примерно представляют, что такое говнокод. На этом замечательном сайте собрана целая коллекция.

Что делает код говнокодом — никто точно не знает. Точного определения нет. Часто то, что одни считают очевидным говнокодом, другим кажется лаконичным и эффективным решением.

Примеры


Примеры говнокода варьируются от избыточных до откровенного хардкода. Самые любмые примеры — такие, говнокодистость которых очевидна для всех:
Boolean b = new Boolean( is_admin );
if( b.toString().length() == 4 ) {
   // something...
}
// something


Но знаете, что я скажу? Осуждать говнокод легко, но написать его не так-то легко!
Не верите? Давайте попробуем!

UPD Ниже добавлен анализ поступивших решений.

Вот простое задание

Ближайшие события

Система частиц на PHP в 3D

Время на прочтение5 мин
Количество просмотров5.1K
С детства есть у меня заветная программерская мечта — написать физический движок. Как и положено мечте, я к ней никогда близко не подходил. Но однажды выдалась пара ночей, когда я должен был дежурить в помещении, и у меня с собой был ноутбук.
В общем, взялся я моделировать движение и столкновение частиц на PHP. Почему на PHP? Потому что это единственный язык, на котором я могу свободно излагать свои программерские мысли. В общем, сначала координаты выводились в консоли, потом стал делать графические снимки. Немедленно появилась мысль генерировать анимацию…
image

Погуглив, я...

По колено в г… коде

Время на прочтение2 мин
Количество просмотров10K
по колено в Си++
Я по роду своей деятельности много и часто медитирую над разнообразнейшим C++ кодом. И, как говорится, у меня накопилось. Не могу больше нести это в себе. Извините, сейчас и с вами поделюсь.

Читать дальше →

Assword

Время на прочтение1 мин
Количество просмотров1.8K
Один из самых восхитительных примеров кода, который я когда-либо встречал.
Как сказано в комментарии, этот код пытается найти в строке подстроку «Nothing», «Successful», «Password» или «Failed», причём регистр первой буквы неважен.

protected void parseSummaryLines()
{
   ...

   // NOTE: First letters are ommited in order to
   // support capitalized words as well
   String RESULT_GOOD_TEXT_1 = "othing"; // Nothing
   String RESULT_GOOD_TEXT_2 = "uccessful"; // Successful
   String RESULT_BAD_TEXT_1 = "assword"; // Password
   String RESULT_BAD_TEXT_2 = "failed"; // Failed

   ...
}


Можно относиться к нему по-разному. С одной стороны, можно усмотреть в этом говнокод. С другой стороны, это простое и лаконичное решение, которое вполне справляется с поставленной задачей.

Но в любом случае, получившееся в результате «Жопослово» — это шедевр…

Установка лимита времени выполнения скрипта

Время на прочтение1 мин
Количество просмотров2K
//This is an optimization. We assume than no step can take more than one year.
if($time_limit > 0)
$end_time = time() + $time_limit;
else
$end_time = time() + 365*24*3600; // One year


Взято из 1С-Битрикс (из класса разбора CommerceML).

Феерические архитектурные подходы или Javascript наше всё

Время на прочтение4 мин
Количество просмотров1.7K
Моё кунфу сильнее, сказал Вася и продолжил дописывать замечательный сайт.
Раскрыть тайный смысл сайтостроения

Обнови свой браузер!

Время на прочтение1 мин
Количество просмотров867
Решил поинтересоваться у Яндекса как определить браузер посетителя (на PHP).
Вторая ссылка привела на «замечательный» пример скрипта.

<?
//Для начала назначаем переменные

.if(eregi("opera",$HTTP_USER_AGENT))// Если у тебя Опера, то переменная $browse = OP
$browser = "OP";

else if(eregi("msie",$HTTP_USER_AGENT))// Если у тебя MSIE, то переменная $browse = IE
$browser = "IE";

else if(eregi("Mozilla.[4.]",$HTTP_USER_AGENT))
$browser = "NS";

else if(eregi("Mozilla.[5|6]",$HTTP_USER_AGENT))
$browser = "MO";
else // если что-то другое , то OT
$browser = "OT";
?>
//Все . Закончили с определением. Мы уже знаем какой у тебя браузер. Теперь выведеминфу о тебе.

<? if ($browser=="IE") {
echo "Internet Explorer";//Если ie, то пишет Internet Explorer
}
if ($browser=="OP") {
echo "Opera!
Обнови свой броузер и перестань морочить голову дизайнерам всякой межбраузерностью!
";
}
if ($browser=="NS") {
echo "Netscape!
Обнови свой броузер и перестань морочить голову дизайнерам всякой межбраузерностью!
";
}
if ($browser=="MO") {
echo "Mozilla! Обнови свой броузер и перестань морочить голову дизайнерам всякой межбраузерностью!";
}
if ($browser=="OT") {
echo "А что у вас за Browser?";//если OT то пишет ...
}
?>


Обнови свой броузер!

источник

Дыры в форуме NetCat

Время на прочтение1 мин
Количество просмотров2.8K
Вы наверное уже слышали о CMS Netcat и даже видели кое-какие примеры кода этой CMS.

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

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

Вот я и решил поделиться этим багом.

1) Заходим в любую ветку форума, пусть для определенности будет эта.
1,5) Если вы залогинены, нужно выйти
2) Нажимаем Ответ
3) Вводим в поле «Имя пользователя» число.

Все!

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

Можно представить, какой бардак творится в коде у системы.

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