Pull to refresh

Comments 259

Интересно, какой максимальной длины слово в заголовке на Хабре не будет принудительно резаться?
Не буду предлагать проверить.
UFO just landed and posted this here
UFO just landed and posted this here
А так-то там два пробела в заголовке
UFO just landed and posted this here
В такую рань, и уже за компом. Даже в день программиста! Только хардкор!
А вы — уже встали или ещё не ложились?
Встал. Чертов будильник — всё время забываю его выключить. Но зато возрастает продуктивность))
— Временные зоны? Не, не слышал!
Хабр точно не слышал — «12 сентября 2012 в 07:11»
Остаётся только руками развести и глаза выпучить. Позор мне. Действительно:
<?=(date('z')==255?'С днём программиста':'')?>
Как же я упустил-то, @#$%?!
Скобочки тоже не нужны.
Отлично. У нас новый лидер!
Итак:
<?=date('z')==255?'Сегодня день программиста':''?>
$_a = array( str_rot13('qngr'), chr(121), 2<<2 );
echo !($_a[0](++$_a[1])>>$_a[2]) ? 'Сегодня день программиста' : '';
Между тем, можно ещё на один символ короче сделать.
Так?
<?=date('z')-255?'':'Сегодня день программиста'?>
Внимание. У нас настоящий монстр PHP на радаре! Но можно ещё на один символ короче ;-)
UFO just landed and posted this here
Так что ли?
<?=date('z')-255?'':'Сегодня день программиста';
<?=!date('z')%256?:'Сегодня день программиста'?>
уже?'Поздравляю!':''

Язык в задании не указан :)

нет нету у меня короче варианта, с ошибкой у меня тут…
а если дата будет больше 256? тоже будет «Сегодня день программиста»?
а нет, перепутал, всё ок.
11010000 10100001 00100000 11010000 10110100 11010000 10111101 11010000 10110101 11010000 10111100 00100000 11010000 10111111 11010001 10000000 11010000 10111110 11010000 10110011 11010001 10000000 11010000 10110000 11010000 10111100 11010000 10111100 11010000 10111000 11010001 10000001 11010001 10000010 11010000 10110000 00101100 00100000 11010000 10110100 11010001 10000000 11010001 10000011 11010000 10110111 11010001 10001100 11010001 10001111 00100001
Почему заголовок надо оформлять именно PHP-кодом?
А мне всё равно норм. Я обожаю PHP. PHP — лучший язык так-то если посмотреть.
А мне норм. Ничего не болит. Брат жив. Зависимости нет.
другого ничего не знает…
тогда уд АДА
Рабочий php-код из заголовка короче сделай, а потом кичись =)
Спасибо за сервис. То, что я раз в 2-3 месяца ищу и, до сих пор, найти не мог
Я в консольке пишу php -r «echo date('z')-255?0:'С днём программиста';».
Обычно больше одной строчки и не требуется, чтобы быстро что-нить проверить.
// быстрая инверсия регистра
$a = 'aBc';
$a = strtolower($a) ^ strtoupper($a) ^ $a;
echo $a; // AbC
Ещё интересно, зачем люди добавляют эту статью в «Избранное» )
UFO just landed and posted this here
Люди?
Не удержался. Да, и слова кончаются.

Вот я лох.
Не думай – сразу пиши
UFO just landed and posted this here
ради коментариев скорей всего
Привет от j2ee
<%if(new GregorianCalendar().get(6)==256){%>С днём программиста!<%}%>
Calendar.getInstance() тогда уж, грамотей :-)
Строго говоря, нет.
Если мы хотим, чтобы праздник был везде в один и тот же день, нужно пользоваться одним и тем же календарем.
Нет гарантии что Calendar.getInstance() вернет календарь, в котором год начинается 1 января.

