0
Другие записи за это число:
2016/09/06_iphone5 - Если Айфон упал в воду
<< предыдущая заметкаследующая заметка >>
06 сентября 2016
Про зависание сайта lleo.me и дебилизм PHP

Если помните, одно время сайт lleo.me висел чуть ли не каждую неделю, и это был ад: сперва идут тебе письма от читателей и SMS от друзей, что сайт снова повис, потом ты пишешь хостеру в Канаду, чтоб он пошел и перезапустил виртуальный сервер, только тогда всё поднимется. Что случилось? Никаких следов, никаких версий. Чего мы только ни делали с грамотными специалистами — и системы внутреннего мониторинга ставили, и на DDOS-атаки грешили. Разгадка оказалась проста — PHP. Вкратце: иногда серверу требуется скачать/послать файл или данные другого сервера. Не спрашивайте, зачем — есть разные надобности в движке, от автопостинга заметок до прочих нужд. Во всех сетевых учебниках быдлокодинга PHP (типичный пример: http://www.php.su/fgets ) процедура предлагается такой:

Пример 1. Построчное чтение файла

$handle = fopen('/tmp/inputfile.txt', 'r');
while (!feof($handle)) {
    $buffer = fgets($handle, 4096);
    echo $buffer;
}
fclose($handle);

Это не я придумал, это примеры из учебников. Сервер погружается в бесконечный цикл, пока не прочтет данные. Об окончании которых сразу узнает из загадочной функции feof(). Чей смысл и принцип оставим тоже на совести создателей PHP. Вроде бы нормально. Но, как выяснилось, бывают ситуации, когда цикл становится бесконечным. Может, указатель $handle=fopen() не открылся — авторы учебника его, как видим, тоже не проверяют. Может, сраный feof не поймал конец файла или размер файла точно совпал с 4096, а дальше всё пошло вразнос. Не важно. Суть в том, что возникает бесконечный цикл и ошибки чтения.

Сам по себе бесконечный цикл — проблема, но не такая фатальная, чтоб регулярно валить сервера и полтора года не понимать, отчего такое случается. Какой бы ни был бесконечный цикл, сервер отрубит соединение по таймауту секунд через 30, и на этом все кончится. Но есть нюанс. Поскольку это ошибка чтения, PHP начинает орать о ней в свои логи. А поскольку цикл бесконечный, он успевает в эти секунды засрать лог до критического размера 2GB. Видимо, PHP на это не рассчитан и не успевает переархивировать лог. И дело не в том, что кончается память — нет, память еще есть. Просто по загадочной причине от внезапно возникшего лога 2GB падает и PHP, и вся система, и вся виртуалка. Не пипец ли?

На lleo.me под Debian это отловить не удавалось никак: когда виртуалка заново поднимается, гигантского лога уже нет, всё чисто. Как понять, что сервер убивают скрипты, и как понять, в каких строчках, если эффект случается редко, а логов не остается? Помог сайт hultura.ru, где стоял тот же мой движок. Там FreeBSD, там хостинг Zenon, там очень внимательный и дотошный начальник технического отдела друг Сережа Беркович, и вот он каким-то образом понял и подсмотрел, как это происходит. Ну, исправить оказалось легко: просто вставить лишнюю проверку, не предусмотренную большинством примеров из учебников:

$handle = fopen('/tmp/inputfile.txt', 'r');
while (!feof($handle)) {
    $buffer = fgets($handle, 4096);
    if($buffer===false) break;
    echo $buffer;
}
fclose($handle);

Специалисты рекомендуют проверять и результаты fopen(), но на самом деле это не очень нужно — если fopen() даст false, то уж и fgets(false,4096) точно сразу даст false. Кстати, специалист внутреннего устройства PHP Dmitri Dmitrienko советует навсегда отказаться от fgets(), а использовать fread() — говорит, адски кривая реализация там.

Так или иначе, зависания пропали и на hultura.ru и на lleo.me и везде, где стоял движок. Зная, что ошибка редкая, я специально выждал год, прежде, чем написать этот пост. Но теперь могу сказать: да, это было именно оно, мы нашли и победили.

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

UPD: Ну и раз уж зашел разговор о программировании, я тут недавно попробовал наконец себе поставить систему разработки приложений для смартфонов, чтобы вникнуть в это полезное дело. Потратил весь вечер, поставил Eclipse, Android Studio с SDK и еще тонны говна. Впечатления скверные. Во-первых, Android Studio у меня не заработал: оказалось, Linux с 32-битным ядром — единственный случай, для которого не предусмотрен эмулятор смартфона. Был бы Windows — пожалуйста, была бы Ubuntu-64 — тоже. Кроме того, я вдруг понял, что у меня вообще нет никакого желания изучать Java, архитектуры бесконечных папок с неприятными мне файлами XML и прочее говно. Которое устареет раньше, чем я достигну высокого мастерства разработчика в эпизодических хобби. И которое совершенно неприменимо, например, к iOS — там все другое. Поэтому я решил, что раз я хорошо владею HTML и JS, то мне для разработки нужно что-то типа PhoneGap: чтоб я мог писать свои приложения на хорошо знакомом мне JS, и они легко отлаживались на Вебе и портировались и на Android, и на iOS и на остальное говно, которое вдруг появится в будущем. Ведь сочинение динамических 3D-игр не входит в мои планы: для начала мне понадобится что-то выводить на экран, да бегать куда-то в интернет, чтобы получать-отправлять данные. Но я так понимаю, что получение сигналов приложению в спящем режиме, работа с датчиками, SMS, фото — все это тоже есть для JS-портов? В правильном ли направлении я иду? Что посоветуете?

<< предыдущая заметка следующая заметка >>
пожаловаться на эту публикацию администрации портала
архив понравившихся мне ссылок
Оставить комментарий
Windows Firefox
 Киев
0
0
Mr. 1470
Под Андроид (и много всего другого) на JavaScript можно писать с помощью QML. Правда, своего гемора там тоже вагон и маленькая тележка :-)
Linux Ubuntu Safari Chrome
 Греция
0
0
Azimut
в qml очень мало возможностей - ну цвет поменяете, ну текст, в основном ущербно очень. Да, можно "лепить" под себя, но не удобно же.
Mac Safari Chrome
 Москва
0
0
Muzhikant
Есть ещё, например, Xamarin. На нём можно писать под мобильные платформы на C#, если он тебе вдруг близок (как мне).
Linux Ubuntu Firefox
 Москва
0
0
Леонит Каганофф
А есть ли серьезные преимущества по скорости и размеру приложений? Просто все равно же Андроид выполняет Java, а не бинарник. Значит, C будет транслировать в Java, и это ад?
Windows Firefox
 Новая Зеландия
0
0
Torvin
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Конечно же Андроид умеет выполнять бинарники https://developer.android.com/ndk/index.html
Linux Ubuntu Firefox
 Москва
0
0
Леонит Каганофф
Ага, только под каждую модель смартфона понадобится свой бинарник :)
Windows Firefox
 Новая Зеландия
0
0
Torvin
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Компиляция происходит при первом запуске прям на девайсе. Там же JIT. Немного подробнее тут: https://developer.xamarin.com/guides/cross-platform/getting_[...]
Mac Safari Chrome
 Москва
0
0
Muzhikant
Преимущество смотря перед чем. Перед движками на JS - не скажу, не имел опыта, но возможностей всё же поболе мне кажется. Нативу конечно проиграет. Насчёт трансляции - там всё не совсем так, приложение работает в устанавливаемом Mono рантайме.
https://developer.xamarin.com/guides/android/under_the_hood/[...]
В целом решение выигрывает засчёт использования одного языка, можно написать базовую библиотеку, которая будет использоваться для всех платформ, и дописывать классы специфического функционала для каждой платформы. Только в таком варианте нужно всё равно знать структуру API и тонкости каждой платформы, и интерфейс делать нативный, и плюс не всегда всё гладко с памятью там (но может уже пофиксили, я пользовался с год назад где-то)
Есть ещё API совсем высокого уровня - Xamarin.Forms, там даже почти не нужно знать тонкости платформ, но год назад оно было ещё сыровато, сейчас под крылом Майкрософта может быть тоже допилили.
Linux Safari Chrome
 Mt Laurel
1
0
DL
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Xamarin уже не модно, у меня такое чувство что проект потиху затухает.
Сейчас модно React Native.
Mac Safari
 Москва
4
0
Дмитрий-3
К тому моменту как Лео прочитает этот коммент, реакт уже тоже станет устаревшим говном. Будет модной какая-то ещё новая хрень.
Linux Safari Chrome
 Mt Laurel
0
0
DL
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Так и есть, я сам этому не рад. Но мне нужно учить, иначе вылечу с рынка, cest la vie. А PHP коммьюнити уже давно перешли на JS :)
Linux Safari Chrome
 Москва
2
0
Dmitry Kirillov
Вы движетесь в правильном направлении. Более того, благодаря современным технологиям ("http://kripken.github.io/emscripten-site/"), вы даже сможете писать 3D-игры на JavaScript.
Linux Safari Chrome
 Москва
6
0
_
> вы даже сможете писать 3D-игры на JavaScript

Ну, именно это ему и нужно. Он так даже и написал
Linux Ubuntu Firefox
 Москва
0
0
ignik
если perl знаешь, то HTML::Mason
Люди делали ;-)
Linux Ubuntu Firefox
 Москва
0
0
Леонит Каганофф
Не знаю, и учить новый язык лень. Знаю PHP, JS, немного C (но не люблю), и несколько ассемблеров, сильно подзабытых. Не хочу учить Java, Perl, Python, Go и прочее - оно появляется и умирает быстрее, чем я его уcпеваю хорошенько изучить на правах хобби в свободное время ;)
Linux Firefox
 Boulder
5
2
Михаил (#1684620)
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Вообще-то PHP это жалкая пародия на Perl, появившаяся почти на 10 лет позже его самого. Так что, Perl поучить полезно — он гораздо менее быдлокодерский, чем PHP, и умрёт точно не раньше оного.
Opera
 Москва
0
0
Mike Novikoff
«Почему у тебя такая кривая шея?», спросили верблюда.
«А что у меня вообще прямое?», отвечал верблюд.

(Традиционно посвящается Перлу и его фанатам). ;-)

