Как стать автором
Обновить
1.1

Кодобред

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

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

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

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

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

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

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


Лирика


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

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

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

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

SSH и FTP через Dropbox

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

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

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

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

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

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




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

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

Истории

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

Время на прочтение2 мин
Количество просмотров9.2K
Все мы привыкли иногда/много писать плохой, часто — неудобочитаемый код, в результате получая недовольные лица коллег. Но если мы уж очень любим писать неудобочитаемый код, то постараемся быть лучшими. И так, лучшие неудобо-кодеры 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_____;
};
Читать дальше →
Всего голосов 110: ↑70 и ↓40+30
Комментарии63

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

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

Но почему дело ограничивается только типами данных? Попробуем немного по-фантазировать, что еще мог бы делать компилятор.
Читать дальше →
Всего голосов 12: ↑5 и ↓7-2
Комментарии8

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

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

Предыстория


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

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

Внимание, автор не является кодером в хорошем смысле этого слова, поэтому лиц, которых может шокировать копрокод прошу удалиться.
Читать дальше →
Всего голосов 94: ↑89 и ↓5+84
Комментарии45

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

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


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

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

Примеры


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


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

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

Вот простое задание
Всего голосов 93: ↑73 и ↓20+53
Комментарии290

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

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

Погуглив, я...
Всего голосов 128: ↑107 и ↓21+86
Комментарии83

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

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

Читать дальше →
Всего голосов 183: ↑131 и ↓52+79
Комментарии165

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

   ...
}


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

Но в любом случае, получившееся в результате «Жопослово» — это шедевр…
Всего голосов 38: ↑21 и ↓17+4
Комментарии22

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

Время на прочтение1 мин
Количество просмотров1.9K
//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).
Всего голосов 129: ↑104 и ↓25+79
Комментарии53

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

Время на прочтение4 мин
Количество просмотров1.7K
Моё кунфу сильнее, сказал Вася и продолжил дописывать замечательный сайт.
Раскрыть тайный смысл сайтостроения
Всего голосов 94: ↑75 и ↓19+56
Комментарии77

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

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
28 сентября – 5 октября
О! Хакатон
Онлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн
10 – 11 октября
HR IT & Team Lead конференция «Битва за IT-таланты»
МоскваОнлайн
25 октября
Конференция по росту продуктов EGC’24
МоскваОнлайн
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн

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

Время на прочтение1 мин
Количество просмотров838
Решил поинтересоваться у Яндекса как определить браузер посетителя (на 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 то пишет ...
}
?>


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

источник
Всего голосов 66: ↑25 и ↓41-16
Комментарии13

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

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

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

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

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

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

Все!

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

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

UPD. Сейчас форум на сайте компании закрыли. Если в ближайшее время появится патч, можно считать что я добился того, что хотел, публикуя эту статью.
Всего голосов 125: ↑110 и ↓15+95
Комментарии203

Правильное сглаживание шрифтов в ACID3

Время на прочтение1 мин
Количество просмотров817
Не знаю, может кто уже видел, но меня очень удивило:

Make the Ahem font antialias correctly on Acid3

String nameStr(fullName.get());
m_allowFontSmoothing = (nameStr != "Ahem");


Не ожидал такого от WebKit =(
Ссылка на commit
Всего голосов 43: ↑32 и ↓11+21
Комментарии19

За что я «люблю» PHP или переназначение переменных)

Время на прочтение1 мин
Количество просмотров1.9K
  1. if(is_numeric($email) && !empty($email)){
  2.     $email = $this->query("SELECT email FROM users WHERE id=".$email);
  3.     if($email && mysql_num_rows($email)>0){
  4.         $email = mysql_fetch_row($email);
  5.     $email = $email[0];
  6.     }
  7. }
Всего голосов 67: ↑36 и ↓31+5
Комментарии54

Очередной перл выданный индусами.

Время на прочтение1 мин
Количество просмотров3K
Попался мне код, писанный одним индусом, а если точнее то мне было лень проверять в C# является ли строка числом с помощью метода TryParse и я решил посмотреть есть ли более «короткий» способ. вот на что я наткнулся

for (int i=0; i<this.textbox1.text.length; i++)
{
  if (char.IsDigit(this.textbox1.text[i])==false)
    // give any error
}


* This source code was highlighted with Source Code Highlighter.


Я конечно понимаю, что это «оптимизированный» метод на основе Replace, но всё равно забавно :).
Всего голосов 25: ↑11 и ↓14-3
Комментарии17