логин: 
Другие записи за это число:
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-портов? В правильном ли направлении я иду? Что посоветуете?

<< предыдущая заметка следующая заметка >>
пожаловаться на эту публикацию администрации портала
Страницы, которые привлекли мое внимание за последние дни, рекомендую:
2017-11-22 В июне 1982
архив ссылок
Оставить комментарий
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
Leonid Kaganov
А есть ли серьезные преимущества по скорости и размеру приложений? Просто все равно же Андроид выполняет Java, а не бинарник. Значит, C будет транслировать в Java, и это ад?
Windows Firefox
 Новая Зеландия
0
0
Torvin
Конечно же Андроид умеет выполнять бинарники https://developer.android.com/ndk/index.html
Linux Ubuntu Firefox
 Москва
0
0
Leonid Kaganov
Ага, только под каждую модель смартфона понадобится свой бинарник :)
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
[email protected] (dlazerka)
Xamarin уже не модно, у меня такое чувство что проект потиху затухает.
Сейчас модно React Native.
Mac Safari
 Москва
3
0
Дмитрий-3
К тому моменту как Лео прочитает этот коммент, реакт уже тоже станет устаревшим говном. Будет модной какая-то ещё новая хрень.
Linux Safari Chrome
 Mt Laurel
0
0
[email protected] (dlazerka)
Так и есть, я сам этому не рад. Но мне нужно учить, иначе вылечу с рынка, 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
m (ngs-govno)
> вы даже сможете писать 3D-игры на JavaScript

Ну, именно это ему и нужно. Он так даже и написал
Linux Ubuntu Firefox
 Москва
0
0
ignik
если perl знаешь, то HTML::Mason
Люди делали ;-)
Linux Ubuntu Firefox
 Москва
0
0
Leonid Kaganov
Не знаю, и учить новый язык лень. Знаю PHP, JS, немного C (но не люблю), и несколько ассемблеров, сильно подзабытых. Не хочу учить Java, Perl, Python, Go и прочее - оно появляется и умирает быстрее, чем я его уcпеваю хорошенько изучить на правах хобби в свободное время ;)
Linux Firefox
 Boulder
4
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").
Linux Firefox
 Boulder
1
0
Михаил (#1684620)
Да я вообще-то не фанат Перла, хоть и пользуюсь им регулярно. :–) Просто высказывание «знаю PHP, а Perl учить не хочу, потому что он весь такой эфемерный» весьма поразило.

Про Пифон я, честно говоря, думаю лучше, чем про Перл — он более логично организованный и без тяжкого наследия точек с запятой и фигурных кавычек. Но в нём весьма странные правила видимости переменных, менее удобно работать с регулярками (обратная сторона организации), и он почему-то медленнее Перла. Но это всё к делу не относится, потому что он на PHP, JS и C мало похож — Леониду его действительно «учить» пришлось бы.
Windows Firefox
 Великобритания
0
0
SPQR_Voldi (#6305954)
ksh водится в таких местах, где тоже проживёт ещё очень долго.
Linux Safari Chrome
 Петрозаводск
0
0
igor.pellinen
Лол, перл уже лет пятнадцать как умер, вылезайте из анабиоза.
Linux Firefox
 Boulder
0
0
Михаил (#1684620)
Обоснуй!
Windows Firefox
 Санкт-Петербург
0
0
тупиточка
Он не умер, он просто так пахнет.
Linux Ubuntu Safari Chrome
 Кемерово
3
4
Denis
Ну так и нахуя?! Не хочешь учиться -- и не надо!
Только не надо увеличивать и так огромную армию быдлокодеров!!!
Windows Firefox
 Новая Зеландия
3
1
Torvin
Только сами быдлокодеры могут быть против увеличения армии быдлокодеров. Потому что только им они могут составить конкуренцию.
Linux Ubuntu Safari Chrome
 Кемерово
0
1
Denis
Windows Firefox
 Москва
0
0
abrrvalk
«Только сами быдлокодеры могут быть против увеличения армии быдлокодеров. Потому что только им они могут составить конкуренцию.»

Да. Но надо добавить "при разборчивости заказчика". А это выполняется далеко не всегда.
Linux Safari Chrome
 Москва
0
0
Leonid Kaganov
Это что ещё за боль, что за крик души сейчас вырвался? :)))
Так страшно, что я отберу у вас работу? В противном случае какая вам разница, чем в свободное время увлекается литератор Каганов? :)))
Linux Ubuntu Safari Chrome
 Кемерово