Но в каждой шутке есть доля шутки. Согласен, что если сравнивать, то Перл будет не из худших. И насчёт жалкой пародии тоже. По крайней мере, у Перла гораздо шире область применимости, без него практически ни на одной приличной машине не обойтись. Достаточно хотя бы вспомнить, на чём работают скрипты autotools. То есть, не обойтись никак. В отличие от php, о котором можно вообще никогда не вспоминать, как и о всяких там питонах или, допустим, ksh и zsh.
Mac Safari
 Израиль
0
0
braintunic
> о котором можно вообще никогда не вспоминать, как и о всяких там питонах

Ага, только без питона (мутировавшего в анаконду) ты даже не сможешь установить Red Hat Linux ;)

Ну и по мелочи, скажем, "yum" без питона не ставится (хотя ты, наверное, yum-ом не пользуешься, а куришь "naked rpm").
Opera
 Москва
0
0
Mike Novikoff
Анаконда — это и был тот самый единственный раз в жизни, когда я запускал программу на питоне. В далёком 1999 году при установке RH61. ;) Точнее, был ещё аж и второй: в 2000, RH70. ;)
Но даже тогда я не держал его в системе, анаконда запускалась один раз с сидюка. Инсталлятор мог быть в любом формате, хоть виндовым экзешником. ;)

> ты, наверное, yum-ом не пользуешься, а куришь “naked rpm”
Да, разумеется. Это уже обсуждали.

Например, у моего любимого PLD вообще нет инсталлятора для чайников (во всяком случае, я не видел), он ставится либо как набор апдейтов (не обязательно на чистый RH, а на любой редхатоид), либо через chroot.
Linux Firefox
 Boulder
2
0
Михаил (#1684620)
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Да я вообще-то не фанат Перла, хоть и пользуюсь им регулярно. :–) Просто высказывание «знаю PHP, а Perl учить не хочу, потому что он весь такой эфемерный» весьма поразило.

Про Пифон я, честно говоря, думаю лучше, чем про Перл — он более логично организованный и без тяжкого наследия точек с запятой и фигурных кавычек. Но в нём весьма странные правила видимости переменных, менее удобно работать с регулярками (обратная сторона организации), и он почему-то медленнее Перла. Но это всё к делу не относится, потому что он на PHP, JS и C мало похож — Леониду его действительно «учить» пришлось бы.
Linux Safari Chrome
 Москва
3
1
Леонит Каганофф
Простите, а зачем мне учить перл? Вот вы знаете русский и английский, почему бы вам не начать учить арабский? На нем говорят сотни миллионов, и Коран на нем написан.
Linux Ubuntu Firefox
 Израиль
2
0
vfork
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Аналогия тут другая. Если вы знаете белорусский, то русский вы как минимум хорошо понимаете, и как максимум, заговорите на нём через неделю. А область применимости у него на порядок больше.
Windows Safari Chrome
 Санкт-Петербург
5
0
Eugene
Аналогия тут другая. Некто говорит "Друзья, мне на кухню нужна пара стульев или диванчик - просто посидеть". А ему говорят "Да ты лошпед на кухне сидеть, вот у моей тещи дача под тулой, переезжай туда : сидеть, наверное, на первых порах не слишком удобно, зато в подвале банки с соленьями, и на яблоки урожай, опять же на лодке можно кататься.
Windows Firefox
 Раменское
0
0
oncle t
Незачем абсолютно, перл умер ещё лет пять назад. Любители пинать трупы никак не указывают на то, что перл жив.

А вот питон посмотрите, если не смотрели. А если смотрели, то интересно даже, что с ним не так. Его вообще не нужно осваивать, если нет желания зарабатывать кодингом. Я сам совсем не программист и вообще далеко от айти, но это даже более крутая волшебная палочка, чем баш.
Windows Firefox
 Великобритания
0
0
SPQR_Voldi
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
ksh водится в таких местах, где тоже проживёт ещё очень долго.
Opera
 Москва
0
0
Mike Novikoff
А я не говорю, что ksh помрёт совсем. В дистрибутивах есть и будет, никуда не денется. Для редких особых случаев. (Кстати, не знаю, для каких). Но на своей машине снёс его больше 10 лет назад и с тех пор не вспоминал. Ни один пакет за всё это время не потребовал его при сборке. При установке и работе — тем более.

Или вот в фидошном ру-линуксе кто-то хвастался, что ставят себе zsh вместо bash. Типа, круто. А чего они этим реально добились, кроме лишних несовместимостей? Не убедили.

А ещё бывают всякие там expect и tcl/tk... Ха-ха.

She sells the C-shells... :-)
Mac Safari
 Израиль
0
0
braintunic
> А ещё бывают всякие там expect и tcl/tk... Ха-ха.

А expect-то за что?
Ведь expect - это шикарное средство для автоматизации работы с интерактивными программами (скажем, ftp, telnet, ssh).

Вот, к примеру, ты забыл, какой из твоих ста паролей нужен для входа на данный сервер, а этот сервер даёт перебрать максимум пять паролей за час, а затем блокирует.

Ты же не будешь руками перебирать?
Нужна автоматизация.

На bash ты такую автоматизацию никак не сделаешь.
На C, конечно, можно написать программу, строк в триста, которая с этим справится... правда, замучишься с псевдотерминалами ;)
А вот на expect это будет программа из десяти-пятнадцати строк, написанная и отлаженная за десять минут
Opera
 Москва
1
0
Mike Novikoff
> expect - это шикарное средство для автоматизации работы с интерактивными программами

А у тебя были реальные случаи, когда он мог пригодиться?
У меня были. Пару раз за 20 лет. Оба раза обошёлся другими средствами.

Первый раз — в 1995, делал скрипт для автоматического скачивания почтовых пакетов с BBS (BlueWave). В голом досе тогда никакого expect не было, была терминалка Telemate с собственным скриптовым языком, на expect отчасти похожим. За пару дней изучил, не сложнее бейсика.

Второй раз — в 2011, выбирал себе имя для аккаунта в Gmail. Большинство хороших имён там было уже занято, пришлось перебирать, что осталось. Сварганил скриптец на bash + netcat, он разговаривал с сервером по протоколу IMAP (rfc3501). Считал этот скрипт настолько простым, что даже не сохранил его (он был и правда несложным). Имя в итоге такое и взял: rfc3501. :)

Вот на netcat советую обратить внимание, если не пробовал. Чертовски полезная штука, батенька. :)
Mac Safari
 Израиль
1
0
braintunic
> А у тебя были реальные случаи, когда он мог пригодиться?

Да, бывало, и не раз.
Один раз, десять лет назад, когда ещё не было пакета "sshpass", а нужен был механизм доступа по "ssh" в неинтерактивном режиме и когда нормальный "ssh public key authentication" был запрещён сервером.
Я написал script из десяти строк на expect и двадцати строк на bash и решил задачу.
Иногда пользуюсь этим скриптом и сегодня, потому что он в некоторых отношениях более удобен и гибок, чем "sshpass".

Другой случай, когда надо было автоматизировать работу с хитрым ftp сервером (автоматически делать массовые upload и download).

Кроме того, классический авторский учебник "Exploring Expect" by Don Libes (с мартышкой на обложке) просто доставляет эстетическое наслаждение при прочтении ;)
После книг Кернигана я уж и не помню других учебников, которые бы успешно заменяли беллетристику.
Ну вот разве что "XSLT Programmer's Reference" by Michael H. Kay.

С netcat я знаком, это очень мощная и полезная хреновина, но решает другой круг задач, чем expect (хотя кое-где они пересекаются).
Linux Safari Chrome
 Петрозаводск
0
0
igor.pellinen
Лол, перл уже лет пятнадцать как умер, вылезайте из анабиоза.
Linux Firefox
 Boulder
0
0
Михаил (#1684620)
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Обоснуй!
Windows Firefox
 Санкт-Петербург
0
0
тупиточка
Он не умер, он просто так пахнет.
Linux Ubuntu Safari Chrome
 Кемерово
4
4
Denis
Ну так и нахуя?! Не хочешь учиться -- и не надо!
Только не надо увеличивать и так огромную армию быдлокодеров!!!
Windows Firefox
 Новая Зеландия
3
1
Torvin
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Только сами быдлокодеры могут быть против увеличения армии быдлокодеров. Потому что только им они могут составить конкуренцию.
Linux Ubuntu Safari Chrome
 Кемерово
0
1
Denis
Opera
 Москва
0
1
Mike Novikoff
Да это даже не софизм, а просто странная логика. Типа «гитлеровцев не любили только сталинские коммунисты. Потому что только им...» и далее по тексту. ;)
Windows Firefox
 Новая Зеландия
1
1
Torvin
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
А вот и Годвин подоспел. Я вижу этом треде принято кидаться ссылками на википедию, но я думаю вы и так в курсе.
Opera
 Москва
0
0
Mike Novikoff
Подозревал, что лучше привести другой пример, а то все тут луркмора обчитамшись. ;) OK, пусть будут две шайки профессиональных нищих бомжей, которых якобы могут не любить только свои же за конкуренцию. ;) Что это меняет по сути?
Windows Firefox
 Новая Зеландия
0
0
Torvin
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Я не знаю, что там с бомжами, но мне ни жарко и не холодно от быдлокодеров. А вам тоже за державу обидно? Кто-то там программирует опять без разрешения, да?
Притом, у Лео даже образование профильное имеется, а у вас, наверняка, нет.
Opera
 Москва
0
0
Mike Novikoff
Не, ну всеобщему увеличению энтропии я всё равно не смогу помешать. Так что если сам иногда этому способствую, ввязываясь в дурацкие разговоры, прошу простить меня за это. ;)
Windows Firefox
 Москва
0
0
abrrvalk
«Только сами быдлокодеры могут быть против увеличения армии быдлокодеров. Потому что только им они могут составить конкуренцию.»

Да. Но надо добавить "при разборчивости заказчика". А это выполняется далеко не всегда.
Linux Safari Chrome
 Москва
0
0
Леонит Каганофф
Это что ещё за боль, что за крик души сейчас вырвался? :)))
Так страшно, что я отберу у вас работу? В противном случае какая вам разница, чем в свободное время увлекается литератор Каганов? :)))
Linux Ubuntu Safari Chrome
 Кемерово