Например, в проекте ICU ( site.icu-project.org/ ) реализовано по крайней мере 3 календаря, в которых летоисчисление привязано к луне или солнцу
Всегда найдётся умник, который испортит праздник )))
Промахнулся мимо курсива. Праздную, чо.
Это как посмотреть, ведь любой праздник можно отметчать еще и по старому стилю )
Давайте день программиста праздновать по всем календарям
… каждый 2^0 день в году
И вообще, <%=Calendar.getInstance(Calendar.DAY_OF_YEAR)==256?«С днём программиста!»:""%>
<%=Calendar.getInstance().get(Calendar.DAY_OF_YEAR) == 256? «С днём программиста!»: ""%>
Итак!
Этот код:
<?=date('z')-255?'':'Сегодня день программиста'?>
Можно сделать ещё на один символ короче. Разыскивается мастер Кунг-Фу.
Если я помню PHP (а я надеюсь, что я его помню, закрывать тег необязательно:
<?=date('z')-255?'':'Сегодня день программиста'
Если не прав — поправьте.
даже на несколько ;)
<?=date('z')-255?'':'Сгдн днь пргрммста'?>
Читер! Читер! Ловите читера!
Нещитова.
Так сойдёт? Минус 2 символа.

Парсер съел код.

< ?=date('z')-255?:'Сегодня день программиста'? >
<?=date(z)-255?'':'Сегодня день программиста'?>

говнокодистый вариант, однако, короче на пару символов
Дикость какая. Но можно ещё на один символ короче. О.О
вот например, минус символ =)
<?=date('z')-255?0:'Сегодня день программиста'?>
<?=date('z')==0?'':'Сегодня день программиста'?>
проверьте при помощи
<?=date('z')+1==0?'':'Сегодня день программиста'?>
100 wmr вышлю, если ещё на один символ короче сделаем (это возможно)
<?=date('z')-255?0:'Сегодня день программиста'?>
это вот так чтоли?
<?=date(z)==0?:'Сегодня день программиста'?>
это вот так чтоли?
<?=date(z)==0?:'Сегодня день программиста'?>
<?=(!date(z))?'':'Сегодня день программиста'?>
этот вариант не катит, т.к. в остальные дни выводится нуль, а не пустая строка
Нет уж увольте. Я не согласен. Требуем полную чистоту.
<?=date('z')-255?'':'Сегодня день программиста';
Победитель!
Координаты WMR в ЛС, плиз.
А Яндекс деньги не пойдут? Номер долго искать
мне проще через альфа-банк отправить. яндекс-маней нет. черт
WMR или альфабанком.
Поищите WMR. Это важно. Я просто обязан отправить вам сто вмр.
Так альфа перечисляет на Яндекс легко, если вы о Альфа-клик
пф… мне на WMR безразлично… но мне кажется, что поведение не полностью соответствует исходному коду.
какой-то странный победитель
можно еще короче:

<?=date('z')-255?:'Сегодня день программиста';


пустые кавычки не нужны, минус 2 символа
Будет «1» выводиться.
Действительно
значит победил Xenozoid
Не скомпилится — Parse error: syntax error, unexpected ':' on line 1
PHP 5.3.5 — «компилится» и работает, но только единичку выводит если день не 256й
Ну вы ж понимаете, что я про «компилится» не буквально )
конечно =) я имею в виду что работает этот код и ошибки парсера нет
Неполное соответствие, нельзя вставить в шаблон.
Никто не заикался про шаблон =)
Так или иначе, Xenozoid побеждает
У нас новый лидер ctajiuh:
<?=date('z')-255?0:'Сегодня день программиста'?>
Но можно ЕЩЁ КОРОЧЕ!
То есть замена ?> на; не вариант?
<?=date('z')-255?0:'Сегодня день программиста'; короче же на целый символ
<?=date(z)>>8?'':'Сегодня день программиста';
Если все дни до этого это дни программиста, то да. А так нет: )
проверил через:
<?=(date(z)-1)>>8?0:'Сегодня день программиста';
Вы правы. Неверное решение.

А так:
<?=date(z)>>8?:'Сегодня день программиста';
w:$zd($h,14)=256 «С днем программиста!»
СТОП!
Самый короткий код тут
Это победа?
Я не верю, что можно сделать короче О.О
Установлено, что решение неверно.
Нет, и вправду даты до 255 тоже катят, так что не вариант, но я не думаю, что мой окончательный
Вот так, например:

[ `date +%j` = 256 ] && echo "Сегодня день программиста"
Победитель ! Заливайте ему карму, а я пока подожду координаты WMR в ЛС
День то ещё не закончился… ждите до 00:00
А вообще есть мысль, что в будущей версии PHP можно будет только одним "?" обходиться. Без ":". Если вы понимаете — о чем я ))
Так что ли для будущих версий PHP?
<?=@date(z)&255?'Сегодня день программиста';

UFO just landed and posted this here
<?=@date(z)-255?'':'Сегодня день программиста';

Говнокод рулит
Все победители отменяются (или я что-то пропустил).
Есть вариант короче.
В общем, правда, итоги будем подводить в 00:00 по Москве.
<?=date(z)-255?:'С днём программиста';

короче вряд-ли выйдет
Дык 1 выводится, если не день программиста.
главное, чтобы поздравление выводилось в нужный день. других правил нет.
Ну тогда
<?='С днём программиста';
Выводится в нужный день поздравление? Да.
где автоматизация?! где программизм?!
Тогда:
<?=date(z)^255?:С_Днём_Программиста;
убираем скобки, знак пробела заменяем на символ U+2002

<?=date(z)-255?:С днём программиста;
U+2002 занимает 2 байта.
мы оптимизируем количество символов или размер файла?

лайт версия:

<?=date(z)-255?:С_днём_программиста;
Не знаю, это у автора задания спросить надо. ))
Для чистоты:
<?=date(@z)-255?'':@С днём программиста;
для чистоты устанавливаем
display_errors = Off
в php.ini
так можно и расширение для php написать. А в php его вызвать…
А что, по условию задачи нельзя менять дефолтные значения в php.ini? Если да, тогда код

<?=date('z');


тоже будет генерировать ошибку, так как по-умолчанию data.timezone в phi.ini не задан и

Every call to a date/time function will generate a E_NOTICE if the time zone is not valid, and/or a E_STRICT or E_WARNING message if using the system settings or the TZ environment variable.
Я тут подумал… и пожалуй я соглашусь.
расширение для php написать

И получим то, чего не хочется: +150—200 строк кода на Си.
Ну привет вам от перлячников чтоль :)
perl -le'print+(gmtime)[7]-255?"":"Happy programmers day"'
Однажды меня окунули в perl. Лет пять уж прошло, а до сих пор трясёт. Как вы вообще живёте там? Вы ещё круче шахтёров.
perl -E'say+(gmtime)[7]>>8?"":"Happy programmers day"'

Вот так даже покороче чуток будет.
О, вот еще немного покороче, перлвей в общем
perl -E'say+(gmtime)[7]>>8?0:"С днем программиста"'
perl -E '(gmtime)[7]>>8or say"С днем программиста"'
Как выяснили уже выше, со сдвигом неправильно считать(все дни раньше будут давать в итоге 0). Если еще и пробелы вычленить, то
perl -E '(gmtime)[7]^255||say"С днем программиста"'
«Лё принт». А мне начинает нравиться этот язык )
Запрещённый приём?
<?=date(z)-255?0:'С днём!';

Или

<?=date(z)-255?0:'СДП';

Читерство в чистом виде. Вы забанены ))
С Праздником, товарищи!!! Да пребудет с вами Сила!
<?='С днём программиста';
Не понимаю, ято за гонка минимализма. Вот вам портянка T-SQL:
SELECT CASE DATEPART(DY, GETDATE())
	WHEN 256 THEN 'С днем программиста!'
	ELSE 'Пиши, блядь, код.' END
Чуть ниже ответил на PL/SQL :)
эквивалент этого,
<?=date(z)-255?'':'Сегодня день программиста';

но выглядит более гиковски)
<?=date(z)^255?'':'Сегодня день программиста';
С праздником коллеги! У меня правда он двойной, так как еще и мой день варенья, не так давно узнал об этом :)
Саш, забавно написан коммент.
Недавно узнал о дне рождении )))
Ох, пхп видел последний раз года 2 назад, ну что-то типа того:
<?=date(z)^255||'Сегодня день программиста';
Хм, действительно, странно.
Note that PHP's boolean operators *always* return a boolean value… as opposed to other languages that return the value of the last evaluated expression.
<?if(date(z)^255)?>С днём программиста
Не пытайтесь повторить это дома:

<?=@${0*${@date(z)^255}='Сегодня день программиста'};
ОНО работает, но длинно пишется )
Чуть поменьше:
<?=${255^${date(z)}='Сегодня день программиста'};
<?assert('data(z)-255', 'С днём программиста')&&0;
PHP 5.3
<?=date(z)>>8?:'Сегодня день программиста';
все дни меньше 256 будут возвразать «день программиста». выше было
Выводит «1» в остальные дни.
Вообще говоря в остальные дни выводит не «1», а сколько дней осталось до Дня программиста, что предлагается считать фичей, а не багом :)
А ну да :) но это противоречит условию задачи :)
select case when to_char(sysdate, 'DDD')='256' then 'С днем программиста!' else 'Работать, негры!' end from dual; 

preg_match("/<title>(.+)<\/title>/i",file_get_contents("http://habrahabr.ru/post/151305/"),$title);echo $title[1];
Думаю, сделали уже короче некуда. Торгану-ка брейнфаком:
++++++++++[->+++>++++++++++<<]>> [->++>>++>++>+>++>>++>++>++>++>++>++>++>++>++>++>++[<]<[<]<[<]>>]< +++++++++ <<[->>>+>+>+>+++>+>+>+>+>+>+>+>+>+>+>+>+>+>+[<]<]>>>++> -->+++++++>------>++++++>++>+++++++++>++++++++++>++++++++>--->++++++++++>------>++++++> ++>+++++++++++>++++++++++++>------>+++[<]>[.>]
Снял шляпу.
Понятия не имею — что вы тут понаплюсовали.
Да в общих чертах-то я в курсе =)
К слову: мой код работает, т.к. для <?= тоже нужны short tags
Поздравляю вас, гражданин, соврамши
<script>alert('С Днем Программиста!')</script>

вот.
<?date(z)^255&&die?>С днём программист

длина таже что и у

<?=date(z)-255?0:'С днём программиста';

но не выводится ноль в другие дни
бля, текст обрезал, но по длине они одинаковы с буквой `а` в конце в моем примере
Как бы по-хорошему основной вариант из шапки поста
<?=date(z)-255?0:'С днём программиста';
хромает на обе ноги — выводит ноль в другие дни и кидает нотис на z без кавычек.

Всё-таки речь о дне программиста а не о дне говнокодера, так что его полная версия всё-же такая:
<?=@date(z)-255?'':'С днём программиста';
И Ваша версия
<?date(z)^255&&die?>С днём программиста
получается короче на 2 символа. Но она в таком виде тоже кидает нотис, поэтому:
<?@date(z)^254&&die?>С днём программиста
Итого заслуженная победа с выигрышем в 1 символ.

Если пофиг на числа и нотисы, то самый короткий вариант такой:
<?=date(z)-255?:'С днём программиста';
или такой
<?=date(z)^255?:'С днём программиста';
Если мы всё-таки меряем количество символов, то для случая с нотисами и числами самый короткий вариант такой. Чтобы избавиться от чисел можно вставить U+2002 между ?:
Да, согласен. Но без нотисов конструкция с die самая короткая.
Хотя если добавить подавления в код gen то получится ещё короче:
<?=@date(z)-255?@ :@С днём программиста;
Однако entity space — не совсем пустой вывод и вкупе с экранированием он занимает те же 2 символа что и '' поэтому:
<?=@date(z)-255?'':@С днём программиста;
Спасибо за оценку
Код с подавлением ошибок ещё больший говнокод, чем код, генерирующий эти самые ошибки.
Потому как неподавленные ошибки можно не показывать, но логировать. В случае же использования @ вы рискуете провести много весёлых часов/дней/недель, вылавливая баги «неговнокода».

Так что, либо оптимизировать по полной без @, либо писать правильно:
<?=date('z')-255?'':'С днём программиста';
> Код с подавлением ошибок ещё больший говнокод, чем код, генерирующий эти самые ошибки.