0
0
Denis
Нет не страшно :-)
Я живу в таких ебенях, где даже быдлокодеры в цене.
Просто непонятно зачем заниматься чем-то на полшишечки??
Например: я увлекаюсь вырезанием на токарном станке по дереву, но учится как правильно делать я не хочу - поэтому такая хуйня получается :-)
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 (#6354847)
PhoneGap уже не катит - глюковый и медленный

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

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

Кстати сейчас модно React Native. Правда, его тоже наверно нужно будет учить, не знаю насколько долго.
Mac Safari
 Харьков
0
0
Alex 77752 (#6373167)
А в чем сложность реакта? Я лично знаю одного 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
 Мытищи
1
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
Leonid Kaganov
Это как?!
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
Микротигра (#6302317)
эклипс не нужен, андроид студия она на intellij idea же.
Linux Safari Chrome
 Москва
3
0
Katsuk
Разучи уже питон, чтоле. За сутки вполне можно управиться для написания вполне сносных программ. Он есть на любую платформу, он никуда не денется, он мощный и работает по скорости на уровне си/дельфи приложений. Хочешь - из командной строки, хочешь - графический интерфейс с кнопочками сделай.
Linux Ubuntu Firefox
 Москва
1
0
Leonid Kaganov
"Давайте спорить о крахе и подъеме Голливуда, не видев ни одного фильма" (с)Жванецкий

Ты сам сперва освой питон и напиши на нем хоть одно работающее приложение под все платформы, тогда сможешь всем рассказывать, как легко управиться за сутки.
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
Анонимка (#6372224)
Linux Safari Chrome
 Белоруссия
9
0
oddtwelve
Ну вообще как минимум странно ругать язык, когда кодишь по хз кем написанное учебнику. В официальной документации все есть http://php.net/manual/ru/function.fgets.php
Linux Ubuntu Firefox
 Москва
2
5
Leonid Kaganov
Да шо вы говорите? ;)))

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

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
Leonid Kaganov
Иными словами, главный вопрос к 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 (хотя никаких иллюзий насчет его качества не имею).
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 Safari Chrome
 Москва
0
0
m (ngs-govno)
> я тут недавно попробовал наконец себе поставить систему разработки приложений для смартфонов, чтобы вникнуть в это полезное дело. Потратил весь вечер, поставил Eclipse, Andriod Studuio с SDK и еще тонны говна

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

А вот когда странслированная программа начинает выполняться - тут уже системе можно начинать бояться ;)
Windows Firefox
 Москва
0
0
abrrvalk
Возможность свалить систему как правило является платой за низкоуровневый функционал и/или производительность. Хотя к данному случаю это наверное не относится.
Windows Safari Chrome
 Москва
2
0
Иван
Тут беда может быть не в том, что ПХП умеет ронять линуха, а в том, что в данном конкретном месте система настроена так, что ПХП-интерпретатору позволено ронять ядро. И это вопрос (несколько вопросов) к локальному сисадмину: от чьего запущен апач (или заменитель), от чьего имени запускается ПХП, от чьего пущен sql?
На самом деле в этом направлении можно долго копать. И если система настроена "по учебнику", то может оказаться, что так-то работает, но на некоторых простых вещах падает.
Linux Safari Chrome
 Москва
0
1
Leonid Kaganov
Эта проблема общая, на каждом хостинге будет.
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 блинн которого сайт забыл
на каждом ГОВНОХОСТИНГЕ, которых сейчас большенсвто...
ведь что нужно юзеру? странчку показать... но если не делать какой никакой защиты от действий других пользователей то хостинг будет висеть чуть меньше чем постоянно.
Правильно настроив апач пых и прочие права можно добиться нормального разделения пользователей. Но это сложно... гораздо проще завести каждому виртуалку и дать в ней рута/админа! опять это же "круче и престижнее". Если юзер что накосячит - то это не затронет других юзеров, так что цель достигнута... а то что при этом нехилый оверхид - так пофиг, компы ща мощьные....
Windows Safari Chrome
 Санкт-Петербург
12
0
mister-grim
Э-э я, конечно, не настоящий сварщик, но мне кажется, что необработка хэндла файла на корректность — это показатель мастерства не создателя языка, но пишущего на нём программиста, и за побочные эффекты отвечает уже он, а не создатель языка.
Ну и есть документация, да, а не мутные «учебники».
Windows Firefox
 Черкассы