0
0
Denis
Нет не страшно :-)
Я живу в таких ебенях, где даже быдлокодеры в цене.
Просто непонятно зачем заниматься чем-то на полшишечки??
Например: я увлекаюсь вырезанием на токарном станке по дереву, но учится как правильно делать я не хочу - поэтому такая хуйня получается :-)
Linux Safari Chrome
 Москва
6
0
Леонит Каганофф
Примерно как если бы литератор Каганов выбегал с взволнованным матом и запрещал вам в свободное от работы время сочинять стишки и сценарии :)))

А если вы такой борец за профессионализм в быту и на досуге, то вместо жены вам следует ебать профессиональную проститутку :)
Linux Ubuntu Safari Chrome
 Кемерово
0
0
Denis
Не у всех людей межполовая ебля - хобби. У некоторых просто физиологическая потребность :-)
Windows Firefox
 Новая Зеландия
0
0
Torvin
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
У него за судьбы мира душа болит. Быдлокодеры множатся панимаеш.
Linux Safari Chrome
 Москва
7
0
Леонит Каганофф
И меня за графоманов тоже должна душа болеть! Каждый кухонный тамада, срифмовавший "поздравляем и желаем" - мой враг и конкурент!
Windows Safari Chrome
 Мытищи
0
0
2:5020/321
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
скажите, вам наверняка приходят письма из серии я написал стих-поэму-рассказ... какие чувства вы испытываете если читаете?
Linux Ubuntu Firefox
 Москва
1
0
Леонит Каганофф
А я не читаю - такой принцип. Кто я такой, чтобы оценивать других? Какое я имею право давать свою несовершенную оценку человеку, который возжелал ориентироваться на мое мнение? А если мне текст не понравится, он расстроится и писать перестанет? Поэтому на такие письма у меня стандартный ответ:

http://lleo.me/polezno/#neprochtu
Mac Safari
 Ижевск
0
0
Дима
> профессиональную проститутку

Правильной аналогией будет порноактриса.
Windows Safari Chrome
 Киев
6
0
Maxfactor9
О джаве, быдлокодерах и проститутках...
Linux Safari Chrome
 Москва
2
0
albedо
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Наоборот, нужно самому ебаться профессионально.
А кого именно ебать из набежавших - это уже второй вопрос.
Linux Ubuntu Firefox
 Москва
0
0
ignik
Нонче выбор скриптоязыка общего назначения достаточно велик: python, java, ruby, js, php, lua, go - чего только нет, чем дальше развиваются мобилы, тем толще языки. Другое дело - посмотреть какой больше нравится чисто синтаксически, но это уже дело вкуса.

Если js хорошо знаешь и любишь - дык что мешает писать на js?! Есть неплохая книдка на тему (она несколько устарела, но хороша, после прочтения рекомендуется купить ;-)

Linux Firefox
 Welmington
0
0
Страга Севера
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Ну-ка, ну-ка? Это что же, получается, что на моем любимом Ruby (единственном гуманоидном языке в мире) можно девелопить под андроид? А скиньте сцылко!
Windows Safari Chrome
 Москва
0
0
Twentydraft
Ну уж Питон точно уже не умрёт, да и Go всё популярнее и популярнее.
Очень советую обратить внимание на эти два языка - они очень-очень простые(синтаксис можно освоить за вечер, + у того же GO безумно богатая стандартная библиотека, используя только её можно написать движок для сайта в тысячу строк со всеми причиндалами) и у них отсутствуют многие проблемы PHP (вроде постоянно текущей памяти, для меня пых - это вообще что-то, что должно отработать за полсекунды и сдохнуть в славу ЛММ)

Что же касается 2-х гигабайтного лога - так это проблема 32-битного PHP
Бейте фалы на чанки, господа!
Windows Firefox
 Москва
0
0
abrrvalk
Перл глубоко интегрирован в большинство полноразмерных дистрибутивов линукса и уходить никуда не собирается. Только на моей памяти ситуация стабильна уже 20 лет. ПХП штука более узкого применения и я использовал его только в веб серверах для непосредственной генерации страниц. И хотя у пхп и есть скриптовый режим, но редко когда его целесообразно в нем использовать. Количество всяких готовых библиотек под перл (см. CPAN) тоже несоизмеримо с пхп. Короче говоря, я разделяю мнение тех, кто считает, что ПХП это сугубо веб технология.

Про джаву имеет смысл говорить только в конкретном применении. Изучение синтаксиса самого языка занимает час-полтора с нуля и вдвое меньше тем кто знаком с С.
Mac Safari
 Hicksville
3
1
Yuriy S
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
PhoneGap уже не катит - глюковый и медленный

Ionic ещё куда ни шло, а самое что есть hot на рынке сейчас это React для веба и React Native для мобильных эппов от Фейсбука
Windows Firefox
 Новая Зеландия
1
0
Torvin
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Плюсую React Native. Но не знаю, осилит ли React Леонид.
Linux Ubuntu Firefox
 Москва
0
0
Леонит Каганофф
А в чем его сложность?
Windows Firefox
 Новая Зеландия
0
0
Torvin
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Ну я не отговариваю. Дело хорошее. Попробуйте!
Linux Safari Chrome
 Mt Laurel
0
0
DL
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
У меня кстати обратная ситуация: за много лет я хорошо знаю Java, запилил на Андроиде несколько приложений. Да, чтобы там писать нужно иметь хорошую мотивацию.

Но вот с современным Javascript (который я тоже давно знаю) у меня и сейчас проблемы -- слишком много фреймворков, слишком они все сырые, и опять изобретают велосипеды, которые были решены в Java уже давно.

Кстати сейчас модно React Native. Правда, его тоже наверно нужно будет учить, не знаю насколько долго.
Mac Safari
 Харьков
0
0
Alex 77752
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
А в чем сложность реакта? Я лично знаю одного 26 летнего парня, который ещё в марте 16 года не мог отличить body от html, за полтора месяца верстку освоил нашёл работу за 40 к, на Джаваскрипте ничего не писал, к кодингу до этого отношения не имел. Потом в августе ему сказали, повышаем до фронта если напишешь приложение на реакте. Он справился, до этого только jqueryплагины прикручивал. Как мне кажется, сложности программирования преувеличены, сейчас любой хрен с толикой усидчивости и со средними способностями может стать нормальным кодером за пару лет. Поэтому не понимаю этого пафоса надуманной сложности которой кодинг окружают некоторые люди. Любой, даже самый конченый быдлан (пардон за терпкое словцо) за года 2-3 если есть немного усидчивости и дисциплины сможет стать нормальным среднестатистическим кодером. Пусть год у него уйдёт на просто привыкание к другому типу жизни, чтению книг и т д. И ещё два на уже знания навыки и умения релевантные кодингу. Ничего особенного в профессии на мой взгляд нет и вообще её сложность переоценена. Не нужно ни Ph.D. ни китайский знать. Вот биоинформатика уже потяжелей будет, там помимо кодинга нужна ещё математика и Ph.D. по биологии.
Леонида всегда уважал за широту интересов - от пайки микроэлектроники до кодинга и литературы, выращивания растений.
Windows Firefox
 Новая Зеландия
2
0
Torvin
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Я нигде не говорил, что Реакт сложный. Но концепция у него довольно необычная, и несколько ломает сложившиеся стереотипы о программировании UI поначалу, особенно после всяких jQuery. Поэтому мои опасения связаны в основном с двумя вещами:
1) Документация в основном на английском. Я знаю что lleo последнее время старается прокачать английский (молодец!), но не уверен, что он уже может хорошо читать техническую документацию.
2) Зная характер lleo, я боюсь что он поглядев на примеры или повозившись полчаса, скажет "ну и хрень, придумают же" и бросит, так и не успев почувствовать в чем главная фишка :)
Так или иначе, я не отговариваю Леонида, а совсем даже наоборот. Будет здорово, если он разберется и проникнется, да и UI дневника как раз давно пора переписать.
Windows Safari Chrome
 Мытищи
2
0
2:5020/321
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
вы путаете "любой может за день научиться ездить на велосипеде" и "любой может за день научиться ездить на велосипеде и через год выступать на олимпийских играх"

просто кодером за 40к почти ничего не нужно, да. называется быдлокодинг методом копипасты. но как только проект вырастает за 20000 строк, уровень программирования требуется несколько другой, иначе наступает непонимание как все это работает и где может глючить. вот вроде как все по отдельности из учебника взято и работает, а вместе - глючит.
Linux Ubuntu Safari Chrome
 Греция
0
0
Azimut
Ну может http://www.phonegap.com/ и плохо работает через js с неким новым железом мобильного телефона, но виброзвонок, доступ к фалам, геолокация = как новую строку вставить )))

и ionic жэ вообще сифилис, а не альтернатива!

Кстати, в php можно было бы бороться c ошибками через добавление @:
$buffer = @fgets($handle, 4096);
ну и везде его ставить - в логи тогда ничего не попадает же.
Хотя догадаться же надо было :)

Кстати, Леонид, может стоит добавить на Ваш движок html вибро для мобильных при новом сообщении ?
Linux Safari Chrome
 Москва
1
0
Леонит Каганофф
Это как?!
Linux Ubuntu Safari Chrome
 Греция
1
0
Azimut
//для нативного я как-то иначе делал, а для ff и хромиума:
//enable vibration support
navigator.vibrate = navigator.vibrate || navigator.webkitVibrate || navigator.mozVibrate || navigator.msVibrate;
//согласно http://www.w3.org/TR/vibration/
if (navigator.vibrate) {// vibration API supported
navigator.vibrate(125,25,10000,100,10000);
}
Linux Safari Chrome
 Киев
2
0
Микротигра
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
эклипс не нужен, андроид студия она на intellij idea же.
Linux Safari Chrome
 Москва
3
0
Katsuk
Разучи уже питон, чтоле. За сутки вполне можно управиться для написания вполне сносных программ. Он есть на любую платформу, он никуда не денется, он мощный и работает по скорости на уровне си/дельфи приложений. Хочешь - из командной строки, хочешь - графический интерфейс с кнопочками сделай.
Linux Ubuntu Firefox
 Москва
1
0
Леонит Каганофф
"Давайте спорить о крахе и подъеме Голливуда, не видев ни одного фильма" (с)Жванецкий