Не соглашусь. Случай из жизни:
Был себе сервер с аптаймом больше года. И тут один програмист пропустил ошибку и зарелизил код на сервер с высоким посещением.
Результат: через 20!!! минут сервер перестал отвечать. Как выяснилось тот самый лог был переполнен и вызвал ошибку файловой системы.

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

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

Все что я в этой ветке хотел сказать: код должен быть протестирован и без ошибок а не екранирован собакой или выключены в настройках, иначе это все говнокод и не важно спрятаны ошибки или нет
Да, я в курсе. Но error_handler с таким же успехом может обрабатывать и ошибки без подавления. А писать обработчик только для того, чтобы обрабатывать подавление @ выглядит извратом.
Например, мне нужно удалить файл, если он есть. Можно сделать так:

if (is_file($file)) unlink($file);

А можно так:

@unlink($file);

Как Вы считаете, какой подход лучше и почему?
Поймите меня правильно, я за то, чтобы использовать @ с умом и крайне осторожно. В 99.9% случаев можно обойтись без подавления. И date(z) как раз тот случай. В то время как подавление ошибки может скрыть куда более серьёзные проблемы. Например, подавление вызова функции, которая поставляется с каким-нибудь расширением. Подавив эту ошибку, может быть очень трудно выявить, что причина некорректной работы приложения в недоустановленном расширении. Не говоря уже о том, что операция подавления не из дешевых.

Касаемо вашего примера:

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

if (true !== @unlink($file)) {
    throw new \RuntimeException(sprintf('Failed to remove file %s.', $file));
}


Но и тут я использовал @ потому, что сообщаю приложению об ошибке посредством исключения и дублировать эту ошибку нет смысла.

Но, всё-таки, сравнение тут unlink($file) и date(z) не совсем корректно — это разного рода ошибки.

По-сути, работа с файлами/ресурсами — это, навероное, единственный пример, где использование @ ещё как-то оправдано, и мне трудно придумать кейс, где бы это было ещё уместно.
Правильный и прагматичный подход зрелого програмиста
Эххх…
<?=date(z)^255?:С_Днём_Программиста;

<?=date(z)^255?_:С_Днём_Программиста;

и просто улыбнуться:
<?=~date(z)^~0<<8?:С_Днём_Программиста;
Открыл статью, сразу не понял, что происходит, но со стороны похоже на холивар или пиписькомер…
d=new Date,Math.ceil((d-new Date(d.getFullYear(),0,1))/86400000)==256&&'С днём программиста'
А лучше так: d=new Date,Math.ceil((+d-d.setMonth(0,256))/864e5)||'Happy programmers day'
Предлагаю так:
<?=~date(z)<<24?0:'С днём программиста';

На один символ длиннее получается
64-ех битный тазик… Не работает ;)
Надо же! Забыл про разрядность!
Простите, конечно так:
<?=@date(z)-255?'':'Сегодня день программиста';
C# по лаконичности пролетает:
using System;class P{static void Main(){if(DateTime.Now.DayOfYear == 256)Console.Write(«С днём программиста!»);}}
Забыли про оператор %.
<?=@date(z)%255?0:'С днём программиста';
выходит 1 января тогда тоже получится день программиста?
UFO just landed and posted this here
Тогда ещё применяем комбо с пробелом.
<?date(z)-255||die(С днём программиста);
<?=date(z)^255?:С_Днём_Программиста;


Это все равно короче получается. :(
Несколько извратных вариантов вне конкурса

<?=substr('С днём программиста',99*abs(date(z)-255));
<?=strtok('С днём программиста',date(z)-255?'':'С');
<?=strstr('С днём программиста',date(z)-255?0:'С');

<?date(z)-256&&exit?>Сегодня день программиста
на символ меньше чем у победителя ;)
<?date(z)-256||die?>
<?date(z)-256||die?>Сегодня день программиста
(сори, не до конца дописал)
Уже было комент
и Ваш пример будет поздравлять весь год, а в день программиста какраз не поздравит
Only those users with full accounts are able to leave comments. Log in, please.

Articles