11
0
yzal
Лео, ну стыдно должно же быть жаловаться на то, что рафинированный пример из доки не очень работает в боевом окружении.

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

Кстати, да, в хелпе есть пример с невалидным хендлом. Валидность хендла надо проверять. ВСЕГДА!
Linux Safari Chrome
 Москва
0
4
Leonid Kaganov
Что такое фпасстпру? Ваш стиль программирования реально позволяет передавать данные от некого источника прямо пользователю - без проверки, валидизации, подготовки и обработки?
Windows Firefox
 Черкассы
2
0
yzal
Читаем документацию

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

http://php.net/manual/en/function.readfile.php
Linux Safari Chrome
 Москва
0
0
Leonid Kaganov
Так речь вообще не о файлах. Кому интересны локальные статические файлы собственного сервера? Вы попробуйте написать систему авторизации и автопостинга на пяток внешних серверов разных систем и протоколов, и поймете, о каких функциях речь.
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
Leonid Kaganov
Длкументации разные бывают.
Но вам самому как кажется, feof(false) === true - это от большого ума разработчиков PHP происходит?
Windows Firefox
 Черкассы
2
0
yzal
Т.е. идея проверить результат, который указан в документации (логичным он вам кажется или нет) - вам не нравится? Лучше писать гневные статьи?
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() на удаленный сервер - это взаимоисключающие параграфы, извините.
Linux Firefox
 Израиль
6
0
Igor
О! Я искал этот коммент, прежде чем начать писать свой. Хороший учебник упрощает код, чтобы одним взглядом можно было окинуть функцию и понять суть.
Ты, кажется, интересовался электроникой? Схему лампового телевизора упрощают то нескольких деталей. И эта схема даже будет работать при идеальных деталях и идеальных сигналах. А когда ты ее понял, начинаешь разбирать уже реальную схему. Если сразу показывать конечную схему, ты в ней утонешь.
Windows Firefox
 Новая Зеландия
12
0
Torvin
> искал этот коммент, прежде чем начать писать свой

Вау, это первый такой случай в истории интернета! Можно взять автограф?
Windows Safari Chrome
 Москва
1
0
oblamingo
Ллео, ты двигаешься совершенно не в том направлении!
Давно пора идти пить со мной пиво, пока я в москве работаю, а не всякой ерундой время убивать ;)
Linux Safari Chrome
 Москва
1
0
Leonid Kaganov
О!
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
сам шит (#5770067)
Ну так нужно брать нормальный пример из официальных доков и не пастись на допотопных помойках

$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 (#6395460)
Если критичен размер, и нужн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 (#6395923)
Если не хочется 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 (#6253691)
использую в 99% простых случаях file_get_contents, во славу сотоны, он сам всё проверяет там. в непростых к нему можно context написать.
Linux Safari Chrome
 Москва
1
0
Leonid Kaganov
Вы удивитесь, но бывают хостинги с такой версией Php, где этой функции нет, а движок обязан работать и там.
Windows Firefox
 Раменское
0
1
oncle t
Ява предназначена для отличников, людей, которым не влом постоянно учить новые схемы, но вот разбираться в чём-то фундаментально и системно -- влом.
Linux Safari Chrome
 Mt Laurel
0
0
[email protected] (dlazerka)
Это вы про Javascript наверно, с его зоопарком фреймворков. В Жаве такое же было лет 5-10 назад, сейчас всё устаканилось потиху.
Windows Firefox
 Раменское
0
1
oncle t
Я, наверное, скорее про мобильную и веб-разработку. И про яву, и про яваскрипт, про всех них. Возможно, конечно, у меня слишком низкий ценник, но толковых сишников я за такой нахожу, а яверы -- сплошные зубрилы. Всегда обращаю внимание, потому как у меня прочная взаимная нелюбовь с людьми без системного мышления.
Linux Safari Chrome
 Mt Laurel
0
0
[email protected] (dlazerka)
Возможно, что на яву сейчас больше запрос рынка, чем предложение, поэтому яверские зп растут и они к вам не идут.

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

Я за собой такое же замечал -- я в жаве профи, и неохота "опускаться" в 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
Leonid Kaganov
Я бы уточнил так. Допустим, есть человек (я), который отличается следующими характеристиками:

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
Leonid Kaganov
Иными словами, надо смотреть в сторону 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

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