Ты сам сперва освой питон и напиши на нем хоть одно работающее приложение под все платформы, тогда сможешь всем рассказывать, как легко управиться за сутки.
Linux Safari Chrome
 Белоруссия
1
0
ConnorMcLaud
Привет. Пишу на Питоне 7 лет за деньги. Язык люблю всей душой. Мне нравится элегантность кода на выхлопе (по сравнению с Перл, например). И простота базового языка в изучении. Обычно мы берём С++/Java программистов с рынка, садим работать. Через две недели они пишут уже сносный код, через три месяца пишут так, как будто писали на нём всю жизнь.

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

Питон крайне популярен в научной среде. Ученые предпочитают решать свои задачи на Питон, потому что это просто.

По поводу мобильной разработки, увы Питон там не сильно применим. Да есть какие-то фрэймворки, Kivy, например, но они сырые.

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


Фрэймворк Qt (С++) при помощи QML позволяет писать мобильные приложения под все современные платформы при помощи своего диалекта javascript. Но опять же его нужно сильно изучать.
Windows Firefox
 Австралия
5
0
Идиотъ
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Говорю им: "Не садьте программистов работать!" - всё равно садят...
Linux Safari Chrome
 Москва
1
0
Katsuk
Я за сутки освоил питон и написал приложение, находящее на картинке перфорацию киноленты, находящее по ней кадр, вырезающее его и сохраняющее в другую папочку. Пакетом, кое-как оцифрованную киноленту 16мм переводило в пакет готовых кадров. Два всего экрана программа.
IE
 Химки
1
0
yalexey
Много полезного можно на яваскрипте написать прямо в смартфоне. С помощью Tasker.
Safari Chrome
 Mt Laurel
0
0
Анонимка
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Linux Safari Chrome
 Белоруссия
9
0
oddtwelve
Ну вообще как минимум странно ругать язык, когда кодишь по хз кем написанное учебнику. В официальной документации все есть http://php.net/manual/ru/function.fgets.php
Linux Ubuntu Firefox
 Москва
2
5
Леонит Каганофф
Да шо вы говорите? ;)))

По вашей ссылке лишь комментарии пользователей повествуют об этом эффекте:

I have noticed that without the IF statement, fgets seems to ignore when $fh is undefined (i.e., "filename" does not exist). If that happens, it will keep attempting to read from a nonexistent filehandle until the process can be administratively killed or the server hangs, whichever comes first.

Кроме того, главный вопрос к PHP в другом: как это он так ловко написан, что при разрастании лога до 2Gb вешает аж всю систему? На этот вопрос что-то ответа нет.
Mac Safari
 Израиль
5
0
braintunic
Комментатор из Белоруссии прав, а ты не прав.

В описании функции "fgets" на официальном сайте php-dot-net в примере кода таки есть проверки на сбой и результата функции "fopen" и результата функции "fgets".

А этот коммент семилетней давности во-первых явно полемизирует с каким-то другим примером (полагаю, с примером, который здесь был семь лет назад), а во-вторых автор этого коммента в его "исправленном" коде так и не проверяет на сбой результат функции "fgets", а проверяет только результат функции "fopen", что недостаточно (как ты сам теперь знаешь).
Linux Firefox
 Boulder
0
0
Михаил (#1684620)
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
На самом деле там написано:
«Указатель на файл должен быть корректным и указывать на файл, успешно открытый...»,
поэтому формально применять их к неоткрытому файлу не стоит (в C/C++ это называется «может отформатировать жёсткий диск» ;–) ).

Но делать такое идиотское поведение в динамически типизированном языке — это, конечно, показатель мастерства его «разработчиков». В том же Perl сделано вполне по уму:
«eof FILEHANDLE Returns 1 if the next read on FILEHANDLE will return end of file or if FILEHANDLE is not open.»
Т. е. если случай несуществующего/нечитаемого файла не надо обрабатывать специально, то цикл по eof — вполне нормальное решение. Впрочем, обычно даже eof не нужен, потому что проще и правильнее проверять сам результат чтения (while (my $line = <FILEHANDLE>)).
Linux Safari Chrome
 Москва
0
2
Леонит Каганофф
Иными словами, главный вопрос к PHP - зачем ронять систему в довольно штатной ситуации бесконечного цикла - он по-прежнему без ответа :))))
Linux Firefox
 Киев
3
0
Л. Янукович
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Эм, тут вопрос к тому, кто _разрешил_ PHP валить всю систему. Это еще постараться надо так систему настроить, чтобы очень прикладная программа ее завесила... То есть, как завесить - примерно понятно: съесть кучу ресурсов системы, даже кусок кода есть. Но как при этом обойти и защиту интерпретатора PHP, и защиту того, что этот интерпретатор запускает, и защиту самой системы, и при этом не оставить следов в логах - это уже намного сложнее.

(шамк-шамк-шамк) В "золотые времена RedHat Linux 6.1 (tm)", помнится, мы шутили над молодыми любителями mc довольно незатейливым способом: добивали в tar.gz архив файл на 100 мегабайт нулей, который очень хорошо сжимался, и подкладывали им в домашнюю директорию. Жертва смотрела - опа, архив, а что это в нем? - и жала на Enter в mc. mc был не сильно умный и начинал раскрывать архив в /tmp, съедая там все место, к чему система не очень хорошо относилась и часто висла или начинала крепко сбоить, а так как mc уходил в процессе обработки zip-бомбы в полный ступор и на Ctrl-C и прочие клавиши не реагировал - часто все заканчивалось "тремя пальцами". Помнится, самый "одаренный" наш товарищ прошелся по циклу "зайти в архив - зависнуть - перезагрузиться - зайти в архив" раз пять, прежде чем заподозрить подвох с архивом. Понятно, что умные мальчики (и девочки) пользовались "tar -vtzf ... | less" и в такую ловушку не попадали.

Сейчас такой фокус не пройдет - и mc научился аккуратнее работать с архивом (там был какой-то косяк с обработкой ошибки от архиватора), и к закончившемуся месту в /tmp система гораздо более толерантна. Так что все-таки скорее поверю в некомпетентность администратора, чем в дефект именно PHP (хотя никаких иллюзий насчет его качества не имею).
Opera
 Москва
0
0
Mike Novikoff
> файл на 100 мегабайт нулей, который очень хорошо сжимался
Шутка, известная ещё со времён Нортон Коммандера 3.0. Один знакомый, некто Махус, на BBS упаковывал в архив досовскую CGA-шную игрушку «Паратрупер» размером в пару десятков килобайт. Но не в одном экземпляре, а в 1000. Каждый экземпляр лежал в отдельной вложенной директории и имел атрибут r/o. Для кого-то (тогда, в голом досе) было проблемой удалить это дерево. Даже я, хоть и не поимел реальной проблемы, но всё-таки матерился. ;)

> mc научился аккуратнее работать с архивом (там был какой-то косяк с обработкой ошибки от архиватора)
Там основная часть работы с архивами — в отдельных скриптах, которые во времена RH61 были на уровне стабов-заглушек. Чтобы нормально пользоваться, надо было самому их дописывать.

> и к закончившемуся месту в /tmp система гораздо более толерантна
Нынче будет ещё веселее, потому что в новых дистрибутивах /tmp обычно монтируется на /dev/shm (динамический виртуальный диск в RAM).
Linux Firefox
 Киев
2
0
Л. Янукович
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Путаете /dev/shm и tmpfs. /dev/shm монтируется как tmpfs.
Opera
 Москва
0
0
Mike Novikoff
А одно другого не исключает. tmpfs — тип файловой системы, /dev/shm — точка монтирования, /tmp — это 'mount --bind' на /dev/shm. Вот как у меня:

# lo:/etc/fstab -- mn@lo, 11'2009
#
# device mount-point fstype options dump fsck
#
none /dev/shm tmpfs defaults 0 0
/dev/shm /tmp tmpfs bind 0 0

Впрочем, это я сам делал, за дистрибутивы не поручусь. Видел там что-то похожее, но, возможно, без bind.

Да, забыл упомянуть главное: tmpfs имеет-таки лимит, всю оперативку не съест. Но всё равно её загаживание ещё менее приятно, чем на диске.
Windows Firefox
 Израиль
2
0
braintunic
> tmpfs имеет-таки лимит, всю оперативку не съест

Да, но этот лимит - половина всей памяти!
Тебе то не жалко - на персональной машине.
А вот на многопользовательском сервере позволять любому идиоту сожрать половину памяти да ещё за счёт "shared memory" - это жалко.

Поэтому лучше не смешивать /dev/shm и /tmp с помощью "bind mount", а монтировать их по отдельности, задав для каждого его собственный максимальный размер в /etc/fstab, примерно так:

none /tmp tmpfs size=1g,noatime,nodev 0 0
Windows Firefox
 Москва
1
0
abrrvalk
А проблема в пхп? Не припомню чтобы у меня пхп хоть раз ронял систему. В особо экзотических случаях падал апач. Но это реально была серьезная низкоуровневая экзотика. Переполнение логов тоже случалось и всё крутилось дальше, просто логи не писались.

У меня даже косые самописные модули ядра не роняли систему полностью.

Использование мутных функций как единственного условия выхода из цикла есть моветон.
Windows Firefox
 Los Angeles
3
0
stream
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Цикл по feof() и вообще использование feof() - это лакмусовая бумажка на быдлокодера.

Ибо чтобы определить конец файла, надо из этого файла что-то попробовать прочитать, из чего следуют два вывода. 1) если feof реализован с упреждающим чтением, он может точно так же заглючить/зависнуть, как и обычное чтение. 2) если упреждающего чтения в реализации этого языка нет, то первый feof после открытия файла совершенно бессмыслен, т.к. еще не было ни одного чтения. Вот типичный пример быдлокода на C/C++:

f = fopen(...)
if (f != NULL && !feof(f))
{
fgets(f, buf)
обрабатываем buf без проверок (ну ведь не eof, значит что-то должно было прочитаться!) и ВНЕЗАПНО падаем с трапом, если файл был 0 байт.
}

Плюс особенности реализации быдлокодерских языков. Смотрим доку на PHP-шный feof и видим БОЛЬШИМИ КРАСНЫМИ БУКВАМИ:

Warning

If the passed file pointer is not valid you may get an infinite loop, because feof() fails to return TRUE.
Windows Safari Chrome
 Санкт-Петербург
