Ну и зачем? Ребята из root-me старались, подготавливали материал, а вы делаете «решебник». Смысл то в том что бы побудить людей к исследованию и изучению чего-то нового, а вы убиваете всю интригу.
let result
if (variant === 'h1') result = styles.h1
else if (variant === 'h2') result = styles.h2
else if (variant === 'h3') result = styles.h3
else if (variant === 'h4') result = styles.h4
else if (variant === 'h5') result = styles.h5
else if (variant === 'h6') result = styles.h6
else if (variant === 'title') result = styles.title
else if (variant === 'subheading') result = styles.subheading
O_o не делайте так никогда, это пример плохого кода. Используйте switch в подобных конструкциях.
Делать было нечего дело было вечером. Решил протестировать простые сервера на node.js и golang через ab и JMeter — github.com/Garik-/http-benchmark
Библиотека µWebSockets.js ab не смог протестировать её, а JMeter показал результаты хуже чем обычный встроенный http на node.js.
Вы можете склонировать репозиторий и повторить тесты самостоятельно, пишите в issue пожелания и свои результаты.
Для меня основной критерий — скорость обработки запроса, как у python обстоят дела со скоростью сетевых запросов? Использует ли он неблокирующие сокеты или какие другие механихзмы? Есть ли смысл смотреть в сторону python если мне допустим необходимо обойти 3 000 000 сайтов?
Писал подобное на winAPI в далеком 2010 году, программа была установлена в компьютерной аудитории и использовалась лаборантами для коллекционирования курсовых, дипломов и недописанных статей, книг преподователей, которые использовали этот компьютер для показа презентаций.
К сожалению исходников я не нашел (винт приказал долго жить), остались лишь воспоминания в блоге
Программа висит в памяти и с интервалом в минуту проходится по всем логическим дискам, если это флешка запрашивается ее серийный номер — программа сравнивает записи в реестре о последнем копировании с данной флешки и если прошло больше суток запускается рекурсивная функция копирования. Копирование производится на доступный для записи диск с условием, что на диске достаточно свободного места.
Несколько дней назад понадобилось скачать схему кассетника ИЖ 303с 1987 года выпуска, в гугле на первых строчках вылез файлообменный сайт. На странице красуется одна кнопка скачать — нажал, редиректы, редиректы — закрыл сразу… приходит СМС — вы подписаны бла бла 20 рублей в день… зашел в кабинет отписался.
Это ладно я знаю что пахнет не ладным и начал сразу все проверять, а обычные пользователи, которым надо скачать реферат письмо татьяны…
Какого размера? Ведь размер получаемых данных заранее не известен (исходя из условия задачи).
По поводу буферизации чтения записи, это тема отдельного разговора (http://msdn.microsoft.com/en-us/library/windows/desktop/cc644950(v=vs.85).aspx), особенно если дело касается асинхронности.
Не знаю специфики задачи, но если есть «бесконечный» буфер, когда не известен размер получаемых/обрабатываемых данных использую временные файлы (temporary file). В системе Windows временный файл, это по сути тот-же MMF, но если его размер превышает размер виртуального адресного пространства, он скидывается на диск. Про *nix не знаю.
Алгоритм получается такой: получили в буфер пакет, нашли сигнатуру начала и его длину, создали временный файл, записали туда данные, получили в буфер следующий пакет, во временный скинули данные. Пакет закончился, переместили курсор на начала файла, размер нам известен — анализируем. Ну и так как временный файл = память (для ОС Windows) — все работает быстро.
ИМХО для задачи с MPEG использовал бы MMF (memory mapped files), искал бы нужную сигнатуру начала блока в памяти, далее копирование в выделенный или подготовленный буфер, нужного участка, обработка.
Как то не оптимально сначала копировать, потом искать что нужно было скопировать… Ну это я придираюсь, статья то не об этом.
Прочел комментарии, сделал вывод: С++ разработчики более солидарны, чем PHP разработчики.
Запостил библиотеку для работы с HTTP протоколом, по всем ООП PHP канонам, написанную «just for fun», комментарии: велосипед, есть куча аналогов, чем твой код лучше, «Вроде и все правильно, но есть ощущение хардкода» и т.д. Пост в минусах.
А у вас, каждый советует, как сделать лучше, ну несколько только уперлись в boost::asio.
Как по мне. лучше если ты сам знаешь различия, разбираешься в механизмах асинхронного ввода-вывода (epoll, IOCP), чем слепо заучиваешь функциональность готовых библиотек.
Товарищи, учитесь, развивайтесь, пробуйте и пишите красивые велосипеды!
ИМХО все это развлечения. Ну захочется тебе написать программу и вместо реализации 80% времени ты затратишь на игры с интерфейсом, а спустя 2 дня «навороченная» программа будет и не нужна вовсе. Мне тем и нравится консольные программы — передал параметры, получил результат, интерфейс я делаю после и только в случае острой необходимости (например, если она предназначена для обывателя, который не разберется с терминалом).
После 4-5 лет работы веб-программистом (скриптовые языки PHP, JS), переключился на прикладное и системное программирование (Си), уволился и нашел интересный проект, клиент серверного приложения. Та же тяга к знаниям азарт интересные задачи :)
Теперь вот снова занимаюсь веб, но параллельно изучил и реализовал несколько проектов на JAVA под Android, в данный момент изучаю электронику, простые схемы, AVR и PIC микроконтроллеры (благо с ассемблером знаком давно и не по наслышке) есть идеи замутить «умный дом».
Главное не тормозить и когда «надоело», менять направление своих интересов, помогает для общего развития и расширяет кругозор.
На первом курсе на экзамене по программированию (Pascal, куда без него, лекции я не записывал просто приносил выполненные лабораторные) было 2 теоретических вопроса и одна задача. Из-за того что я больно «умный», на экзамене отвечал 2 билета и на листочке писал листинг 5 задач в нескольких вариантах решения (пока преподу не понравится). В итоге преподаватель выдал следующее на последнюю задачу «подсчитать количество пробелов» (были представлены варианты с различными циклами while. for etc, процедурами рекурсивными) — «пробел можно было записать ASCII кодом, у Вас поверхностные знания предмета» и со злой ухмылкой влепил хор в зачетку (все предыдущие экзамены были на отл).
«Погоня за идеалами вызывает депрессию и приводит к прокрастинации», хреново когда твои идеи и реализации не находят применения.
Самый губительный вопрос для junior-а — «А зачем?»…
В небольшом городе трудно найти задачи, особенно оплачиваемые, ведь семью нужно кормить.
Специально поставил тег «новичкам» и хотел еще «сложных» поставить в кавычки… Советы спорные, но лично я бы не советовал «новичкам» начинать с фреймворков. Это тоже самое что начинать учить jQuery не зная JavaScript.
ИМХО в программировании нужно двигаться от простого к сложному. Если ты можешь написать велосипед, ты сможешь оценить + и — готового решения, которое ты собираешься применить в проекте. В противном случае мы получаем код в котором jQuery используется для вызова alert и человек не понимает что можно сделать быстрей оптимальнее и проще…
Из мира прикладного программирования встречал я такие примеры когда программа которая показывает окошко «Hello World» тянет за собой 70 мегабайтов библиотек для её запуска (.NET), когда так же программа вписывается в один вызов MessageBox Windows API и занимает в скомпилированном виде 1,3 Кб не теряя функциональности во всех версиях ОС.
Не хочу переходить, на личности, но зачем спорить? За плечами 8 лет ежедневного кодинга на PHP, сейчас мне этот язык нравится все меньше, в больших проектах «магия» и отсутствие типов иногда влечет за собой печальные последствия (в одном месте возвращает метод boolean в другом void и прочее)… «Мы уверены» — да ты можешь быть уверен, что ТВОЙ код не поменяется. Но если ты работаешь не один над проектом, который постоянно развивается, нельзя быть в чем-то уверенным. Это с родни преждевременной оптимизации, когда ты пишешь код основываясь на фичах текущей версии языка забывая о том, что язык изменяется — меняя свое поведение. Тем самым у тебя получается нечитаемый говнокод, который оптимально работает только с одной версией PHP.
Пример из жизни «напиши опрос — ну там ставишь один вариант ответа и голосуешь» -> «ну нам бы хотелось что бы было несколько опросов сразу» -> «ну да, но кроме radio должен быть еще выбор нескольких вариантов ответов» -> «а добавьте так что если выбрали один вариант, появляются другие зависимые от него»… Между -> может пройти и месяц и год и неделя… Код изначально нужно проектировать так что бы его можно было легко модифицировать.
Вариант с магией и огромным switch — плохая практика, во первых он разрастется со временем до такой степени, что понять его через 2 месяца не представится возможным, а заказчику нужно добавить фичу еще вчера…
Не нужно забывать о возможных изменениях кода. Допустим $a->bar у нас был когда-то int и мы делали так
$a->bar = 1;
switch($a->bar) { case 1: ...
Со временем мы пришли к выводу, что нам нужно изменить int на array $a->bar = array(); и теперь по ВСЕМУ коду, который в своей работе использует класс $a, необходимо вносить изменения.
Если бы мы использовали get/set то изменения коснулись бы только этих методов класса
// было
public function setBar($value) {
$this->bar = (int) $value;
}
// стало
public function setBar($value) {
$this->bar[] = $value;
}
Красота, а что делать программистам из небольших городов, недавно закончивших университет по профессии, из которого вынесли ноль на палочке. Которые хотят учится и развиваться, при этом оставаясь жить в своём родном городе?
Лично для себя, ради закрепления знаний, думаю получить сертификаты по MySQL и PHP, НО кроме меня эти сертификаты никому не нужны. «Погоня за идеалами вызывает депрессию и приводит к прокрастинации...» вот и получается, что бы жить счастливо нужно занижать свою планку ожиданий от профессии.
P.S: Стаж веб-программиста 8 лет, пойду дальше двигать баннеры :(
Давным давно, родители запихнули меня в летний лагерь от «Центра Детского и Юношеского Творчества».
Так вот там были кружки программирования и компьютерного дизайна, и это начале 2000-x. Преподавали нам Pascal, прям как на первом курсе института :)
Как я понимаю, что бы быть успешным дружинником, нужно активно просматривать кучу порносайтов в поисках детского порно? Это кем надо быть что бы в свое свободное время рыскать по сети с запросом «школьники бесплатно скачать»? xD
В свое время со мной в одной группе учился человек по имени Рифат и ник у него был соответствующий RiFAT, что напомнило мне файловую систему FAT32 и понеслись шуточки вроде «на первом курсе Рифата звали РиФАТ16».
рифат32 передвигает курсор мыши взглядом
Рифат32 может словами объяснить компилятору то, что он от него хочет
Рифат32 может голосом воспроизводить 8 битную музыку.
рифат32 не общается с людьми он давно написал бота совершеннее человека.
Рифат32 может двигать мышкой за экраном монитора
Говорят Чак Норрис — первый и единственный неудачный опыт Рифата32 в генной инженерии
Рифат32 чтобы посмотреть фильмы на ДВД просто проводит по диску пальцем. Просмотр обычно занимает не более трех секунд.
Рифат32 убивает кликом мышки по аватрке
Рифат32 настолько крут, что может кликнуть по твоей аватарке, даже находясь на службе в армии!
Рифат32 может заставить работать Windows95 без сбоев.
Давно существуют различные системы IDS (Intrusion Detection System) и IPS (Intrusion Prevention System), идея автоматически проводить мониторинг ресурсов не нова. Хотя вряд ли, данная тема, касается веб-разработчиков. Это скорей уже обязанности сис админа, грамотно настроить сервер.
ИХМО: мне кажется невозможно быть одновременно крутым админом, знающим все плюшки различных конфигураций и крутым веб-разработчиком, знающим различные методы атак на веб приложения и умеющим писать код без дыр. В свое время пытался освоить и одно и другое, но чашу весов перевесило программирование, проще написать надежное приложение, чем мучиться с настройками сервера (ведь это задача хостера, за то мы ему и платим).
Конечно, личные меры безопасности никто не отменял — не пересылать пароли в открытом виде по IM или почте, не хранить пароли в открытом виде, не сохранять пароли в FTP менеджерах, обозревателях и прочих Total Сommander-ах, не пускать вирусняк на свой рабочий комп (юзать unix и ставить открытое ПО из исходников), использовать TrueCrypt и Git для бекапа данных (у меня крипто-контейнер с проектами лежит в Dropbox, а там репозитории). В общем паранойя по полной и будет счастье :)
Это всего лишь примеры, неужели вы думаете, что можно описать все возможные варианты?
Это как писать книгу о языке программирования и прикладывать к ней архив всех open source проектов доступных в сети.
Извольте, сударь, скрипт киддисты представляют не малую угрозу.
На одном корпоративном хостинге, увели пароль от FTP, в итоге злоумышленники поигравшись с веб шеллаами различных мастей, решили запустить кривой скрипт вставки iframe по всему хостингу (который загружали в upload директории). В итоге этот автоматизированный скрипт «какеров» покоцал очень много файлов, в результате чего большинство сайтов на хостинге отвалилось.
Не стоит надеяться, что лично Вас будут ломать профессионалы с «мышлением», стоит изначально применить проверенные методы, описанные в статье.
В статье описывается методика поиска, и если ты не разработчик (у тебя нет бэкапа и доступа к git репозиторию), а сторонний человек, которого попросили проверить/исправить сайт, она довольно действенна.
InSys, что говорить о времени изменения файла, когда на «какерских» форумах обсуждают ".BAT вирусы" и «как отправить POST запрос (Delphi 7)». Говорите eval устарел, значит нужно поделиться знаниями:
Дескриптор закрывается, когда уничтожается экземпляр класса.
Я читал здесь статью по поводу открытых дескрипторов и заголовка keep-alive, но лично я придерживаюсь мнения, что "PHP создан, чтобы умирать".