0
0
Eugene
Вообще-то buf выделен в другом месте и не перестал быть доступен втч в случае ошибки чтения. Просто данных нет сейчас, но вы держитесь, не падайте с трапом и БОЛЬШИМИ БУКВАМИ
Linux Firefox
 Киев
0
0
Л. Янукович
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
> Цикл по feof() и вообще использование feof() - это лакмусовая бумажка на быдлокодера.

Как нехорошо вы выразились, однако. Знаете, попытки навесить ярлык быдлокодера на других - это бумажка совсем даже не лакмусовая...

Что же до дела - вам, полагаю, незнакомы реализации eof()/feof(), которые сравнивают значение текущего указателя файла с его размером? Были такие варианты в однопоточных системах - раз процесс в системе может быть только один, а размер файла считан с диска в память при его открытии из структур файловой системы, то почему бы и не сделать отдельную функцию, которая будет сравнивать указатель с размером? Хорошо для циклов с постусловием, например.

Конечно, когда размер файла заранее не известен (например, читаем ответ из сети или читаем файл, в который параллельно кто-то записывает), feof() так просто уже не реализуешь, поэтому определение конца данных и "сдвинулось" в функции чтения.

Что же до приведенного вами фрагмента, его "качество" определяется отнюдь не использованием feof(), а отсутствием корректной обработки ошибок чтения (из которых попытка чтения после конца файла - только один из вариантов). Если feof() заменить на false, то это нисколько не "исправит" код.
Windows Firefox
 Los Angeles
0
0
stream
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
> Как нехорошо вы выразились, однако.

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

> Что же до дела - вам, полагаю, незнакомы реализации eof()/feof(), которые сравнивают значение текущего указателя файла с его размером?

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

> Что же до приведенного вами фрагмента, его "качество" определяется отнюдь не использованием feof(), а отсутствием корректной обработки ошибок чтения (из которых попытка чтения после конца файла - только один из вариантов)

С точки зрения аффтора этого кода (пример, к сожалению, реальный) - и, кстати, вашей концепции выше - он сделал все совершенно правильно и логично. Длина файла равна нулю, позиция в файле равна нулю - это же конец файла, так почему же оно трапается дальше при разборе прочитанной строки, блин? Строка гарантированно должна быть нормальной, этот файл вторая программа периодически параллельно пишет. Вот же загадка! Опять компилятор виноват.

И вот вы же сами говорите, что код плохой, нет проверок на успешность чтения и корректность прочитанных данных - так почему вы тогда обижаетесь на "лакмусовую бумажку"? Ведь все же совпадает с моим тезисом - если видишь в коде feof(), то и дальше будет все очень плохо.
Linux Firefox
 Киев
1
1
Л. Янукович
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Извините, вы себя так ведете, как будто этот код - ваш, и вам за него в свое время надрали уши старшие товарищи, а теперь вам за этот эпизод обидно.

Обратите внимание на мой ключевой посыл, все-таки: плохо отсутствие контроля ошибок, а не использование feof(). Ни в старых книгах, ни в старых практиках не могла встретиться эта связка - мол, если feof() вернул false, то и чтение будет успешным в любом случае. От того, что вы повторите свою логическую цепочку еще раз, она не перестанет быть ложной.
Linux Safari Chrome
 Москва
0
0
_
> я тут недавно попробовал наконец себе поставить систему разработки приложений для смартфонов, чтобы вникнуть в это полезное дело. Потратил весь вечер, поставил Eclipse, Andriod Studuio с SDK и еще тонны говна

Ооооо, это любимая мозоль "в квадрате" будет, тут никакого попкорна не напасёшься

> Впечатления скверные

Да кто бы сомневался...
Mac Safari
 Израиль
11
0
braintunic
> главный вопрос к PHP в другом: как это он так ловко написан, что при разрастании лога до 2Gb вешает аж всю систему?

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

Одним из таких популярных методов завешивания системы как раз и является отсутствие проверки на сбой результата функции "read" в бесконечном цикле.

Вспомни как два года ты назад писал программку на C для твоего роутера ASUS, для интеграции с Arduino.
Там у тебя был точно такой код с функцией "read" в бесконечном цикле и без проверки результата на сбой.
Тебе тогда долбили, что такая проверка необходима, иначе система может зависнуть, а ты отбивался всеми возможными способами.
Если я не ошибаюсь, ты в конце концов вставил там эту проверку только когда "сам Семеняка" сказал, что она нужна.

Так и здесь.
Ты ждал "указания авторитета" (Беркович) вместо того, чтобы сразу писать элементарно работоспособный код, с проверками результатов операций ввода/вывода.
Linux Safari Chrome
 Москва
1
3
Леонит Каганофф
Подвисшее приложение и упавшая система - разные вещи. Роутер Асус не падал от моих программ, в какие бы бесконечные циклы они не падали.

Вы можете попробовать написать мне в дневник ошибочный или бесконечный коммент. Но если он уронит сайт - это будет моя проблема, а не ваша.
Mac Safari
 Израиль
0
0
braintunic
> Роутер Асус не падал от моих программ, в какие бы бесконечные циклы они не падали.

Это тебе просто везло ;)

> ошибочный или бесконечный коммент

Неудачное сравнение.
Коммент здесь - это вводимые данные.
Естественно, никакие вводимые данные не должны завесить систему, это понятно.
А вот если ты разрешишь нам запускать на твоём сайте произвольные ПРОГРАММЫ, могу тебя заверить, что уронить твой сайт будет совсем не сложно ;)
Linux Safari Chrome
 Москва
0
1
Леонит Каганофф
PHP - интерпретатор. Текст программы для него - вводимые данные.

А насчет программ - ну заведи аккаунт на binoniq.net, там разрешен JavaScript, пиши любой код. Если вдруг тебе удастся повалить сервер или украсть данные - значит, это моя ошибка, как создателя системы.
Mac Safari
 Израиль
0
0
braintunic
> PHP - интерпретатор. Текст программы для него - вводимые данные.

Софистика и казуистика ;)

Текст программы на С тоже является вводимыми данными для компилятора.

Естественно, само чтение вводимых данных (при компиляции C-кода или при интерпретации PHP-кода) не может подвесить систему (тьфу, тьфу).

А вот когда странслированная программа начинает выполняться - тут уже системе можно начинать бояться ;)
Linux Safari Chrome
 Москва
0
0
Леонит Каганофф
Пример, пожалуйста. Вот я скомпилировал некую программу с ошибкой и запустил от пользователя. Что именно должна сделать программа, чтобы уронить систему и ядро Линукса из своей сессии?
Opera
 Москва
2
0
Mike Novikoff
Да элементарно. Не надо даже Си, достаточно двух байт на баше: "$0". При отсутствии должного ulimit (а по дефолту его обычно нет) этот двухбайтовый скрипт выжрет всю память и завесит машину. Я лично проверял.
Linux Firefox
 Boulder
2
0
Михаил (#1684620)
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Это ещё что. У меня как-то раз Линукс сам себя уронил аналогичным описанному PHP-шному способом. От плохо читающейся SD-карточки в /var/log/messages посыпался непрерывный поток ошибок, которые забили весь системный раздел (до этого там было гигабайтов пять свободно), в результате чего всё нафиг рухнуло...
Mac Safari
 Израиль
5
0
braintunic
Чтобы запутать, лучше запустить вот такой код:
:(){ :|:& };:

Причём тут даже скрипт не нужен, можно прямо с командной строки ;)
Opera
 Москва
0
0
Mike Novikoff
Красиво. Волшебный однострочник. :)
Только здесь, по-моему, форка не будет, потому что ':' это builtin. Или таки будет форк, за счёт пайплайна?
Ну, в любом случае, результат ясен, вопрос только в скорости. Медленная смерть в каком-то смысле даже подлее. :)
Mac Safari
 Израиль
1
0
braintunic
Ты не заметил, как мы переопределили builtin функцией? ;)
Linux Firefox
 Израиль
0
0
Mason
Шайтан. Смотрел, не понял что будет делать, и запустил. Побочный эффект - рано пошел спать. Так как убить руками эту заразу не смог. К утру комп перезагрузился.

А можно в порядке ликбеза объяснить по шагам?
Mac Safari
 Израиль
7
0
braintunic
> А можно в порядке ликбеза объяснить по шагам?

Это только на первый взгляд кажется непонятно, такой код bash:
:(){ :|:& };:

Для наглядности заменим двоеточие на символ "X":
X() { ... }; X

Теперь сразу видно, что мы определяем функцию с именем "X" (то есть, с именем ":") и затем немедленно эту функцию запускаем.

Теперь смотрим, что у нас в самом определении - в теле функции:
X | X &

Здесь наша функция рекурсивно вызывает сама себя два раза в пайплайне (|), запустившись в бэкграунде (&).

Что при этом реально происходит?

При запуске нашей функции она тут же запускает (fork) саму себя ещё дважды, что эффективно вызывает очень быстрое порождение большого количества процессов, которые съедают весь системный ресурс и вызывают зависание системы.

Чтобы это предотвратить, нужно настроить систему "limits" на ограничение махимального числа процессов для пользователя.
Windows Firefox
 Москва
0
0
abrrvalk
Возможность свалить систему как правило является платой за низкоуровневый функционал и/или производительность. Хотя к данному случаю это наверное не относится.
Windows Safari Chrome
 Москва
2
0
Иван
Тут беда может быть не в том, что ПХП умеет ронять линуха, а в том, что в данном конкретном месте система настроена так, что ПХП-интерпретатору позволено ронять ядро. И это вопрос (несколько вопросов) к локальному сисадмину: от чьего запущен апач (или заменитель), от чьего имени запускается ПХП, от чьего пущен sql?
На самом деле в этом направлении можно долго копать. И если система настроена "по учебнику", то может оказаться, что так-то работает, но на некоторых простых вещах падает.
Linux Safari Chrome
 Москва
0
1
Леонит Каганофф
Эта проблема общая, на каждом хостинге будет.
Linux Firefox
 Киев
2
0
Л. Янукович
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
А вот неправда же ваша.

Slackware64 14.2, httpd+mod_php из коробки, lleo.php:

===
while(true) {
error_log("fill me up scotty");
}
===

Бесконечный цикл - имеем.
В error_log пишем - есть такое дело.

За 30 секунд max_execution_time написало в error_log всего 1.5 Гб, маловато. После двух запусков:

===
$ ls -lah /var/log/httpd/error_log
-rw-r--r-- 1 root root 3.4G Sep 6 12:51 /var/log/httpd/error_log
===

Границу 2 Гб пересекло без малейшей печали, как видите. С системы вот этот комментарий пишу - повисаний не вижу.

Ну, и для чистоты эксперимента пробуем так:

===
$fd = NULL;
while(true) {
$s = fgets($fd);
}
===

30 секунд, полет нормальный, в лог записалось 1.7Гб:

$ ls -lah /var/log/httpd/error_log
-rw-r--r-- 1 root root 5.1G Sep 6 12:57 /var/log/httpd/error_log

Граница 4Гб также преодолена.

Насчет параметров системы - не очень, конечно, шустрая (i7-3770, 16Гб, WD2002FAEX), но несколько покруче бюджетных VPS'ов будет.

То есть, повторюсь - неправда ваша.
Linux Firefox
 Пенза
0
0
qwerty блинн которого сайт забыл
на каждом ГОВНОХОСТИНГЕ, которых сейчас большенсвто...
ведь что нужно юзеру? странчку показать... но если не делать какой никакой защиты от действий других пользователей то хостинг будет висеть чуть меньше чем постоянно.
Правильно настроив апач пых и прочие права можно добиться нормального разделения пользователей. Но это сложно... гораздо проще завести каждому виртуалку и дать в ней рута/админа! опять это же "круче и престижнее". Если юзер что накосячит - то это не затронет других юзеров, так что цель достигнута... а то что при этом нехилый оверхид - так пофиг, компы ща мощьные....
Opera
 Москва
0
0
Mike Novikoff
> нехилый оверхид - так пофиг, компы ща мощьные...
Эта чудесная мантра слышна уже лет 20 как минимум.

Со времён Win95. ;)
Мощные Пентиумы. Процессор на 166MHz. А на серверах — PPro, там и 200MHz бывает.
И винты большие. Не на 40 мегабайт, а аж на 400. А то и на все 500. Чего там экономить!
Windows Safari Chrome
 Санкт-Петербург
12
0
mister-grim
Э-э я, конечно, не настоящий сварщик, но мне кажется, что необработка хэндла файла на корректность — это показатель мастерства не создателя языка, но пишущего на нём программиста, и за побочные эффекты отвечает уже он, а не создатель языка.
Ну и есть документация, да, а не мутные «учебники».
Windows Firefox
 Черкассы
11
0
yzal
Лео, ну стыдно должно же быть жаловаться на то, что рафинированный пример из доки не очень работает в боевом окружении.

Что касается приведённого примера кода, он отлично заменяется на fpassthru безо всяких циклов.

Кстати, да, в хелпе есть пример с невалидным хендлом. Валидность хендла надо проверять. ВСЕГДА!
Windows Firefox
 Новая Зеландия
13
0
Torvin
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
> искал этот коммент, прежде чем начать писать свой

Вау, это первый такой случай в истории интернета! Можно взять автограф?
Linux Safari Chrome
 Москва
0
4
Леонит Каганофф
Что такое фпасстпру? Ваш стиль программирования реально позволяет передавать данные от некого источника прямо пользователю - без проверки, валидизации, подготовки и обработки?
Windows Firefox
 Черкассы
2
0
yzal
Читаем документацию

http://php.net/manual/en/function.fpassthru.php
Linux Safari Chrome
 Москва
0
7
Леонит Каганофф
Я не спрашивал вас, что такое фпастпру, я в курсе.
Я спросил, где вас учили веб-программированию, что вам кажется удачной идея передать данные из сомнительного источника напрямую в браузер посетителя без проверки и обработки?
Windows Firefox
 Черкассы
9
0
yzal
Лео, в вашем примере нет никакой обработки. Сомнительность источника тоже не известна.
Если вы хотите совета - дайте необходимую информацию. Если вы не хотите совета, хотите высказаться по какому-то поводу, да так, чтобы с вами обязательно соглашались, вместо того, чтобы указать на ваши ошибки - ну простите, тогда я зря зашёл.
Linux Safari Chrome
 Москва
1
4
Леонит Каганофф
Так это пример не мой. Это пример из справочника, который в отдельных случаях дает падение всей системы. Вы вообще прочли, о чем пост?
Windows Firefox
 Черкассы
10
0
yzal
Я прочёл пост.
Пример из справочника должен проиллюстрировать работу функции, как тут уже написали, в идеальных условиях, чтобы глядя на пример было понятно, что она делает. На этом всё.

Работа в реальных условиях - это совсем другая песня. В реальных условиях всё надо проверять, потому что на каждом этапе что-то может пойти не так. Например, закончиться выделенный пул хендлов под нагрузкой.

Всё, ушёл на работу, до свидания.
Windows Safari Chrome
 Каменск-Уральский
0
0
D.iK.iJ
Не уходите! :)
А если, например, пользоваться file_get_contents. Там что нужно проверять?
Windows Safari Chrome
 Санкт-Петербург
0
0
Шура
вот. я все ждал, вспомнит ли кто эту функцию ;)
Windows Firefox
 Москва
2
0
abrrvalk
Пример в хелпе это абстрактная иллюстрация работы функции, а не код для вставки.
Windows Firefox
 Черкассы
0
0
yzal
И, кстати, есть ещё более простой способ:

http://php.net/manual/en/function.readfile.php
Linux Safari Chrome
 Москва
0
0
Леонит Каганофф
Так речь вообще не о файлах. Кому интересны локальные статические файлы собственного сервера? Вы попробуйте написать систему авторизации и автопостинга на пяток внешних серверов разных систем и протоколов, и поймете, о каких функциях речь.
Windows Firefox
 Черкассы
0
0
yzal
Писал и неоднократно, проблем не испытывал.
Поймите, я вижу, что написано - об этом и отвечаю, а не фантазирую, что на самом деле человек имел в виду, когда писал.
Windows Safari Chrome
 Каменск-Уральский
0
0
D.iK.iJ
А почему не file_get_contents?
Windows Firefox
 Черкассы
0
0
yzal
И там же, из доки по feof, пример для... ммм.. кодеров:

If the passed file pointer is not valid you may get an infinite loop, because feof() fails to return TRUE.

Example #2 feof() example with an invalid file pointer
&lt?php
// if file can not be read or doesn't exist fopen function returns FALSE
$file = @fopen("no_such_file", "r");

// FALSE from fopen will issue warning and result in infinite loop here
while (!feof($file)) {
}

fclose($file);
Linux Safari Chrome
 Москва
0
0
Леонит Каганофф
Длкументации разные бывают.
Но вам самому как кажется, feof(false) === true - это от большого ума разработчиков PHP происходит?
Windows Firefox
 Черкассы
2
0
yzal
Т.е. идея проверить результат, который указан в документации (логичным он вам кажется или нет) - вам не нравится? Лучше писать гневные статьи?
Linux Safari Chrome
 Москва
1
8
Леонит Каганофф
Представьте, что вы наняли специального человека на конвейер, который проверяет перед закаткой, положены ди в банку шпроты. Если положены - нажимает кнопку ДА, закатать. Если не положены - кнопку НЕТ. В какой-то момент на конвейер падает кусок собачьего говна, но ваш проверяющий все равно нажимает ДА. Конвейер в говне, закатывающие лопасти в говне, производство остановлено.

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

А у вас вопросов нет, вы сектант документации. Если при приеме на работу не требовался сертификат специалиста по говну, то жми кнопку на любое непонятное говно.
Mac Firefox
 Киев
4
0
Pavel
Я вижу ситуацию чуть иначе.
Автоматический станок определяет, есть ли в банке шпроты, или она пустая. Если шпроты - закатывает, если пустая - отправляет на второй круг, доложить шпроты.
И вот появляется банка с собачьим дерьмом. Станок её заворачивает по линии "нет шпрот", она уходит на второй круг, перед этим продувается горячим воздухом пылесосом с вентилятором, и весь завод со всеми шпротами оказывается в говне.
И возмущённый директор завода кричит: "станок должен был банку с собачьим дерьмом определить как банку со шпротами, тогда только одна банка с дерьмом пошла бы в магазин, а так всё оказалось в дерьме!".
И это неправильно. Нужно было либо в станок явно заложить реакцию на ситуацию "в банке что-то есть, но не шпроты", либо проверять это заранее, либо потом (перед продувкой).

Да, это классический undefined behaviour. В том же C играми с undefined behaviour можно получать очень любопытные эффекты, как когда-то в играх с ЕГГОГ-ами на MK-51.
Mac Firefox
 Киев
0
0
Pavel
И конечно, никакой пользовательский процесс не должен ронять систему, а уж тем более на хостинге.
Если пользовательский процесс может уронить систему или если php запущен от рута, значит, система насетаплена некорректно, и виноват в этом никак не php.
Mac Safari
 Самара
0
0
Bolk
$ php -r 'feof(true);'
PHP Warning: feof() expects parameter 1 to be resource, boolean given in Command line code on line 1

Warning: feof() expects parameter 1 to be resource, boolean given in Command line code on line 1

Не нужно отключать варнинги.
Linux Firefox
 Киев
0
0
Л. Янукович
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
И тут вмешаюсь. Говорить о валидации-шмалидации и использовать fopen() на удаленный сервер - это взаимоисключающие параграфы, извините.
Windows Safari Chrome
 Москва
1
0
oblamingo
Ллео, ты двигаешься совершенно не в том направлении!
Давно пора идти пить со мной пиво, пока я в москве работаю, а не всякой ерундой время убивать ;)
Linux Safari Chrome
 Москва
1
0
Леонит Каганофф
О!
Linux Safari Chrome
 Москва
0
0
oblamingo
Ну дыг и?..
Windows Safari Chrome
 Омск
0
0
Vitaly
Примерно для этих целей я попробовал http://ai2.appinventor.mit.edu/
Сначала кажется что это аццкий пипец, но потом ничего втягиваешься, расслабляешься и начинаешь получать удовольствие.
Главное тут курить то, что курили разработчики.
Windows Safari Chrome
 Сергиев Посад
5
1
шк мышь 2
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
И этот человек когда-то с презрением, "через губу" говорил "а, не получится книгу написать - пойду в программисты".
"Это не я придумал это примеры из учебников" - гениально.
Можно еще попав в ДТП так же говорить, "так было в учебнике написано".
Windows Safari Chrome
 Домодедово
20
1
id
Собственно говоря, о чем пост-то? :) Lleo допустил каноничнейшую, хрестоматийнейшую ошибку ламера-первокурсника, описанную во всех учебниках на первой странице жирным шрифтом (единственный во всей Ойкумене непонятный учебник, на который он ссылается - не в счет): использовал указатель сразу после его получения без проверки его валидности.
А виноват почему-то PHP... А если бы с эзепшеном в аналогичной ситуации вылетел бы C - виноват был бы C. А ругнулся бы Basic - ну уж конечно, его авторы натуральные лохи! :)

Выделил память - проверь, выделилась ли она, и сколько именно. Открыл файл - проверь, открылся ли. Прочитал сто байт - проверь, прочиталось ли, и именно ли сто... Принципы, которые любой программист затвердил с детства!

Но нет - до сих пор некоторым "компилятор виноват"... :)
Windows Safari Chrome
 Москва
6
0
hat
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?


Windows Firefox
 Москва
0
0
Чук
БТВ. Есть у кого 3D моделька этого чуда ?
Windows Firefox
 Австралия
3
0
Идиотъ
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Конкретно этого, или подойдёт любой бесплатный бегемот с отрезанной задницей?
Linux Safari Chrome
 Ижевск
0
0
Игорь Тарасов
Во-первых, этот же пример в официальной документации: http://php.net/manual/ru/function.fgets.php#refsect1-functio[...] там он совсем другой.

Во-вторых, зачем тут вообще fgets,а не fread?

В-третьих, как уже верно сказали, если файл просто отдаётся, то почему не fpassthru?

Короче очень странные жалобы.
Linux Ubuntu Firefox
 Эстония
0
0
mm3
Java - это не только андроид, он так же популярен в написании серверных приложений, если начать его использовать, то может возникнуть желание переписать движёк своего сайта на java.
XML там это как CSS в javascript, ещё один ни на что не похожий язык описывающий не поведение а вид.
PhoneGap и все его родственники это по сути своей браузер в котором запущен мобильный локальный сайт, вроде как работает, вроде как работает везде, вроде как имеет все нужные вызовы, но заставить это работать ожидаемо на всех нужных платформах мало кому удаётся, тем более что отлаженное в вебе не обязано будет работать на той или иной платформе.
Windows Safari Chrome
 Нижний Новгород
1
0
alxumuk2
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
2Гб - похоже на 32х битное ограничение. Виртуалка x32 или x64?
Windows Firefox
 Москва
1
0
сам шит
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Ну так нужно брать нормальный пример из официальных доков и не пастись на допотопных помойках

$handle = @fopen("/tmp/inputfile.txt", "r");
if ($handle) {
while (($buffer = fgets($handle, 4096)) !== false) {
echo $buffer;
}
if (!feof($handle)) {
echo "Error: unexpected fgets() fail\n";
}
fclose($handle);
}


http://php.net/manual/en/function.fgets.php
Windows Safari Chrome
 Москва
0
0
Oleg
Можно попробовать готовый движок Unity.
Он конечно для игр делался, зато безболезненно билдит сам и под иос, и под андроид.
В нём можно не только на C#, но и на JS писать.
И гуи можно прямо руками собирать красивые.
Хотя не знаю, работает ли он под линуксом.
Mac Safari Chrome
 Москва
0
0
Muzhikant
Unity - прекрасная вещь, но для софта тяжеловат, всё же на игры заточен. И нет, не работает под линуксом.
Linux Safari Chrome
 Латвия
0
0
4aka
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Если критичен размер, и нужнo что б работало быстро и на разных платформах - можно попробовать libGDX. Хоть и Java, но OpenSource, чистый код, Android, iOS, Desktop, HTML5, очень быстрый рендеринг, бинарник на андроиде может быть где-то мегабайт. У меня игруха-миллионник на goggle play - всего 2 мега, но с гугловскими либами, которые дофига весят. Комьюнити толковое, а не кокосовское-китайское.
На нем даже десктоповые приложения пишут, например Spine2d http://esotericsoftware.com

Есть свой GUI движок со скинами, если разобраться - то довольно мощная штука и сразу GL-accelerated.
Windows Firefox
 Австралия
1
0
Идиотъ
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
> что раз я хорошо владею HTML и JS

Хорошо владею. Хорошо. Владею. Хорошо. Может, лучше не приложения писать, а тренинги личностного роста и повышения самооценки организовывать? :)
Windows Firefox
 Москва
0
0
Чук
Лео, не знаю как там в пехепе, но валидация указателя при получении его из внешней функции как-бэ необходима.
Windows Firefox
 Los Angeles
0
0
Tapac
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Если не хочется Java + XML, то можно попробовать Kotlin + Anko для Android разработки.
Kotlin (https://kotlinlang.org/) - улучшенная и менее многословная Java.
Anko (https://github.com/Kotlin/anko) - dsl-like framework для описания UI и биндинга экшенов.

И то, и то разрабатываются нашими ребятами в JetBrains, что означает супер-крутую поддержку в Intellij IDEA и Android Studio (для анко есть свой плагин с превью UI).

Есть 100500 туториалов с разработкой на котлине под андройд (например, https://datarockets.com/blog/kotlin-in-android-development).
Windows Firefox
 Москва
1
0
alexander543254
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
использую в 99% простых случаях file_get_contents, во славу сотоны, он сам всё проверяет там. в непростых к нему можно context написать.
Linux Safari Chrome
 Москва
1
0
Леонит Каганофф
Вы удивитесь, но бывают хостинги с такой версией Php, где этой функции нет, а движок обязан работать и там.
Windows Firefox
 Раменское
0
1
oncle t
Ява предназначена для отличников, людей, которым не влом постоянно учить новые схемы, но вот разбираться в чём-то фундаментально и системно -- влом.
Linux Safari Chrome
 Mt Laurel
0
0
DL
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Это вы про Javascript наверно, с его зоопарком фреймворков. В Жаве такое же было лет 5-10 назад, сейчас всё устаканилось потиху.
Windows Firefox
 Раменское
0
1
oncle t
Я, наверное, скорее про мобильную и веб-разработку. И про яву, и про яваскрипт, про всех них. Возможно, конечно, у меня слишком низкий ценник, но толковых сишников я за такой нахожу, а яверы -- сплошные зубрилы. Всегда обращаю внимание, потому как у меня прочная взаимная нелюбовь с людьми без системного мышления.
Linux Safari Chrome
 Mt Laurel
0
0
DL
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Возможно, что на яву сейчас больше запрос рынка, чем предложение, поэтому яверские зп растут и они к вам не идут.

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

Я за собой такое же замечал -- я в жаве профи, и неохота "опускаться" в node.js экосистему чтобы конкурировать на равных со школьниками. Гораздо лучше если бы они пытались со мной конкурировать в жаву. Да только рынок не туда идёт, похоже.
Windows Firefox
 Раменское
0
0
oncle t
Речь не о компетентности! Только о типе познавательной системы человека. Зубрилы, как правило, гораздо лучше выполняют типовые задачи, что, собственно, отвечает и спросу на рынке. И, мне кажется, за корреляцией тут можно увидеть причинность, всё-таки любой продукт адаптируется под аудиторию.
Это, в общем, нормально в человеческом обществе, когда большинство занято типовыми задачами. Но Леониду, насколько я понимаю, интересны как раз всякие извращения.
Mac Safari Chrome
 Нижний Новгород
2
0
tartaglione
Удивительно близко к сердцу народ принял этот вроде бы не вброс.

Я вот несколько лет писал на ассемблере, потом лет семь на C, потом ещё дольше на перле, потом меня заставили выучить руби. А по мелочи работал на PHP, Алголе, Фортране, Форте, Лиспе, баше и уж не помню на чём. И всегда считал, что главное не язык, а голова, в которой язык. Был бы хороший алгоритм, а реализовать можно на чём угодно. А из языков для местных программистов главный - русский, а также неизбежный для прогера английский. Бурная дискуссия о сравнительном анализе языков мне несколько смешна поэтому.

А по существу: я сам последним из языков выучил JS и собираюсь на нём программировать. Правда, в среде node. У меня назрели задачки, когда нужны многие тысячи параллельных SNMP-опросов и вообще запросов ввода/вывода, а распараллеливать по процессорам смысла нет, тем более что процессор всё равно один, да ещё и виртуальный. Так что мой выбор - Event Loop, а node и есть один большой Event Loop, там всё под это заточено. Есть Event Loop и в Ruby, но неродной, ограниченный и глючный, я пробовал.

JS, несомненно, самый кривой и недоделанный язык, какой мне попадался. Но всё равно от него деваться некуда. Все его используют, даже если лень учить. Да и довольно забавный язык, если с ним познакомиться поглубже, особенно с последними веяниями, хотя они все криво цельнотянуты из других языков. И сейчас JS быстро развивается, всё меняется, что тоже может раздражать, и уже многих раздражает.

Интерпретатор JS "v8" - очень быстрый интерпретатор, чуть ли не самый быстрый интерпретатор вообще, и не только для JS.

Главное, что в node пугает - это что весь ввод/вывод асинхронный, и вложенные программы завершения убивают читаемость. Хотя и в браузере JS выглядит почти так же. Но с этим успешно уже борются. Я остановился на варианте Промисов/Генераторов, который уже сейчас позволяет писать как бы линейный код, без углубления в программы завершения. Скоро будет ещё удобнее, как в c#.

Совсем уж для простоты, для части ввода/вывода в node есть синхронные варианты, например, работы с файлами.

Мне, как проникшемуся уже идеологией node, завязка драмы кажется дикой, потому что на веб-сервере, как я понял, выполняется в цикле длительный блокирующий ввод/вывод. Нет, я понимаю, так проще и нагляднее для человека, но для сервера и, в итоге, для юзера это бессмысленная трата ресурсов.

Правда, я выбирал Node/JS сам, других любителей вокруг нет. Может, просто лажанулся. Но мне пока нравится.

Я бы не рекомендовал Node/JS как первый язык для ламера. Но если уже хорошо знаешь JS и не хочешь учить лишние языки, то Node позволяет создавать как веб-серверы, так и автономные приложения, и последними я сейчас занимаюсь.
Linux Firefox
 Welmington
0
0
Страга Севера
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Будучи рубистом, все хочу покопать ноду. Не могли бы вы посоветовать, что почитать по ней? Клиентский JS знаю на четверку =-)
Mac Safari Chrome
 Hicksville
0
0
Artur Paikin
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
По приложениям для смартфонов и планшетов есть два хороших пути:

1. React Native — из компонентов в любом редакторе собирается приложение, которое компилируется в нативные элементы, и будет работать и на айфоне, и на андроиде. То есть не веб-вью, а прямо настоящие родные кнопки, списки и все такое, свое для каждой платформы. Это сложнее, чем веб-вью, но будет работать быстрее и не надо интерфейс рисовать заново. Для простых приложений для себя — умным домом управлять — я бы взял PhoneGap или что-то поновее, или вообще остановился на веб-странице.

2. Есть правильное мнение, что проприетарные приложения в 90% случаев вообще не нужны, все должно работать на вебе, в браузере. Сайты должны устанавливаться на устройство и уметь работать оффлайн, отправлять уведомления, GPS, камера и так далее. Такая возможность была всегда, но она работала плохо, а недавно появились Service Workers — они позволяют делать качественные оффлайн приложения, которые ставятся на андроид. Эппл не спешит поддерживать сервис воркеры (в том числе, потому что это непростая спецификация из-за места на диске, безопасности и прочего), ну и не пускает чужие браузеры вообще, не дает доступ к камере и микрофону из браузера. Это грустно. Пример веб-приложения, которое можно установить на андроид, и оно будет быстро и хорошо работать оффлайн, как нативное: http://pokedex.org. А движение называется PWA — Progressive Web Apps — просто сайт-приложение, как gmail, работает в любом браузере, но может установиться на домашний экран, если нужно.

Развернутый комментарий по теме: https://joreteg.com/blog/why-i-switched-to-android#so-why-an[...]
Linux Ubuntu Firefox
 Москва
0
0
Леонит Каганофф
Я бы уточнил так. Допустим, есть человек (я), который отличается следующими характеристиками:

1) Занимается хобби в одиночку: нет чужих заданий, начальников, коллектива, нет коммерческой цели.

2) Не любит (возможно, по причине плохой памяти?) учить новые языки, синаксисы, фреймворки, учебники и чужие схемы. Ему проще один раз понять принцип и сделать все самому, чем изучать и прилаживать чужие решения.

3) Есть Линукс 32. Нет чтению документации на английском. Мало времени. Есть знание JS, PHP и C (с брезгливостью).

Что бы я хотел уметь делать? Не динамические, не игровые приложения. Вряд ли работа с графикой, картами и датчиками. В основном - работа с внешним сервером, может в будущем с локальными устройствами (USB). Пример: что-то типа клиента для написания и чтения комментариев дневника под все платформы - для себя и читателей дневника. Висит в бэкграунде - бам! - вам пришел комментарий. Основной бэкэнд на серверах. На клиенте: написать ответ (в том числе в офлайне, как появится сеть - отправить), посмотреть другие комментарии, посмотреть с сервера таблицу последних данных погодной станции, сжать и отослать картинку и т.п.

ВОПРОС: Какую бы систему разработки, основанную на JS, вы бы для такого человека посоветовали с минимальным порогом вхождения?
Windows Firefox
6
0
Идиотъ
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Рядом, рядом - PHP с JS.
Оба, оба - лютое говно.
Writing быдлокодинг - yes! yes! yes!
Reading docs in English - no! no! no!
Opera
 Москва
1
0
Mike Novikoff
> вы сектант документации.
> Нет чтению документации на английском.

Из Шинкарёва, «Папуас из Гондураса»:
На экране толпа людей в тельняшках и ватниках, с плакатами: "Stop The Neutron Bomb!" ("Митьки всегда будут в говнище", англ.). Голос диктора за кадром: "Мощная волна манифестаций против бесчеловечности..."
Linux Firefox
 Севастополь
0
0
Юрий Шимановский
Создателей учебника нужно пороть публично плетью на площади Нахимова. Непроверка открытия сносит целые сервера. Особенно, если по записи. Особенно, если от рута. Функция feof идет из C, претензий нет.
Windows Firefox
2
0
Идиотъ
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Вчерашний день, часам к семи,
Зашёл я на Нахимова.
Там били блоггера плетьми,
Секли его, родимого.

В толпе судачили: "За что?" -
"Не проверяет feof!"
И я сказал коню в пальто:
"Гляди - Каганов Лео."
Windows Safari Chrome
 Германия
1
0
Vladimir Deminenko
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Linux Ubuntu Firefox
 Москва
0
0
Леонит Каганофф
Иными словами, надо смотреть в сторону Cordova?

Начинающему нельзя начинать с изучения чьей-то новосозданной клон-беты, а следует взять за основу продукт, который прошел обкатку и накопил в сети множество статей, дискуссий и примерно на русском. Я прав?
Windows Safari Chrome
 Германия
0
0
Vladimir Deminenko
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Статья на хабре полутора-годовой давности.
Посмотрите ещё готовые проекты:
http://showcase.ionicframework.com/
Windows Safari Chrome
 Москва
0
0
maniac
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Присоединяюсь к говорившим то же, что и я дальше. Простейшая ошибка, которая избегается чтением примера официальной документации. А желание языка без возможности выстрелить себе в ногу равносильно желанию бухгалтера/секретаря/подставьте-нужное иметь кнопку "сделать хорошо". Сам сегодня забыл проинтовать переменную, в результате у меня стартовое значение в цикле for стало $i=true, посему $i++ Превращал $i так же в true. А т.к. $i после передачи в метод интовался, у меня был цикл из единиц. Или старый сайт, что я поддерживаю. Говнокод на говнокоде сидит и говнокодом погоняет. Но при чём тут PHP? Есть куча вариантов напороться на бяку в других языках. Например, всеми любимые "волшебные кнопки". Кстати, у нас идёт разработка под веб, винду, андроид и эппловские гаджеты. А центр всего - PHP, как RESTFul сервис, что отвечает за ввод-вывод данных, внутреннюю логику, ну и за вебморды (в паре с JS). Если бы Айседора Дункан выжила, что бы она стала ругать: шарфы, автомобили, или себя?
Windows Firefox
 Германия
0
0
Woron
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Леонид, сразу видно, что Вы креативщик, а не программист. Для программера проверка ошибок при вызове всего и всея является рутинным делом.
Linux Ubuntu Safari Chrome
 Греция
1
0
Azimut
Он и не писатель и не человек :)
Мне же рассказ про поиск и нахождение причины понравился.
А в ленте сплошь пророки и крутые хакеры, знающие об этом баге и везде проверочки у них, да ?

И сразу работающий код под все платформы получается, и под MIPS и под сурерЭЧЬ ?
Linux Ubuntu Firefox
 Германия
0
0
Woron
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Дык и мне рассказ понравился! Я вообще всё лёнино творчество глубоко ценю и уважаю.
Mac Safari Chrome
 Санкт-Петербург
0
0
acartox
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Ну дык это давно известно! Ллео - жуткий говнокодер, но любим мы его не только за это.
Linux Ubuntu Safari Chrome
 Москва
0
0
Зокалебала кревая авторизацея
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
А если функция вывода в лог сообщения об ошибке повиснет с ошибкой?
Linux Ubuntu Safari Chrome
 Москва
2
0
Зокалебала кревая авторизацея
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
От не надоть тута рассказывать о том, что пхп - язык хороший, просто программисты криворуки.

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

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

Наглядно? Наглядно.
При этом "мертвый уже лет 20 perl" прекрасно справляется с этой ситуацией: ну забыли проверить открытие файла, ну что поделать - на нет и суда нет, цикл закончен, не начавшись.

А все почему - потому что язык такой. Целевая аудитория дает о себе знать.

Недавнось копал один не слишком древний код - на пхп, ага.
Вот оченьно интересна, ход мыслей автора какой был? Зафигачить десяток тысяч строк кода в две процедуры, повторяющиеся блоки повторять копипастой, работать с глобальными переменными, причем ИНОГДА (!) внутри блока переопределять их значения, временно.
Не, нуачо, язык позволяет жеж.
И индусничать с алгоритмами можна вовсю.

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

А все почему - потому что пхп язык-от простой, к пониманию не требовательный, накопипастил чегойта - оно и фурыкнуло.
Opera
 Москва
0
0
Mike Novikoff
> Тута ессный отбор работат: если программу на пхп может наваять даже криворукий е.. дибил - то будьте уверены, чаще всего вам будут попадаться программы, придуманные и реализованные именно криворукими дибилами.
Стопудово. «Сделайте систему, которой может пользоваться любой идиот, и только идиот захочет ей пользоваться». ;)

> А все почему - потому что пхп язык-от простой, к пониманию не требовательный, накопипастил чегойта - оно и фурыкнуло.
Вспоминаю, как в 14-летнем возрасте изучал бейсик (на Бэкашке). Мой первый язык вообще. С одной стороны, ему спасибо за возможность сразу почувствовать себя программистом, автором работающих программ, никакой теории совсем не изучая, прямо с кондачка. С другой стороны, в 15 лет уже знал поговорку, что никто старше 16 не пользуется бейсиком. Тогда ещё не верил, но в 17 лет полностью подтвердилось. ;)

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

Не побоюсь повториться: "Митьки всегда будут в говнище", англ. ;-)
Firefox
 Ростов-на-Дону
1
0
priehali
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
target="_blank" тоже не безопасен ("https://habrahabr.ru/post/282880/")… Дебильный HTML.
Linux Safari Chrome
 Москва
0
0
iisus
Если есть Unity для линукс, я бы посоветовал попробовать его. JS там поддерживается, а билдить он может на все мыслимые платформы. Api там обширное, и для любой задачи найдётся нужная функция. Я вот, например, сейчас активно юзаю видеокарточку в качестве процессора, раз в 20 быстрей считает.
Windows Safari Chrome
 Москва
0
0
V.exeR
Есть вообще Construct 2 - полуграфический недоязык, который можно понять за вечер-другой, и при компиляции он дает опять же html5+js. Который потом еще и портировать можно куда угодно через еще одну приблуду, от intel.

всего комментариев: 192

<< предыдущая заметка следующая заметка >>