Добро пожаловать в наш уютный тредик. Тут мы изучаем язык PHP (а также JS/CSS/HTML/SQL), решаем задачки и даже делаем простые сайты! Зачем? Кто-то хочет научиться программировать, кто-то - делать сайты, кто-то - просто размять мозги и заняться чем-то полезным.
Почему PHP? Потому что фейсбук и википедия на нем написаны, и вакансий море, и учить легко.
Это тред для начинающих. Не написал за свою жизнь ни одной программы? Ты наш человек.
Устанавливать пока что ничего не требуется, разве что редактор кода вроде Sublime Text 3, Notepad++, Netbeans PHP или PhpStorm (с ним будет удобнее).
Что самое главное для программиста? Умение аккуратно оформлять код (читай второй пост).
Правила: ведем себя воспитанно, помогаем новичкам, постим ссылки на решения задачек, ОП их проверяет и дает советы и замечания. ОП отвечает даже на самые нубские вопросы. ОП заходит где-то раз в день-два, не жди его, решай задачки дальше.
У нас есть уроки по основам PHP, они собраны и выложены по адресу http://archive-ipq-co.narod.ru/ Это учебник для изучающих с нуля, то есть если ты вообще ничего не знаешь, то надо начать с него. Он простой и понятный (по крайней мере в начале). Там есть задачи, их надо решать обязательно (чтобы стать программистом, надо писать код — иначе никак). Пости ссылки на решения в тред, мы их проверим, напишем замечания и дадим советы по улучшению.
Если не знаешь как решать, запости код, напиши в каком месте остановился и попроси подсказку.
Учебник дает основы языка PHP, но чтобы делать сайты, этого недостаточно. Если ты его прошел, то надо переходить в более серьезным задачкам, которые научат тебя как выдавать страницы в браузер, работе с таблицами в БД, работе с формами, MVC.
Вот небольшой туториал по тому как начать использовать PHP на сервере для отдачи странички в браузер: https://php.net/manual/ru/tutorial.php Увы, уроков плавно подводящих к тому, как сделать задачи выше, пока нет, так что если что, задавай вопросы.
Решения задач лучше показать мне, особенно на ООП,так как сам ты вряд ли увидишь все ошибки. Пости свой код на гитхаб и вкидывай ссылку в тред по мере решения. Я прокомментирую и укажу на ошибки.
Также, у нас есть задачи которые позволят тебе изучить или подтянуть до нормального уровня знания JS/HTML/CSS/SQL. Решай их параллельно с задачами выше.
Подскажи сайты для поиска работы, я не умею гуглить? brainstorage.me, geekjob.ru, hh.ru Нужен ли ООП, фреймворки, MVC? — Да, однозначно. Посмотри любую вакансию. Сайт опять упал!!!!! — Не паникуй, а открой http://rghost.net/45000175 Оформляй код аккуратно!!! — например пропусти через phpformatter.com . Также, если ты пользуешься IDE вроде PhpStorm, Netbeans, Eclipse, то в них эта опция встроена, подробнее: https://gist.github.com/codedokode/8759492 ОП, сделай за меня мою работу или домашнее задание? — Это конечно, хорошая идея, но нет. Где искать работу и заказы — hh.ru, geekjob.ru, brainstorage.me, fl.ru, odesk.com. Имей в виду, что кроме фриланса есть еще постоянная удаленная работа (remote job) когда тебе не надо тратить время на поиск заказов и переговоры с неадекватными заказчиками.
> if ($ii == $half){ > echo "this word is a fucking PALINDROME, congrats, m8"; Это неправильно так как ты не можешь по совпадению только первой и последней букв сказать что слово палиндром. Надо проверить все.
И смотри внизу ошибку: > PHP Notice: Undefined variable: without in /home/hz6bPR/prog.php on line 12 Ты обращаешься к несуществующей на тот момент переменной, надо сначала ей присвоить какое-нибудь значение а потом использовать.
Попробуй сделть чтобы программа работала с руссикми буквами. Если что, задавай вопросы.
> Это то о чем я говорил, что $app->getRootUri() возвращает не то что мне нужно, он показывает путь до файла index.php, то есть в моем случае он возвращает "/" Ну и отлично, припиши к этому 'css/bootsrap.css' и получишь нужный путь который независим от текущего URL. Разве это то что надо?
> $mediaInfo = $mediaInfo->setMediaInfo($mediaInfo, $info); Ехал mediaInfo через mediaInfo.
Копипасту из ифов стоит заменить на список полей + цикл по нему.
json_decode лучше использовать с массивом, а не объектом StdClass, так как для работы с массивами есть много функций, а для StdClass нет.
Класс MediaInfoType лучше поместить в другую папку, например, Types.
> public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform) Тут по идее должен возвращаться SQL-код для типа этого поля в MySQL (например если ты хочешь создать таблицу на основе аннотаций, доктрине надо знать какому типу поля соответствует твой тип). Посмоти как реализованы другие типы в доктрине и сделай по аналогии:
>>514470 https://github.com/V3N0m21/Uppu3 Поправил несколько моментов, чуть не сломал мозг делая custom type в доктрине, но все-равно до конца не уверен что все правильно, как-то слишком мудрено получилось, ну и в моем случае не дает никаких плюсов, разве что в целях обучения и понимания.
>При ресайзе маленькие картинки не увеличиваются? ЧТо-то я не вижу проверки на это.
>Стоит сделать проверку на наличие apc и при отсуствии откатываться на файловый кеш
https://github.com/V3N0m21/Uppu3/blob/master/app/bootstrap.php#L9 Поправил, но не уверен что это правильное решение, я так и не нашел четкого мануала по этому поводу, походу все приходят к пониманию этого методом проб и ошибок. > {{ app.request.getRootUri() }}../css/bootstrap.min.css >Что-то это странно. Зачем тут две точки? Мне кажется сразу должен идти путь. Что у тебя выдает getRootUri() ?
Это то о чем я говорил, что $app->getRootUri() возвращает не то что мне нужно, он показывает путь до файла index.php, то есть в моем случае он возвращает "/"
Остальные замечания подправлю и сделаю древовидные комменты, а сейчас интересует вопрос правильно ли я сделал custom type в доктрине
Аноны, сегодня совершенно случайно решил посмотреть API контакта https://vk.com/dev/methods и надо заметить очень многое там нашёл интересное для себя. В голове сразу возникло несколько идей приложений для контакта, поясните, например если я напишу приложение для контакта в котором можно будет по интересующему запросу найти группы и пользователей, а потом автоматически оставить на стенах (если они открыты) всякие сообщения, то есть сделать это массово сразу для всех, то есть например слать спам так можно, это будет как-то сразу же пресекаться? Или попросту такое приложение не напишешь в силу некоторых ограниений?
Продолжая тему АПИ контакта, почему мне выскакивает подобное: [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in Когда я работаю с определёнными и методами и не выскакивает никаких проблем когда работаю с другими методами из АПИ ВК? Код в этом случае выглядит следующим образом:
$uid = "555555555555"; //тут я заменил на случайный $text = "Ты понимаешь что ты поехавший?"; $mes = file_get_contents('https://api.vk.com/method/messages.send?domain='.$uid.'&message='.$text); $mes = json_decode($friends); print_r($mes);
По поводу задания про тесты, сама организация добавления вопросов подойдёт как здесь http://www.banktestov.ru ? То есть после каждого действия перезагрузка сервера а не проблемы с яваскриптом и прочим подобным.
>>516599 нету такой директории - написано же. либо папки нет, либо файла, алсо не уверен, что расширение жпг можно доставать функцией файл гет контентс.
use Zend\Mvc\Controller\AbstractActionController; use Zend\View\Model\ViewModel; перепечатываю туториал с оф. сайта фреймворка, но в библиотеке нет таких директив, значит ли это, что мне нужно обновить библиотеку?
>>514869 Как часто в ПХП используется класс DOMDocument, он чаще используется для чтения? Или для создания тоже часто используется? Я сейчас начал его учить и в качестве обучения решил создать таблицу, довольно много времени заняло, кстати как добавить атрибуты таблицы border = 1 там например через класс DOMDocument
Антоши, а вот я, допустим, начал изучать веб-программирование (стандартную связку php, html, css, js, чуть позже питон с апачем и мускулом вспомню). Всё понятно, проблем нет в общем никаких, но. Недавно я беседовал со знакомым и заговорили про это вот дело. Ну и он мне рассказывает о флешкуки, lso итд, т.е. о том, чего не было в учебниках и на разных сайтах. Так к чему я это - где помимо собственно изучения можно следить за новинками и вообще тенденциями что ли? Чтобы не вышло, что я изучил то, что уже давным-давно устарело.
>>516868 >если пхп такой востребованный, то почему его все хуесосят? Простота, как следствие низкий порог вхождения, как следствие много идиотов в области, как следствие много говнокода. Но в умелых руках... Я вот, например, часто сталкиваюсь с ситуацией, когда хуесосят убунту, советуя переходить на другие дистрибутивы линукса. Только вот всего парочка вопросов выводит этих высокомерных малограмотных далбаёбов на чистую воду, во всей красе демонстрируя их невежественность и неосведомлённость. Некоторые и не знают про mini iso, судят по Desktop Environment обо всём дистрибутиве, увидивляются, когда я им показываю, что "так", оказывается можно и на убунте. Поэтому можешь стать джедаем PHP, чтобы потом уверенно ссать ливнем аргументов на ёбла хейтеров. Почитать не знаю что тебе посоветовать, я так и не понял, что ты знаешь, а что нет.
>>516871 Конечно не к месту, но разве разные дистры линя это не просто одно и то же ядро, но с разными драйверами и софтом идущими изначально (а, ну и граф.оболочкой конечно)?
>>516873 Есть различия в установке софта, расположении конфигурационных файлов. Но в целом да, популярные дистрибутивы сейчас толком ничем друг от друга не отличаются.
>>516871 Предположим, что я нихуя не знаю, конечно в моём техновузе немного рассказывали про базы данных, я ставил сайт на хостинг и регистрировал домен. Очень смкьно понимаю как это работает, может даже ошибочно. Я вот представляют себе так. Есть хостинг, место на чьём то компе куда ты загружаешь все нужные файлы для своего сайта. Там находятся файлы с хтмл кодом возможно и цсс, но я не видел почему-то
Когда юзер заходит на сайт то у него открывается хтмл код и браузер преобразует его в веб страничку. Юзер лазит по сайту и по сути тут везде хтмл. Юзер региструется на сайте и его данные попадают в базу данных которая предоставляется хостингом как эта база данных работает я вообще не ебу. Жаваскрипт отвечает за анимашки и эффекты всякие.
Я правильно мыслю?
В каком месте работает пхп и какую функцию во всем этом он выполняет ? Я этого не понимаю, вроде хочу учить язык, а толком понять как он используется понять не могу.
Можешь подсказать литературу которая позволит для начала понять КАК ЭТО РАБОТАЕТ.
А то вот все пишут код и все такое, а вот куда они его засовывает я понять не могу.
Анончики, начал учить пхп. Вот читаю сайтик из оп поста с описанием и задачаками. Делаю второе задание и вот задачка, ну вот только делать как сказал автор пик1 редактировать одну строку которую он указал, то у меня вылезает ошибкапик2, делаю по своему и получается, только мне вот почему-то кажется, что это начало того, что я буду говнокодить.
Скажите вот третий пик - говнокод? Нужно делать как написано на первом пике? Так правильней? Или похуй?
>>516975 а все разобрался, оказывается еще не работало потому что в скобках в mt_rand была точка, хотя на втором пике стоит запятая хз как она изменилась на точку.
>>514869 Знаете, что я заметил. Никогда не учитесь по русскоязычным туториалам. Пытался ТРИ раза создать MVC по русскоязычному видео с юутуба - ни разу не вышло, сейчас делаю по англоязычному - все получается и все понятно разъяснено. Русня сосет.
>>516986 Знак равенства == должен быть. Слушай, нахуя тебе эти задачки обоссанные от обосанного пидораса-анимешника, если ты нихуя не знаешь - пиздуй по самоучителю все делай.
>>517019 Да что блять учить то. Вот я потихоньку познакомился с переменными, циклами и прочей, уже написал пару задачек интересно и то, что нужно. Что не так то?
Вот это вот работает корректно, но я чисто теоретически не могу понять, как можно разбить строку по разделителю, предварительно убрав разделитель rtrim??
Скачал много всяких баз каталогов для регистрации сайтов (СЕО), собрал в один файл получилось примерно 35 000 уникализировал при помощи пхп скрипта, получилось 24 000, теперь хочу проверить сколько из них реально рабочих (те которые хотя бы загружаются) и хочу для каждого послать запрос, то есть 24 000 запросов при помощи file_get_content, но что то я боюсь это делать, как на это отреагирует провайдер?
И ещё один вопрос, есть несколько прог которые автоматически регистрируют в каталогах, собственно интересно как это у них получается? Каталогов сайтов очень большое количество и все они по разному сделаны, не писать же парсер для каждого? Или все они по одинаковому сделаны и есть какие-то общие АПИ в которые можно закинуть адрес сайта, выбрать категорию, ключевые слова и всё остальное в автоматическом режиме?
Если у них есть АПИ, то есть смысл попробовать написать скрипт который будет проверять насколько живой тот или иной каталог сайтов. То есть загружаешь файл со списком (урлами) каталогов, проверяешь каждый и возвращаешь уже файл только с теми которые реально работают.
>>517102 >>517102 да не слушай никого. твоя ошибка - дело привычки. Могу посоветовать при проверке равенства писать сначала не имя переменной, а её значение. Т.е if('znachenie==$peremennaya') ,а не if($peremennaya=='znachenie'). В этом случае,если перепутаешь знаки, скрипт выдаст ошибку и проще будет исправить.
В этой задаче > «Grammar Nazi». Напиши скрипт, проверяющий текст на наличие злостных ошибок: >В случае обнаружения ошибки скрипт должен писать сообщение об этом и выводить кусок текста с ошибкой (чтобы было понятно, что не так).
Не понимаю, как можно оформить последний пункт с выводом куска текста. Помогите, кто знает, пожалуйста
Здравствуйте, подскажите, как сделать простенькое меню для сайт в html5/css3. У меня не получается сделать так, чтобы цвет текста меню менялся, когда на него наводишь мышкой. Да и вообще хоть как-то шрифт поменять не получается. Меню типа ul.
Зачем вокруг переменной фигурные скобки? Ведь и без них норм выводится. echo "Число a равно {$a} и оно {$aValue}"; Иглавный вопрос. Почему на оп-пике кот?
>>517582 модель только возвращает массив с данными, а в контроллере можешь делать все что угодно с этими данными. Если так не выходит, значит, что у тебя неправильная модель хотя, я новичек
>>517582 Модель нужна ТОЛЬКО для работы с БД/тем местом где у тебя данные. Также в ней могут быть правила ввода данных(name не более 255 символов, например). Естественно что ты должен получать удобные для последующих операций данные, так что если там есть например json, то имеет смысл его декодировать.
После, в контроллере ты с этими данными оперируешь как тебе хочется и высераешь их на вьюху. Во вьюхе логики быть не должно.
>>514869 ОП, будь человеком, в следующий раз в заголовке/в первой строке треда пиши слово PHP, чтобы господа юзающие "Избранное" на харкаче и/или юзающие куклу, могли без боли понять че это за тред в списке
Клуб любителей изучать PHP 55Аноним20/07/15 Пнд 15:40:12#86№517643
Добро пожаловать в наш уютный тредик. Тут мы изучаем язык PHP (а также JS/CSS/HTML/SQL), решаем задачки и даже делаем простые сайты! Зачем? Кто-то хочет научиться программировать, кто-то - делать сайты, кто-то - просто размять мозги и заняться чем-то полезным.
Почему PHP? Потому что фейсбук и википедия на нем написаны, и вакансий море, и учить легко.
Это тред для начинающих. Не написал за свою жизнь ни одной программы? Ты наш человек.
Устанавливать пока что ничего не требуется, разве что редактор кода вроде Sublime Text 3, Notepad++, Netbeans PHP или PhpStorm (с ним будет удобнее).
Что самое главное для программиста? Умение аккуратно оформлять код (читай второй пост).
Правила: ведем себя воспитанно, помогаем новичкам, постим ссылки на решения задачек, ОП их проверяет и дает советы и замечания. ОП отвечает даже на самые нубские вопросы. ОП заходит где-то раз в день-два, не жди его, решай задачки дальше.
Код нужно писать не как попало, а аккуратно и по правилам. Почему? Потому, что на неакуратно написанный код не хочется даже смотреть.
Если тебе лень выравнивать код руками, закачай его на http://beta.phpformatter.com/ и нажми «format». Робот исправит выравнивание и отступы в мгновение ока (да, прогресс не стоит на месте). Если ты используешь мощную IDE вроде PhpStorm, там тоже есть функция форматирования кода.
Вообще, в PHP долгое время не было единого стандарта оформления кода, все писали как попало и было много бардака, но сейчас дело лучше — есть стандарты PSR-1 и 2. Вот как надо оформлять код:
- переменные и функции пишутся с маленькой буквы, подчеркивание не используется, используется camelCase, пример: $x, $numberOfPeople, printResults() - Название функции начинается с глагола, в стиле «сделайЧтоТо» - не знаешь английский? Не беда, в 21 веке есть решение этой проблемы. Не пиши транслитом, открой лучше Гугл Транслейт или slovari.yandex.ru и найди название для переменной там - в именах классов используется CamelCase, первая буква большая, «_» может использоваться - мы предпочитаем подстановку переменных вместо конкатенации строк: "I am $age years old" — хорошо, 'I am ' . $age . ' years old' — плохо из-за обилия точек и кавычек - мы используем для отступов 4 пробела (можно настроить редактор, чтобы при нажатии Tab он вставлял 4 пробела)
Вот ссылка на стандарты, где все это описано подробнее и даны примеры оформления:
Итак, ты зашел в тред и решил помочь какому-то анону, дав ему совет или подсказку. Спасибо! Но прочти сначала эти напоминания, чтобы твоя помощь действительно была полезной.
Будь доброжелателен
Не годится: «Ты мануал хоть раз в жизни открывал, обезьяна?» Не годится: «В гугле забанили?» Не годится: «Твой код плохой» Хорошо: «Вот, как можно улучшить этот код: ...» Хорошо: «Ты неправильно используешь функцию abc(). Вот ее описание: ссылка, и как видишь ей надо передать строку, а не массив»
Объясняй
Не очень хорошо: «сделай как в этом коде» Хорошо: «если ты вставляешь текст от пользователя в SQL запрос, то получается SQl-инъекция, которая позволяет взломать твой сервер (ссылки). Чтобы этого избежать, надо вставлять данные с помощью плейсхолдеров (ссылки)» Хорошо: «Помни, что код пишется для людей. Если писать такие большие функции, то в них становится трудно разобраться...»
Не проповедуй
Мы учим использованию самых распространненных подходов, стандартов, библиотеки фреймворков. Если ты не любишь ООП, пробелы в коде, jQuery, сам PHP, то рассказать об этом стоит в каком-нибудь другом треде.
Ах да. Если тебе кажется, что что-то в учебнике или задачах можно сделать лучше — пиши, обратная связь всегда очень полезна.
>>517645 > - мы используем для отступов 4 пробела (можно настроить редактор, чтобы при нажатии Tab он вставлял 4 пробела) Ненавижу, блядь, таких даунов. Кому-то удобнее отступ в 2 пробела, кому-то в 8, зачем навязывать свое оформление? Табуляция позволяет выглядеть коду так, как программист привык. А еще стирать такие отступы заебешься. С табуляцией - нажал Backspace один раз, и все, а тут надо держать эту клавишу и следить, чтобы выравнивание не поехало.
HTML файлы используются в статических сайтах, то есть сайтах содержимое которых создает вебмастер и сохраняет на диск в виде файлов.
PHP используется в динамических сайтах, в которых HTML код геенрируется скриптами на PHP. Как правило PHP скрипт берет данные из базы (например список комментариев) и вставляет в заранее заголовтенный шаблон, получая на выходе динамиечски сгенерированную HTML страничку которую он отдает пользователю.
Статиеские сайты обновляет только вебмастер, руками. Динамические сайты позволяют обновлять содержимое в базе (например добавлять комментарии или редактировать статьи) автоматически, без участия вебмастера.
>>517662 >Кому-то удобнее отступ в 2 пробела, кому-то в 8, зачем навязывать свое оформление? Причин куча, гугли. >С табуляцией - нажал Backspace один раз, и все, а тут надо держать эту клавишу и следить, чтобы выравнивание не поехало. Установи нормальный редактор.
> А то вот все пишут код и все такое, а вот куда они его засовывает я понять не могу. Прежде чем писать сайты на PHP, надо выучить сам язык. Потмоу мы начинаем с задачек а потом переходим к приложениям которые работают в браузере: список студентов, файлообменник.
> Юзер региструется на сайте и его данные попадают в базу данных которая предоставляется хостингом Для регистрации как раз нужен PHP скрипт который примет, проверит данные и внесет их в базу. Обычный HTML ничего на сервере сделать не может, он для статических, неизменных сайтов.
Флеш умирает (последние лет 5, но никак не умрет) так что думаю тебе это не очень актуально. Но если надо, можно взять учебник/мануал по нему и почитать.
> где помимо собственно изучения можно следить за новинками и вообще тенденциями что ли? Хабр читай для начала.
>>517674 > Причин куча, гугли. Хоть одну? > Установи нормальный редактор. В нормальном редакторе надо нажимать Shift-Tab. А при использовании табуляции - просто Backspace. Одну клавишу нажимать гораздо быстрее.
Тут http://php.net/manual/ru/pdo.connections.php есть способ но он как я понимаю без четких гарантий (так как не факт что ты можешь найти и уничтожить все ссылки в большой программе). Фактически получается, что в большой программе никак. В маленькой — как описано в документации.
С другой стороны при завершении скрипта объект все таки будет уничтожен (как и все остальные переменные) и соединение закроется.
твоя манера общения поиску ответа не способствует. То, что тебе написали про mysql_query, правильно написали, так код писать вообще нельзя, ты плохой учбеник взял.
расширение mysql устарело (открой мануал по mysql_query и посмотри сам), вставлять POSt-переменные прямо в запрос это SQL инъекция. Надо использовать плейсхролдеры.
Я не знаю что за учебник ты читал но советую его выкинуть так как его автор сам полный ноль и ничему научить не сможет.
Не любишь PDO, читай про mysqli но там после каждого вызова надо if с проверкой на ошибки писать: http://habrahabr.ru/post/141127/
> Надо будет выложить не долго будет засунуть туда реалэскейпстринг Что тебе мешает сразу писать правильно? Дай угадаю, неохота писать длинное название mysql_real_escape? Ну так сделал бы функцию которая получает данные и экранирует перед вставкой в запрос. А еще лучше возьми PDO где это уже встроено.
Вообще, у тебя пока маловато знаний чтобы писать «панель добавления материалов». Сначала надо изучить работу с формами и базой. Я советую пройти наши задачки на список студентов и файлообменник, и тогда ты сможешь свою задачу решить с легкостью. Там правда ООП надо знать, но по ООП у меня есть глава в учебнике.
Ну и я не знаю, планируешь ты работать программистом или иможет у тебя это просто хобби. Но в программисты, если ты будешь учиться по устаревшим учебникам и писать такой код, тебя не возьмут, а если ты пишешь для себя то наверняка ты хочешь писать хороший современный понятный код, а не какой попало. Потому советую выкинуть старый учебник и учиться в нашем треде.
Для начала пойдет. Но JS/DOM не такие и сверхсложные вещи, а их знание даст тебе плюсы на собеседовании (если ты хочешь работать программистом) и даст тебе новые возможности по оформлению интерфейса страниц (если ты делаешь проекты для себя).
Во-первых, код можно запускать в консоли (на винде в консоли не будет русских букв). ВО-вторых, в некоторых IDE можно запускать код не выходя их них, в встроенной консоли (с русскими буквами в том числе).
Далее, htaccess для задач из учебника не требуется. Но если он и требуется, то на своем локалхосте ты точно можешь его включить.
Без текста ошибок ссылки на статью и тд. мы помочь вряд ли можем. Текст ошибки, если не выовдится, ищи в логе ошибок (он доступен либо по FTP либо в панели управления).
> Как быть? В php классе cURL явно нигде не вызываю, curl.cainfo = 'cacert.pem'; подключил. А файл cacert.pem в какой папке лежит? Надо наверно полный путь писать. Он еще какой-то CAPath упоминает, может надо его задать?
При вставке данных в URL они кодируются процентным кодированием. Если ты это не знаешь то стоит начать с изучения HTTP (урок по нему я пока не написал, так что гугли) и того, как формируются URL.
Также код у тебя конечно ужасный, без проверки на ошибки. хотя как минимум 2 функции (file_get_contetnts и json_decode) могут их выдать.
Алсо отправка сообщений требует авторизации, почитай документацию по API.
Спамерам тут не рады, катись в другой тред. Спамом рекламируют только дрянные продукты и услуги которые никто покупать не станет даже под дулом пистолета.
Табы отвратительно смотрятся на гитхабе, в консоли, в браузере, большинство людй смешивает их с пробелами и код вообще разваливается.
Алсо чтобы настраивать размер отступа тебе не нужны табы, достаточно дописать несколько строчек в своем виме или емаксе, а не навязывать другим символы-пережитки из 80-х. К счастью разработчики стандарта оформления кода разумные люди и не стали ради пары лентяев, коорым лень настроить редактор, усложнять жизнь нормальным людям.
> С табуляцией - нажал Backspace один раз, и все, а тут надо держать эту клавишу и следить, чтобы выравнивание не поехало. Возьми нормальный редактор вместо блокнота, дурачок.
> Ненавижу, блядь, таких даунов. Даун тут ты потому что не можешь настроить свой редактор чтобы он отображал код как тебе нравится. Какие же вы убогие табодауны, который год ноют что им не разрешают настраивать отступы и ни один не может дописать пару строчек в конфиге своего редактора.
Откуда достать? Из HTML? Я же тебе написал, есть библиотеки вроде phpquery. Я дал название (самое важное), твое дело прочесть документацию и разрбраться как она работает. Я за тебя делать твое домашнее задание не планирую.
Таб неотличим от пробела и вызывает путаницу. Таб выглядит криво во многих местах, наша цель чтобы код выглядел так как его пишет автор. Таб пережиток прошлого, который в наше время не нужен.
> В нормальном редакторе надо нажимать Shift-Tab. Это неправда. Редакторы прекрасно умеют удалять группы пробелов одним нажатием. Мой саблайм например по бекспейсу все прекрасно удаляет.
Только из-за того что ты не можешь установить и настроить нормальный редактор никто стандарты менять не станет.
>>517692 Я в emacs нажимаю tab один раз и он автоидентит все с учетом текущей расстановки фигурных скобок. По поводу причин - не всегда индентация равна кратному числу пробелов. Иногда мы переносим строки на новую строку в случае табов возникает трэш. Вот тут мы хотим сдвинуть под открывающуюся скобку, однако имя функции занимает 9 символов, поэтому нужен лишний пробел: foo_baarr(bla, bla bla --->--->-bla, bla, bla) { В случае другой настройки размера таба, все поедет. В случае пробелов, будет отображаться везде одинаково.
>>517721 Нет не из html. Есть переменная $text, усть регулярка на проверку ошибок. Ошибку в тексте я могу найти с помощью if(preg_match). Вот, а после того как нашел требуется еще вывести на экран кусок текста
Ну и да, анон выше правильно написал - не всегда мы смотрим код в любимом редакторе. Иногда нужно и гитхаб заюзать, ideone, или вообще pastebin. И каждый раз наблюдать, как код разъехался из-за того, что размер табов не совпадает с настройками программиста?
>>517723 Тебе шашечки или ехать? Я просто пишу: foo_baarr(bla, bla bla --->bla, bla, bla) { А художества в стиле ASCII Art в коде не нужны. Таб означает просто отступ внутри блока.
> Иногда нужно и гитхаб заюзать, ideone, или вообще pastebin. Если иногда - то можно конвертировать и в пробелы.
Может кто запилит нормальный подробный гайд по MVC - в рунете полторы непонятных страницы с хабра, а на ютубе один англ. видос с генерацией url и пара отечественных устаревших пятилетней давности.
>>517744 А как быть если preg_match находит вхождение, но не помещает его в массив . Вот пиример http://ideone.com/H2Qni1 . Или есть какая-то неучтенная мной особенность ф-и, которую я не знаюю
>>517776 Но к сожалению теперь появилась другая проблема. http://ideone.com/PM7MFc . Условие проходит как истинное, но не выводится ничего, даже слово Yes. А вот если условие будет ложным то, No выводится нормально
PHP и MySQL. Разработка веб-приложений Хотел скачать ее, но в электронных форматах еще не появилась. :( ОП, посоветуй что почитать, методики, подходы. С документацией я ознакомился, с синтаксисом, но теперь вопрос как все это применить и чтобы это было правильно.
>>517744 ахуеть какой подробный манул. ну кароч вот тут кантролеры, вот тут мадель, тут вью)) все панятна дети?)) плиз, если тебе нечего ответить на вопрос - не отвечай на него.
>>517733 А я не пишу, emacs автоматом индентирует под скобку после нажатия Tab и это очень удобно. Я вообще не юзаю оформления, отличного от автоматического (и по этой причине ненавижу питон). >Если иногда - то можно конвертировать и в пробелы. Что значит - иногда? У меня все проекты так или иначе лежат в облаке - будь то опенсорсный гитхаб или закрытые гитлаб и битбакет. И это нормально для 21 века. А ты предлагаешь хранить в табах ради... чего? Неумения настроить редактор, чтобы backspace стирал индентационные пробелы (т.е. с начала строки) как табы, по 4 сразу?
Написал сайт, хочу его выкласть на хостинг, как это можно сделать? Взять заархивировать папку с файлами сайта и кинуть на хостинг? Какой бесплатный хостинг есть?
ОП, я наконец-то разобрался с настройками Doctrine Extensions, там все просто жуть как мутно, и что удивительно нигде нет четкого объяснения как правильно делать, может конечно я совсем нуб, и для прошаренных это очевидно, но мне кажется в инструкции можно было бы и указывать что нужно ручками регистрировать файл DoctrineAnnotations так как он по какой-то причине сам композером не подтягивается (это я прочитал где-то в комментарии к комментарию на стековэрфлоу, ссылку уже и не найду)
> `path` varchar(60) Этого хватит ли? Не забудь сделать проверку на допустимую глубину при постинге.
> `comment` varchar(255) Этот хватит? У varchar кстати ограничение 65535, но размер строки тоже должен быть не большее 65535 байт и реально можно указать около 20 000 символов.
> ADD CONSTRAINT `comments_ibfk_1` FOREIGN KEY (`children`) REFERENCES `comments` (`parent`) Что в children хранится? Добавь-ка COMMENT к этому полю.
И добавь-ка уникальный индекс по (fileId, path). Во-первых, это логично, во-вторых, это оптимизирует выборку
WHERE fileId = ? ORDER BY path
Вообще, ты должен продумывать возможные ограничения и ставить уникальные и внешние ключи. Этим ты и от ошибок защищаешься, и понять что как связано, легче. База это ядро твоего приложения и надо максимально внимательно относиться к ее проверктированию (кстати в ОП-посте есть неплохие задачки на SQL если ты чувствуешь пробелы в знаниях по этой теме).
> `posted` datetime DEFAULT NULL, Можно писать DEFAULT CURRENT_TIMESTAMP
Также, у тебя там много DEFAULT NULL. Это все необязательные для заполнения поля? Разберись-ка где NULL а где NOT NULL. Для level например можно выставить NOT NULL DEAFULT 0 или NOT NULL DEFAULT 1 в зависимости от того как помечается верхний уровень.
Смотря какие и для чего. В CMS есть готовый код и админка, а фреймворк дает гибкость и нестандартные возможности. Но блог например логично делать на вордпрессе.
Это нестандартное использование jQuery. Вообще jQuery это библиотека для работы с массивом DOM объектов. Если ты читал мануалы по jQuery (я надеюсь что читал) то должен знать что объект jQuery имитирует read-only массив — у него есть свойство length и свойства 0, 1, 2 ...
Так-то в этом массиве должны храниться DOM элементы, но jQuery принимает массив чего угодно и этим пользуются, например так:
$([1, 2, 3]).each(...);
То есть как заменой для underscore/lodash (в которой гораздо больше методов работы с массивами).
Это больше напоминает хак, это не очевидно, и им лучше не злоупотреблять, так как в новых версиях это может и сломаться.
По FTP или SFTP. В качестве программы можно взять например WinSCP или (под командуную строку линукса по SFTP) написать bash-скрипт с использованием rsync.
Мне нравится вариант с bash-скриптом так как с ним не надо жать никакие кнопки, но для его написания требуется иметь определенные навыки. Может впрочем можно какую-то GUI программу настроить чтобы синхронизация делалась одной кнопкой.
Не сохраняй пароль от FTP на компьютере, их воруют трояны и заражают потом сайт.
> как эти комменты правильно рендерить. Выбираешь комменты отсортированные по path, они будут идти в нужном порядке. Отступы можно делать одним из 2 способов:
- просто делать отступ слева например $level × 15px - заморочиться с иерархической структурой, например используя ul/li для списка комментов и вкладывая список дочерних комментов в блок с родительским. Плюс — в такой схеме проще скрывать/раскрыват ветки так как иерархия тегов соответствует иерархии комментов.
Я хейтер, любящие пых - не читайте. Посоны, начинайте писать на Питоне для начала, или на крестах, синтаксис пыха тяжёлой для понимания, stdlib скомкана в одно пространство имён. Да, ны пыхе можно фрилансить, а на Питоне с фласком - нет. Но питон ламповый, для души.
> там все просто жуть как мутно, и что удивительно нигде нет четкого объяснения как правильно делать Ну есть код всегда как последняя мера. Мне тоже иногда приходится в него лезть и смотреть как там что устроено.
>>517975 Найди мне в Брянске хоть одну вакансию где нужен питон. Я только рад буду на него свалить, я на нем диплом писал. Только вот нет таких вакансий, и я более чем уверен, что и в других регионах таких вакансий нет (или появляются раз в год). А души не существует. А вот голод вполне реален, я проверял.
Помогите дауну, я уже и гуглил и читал манул и нихуя.
Решаю задачку ОПа, а там нужно узнать сколько чисел в массиве больше определенного числа, а потом эти числа подсчитать.
Я блять перепробовал дохуя разных вариаций, гуглил, даже был близок к решению, но оно оказалось ложным.
Помогите блять, посмотрите на пик и скажите как сравнить числа в массиве $height с числом в переменной $anonHeight и занести результат в $answer и так, чтобы $answer стал массивом с числами которые больше того с каким я сравнивал.
Неужели я такой даун,ч то сам не могу осилить? Даже гугл и мануалы не помогли
вообще нихуя не понятно, что за $count++. Я это еще не учил. Можешь обьяснить, что происходит если предположим это ввести? >>518001 Попытался так сделать и в результате выдает пустоту.
Как это понять? Если рост одноклассника анона больше роста самого анона, то мы увеличиваем количество одноклассников аноны которые его выше на один?
>>518025 Это я знаю, у меня просто хуево с логикой и я хотел сравнить массив с переменной, потом то что подходит под мое условие занести в другой массив, потом подсчитать количество значений в массиве когда можно было просто при нужном ответе увелчивать количество одноклассников на 1 и все.
Короче, мне надоело заниматься баловством и я решил задрочить что-то близкое к реальной жизни, на чем можно рубить бабло. Что легче будет освоить ньюфагу: yii, symfony или magento?
>>518072 Смотря чем ты хочешь заниматься. Если тебя устроит клепать интернет-магазины (это очень скучная и однообразная работа) можешь изучать CMS (opencart, magneto). Стоит отметить, не знаю как magneto, но opencart может научить начинающего человека очень хуевым практикам от которых потом будет сложно избавиться. Говеная структура (на словах MVC, а на деле лишь жалкое подобие), повторяющийся код, идиотский метод работы с базой данных, много их.
Если хочешь стать нормальным разработчиком нужно изучать фреймворки (yii, symfony). Даже если на первых парах работы джуном ты не будешь их использовать, знания полученные при изучении дадут очень хорошую базу, которая убережет от написания говнокода. Плюс в тех же CMS после фремворка будет разобраться гораздо легче.
Начинать лучше с yii, потому что понять symfony, если в глаза не видел ни одного фреймворка будет очень сложно.
ОП, студенты, наверное, готовы: https://github.com/blackberryJam/abiturients Ошибки исправлены. Только с неймспейсами и PSR-4 не разобрался ещё. Можешь привести пример, как правильно раскидать классы по неймспейсам?
Что быстрее будет: Изучить фреймворк пхп и все что он за собой тянет, или изучить питон? По пхп знаний побольше будет, чем по питону, хотя с синтаксисом обоих знаком. Применяться будет для веба. Очень сильно не бейте.
>>518083 Не ОП. Антоша, а как твой сайт открыть? Склонировал репозиторий, скинул в папку со своими сайтами на локалхосте, он старые видит, а твой нет. В httpd.conf добавил index.php в строку с DirectoryIndex, с правами доступа всё ок, выставил drwxrwxrwx. В первый раз пытаюсь чей-то сайт открыть.
>>518190 Удалось получить выхлоп. Всё, я просто MySQL не учил ещё, только установил. Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2002] No such file or directory' in /srv/http/hui/app/classes/Container.php:13 Stack trace: #0 /srv/http/hui/app/classes/Container.php(13): PDO->__construct('mysql:host=loca...', 'root', 'ghbdtndfcz', Array) #1 /srv/http/hui/app/bootstrap.php(19): Container->getPDO('mysql:host=loca...', 'root', 'ghbdtndfcz', Array) #2 /srv/http/hui/index.php(2): require('/srv/http/hui/a...') #3 {main} thrown in /srv/http/hui/app/classes/Container.php on line 13
Пых может поломать жизнь не хуже любой дури, поэтому слушай, мой юный друг. Да, Пых — самый короткий и быстрый путь к баблу. Но если ты решил связать свою жизнь с программированием, то совет один: даже и не думай о Пыхе, иначе через пару лет будешь рвать волосы на жопе.
PHP (вместе с Pascal) — самые низкооплачиваемые языки программирования. Сколько бы книг ты ни прочитал, сколько бы мегабайт кода ни написал, ты никогда не будешь получать больше, чем Java-быдлокодер средней криворукости. «На Яве пишут Корпорации», а на Пыхе… Порог выхода такой же низкий, как и порог входа: если у программиста на полноценных языках с возрастом есть шанс стать ценным высокооплачиваемым специалистом, то у похапе-олдфага такой возможности нет просто ввиду убогости и примитивности решаемых задач, его спокойно можно выгнать на улицу, взяв взамен школьника, который обучится всем премудростям похапе-быдлокоддинга за пару месяцев, потребляя при этом в три раза меньше доширака. Возможно, сейчас тебе кажется, что делать сайты — достойное и интересное занятие, но если ты хоть немного программист, через пару лет такой работы ты просто завоешь от того, насколько это унылая и далекая от программирования деятельность. Большинство проектов кроме того, что по сути своей убоги, представляют из себя чудовищный говнокод на кривых самодельных говнофреймворках и говноCMS (потому как сам язык не только не заставляет писать правильно, но и фактически подталкивает к производству быдловелосипедов). Как следствие такой работы — необратимое поражение мозга и окончательная потеря квалификации. Чему также способствует работа в коллективе невероятно тупых похапешников, постоянные оскорбления и обвинения (просто потому, что умный человек PHP не выберет). Некоторые начинают работать на PHP с надеждой потом перейти на что-нибудь другое. Но это тоже большая ошибка: во-первых, теряется драгоценное время для старта (наверное, самое важное и ценное в и без того короткой профессиональной жизни программиста), а во-вторых, PHP-опыт никому не нужен и нормальные программисты справедливо смотрят на него как на говно. «PHP» — клеймо быдлокодера на лбу и крест на карьере профессионального программиста, если ты пошёл по этому пути, назад дороги уже не будет. Единственное исключение — устроится похапешником на многопрофильную фирму, где тебя каким-то чудом заметят и предложат перейти на полноценную технологию, но это невероятная удача. Чуть более, чем вся относительно хорошо оплачиваемая работа для похапешников состоит из поддержки ботнетов, порносайтов, говносайтов с вирусами и прочего подобного дерьма. Подумай, хочешь ли ты потратить свою жизнь на засирание интернетов.
PHP погубил очень много потенциально хороших программистов просто благодаря легкости изучения на начальных этапах. Он затягивает как наркотик, с ним очень легко и приятно начать, вот только когда приходит понимание принципиальных недостатков как самого языка, как и (что гораздо более важно) его убогой ниши — часто оказывается уже слишком поздно что-то менять. Так что учись программировать, думай о будущем и обходи PHP стороной. Потому что с PHP у тебя нет будущего — это путь в никуда.
>>517643 помогите советом у меня есть несколько блоков, в которых есть изображения, эти блоки формируются на основе данных из бд. Так вот, мне хотелось бы иметь возможность посчитать количество изображений в каждом из блоков и в зависимости от этого менять их размер. $('.изображение').length показывает количество всех изображений, но как найти конкретно в каждом из блоков?
>>518196 Ну и что посоветуешь? Я сам на второй курс перевёлся, на первом был С++, вроде нормально зашёл, но вакансий я по нему в нашем городе не видел. Летом начал учить PHP, чтобы уже следующим летом мог зарабатывать, рассказал об этом своему дяде-железячнику (C+asm, но зарабатывает благодаря знаниям в електронике), он меня засмеял и сказал "бросай эту хуйню, это не программирование". Вкатываться к дяде и в настолько низкий уровень я не хочу. Куда податься?
>>518206 Хз бро. По мне так пхп переживает второе рождение. С ООП и фреймоворками. Осенью уже 7 версия должна выйти. Да и посмотри рынок вакансий не только в своем городе. В представлении можно годика 3 в бэкенде поработать. Потом на Java переехать. А там уже ентерпрайз кодить.
>>518209 >Да и посмотри рынок вакансий не только в своем городе. Да, я просто охуеваю, глядя на вакансии. Поэтому и выбрал PHP. Есть вакансии, на которые я уже по скиллам могу за еду устраиваться, судя по требованиям. А я готов и не против.
>>518192 Шоб работало, тебе надо создать виртуальный хост "site.local" и в dbconfig.php своего юзера, название БД и пасс поставить. Ну и таблицу abiturients создать не забудь (её дамп есть в репозитории).
Что быстрее будет: Изучить фреймворк пхп и все что он за собой тянет, или изучить питон? По пхп знаний побольше будет, чем по питону, хотя с синтаксисом обоих знаком. Применяться будет для веба. Очень сильно не бейте.
>>516942 >Также когда ты хочешь найти знак доллара, придется наставить бекслешей. По правилам регулярок ты должен вписать \$ но с учетом обработки строк PHP придется написать "\\\$" для строки в двойных кавычках и '\\$' для строки в одинарных. Получается, и двойные, и одинарные кавычки конвертируют "\\" в "\"? Как-то нелогично сделано. В мануале сказано, что экранирование работает только для двойных кавычек, а на деле выходит не совсем так.
> Чтобы использовать одинарную кавычку внутри строки, проэкранируйте ее обратной косой чертой (\). Если необходимо написать саму обратную косую черту, продублируйте ее (\\). Все остальные случаи применения обратной косой черты будут интерпретированы как обычные символы: это означает, что если вы попытаетесь использовать другие управляющие последовательности, такие как \r или \n, они будут выведены как есть вместо какого-либо особого поведения
В одиночных кавычках escape-последовательностей меньше (всего две), но они есть.
Сап, pr. Недавно в программировании и многое еще не понимаю, надеюсь на вашу помощь. Суть в чем, есть форма с html страницы, нужен файл-обработчик php, который при отправлении данных с этой страницы брал все значения, и просто высвечивал эти результаты уже на другой странице. Т.е есть например <select> <option name="doc1" value="fr">Док1</option> <option name="doc1" value="bs">Док2</option> <option name="doc1" value="mel">Док3</option> <option name="doc1" value="gl">Док4</option> </select> И если пользователь выберет, например, Док2, то на след. странице было бы написано doc1, bs. Если кто подскажет как такое сделать, было бы здорово. Спасибо большое заранее.
Прежде чем писать свой шабонизатор стоит изучить существующие, например шаблоны на чистом PHP и twig. Иначе с большой вероятностью у тебя получится очень низкокачественный результат (откуда я знаю? я видел велосипеды написанные другими людьми).
Для изучения MVC ты можешь попробовать сделать задачу на список студентов из ОП-поста.
>>518209 ой, не знаю, я наверное сделаю свой динамичный сайт, может еще какой фреймворк освою и перекачусь в шарписты. Требования к вебпрогерам какие-то запредельные, нужно быть человком-оркестром, знать ВСЕ цмс, битриксы, вордпрессы, фронтенд, кучу фреймворков, а еще логиниться во всяких яндексаналитиках. я уж не говорю про опыт работы. не, не мое это по ход.
Если для тебя требования к PHP/веб-разработчику запредельные то какими же тебе покажутся требования к разработичикам других языков? На собеседовании по Java тебя попросят как минимум написать сортировку, а может даже алгоритм балансировки бинарного дерева, и поверь, ты его замучаешься писать.
Сдается мне у тебя пока нет ни опыта работы ни хождения по собеседованиям судя по тому, что ты такой разборчивый.
Классы изучаются в моем учебнике, если ты его прошел то должен знать ООП. MVC можно изучать по ходу дела, это всего лишь раделение кода на 3 части и ничего там особого нет.
>>518563 >сортировку, а может даже алгоритм балансировки бинарного дерева, и поверь, ты его замучаешься писать. Знаешь, вот это вот все хотя бы входит в область чистого программирования, а ТЗ уровня ОЙ ПОДПРАВЬТЕ ТУТ КОД на какой-то цмски, которую я в глаза не видел, или необходимость качать платный битрикс, а фреймворков-то больше, чем пальцев на моих руках и каждую неделю выходит новый, в шарпе один .NET. Как раз говорю тебе об опыте вирт. собеседований.
Привет всем, решаю задачки ОПа и как обычно я даун не могу справиться самостоятельно и понять в чем ошибка.
Вопросы: 1. Не уебищный ли случаем у меня код? Можно ли его как-то уменьшить и сделать более лаконичным?
2. Где ошибка? Почему вот когда вывожу переменные, то некоторые из них проебываются и каждый раз разные.
Само задание: На картинке — часть программы, создающая философское настроение. Принцип работы таков: есть 5 наборов слов, из которых случайно выбираются слова, образуя такую структуру:
Ну да, есть такая фигня, что в вебе нужно быть постоянно в курсе дела, особенно это касается фронтэнда. Во всяких C++ или прочих подобных языках порог вхождения пусть и выше, но зато там по сути выучил что-то и в идеале и все, кодишь на этом до усрачки.
>>518630 http://ideone.com/V5qQTE код таким образом стал еще больше, но зато теперь все нормально работает и генерирует слова, правда интересно почему в том случае не работало, вродь все правильно же было.
>>518652 Что значит всё правильно было? Тебе же сказали: индексы в массивах с нуля начинаются, а значит у тебя в коде могло быть обращение к несуществующему элементу массива.
>>518703 Та же хуйня когда читаю про всяких 26+ кунов, но уже хуево конечно, что 21, столько всего упустил, ну и похуй, ничего уже не вернёшь, поэтому остаётся только наверстывать
>>516349 - кун репортинг ин Сходил на собеседование, спрашивали по очереди mysql, ооп, магические методы, git, трейты, новые фичи в пхп, отличие интерфейса от абстрактного класса и прочее в таком духе. Завалился на mysql, спрашивали про разные движки mysql кроме innodb и myisam, транзакции, ну я это и не знал. Еще спросили, что такое динамический вебсайт, а я и не в курсе, думал это сайт с javascriptом.
Ебашу ООП. Второй заход. Первый был неудачный, потому что после процидурок понять нахуй нужно это ООП ебаное так и не вышло. Набижал после того как наигрался с JS, jQuery, AJAX. Теперь-то понятно что в html вообще не должно быть php-кода, а сама html-страница лишь принимает результат, который вернул php с помощью AJAX (в XML) и js это дело интерпретирует. Ну кароче вот. Думаю еще чуть-чуть и сам случайно придумаю паттерн программирования, естественно который уже есть в природе, лал. Про паттерны ниебу ниче, думаю если не понятно, значит пиздуй учить основы, а если сам выдумал, то уже можно браться и за них. Ну вот, типа опытом поделился. Если кто застрял - имейте ввиду, может пригодится кому. Вот.
> Теперь-то понятно что в html вообще не должно быть php-кода, а сама html-страница лишь принимает результат, который вернул php с помощью AJAX (в XML) и js это дело интерпретирует. Это переусложнение в большинстве случаев. Рендеринг на клиенте нужен только для веб-приложений (и это требует не только переноса шаблонизатора на клиент, но и моделей с логикой), а в большинстве слуаев выгоднее рендерить страницы на сервере.
По ООП есть глава в учебнике из Оп поста, там вроде все просто объясняется.
>>518783 Спасибо, потренируюсь. Ну я хоть теперь представляю, о чем на собеседованиях вообще спрашивают. Еще спрашивали, как сайт заливать на сервак, я сказал по FTP, но они сказали что устарело давно и теперь там какая то бодяга, которая сама из git все вытаскивает, запускает тесты, проверяет и формирует архив сайта, а он потом на сеть серваков заливается хз чем и разворачивается там. Ну я про это вообще не в курсах был. Еще сказали весь сайт поделен на домены по набору фич/классам, у каждого домена своя команда и репозиторий. И когда они эти домены между собой связать пытаются, вечно глюки возникают, которые год уже пилят толпой.
Не, я все-таки не могу понять логику МВК в ООП, вот хоть убей. попробую, подглядывая у того чувака, сделать задачку на студентов, может тогда пойму. Вот по мануалу могу сделать, а если начинаю свой массив разбивать, то все нахуй, только первая переменная выводится.
>>518807 В первой (users) у меня поля id, name. Во второй (likes) -- лайкер и лйкнутый, оба ссылаются как внешние ключи на users.id. В правильном направлении мыслю?
>>518785 > Рендеринг на клиенте нужен только для веб-приложений Я так и хочу. Веб-приложения, Site as Service (или как оно там правильно). Статейники и магазины можно и мышкой с помощью друпала наклацать. Да там и до мобильных приложений, чую, рукой подать.
«тот чувак» немного переусложнил код и попытался там чуть ли не Юи написать.
Проще сделать так:
- контроллер = скрипт в корневой папке, например index.php или profile.php - модель — класс Студент + data mapper для загрухзки/сохранения его в БД + класс для валидации - вью = шаблоны
> Вот по мануалу могу сделать, а если начинаю свой массив разбивать, то все нахуй, только первая переменная выводится. Не копируй код. Ты должен написать его сам от начала до конца. Да и там приложение простейшее.
Я подскажу, если ты зайдешь в тупик, но только если ты пишешь код сам. Если ты копируешь код то вопросы надо задавать не мне, а его автору.
Также почитай комментарии к заданию. Там очень много полезного написано.
Если ты хочешь разобраться почему твой код не работает, натыкай там var_dump и посмотри что в разных переменных.
Также, включи отображение ошибок (display_errors = 1) на своем компьютере или смотри лог ошибок — наверняка там есть ошибки которые ты не видишь.
>>518823 В требованиях были опыт высоконагруженных вебсайтов, memcached (про нее тоже на собеседовании спрашивали подробно), ООП, бэкенд и фронтенд. По фронтенду спрашивали как jquery работает, зачем там селекторы, что делают, что вообще она делает, по ооп много вопросов было, которые в мануале с php.net в разделе ООП все есть, еще интересовались умею ли в elastic search, я про это тоже хз. Сказали, что часто к ним приходит народ с институтов и находит у них в коде паттерны и даже называют их по именам, а их программеры под 40 и не знали, что это паттерны, сами удивляются, а потом уходят, ибо кодить с институтов никто толком не могет.
Судя по твоим ответам, у тебя нет нужного опыта (хотя может им он и не очень требуется). Опыт в хайлоаде подразумевает хорошее знание особенностей mysql, индексы, explain и оптимизацию запросов, кеши/nosql хранилища, понимание сетевых технологий, знакомтсво с nginx, понимание как работает масштабирование, ну и знание самого PHP должно быть на высоком уровне.
Так что если тебя возьмут то сможешь многому научиться.
Что быстрее будет: Изучить фреймворк пхп и все что он за собой тянет, или изучить питон? По пхп знаний побольше будет, чем по питону, хотя с синтаксисом обоих знаком. Применяться будет для веба. Очень сильно не бейте.
А на Питоне без фреймворков и библиотек (и разумеется SQL/HTML/JS/CSS) что-нибудь пишут? Скрипты для переименования файлов разве что.
Я не вижу в каком месте изучение Питона проще. Более того требования к Питон разработчикам выше, а вакансий меньше (а также за них могут меньше платить потому что они более «интересные», не с каким-нибудь пхп возиться).
>>518850 Ну да, я в mysql плавал вообще, я дальше joinов и where/having его не проходил же, только по ООП и фронтенду все норм ответил, по сетевым технологиям не спрашивали, сказали у них админы этим занимаются. Еще сказали нужно линукс на уровне пользователя знать, заебало их всех приходящих линуксу обучать.
>>518853 C SQL/HTML/JS/CSS в разной степени годдности знаком. Читал статейку про создание простого приложения на джанге(гостевая), другой уровень разработки, генерация админки. Ну у Laravel примерно такой же уровень, хороший фреймворк, но путаницы больше.
По линуксу конечно хорошо бы сделать «Путь линукса», из задач. Хотя конечно аноны что-то не рвутся проходить путь HTML/CSS, но пусть хотя бы те кто хочет, получить возможность научиться командной строке.
Ну имеется в виду ответ на такой вопрос: допустим у тебя есть посещаемый сервис, нагрузка растет и на единственном сервере загрузка 100% на всех ядрах, приложение начинает медленно работать, а то и падать, что делать, как масштабирвать его на несколько серверов, как этим всем управлять.
Это скорее обзорные статьи, чтобы знать что вообще бывает. Хорошо бы это дополнить практикой, если у тебя есть желание, мы можем какую-нибудь распределенную борду или анонимный твиттер запилить, с кешами и шардингом. А потом нагрузочными тестами помучать (хотя конечно для этого надо бы несколько серверов иметь). Чтобы делать задание разумеется надо хорошее знание SQL и индексов. Задание долгое, месяца на 2-3 легко может затянуться пока ты со всем будешь разбираться.
>>518932 1. У тебя условие цикла ($i==$halfLength). Это значит, что цикл выполнится только когда $i = полудлинне строки. То есть всего 1 раз. 2. Чтобы выбрать последний символ в строке, в mb_substr() надо передать следующие аргументы: mb_substr($text, -1, 0). Отсчёт с конца начинается с единицы. Ты же, приравнивая $o к $i, передаёшь туда -0, который становится нулём и указывает на первый символ строки. А дальше у тебя будет сравниваться второй с последним, третий с предпоследним и т. д. 3. Также, в теле цикла у тебя неверное условие определения палиндрома. По такой логике получается, что если одна пара букв с противоположными индексами совпадает, то слово -- палиндром.
>>519015 Да я так заебался с этой задачей, блять, это вообще нормально, что я ее так долго решаю? Вот взгляни, вроде как по идее все правильно сделано. Беру по символу с конца и начала, если они одинаковы, то добавляю к $word1 начальный символ и к word2 - конечный, если нет, то выдать "Не палиндром". И так по кругу. В итоге если $word1==$word2, то выдать результат. https://ideone.com/oU9vfw
Но мне какого-то хуя выдает всегда "Палиндром". Оказывается потому что если я хочу вывести $comparison1 и $comparison2, то выводит пустоту, поэтому наверное сравнивает пустоту с пустотой, то и выдает.
Но какого хуя то блять пустота, я же сказал выводить по ходу выполнения цикла эти переменные, а он мне ничего не выдает.
Вот пример кода без всяких дальнейших сравнений, просто взять первую и последнюю букву и вывести, но почему не воводит то?? https://ideone.com/Z5E4eX
>>519036 Потому-что у тебя условие какое-то дурацкое. $i == $halfLength ты понимаешь, что твой код в скобках не будет выполняться, потому-что в условии стоит проверка на равенство между счетчиком и половиной длинны?
>>519041 А вот так не надо делать. Сейчас он бы ебался с этой задачей весь день, но зато понял бы как её решать. Теперь он просто посмотрит готовое решение.
на задачку я одним глазом взглянул, но быстренько закрыл.
Не знал конечно, что в цикле for можно указывтаь всего одно действие, а не два, по ссылке из оп поста говорится, что в for должно быть две точки с запятой, не больше, не меньше пик2
>>519036 >Вот пример кода без всяких дальнейших сравнений, просто взять первую и последнюю букву и вывести, но почему не воводит то?? >https://ideone.com/Z5E4eX Каждая итерация цикла выполняется только после проверки условия на истинность. Если оно не истинно, цикл прерывается. Посмотри теперь на своё условие.
>>519051 Увеличение счётчика на 1 происходит после выполнения тела цикла. Выполнение тела цикла происходит после проверки условия, в случае, если оно истинно. Твоё условие: $i == $halfLength. $i в начале равно 0. То есть, $i != $halfLength, и цикл сразу прервётся.
Пытаюсь разобраться с задачей на лайки. Первые два пика -- мои таблицы. Когда считаю, сколько лайков пользователь поставил/получил, проблем не возникает (3-й пик с запросом). Когда пытаюсь прицепить подсчёт взимных лайков (4-й пик), результаты подсчёта с 3-го пика портятся. Число взаимных лайков, при этом, считается верно. Что делаю не так? Что стоит изучить из SQL конкретно для этой задачи?
Сразу же совет: структуру таблиц надо постить не скриншотом пхпмайадмина а SQL кодом. Потому что я например не понимаю разрешен ли NULL, какие значения по умолчанию, как именно выглядят индексы и тд (и ты скорее всего тоже). А SQL код это универальная вещь кторую все понимают (ну ии должны понимать) и которая документирована.
Удобно постить код на sqlfiddle где его сразу можно посмотреть и запустить.
Далее, у тебя странный код. Объясни-ка как работает
COUNT(CASE WHEN .. THEN .. END)
Ибо это можно написать короче.
2 джойна лучше чем джойн с OR так как они могут использовать индексы (хтя ты их наверно пока не изучал) и работают быстрее.
Ошибка и в 3-м и в 4-м скриншоте в том что ты используешь не тот тип джойна. Также в 4-м скриншоте по моему неправильные условия джойнов. Ты можешь объяснить как они должны работать и что ты должен получить по задумке (что приджойнится к одной строчке с каким-то пользователем)?
>>519133 >Далее, у тебя странный код. Объясни-ка как работает Я толком не уверен как что работает. Только догадываюсь. Ладно, покурю теорию по ссылке, что-нибудь рожу и снова дам тебе на растерзание.
http://sandbox.onlinephpfunctions.com/code/80850fe6d1c511adb6691cf75e2df3c4a67f5c65 А в пехапе есть анонимные функции. И если бы вы знали более одного языка, то обрадовались. Но куда там. Сидите, ковыряетесь в хуйне какой-то три года. ОП, ну чому ты такой дегенерат, который не удосужился за три года сбацать свой законченный инфопродукт экспериментируя над нуфагами ИТТ от А до Я. М?
>>518838 Перестаньте уже читать биографию Масков/Цукербергов/Джобсов(вот этот вообще ТП с хуем, умер, а эппл живет дальше, ибо пиздобольствовать умеют многие и на этом поприще всегда найдется подмена), это результат типичной предпринимательской деятельности(хотя Рыжий хуй и Джобс - это просто удача, парни изобрели штуку, а нам быдлу она внезапно понравилась) + внезапный спрос на это дерьмо, который нельзя было спрогнозировать(вообще никак), тобишь по сути это новый рынок, на котором у вас все шансы стать монополистом, ведь вы и есть этот рынок. Году в 2010 хабрапомойка была переполнена статьями в духе - "Зацените мой никому не нужный сервис по поиску друга для вашей мамки", миллионы их было, такое называют "Пузырь".
>>518206 Пфф, вот эти железячники же все как правило сидят на одном месте, в какой-нибудь конторке. Небось какой-нибудь АСУ'шник или около этого. И, нет, ебать байтики - не более интеллектуальная деятельность, чем веб-погроммирование.
Юзаю вот этот мануал => http://phpclub.ru/mysql/doc/tutorial.html Но он по ходу устарел. Вот тут проблема: http://phpclub.ru/mysql/doc/loading-tables.html Создаю файлик со значения полей, чтобы не вбивать ручками(у меня в качестве разделителя ";"). Чтобы подставить NULL в поле death, пишу \n в нужных местах. Получается такой файл. Fluffy;Harold;cat;f;1993-02-04;\N Claws;Gwen;cat;m;1994-03-17;\N Buffy;Harold;dog;f;1989-05-13;N Fang;Benny;dog;m;1990-08-27;\N Bowser;Diane;dog;m;1998-08-31;1995-07-29 Chirpy;Gwen;bird;f;1998-09-11;\N Whistler;Gwen;bird;\N;1997-12-09;\N Slim;Benny;snake;m;1996-04-29;\N У автора все получилось, и заместо \N вставилось NULL, у меня и других парней с форума, на котором я искал решение другой проблемы с этим примером тоже самое(последний пост, там в конце почемуто NULL присутствует): http://sqlinfo.ru/forum/viewtopic.php?id=4087 То есть вместо NULL значение становится 0000-00-00, через select NULL вставляется. Я хз, что тут делать. Нет я могу забить все руками и пойти по мануалу дальше(так и сделаю пока), но хочу разобраться.
Попросили написать сайт-визитку, цену предварительно назвал маленькую 1к рублей наваял за час на вордпрессе http://vihnich.890m.com/ и теперь думаю, что это вроде как слишком дорого за час работы, стоит ли с нуля сделать? Хотя вроде и лень. Кто делал сайты-визитки, что там должно быть обязательно?
> Сегодня на продакшене было обнаружено гениальное выражение в одном из запросов. > (ss_1<>'SS0001' or ss_1<>'SS0002' or ss_1<>'SS0010')
Так как посетители того сайта примерно та же аудитория что и посетители двачей (то есть школьники и аутисты), разумеется, в комментариях написан либо бред не по теме, либо заведомо неверные утвеждения:
> inkanus-gray 01.07.2015 12:15 # +4 > А ничего страшного, что результат всегда TRUE?
Комментатор наверно хотел показать какой он умный, но он сам сел в лужу, потому что он не прав. Это выражение не всегда равно TRUE (точнее 1 так как в MySQL нет TRUE/FALSE, а используется 1/0).
Но аудитория нашего треда конечно же гораздо умнее и легко решит задание:
- определите в каких слуаях результат выражения не равен 1 и чему он равен в этих случаях - упростите это выражение, записав его в более понятном и коротком виде
То есть если вы верите комментатору и счиатете что условие всегда истинно, разумеется его можно заменить на цифру 1 (но это не так).
Считайте это проверкой вашей эрудиции и знания SQL. Если вы честно ломали голову и так и не нашли ответ, напишите ход своих мыслей и я дам подсказку.
> Только с неймспейсами и PSR-4 не разобрался ещё. Можешь привести пример, как правильно раскидать классы по неймспейсам? PSR-4 задает соответствие между полным именем класса и путем к файлу, то есть как должен называться файл с тем или иным классом.
В твоем случае логично разбить классы на неймспейсы:
Controller\... (контроллеры) Model\... (модель абитуриента) Service\... (сюда кидаем мапперы, сервисы, валидаторы, контейнер, при желании можно раскидать их по вложенным неймспейсам, но их немного так что не стоит заморачиваться) Util\ (сюда кидаем хелперы, пагинатор)
Также в PSR-4 рекоментуется в качестве корневого неймспейса делать имя приложения. Ну например ты бы мог сделать корневым неймспейсом AbiturientList или AL. Но это не обязательно.
В соотвествии с PSR-4 классы в разных неймспейсах будут также лежать в разных папках, например:
Controller\Front -> app/Controller/Front.php
или
AL\Controller\Front -> app/Controller/Front.php
(папку classes можно выпилить за ненадобностью).
После этого надо будет чуть подправить автозагрузчик. Вот образцы:
Когда ты в следующем задании изучишь composer, ты узнаеь что в него встроен автозагрузчик PSR-4 и свой тебе больше писать не требуется, достаточно лишь в конфиге композера указать корневой неймспейс и папку с классами.
Интересно, мой редактор пишет что тут 13000 символов, но двач не дает их отправить одним постом. Эта зараза считает байты почему-то.
> https://github.com/blackberryJam/abiturients/blob/master/app/bootstrap.php#L10 > require __DIR__ . '/exceptionHandler.php'; > set_exception_handler('exceptionHandler'); Зачем это? PHP и так сам логгирует информацию об исключениях и (если включен display_errors) выводит ее на экран. Свой обработчик тебе нужен только если ты хочешь при исключении например выводить страницу-заглушку с кодом 503.
Причем PHP логгирует подробную информацию, с именем файла и стектрейсом а ты только огрызок:
> error_log($exception->getMessage());
То есть ты зачем-то сделал фиксацию информации об исключениях менее подробной.
Если ты не видишь информации об исключениях на экране то надо просто включить display_errors (на локалхосте) или смотреть логи (на хостинге) а не изобретать странные вещи.
Надо либо удалить этот код либо сделать чтобы в нем был смысл и он давал какие-то дополнительные преимущества.
> error_reporting(-1); > mb_internal_encoding('utf-8'); Это надо перенести в bootstrap
> define("SITE_ROOT", "/var/www/site.local"); Это неправильно, так как у меня например путь будет другой. И что мне делать, править код? Нет, так не пойдет. Надо определять путь автоматически например через dirname(_ _ DIR _ _ )
> define("ROOT_URI", $_SERVER['HTTP_HOST']); Это тоже неправильно. Зачем тебе имя хоста в URL? Это надо вынести в конфиг, чтобы если сайт установлен в папке типа /al можно было заменить в конфиге
$rootUri = '/';
на
$rootUri = '/al/';
И все работало. Тебе не нужно имя хоста, ссылка вида
<a href="/asdasd/asdad">
И так использует текущее имя хоста.
Также, мне не нраится использование тут константы. Что это за константа которая может меняться? Замени-ка это на функцию getRootUri().
Значения для IN не получится вставить через плейсхолдеры (это ограничение PDO), так что придется формировать строку с id вручную. Да, вместо token удобнее использовать id так как это числа и они короче.
Также, если поиск хотя бы по одному слову не дал результатов, можно прекращать его досрочно.
Также, я тут подумал, не проще ли генерировать условие вида:
SELECT ... WHERE (field1 LIKE '%word1%' OR field2 LIKE '%word1%' ... ) AND (.... LIKE '%word2%') AND (.... LIKE '%word3%') ? ORDER BY ... LIMIT ...
> https://github.com/blackberryJam/abiturients/blob/master/app/classes/AbiturientsMapper.php#L97 > public function getNumberOfPages($perPage) > $offset = ($page - 1) × $perPage; Ты размазываешь пагинацию по всему коду: в контроллер чуть-чуть заснунул, в маппер. Так не пойдет, унеси все это в пагинатор или контроллер. Маппер вернет число записей, а пагинатор или контроллер может преобразовать его в число страниц.
> " LIMIT " . $perPage . " OFFSET " . $offset; Числа прекрасно передаются через плейсхолдеры, не надо их вставлять напрямую.
Надо сделать чтобы контейнер либо содержал в себе эти параметры (их можно передать через конструктор или метод типа setParameters и бросать исключение если их нету), либо чтобы контейнеру передавалось в конструкторе имя конфига, а он сам загружал этот конфиг в методе getPdo.
Кстати, если тебе интересно, можешь почитать как сделан DI Container в симфони (он может использоваться и без симфони как отдельный компонент):
Да, эти 4 строчки кода это все, что требуется чтобы добавить в симфониевский контейнер одну службу. Это быстрее чем писать свой контейнер.
Также, симфониемвский контейнер умеет читать, хранить и выдавать данные из конфигов. Вот как выглядит описание сервиса PDO которому передаются параметры из конфига:
Я не знаю, видишь ли ты это или нет, но при правильном DI твои классы не привязаны к конкретной реализации контейнера. То есть если твой AbiturientMapper и AbiturientService написаны правильно то ты можешь использовать их с любым другим контейнером, не меняя эти классы (в твоем случае это так, потому что ты следуешь принципам DI, и это хорошо).
> https://github.com/blackberryJam/abiturients/blob/master/app/classes/UserpageController.php#L15 > } catch (Exception $e) { > $errors['tokenGenerateError'] = $e->getMessage() . " Обновите страницу."; Тут ты ловишь вообще любые исключения. Это неправильно, так как они могут возникнуть не только из-за того что не удалось сгенерировать токен (а например PDO может выкинуть исключение). Да и обновлять страницу нет смысла, там вероятность что с 5 попыток токен не сгенерируется, ничтожна и если это произошло то скорее всего ошибка в коде и ничего не поможет.
Если ты хочешь ловить исключение, сделай свой класс исключений для этой цели. Но лучше вообще тут убрать try/catch.
> https://github.com/blackberryJam/abiturients/blob/master/app/classes/UserpageController.php#L44 > protected function isPost() > protected function isCookieSet($cookieKey) Это по логике должно быть в базовом контроллере так как это нужно всем, а не только UserpageController. В фреймворках обычно делают объект Request хранящий куки, параметры запроса и соответственно эти методы делают в нем:
> https://github.com/blackberryJam/abiturients/blob/master/app/classes/MainPageController.php#L48 > $queryTemplate = Util::buildQueryTemplate('page'); зачем строить URL из текущего запроса? Это не очень надежно и трудно для чтения. Лучше явно сформировать и передать массив параметров. Ты ведь знаешь какая сортировка, какое поисковое слово и тд. Сделай массив параметров и передавай его в шаблон. А потом этот массив можно передавать во всякие функции, которые удаляют из него или заменяют некоторые параметры и формируют ссылку.
Наример функция генерирующая ссылку на сортировку, удаляет номер страницы и заменяет параметры отвечающие за сортировку.
С массивом работать просто и логично. А ты переусложняешь систему: возьмем текущий URL, распарсим его, понадеемся что все правильно, и тд.
- продакшен (который видят пользователи) - тестовый сервер (на который можно выгрузить код и показать кому-то) - сервер на локалхосте у разработчиков
У этих серверов разные адреса, потому имя хоста надо хранить в конфиге (или брать HTTP_HOST) а не прописывать жестко, так как это доставит потом множество неудобств.
Также, у тебя там жестко прописан домен в установке кук. Из-за этого у меня на другом домене они не ставятся и не работает ни регистрация ни flash сообщения.
------
При поиске надо выводить в поле поиска текущий поисковый запрос. Также, стоит писать
«Показаны только результаты поиска по словам xxxx. Показать всех абитуриентов».
Кстати, я тут почитал MDN, оказывается ^ и $ в pattern можно не писать, браузер это как-то сам проверяет.
Также я прочел еще одну интересную фишку. Если ты укажешь для input атрибут title, например «Имя может содержать ....» то браузер включит его в сообщение об ошибке заполнения (а также покажет при наведении на инпут). Давай-ка, чтобы ты это запомнил, напиши title хотя бы для нескольких инпутов, а то иногда непонятно что именно я заполнил не так.
Также, слишком длинные строчки в HTML, которые не влезают в ширину гитхаба, надо бы перенести.
Для года наверно стоит использовать input type="number" и указать для него min/max (max стоит указать лет на 100 в будущее чтобы оно было актуально). На мобильных устройствах это приведет к тому, что клавиатура будет содержать только цифры, и у input появятся стрелочки увеличения/уменьшения. Увы, специально для года поля ввода нет (а вот для года + месяца например есть).
(Application можно выкинуть так как оно тут смысла не добавляет).
> https://github.com/Integer64/myTestSite.dev/blob/master/CatMouse/index.php#L19 > $mouse1 = new Mouse(9, 1, "Mouse1", $fieldSize); А зачем мыши знать размер поля? Я думаю, ей нужна только ссылка на объект-карту которую она может получить автоматически при добавлении на карту (и которую у нее отберут при снятии).
> private $location = ["x" => 0, "y" => 0]; По моему удобнее и надежнее иметь свойства x и y чем мучаться с массивом. зачем тут этот массив? и почему массив а не например объект?
> private $fieldSize; Это свойство карты, а не свойство кошки. Незачем дублировать информацию.
> public function __construct($fieldOfVision, $cruisingRange, $name, $fieldSize) Так как поле зрения и скорость хода определяется типом животного то наверно не надо его передавать в конструктор.
- генерируем список всех разрешенных ходов, включая «стоять на месте» (запрещенные ходы на занятую клетку отсеиваем). Для каждого хода подсчитываем число очков - выбираем ход с наибольшим числом очков - делаем ход если он есть
Заметь что здесь есть как общие для всех животных части, так и места где они ведут себя по-разному. Грамотно разбив алгоритм на функции, ты сможешь избежать дублирования.
Подсчет очков для хода зависит от животного. Мышка оценивает безопасность клетки (чем ближе кошка, тем меньше баллов; чем меньше из клетки выходов, тем меньше баллов; чем больше видно кошек рядом с клеткой, тем меньше баллов), кошка — возможность поживиться (ну например чем ближе к клетке мышка тем больше баллов).
Ты должен грамотно подобрать веса для разных факторов, чтобы животные выбирали ход оптимально. Если учитывать много факторов, логика поведения животного может быть очень хитрой.
Заметь что этот алгоритм позволяет и делать случайные ходы например если есть несколько равноценных вариантов.
Да это не так сложно, чем больше ты знаешь концепций тем проще понять новй фреймворк. Да и я бы не сказал что их много, симфони 2 да Yii2 уж который год юзаем (а раньше был ZF1).
С CMS можно разобраться по докуиентации или по коду, если ты хорошо знаешь PHP то это не проблема.
> for ($i=0; $i==$halfLength; $i++) { Смотри, у тебя в начале
$i = 0; $halfLength допустим равно 8
Он смотрит, что условие $i==$halfLength не выполняется и цикл заканчивается ни разу не выполнившись. Надо заменить == на <=. Это не условие завершения цикла, а условие «выполнять пока условие верно».
> по ссылке из оп поста говорится, что в for должно быть две точки с запятой, не больше, не меньше пик2 Верно. Точки с запятой должно быть всегда две, но самое первое действие и последнее действие могут быть пустыми (то условие что посередине тоже - тогда цикл будет выполняться вечно). Это все правильные конструкции:
Нужно уметь искать ниши и возможности. Ну и у Джобса не так все просто было, почитай хотя бы в википедии, его компания должго была нишевой, были убытки, были непроданные продукты, его увольняли из совета директоров. Большой успех началася только с выхода айпода (плеера с колесиком), а до этого почти 20 лет все было очень шатко.
> Году в 2010 хабрапомойка была переполнена статьями в духе - "Зацените мой никому не нужный сервис по поиску друга для вашей мамки", миллионы их было, Потому что разработчики реализуют не потребности рынка, а свои фантазии.
Ты что-то напутал. Может у тебя колонки в другом порядке идут? Сделай-ка
DESCRIBE pet;
И покажи что он выведет. Также попробуй после LOAD INFILE сделать команду
SHOW WARNINGS;
И напиши что она выведет.
На форуме
> Варианты с подстановкой вместо /N, //N и NULL приводили к аналогичным результатам. Там перепутали прямой и обратный cлеш. Надо писать \N иначе MySQL понимает это как строку "/N" и при попытке вставить вместо даты всталвяются нули.
Если ты перед вставкой сделаешь команду
SET sql_mode = 'STRICT_ALL_TABLES';
То MySQL не позволиит остатся ошибке незамеченной и громко сообщит о ней.
А ты учел время на поиск заказчика, переговоры с ним? На исправление замечаний? 1к рублей в час ты получаешь если при работе по 8 часов в день ты за месяц набираешь 160К. Сомневаюсь, что у тебя уже есть список из 160 аналогичных заказов. Так что реальная почасовая оплата наверно меньше выходит.
Ну и нет такого понятия как «справедливая» цена. Это как? Если я бы был заказчиком то для меня «справедливая» цена это ноль рублей + может быть отзыв (хотя не, сорри, мне некогда ставить отзывы, надо задачки проверить анонам).
Есть та, которую готов заплатить за работу заказчик, и та, за которую готов работать исполнитель. Если они сходятся, это и есть рыночная цена. Раз заказчик заплатил тебе такую сумму, значит он считает что твоя работа стоит больше чем эти деньги и твое предложение выгоднее других исполнителей.
Ты же не возмущаешься в магазине что хлеб дорогой? Ты либо его покупаешь либо покупаешь что-нибудь другое либо идешь выращивать сам.
Вот тут есть статья, она не совсем про фриланс, но про формирование цен, от Джоэла Спольски, он раньше работал в майкрософт (над экселем) и очень умный (хотя вы молодежь наверно про него не слышали, но он кроме автора блога еще и сооснователь StackOverflow): http://russian.joelonsoftware.com/Articles/CamelsandRubberDuckies.html
> Кто делал сайты-визитки, что там должно быть обязательно? То, что хочет видеть заказчик.
А, еще кое-что. Если у тебя хорошее настроение и ты думаешь что провернул выгодную сделку, не спеши радоваться. Может быть заказ отдал тебе посредник который взял с заказчика допустим 5 или 10К.
>>519365 говорит, что есть метод toArray(), однако когда я его выполняю ничего не меняется. И у меня все равно объект. Печаль какая -то, не знаю как поступить.
>>519370 Unknown, если ss_1 is null. Так как обычно Unknown считается также как false в логических выражениях, то достаточно заменить на ss_1 is not null, но тут на код надо смотреть.
>>519403 В твоём sql может быть и нет, а в нормальном - троичная логика с true, false и null unknown. И в том же нормальном sql твоё выражение всегда будет равняться unknown.
И мне тут еще одна мысль в голову пришла (по поводу ценообразования). Иногда я вижу акции типа «2 по цене одной». Если магазин может позволить себе продавать 2 вещи по цене одной значит он накручивает на цену закупки не менее 100%!
Также, я допустим видел вещь которая продается со скидкой (за 1300) при том что старая цена была 2400. То есть они продают вещь со скидкой и остаются в плюсе, а сколько же они накрчивали когда цена была без скидки?
Тем не менее в убыток они продавать не будут, мне кажется. Особенно если речь об одежде, которая не портится и которую можно в случае неудач продать в магазин распродаж.
Ну там убыток в случае какого-то определенного товара не так критичен. Обычно он включен в расчеты. Да и скидки зачастую делают фиктивными, т.е. цену оставляют прежнюю, но пишут, мол скидка 50%. Чистая игра на психологии, чтобы людям казалось, что они выгодно очень что-то покупают.
>>519392 Ну в условии задачи сказано "определить каким банком выгоднее пользоваться".
Я посчитал и вышла, что выгоднее всего третьим банком, так как за 11 месяцев школьник уже ничего не должен банку, 11 месяцев я сам написал. Условие просто не понятное то ли я должен к сумме кредита прибавлять процент и комиссию и вычитать ежемесячную оплату анона, то ли что, хрен пойми
Там не должно быть заложенной цифры 11, программа должна сама вычислять сколько месяцев надо. Если я впишу другую сумму кредита, как я угадаю сколько надо месяцев выплачивать? Это должно все считаться автоматически.
И вообще, у оракла такие информативные сообщение об ошибках! Он пишет только ошибку но не пишет где она произошла и когда у тебя огромный запрос это совсем не весело.
>>519469 Проверил, у оракла нет unknown. У него вообще нет boolean для sql, лол, есть только в pl/sql. >>519470 Там невозможно просто так вывести значение булеана в запросе. Булеан в оракле есть только в pl/sql, в sql-запросе надо пользоваться case-when/decode или условиями в where.
И вывод строчки с ошибкой тоже только в pl/sql, но даже там, если ошибка в запросе, то он укажет только в каком запросе. Но обычно простые ошибки ещё sqldeveloper показывает, а сложные более-менее из текста ошибки понятны(если это только не ora-600)
>>519469 блять, я что-то нихуя не понимаю определи наиболее выгодный кредит. Платить школьник, как и прежде, может не более 5000 р. в месяц. Сначала начисляются проценты и комиссия, а только потом происходит выплата.
Единственное, что мне приходит на ум, так это взять определенный промежуток времени и определить кому из банков за этот определенный промежуток времени школьник будет меньше всего должен и исходя из моего решения самый лучший вариант - третий.
как исходя из этого задания могло получиться во втором ответе 62к, если кредит гасится, а не увеличивается, почему именно 62к, что бля в тот момент произошло, что перестало увеличиваться дальше.
Можешь хотя бы примерно намекнуть, что я должен сделать?
Я вот в душе не ебу как эту задачу с первого раза можно решить за 5 минут.
61270 это общая сумма выплат по кредиту. КАк могло получиться? 39999 + проценты + комиссии за время выплаты.
> динственное, что мне приходит на ум, так это взять определенный промежуток времени и определить кому из банков за этот определенный промежуток времени школьник будет меньше всего должен Посчитать общую сумму выплат по кредиту и посмотреть где меньше.
> вот у меня есть статический сайт на компе с чего начать и что нужно сделать чтобы залить его? Сайт на хостинг в самом простом случае заливают по протоколу FTP или SFTP значит тебе нужна программа-клиент, например WinSCP. Вводишь туда данные соединения и заказчиваешь файлы.
Это для простых случаев, более сложный способ это например написать bash-скрипт на основе rsync, но для этого нажо хорошо разбираться в командной строке.
> я должен гсч задать число от 100000 до 999999 а затем делить его на 10 и в итоге получиться последняя цифра поста, то есть нужно задать что выводить при получении чисел от 0 до 9 так? Да, надо поставить например блок if/elseif/else который для разных цифр выводит разные тексты.
> А для задания с кубиками код так должен выглядеть конечный в итоге или можно лучше было? Если это твой код http://ideone.com/yddJ6y то все верно
>>519380 >Также, я тут подумал, не проще ли генерировать условие вида: > >SELECT ... >WHERE (field1 LIKE '%word1%' OR field2 LIKE '%word1%' ... ) AND (.... LIKE '%word2%') AND (.... LIKE '%word3%') ? >ORDER BY ... LIMIT ... > >И пусть база объединяет результаты. Наверное так и сделаю. Странно, что это сразу мне в голову не пришло.
>Кстати, если тебе интересно, можешь почитать как сделан DI Container в симфони (он может использоваться и без симфони как отдельный компонент):
>Я не знаю, видишь ли ты это или нет, но при правильном DI твои классы не привязаны к конкретной реализации контейнера. То есть если твой AbiturientMapper и AbiturientService написаны правильно то ты можешь использовать их с любым другим контейнером, не меняя эти классы (в твоем случае это так, потому что ты следуешь принципам DI, и это хорошо). Уже ощутил это, когда игрался с контейнером.
>> https://github.com/blackberryJam/abiturients/blob/master/app/classes/UserpageController.php#L22 >> if ($token) { >> $abiturient = $mapper->getByToken($token); >А что если по каким-то причинам (ошибка в куке, удален из базы) такой абитуриент не найден? Предлагаешь перенести проверку наличия токена в базе из getByToken() в контроллер? Так-то сейчас маппер, если не находит токен, то возвращает объект Abiturient с пустыми полями.
С остальными замечаниями всё понятно, спасибо, исправлю.
>>519402 Зачем удерживаться, лол? Буду рад, если укажешь на все ошибки, даже те, которые не касаются основного кода. Всё равно, как подучу HTML/CSS, планирую все шаблоны переделать. А в каком смысле "ужасные"? Они тут не уместны? Мне просто белые бутстраповские таблички на белом фоне показались скучными. Или тени как-то неправильно сделаны?
Блин, не могли создать тред с нормальым оп постом? Я охренел искать тред, в итоге нашел ПРЕДЫДУЩИЙ АЖ НА 5й СТРАНИЦЕ, и в нем увидел перекат в этот.
В общем а теперь к делу. Работаю я можно сказать джуном, пилим 1 проект для внутреннего использования. Там есть свой поиск, всякие сортировки, постраничка и прочая годнота. Суть в том, что сначала там было все просто со url Например сначала были только ссылки типа: базовый_урл/контроллер/метод/тип например: host.ru/admin/user/add или host.ru/admin/event/add
Но потом добавились всякие сортировки и поиск, и вскоре ссылка стала выглядеть уже так: host.ru/account/index?sort=user_name&order=asc
Сегодня после длительного перерыва, так сказать, надо было прикрутить еще одну функцию к этому делу. Скажем так, скрытие выполненных задач по желанию юзера.
Но глянув во вьюху, где отрисоввываются ссылки, я охуел от того сколько говна там накручено и от того сколько надо будет еще наворотить, если и это сделать через get
Поэтому было принято решение сделать это дело через сессию. То есть в сессию кидать простую переменную $hideStuff, и соответственно, если юзер нажимает кнопочку спрятать, то значение меняется на true, и взависимости от неё контроллер передает модели доп аргумент и всё сейчас вообще выглядит просто прекрасно.
Объясните мне почему это может быть ошибочным вариантом? У меня вообще идея перенести туда и сортировку и поиск, что бы избавиться от get - мишуры в url и кучи условий при отрисовки ссылок во вьюхе. Такие дела.
Сам задетектил только 1 подводный камень: что сессия сохраняется если закрыть вкладку и снова открыть. Но думаю это легко решается, впиливанем на уровне входа в систему через сессию можно принудительно это дело сбрасывать.
Решал задачи по CSS https://gist.github.com/codedokode/58ebc90bd006baf4b35c Дошел до 5й. Решил ее. Но вот одно но. На пикче которую дал автор, текст окрашен в фоновый цвет, а это означает, что полупрозрачный фон находится поверх текста. Как это было сделано? Я потратил пару часов на поиск решения, да так и не нашел.
>>519689 Если у тебя ушло на поиск пару часов и ты так и не нашел ответа, у меня для тебя плохие новости. Потому-что в подсказке к задачке все доходчиво написано.
Что-то долбить проекты вообще стимула нет, раз за это не платят, по правде говоря. Сколько вообще надо проектов сделать и фреймворков вызубрить, чтобы получить заказ на апворке каком-нить?
>>519813 Дохуя. Поэтому в офис и идут на пару лет, если хотят на апворках работать. В офисе проще всю эту гору фреймворков, библиотек и сопутствующих технологий освоить.
>>519386 >>519386 ну вот так я не понимаю, как выводится массив данных в мвк - вон вверху скрин приведен. единственный гайд, по которому смогу сделать - английские, все остальные русские говно с хабра, у меня даже не получается переделать (потому что там непонятно какие-то скрины что куда втыкатеся нихуя не понятно) даже распаковать готовый пример и установить не поулчается. переделал только одни английский гайд с ютуба ну так там только дна переменая выводится а массив нихуя. так что да мвк - это ракета хуй пойми как работает.
>>519826 Массив выводится классом view, которую создает controller, сам массив вытаскивается контроллером из модели, которую тоже создает контроллер. Еще контроллер проверяет все инпуты. Так же и со всеми остальными данными.
> Даже без yaml-конфига всё кратко, читаемо и понятно. А с конфигом компактнее и быстрее писать. В симфони вообще интересная архитектура. Приложение там состоит из бандлов — например, может быть бандл с твоим кодом + бандлы сторонних библиотек. И каждый бандл может доьавлять в контейнер свои сервисы, свои правила роутинга в роутер и тд.
В общем, надеюсь, ты когда-нибудь доберешься и до изучения симфони. Там для многих вещей есть готовые решения.
> Алсо, не знал, что в PHP можно вызвать несколько методов объекта, написав его ссылку-переменную всего один раз. Это назвается method chaining, и для этого надо делать чтобы в конце метода стояла return $this; Мне кстати это не особо нравится, так как надо всюду пихать этот return $this. Да и на практике не так уж часто оно нужно.
> Так-то сейчас маппер, если не находит токен, то возвращает объект Abiturient с пустыми полями. Лучше наверно перенести это в контроллер так как традиционно методы вроде getById врозвращают null если объект не найден (я читая код подумал именно так). Ну или назвать метод getAbiturientOrCreateNew чтобы название соответствовало тому что он делает.
> А в каком смысле "ужасные"? Они тут не уместны? Мне просто белые бутстраповские таблички на белом фоне показались скучными. Или тени как-то неправильно сделаны? Может это субъективно, но они во-первых слишком резкие (ну то есть слишком черные, можно было бы побледнее сделать), во-вторых не вписываются в стиль бутстрапа, у него все относительно плоское и без теней.
Также, в желтом заголовке не хватает вертикального паддинга, тексту там тесно.
Отступы и поля тоже важны при оформлении страницы.
Вот пикрелейтед, я тут решил поиграть с цветами/шрифтами.
Ты решаешь не ту проблему. В чем проблема что в ссылке будет не 3, а 4 параметра? Query string как раз и предназначена для их передачи. Тебе место в адресной строке жалко что ли?
Твоя проблема — плохой код в вью, если я правильно тебя понял:
> Но глянув во вьюху, где отрисоввываются ссылки, я охуел от того сколько говна там накручено и от того сколько надо будет еще наворотить, если и это сделать через get
Ну так и решай ее — вынеси код генерации ссылки в функцию или объект, чтобы во вью ты только указывал параметры которые надо поменять.
Идея использовать сессии, в общем плохая. Сессия общая для всех вкладок, сессия не передается если ты сохранишь ссылку в закладки/перешлешь кому-то, сессия не меняется если ты жмешь кнопку «назад» в браузере. То есть заменяя параметры в URL на сессию ты делаешь использование сайта менее удобным и ломаешь встроенные в браузер механизмы.
Ну и это не соответствует принципам REST.
Однако в некоторых случаях сессии/куки удобнее чем сылки. Они нужны для постоянных настроек которые оченб редко меняются и которые не надо передавать вместе со ссылкой. Например, громкость на ютубе: куки — идеальное место для нее, в то время как допсиывать ее в каждый URL неудобно и бессмысленно (так как когда ты отпрваляешь ссылку на видео, пользователю не интересно на какой громкости ты его смотришь).
Аналогично, выбор языка интерфейса — это тоже удобнее хранить в куках.
Заметь, я пишу куки, а не сессия. Сессия это временное хранилище и она умировает через 20 минут неактивности и мы не хотим терять настройки языка или громкости так быстро.
Для сортировки разумеется сессия и куки не подходят, если только нет надобности навсегда сохранять эту настройку. То есть надо смотреть на сценарий использования сайта.
> что сессия сохраняется если закрыть вкладку и снова открыть. Но думаю это легко решается, впиливанем на уровне входа в систему через сессию можно принудительно это дело сбрасывать. Ты решаешь не ту проблему, городишь костыли и при этом все равно получаешь менее удобное решение.
И я тут подумал, некоторые настройки типа языка правильнее сохранять не в куки, а в аккаунт. Ведь человек может заходить в систему с нескольких устройств и он разумеется хочет везде видеть одинаковый язык.
А вот громкость надо хранить в куках так как на разных устройствах разные звуковые карты и устройства вопросзведения звука.
То есть выбирать способ хранения параметра надо исходя из сценария использования и целей, но уж точно не потому что кто-то набыдлокодил в шаблоне.
Ну а сессия по моему самый бесполезный и неудобный способ, она только для каких-то временных вещей.
Подсказка: используй свойство color (как альтернатива ты можешь сделать текст прозрачным укзав rgba-цвет или opacity, но по моему проще пипеткой померять цвет и задать его).
Это нужно для того чтобы освоить какие-то технологии. Если не хочешь, можешь не учить, но кем ты будешь работать? Верстальщиком? Поддерживать сайты с кучей быдлокода? Тебе быстро надоест.
> единственный гайд, по которому смогу сделать - английские, все остальные русские говно с хабра, у меня даже не получается переделать ( Давай поменьше негатива. Это пользы не даст ни тебе ни мне.
> даже распаковать готовый пример и установить не поулчается. В чем проблема посмотреть почему не работает и исправить ошибки? Если ты это сделать не можешь то тебе рано браться за MVC и стоит вернуться к решению более простых задач на PHP для закрепления знаний.
Обычно люди сталкиваются с такими проблемами, как ты, это когда они пропускают темы, пытаясь сразу браться за сложное, не изучив более простые вещи. В моем учебнике например надо решить несколько задач средней сложности. в ходе решения которых в том числе приобретаются навыки отлаживания программы и поиска ошибок.
> ну вот так я не понимаю, как выводится массив данных в мвк - вон вверху скрин приведен. Ты взял какой-то переусложненный пример и путаешься. Надо было писать самому, или найти простой пример.
Если у тебя что-то куда-то не передается, наставь var_dump и найди где именно значение теряется. Также, включи отображение ошибок либо смотри логи, может там ошибки есть в коде. Что ты беспомощный такой.
И переписывание/копирование кода пользы не дает. Польза будет если ты MVC приложения напишешь сам от начала и до конца.
>>519919 >>519923 Спасибо за развернутый ответ. В целом сейчас я думаю, что это дело вообще можно хранить в базе, как настраиваемые параметры пользователя. И не придется писать костыли для перепроверки и перегенерации всего этого снова.
ОП, планирую перенести свой говносайт с ужасным кодом на yii2, а вернее, переписать его с нуля. Можно я иногда буду кидать тебе контроллеры, модели и так далее чтобы ты сказал, что там не так? С фреймворками имею небольшой опыт, так что у меня всё получится, хотелось бы только сделать всё по канонам. Поможешь советами?
Ошибка в том что у тебя несколько переменных заведено для одного и того же, и данные в них изменяются непаврильно.
$i — это что? Из названия понять невозможно. $credit — это что?
Причем увеличиваешь ты одну переменную, а уменьшаешь другую. Для обозначения текущего долга должна быть ровно одна переменная.
Также, это никуда не годится:
> if ($payment==7777) { > .. > $payment++; Что за костыли? Почему увеличивается payment на один? Почему число 7777 написано в программе 2 раза, а не один? Что это за ерунда? Если тебе надо в первый месяц прибавить эту сумму то просто прибавь ее к долгу перед циклом.
Считает правильно. Хотя по моему тут нет особого смысла разбивать параметры на передаваемые в конструктор и функцию, проще наверно все передавать сразу в функцию.
> if ($this->payout <= $creditSum) > else // $this->payout > $creditSum Можно бы заменить if/else на min или max.
> // endwhile Эти комментарии не требуются если ты соблюдаешь выравнивание кода и не делаешь огромных функций.
> echo '<pre>'; Чтобы переносы строк нормально работали и в браузере и в ideone (и в консоли), можно использовать для этого \n, а в начале программы поставить
Это заставит браузер воспринимать то, что выводит твоя программа, как обычный текст, а не HTML, и уважать переносы строк в нем (так как в языке HTML перенос строки равносилен пробелу).
Как в верстке принято называть длинные классы и айди? Кэмел кейсом или через дефис/подчеркивание? В html кажется нет регистрочувствительности, значит кэмел кейс не очень уместен.
>>520336 >Ошибка в том что у тебя несколько переменных заведено для одного и того же, и данные в них изменяются непаврильно. >Причем увеличиваешь ты одну переменную, а уменьшаешь другую. Для обозначения текущего долга должна быть ровно одна переменная.
Не совсем понял. Я как бы сделал так пока происходит выплата кредита я каждый раз беру текущую сумму кредита прибавляю и процент и комиссию и записываю в $total, а потом просто вывожу $total. Когда Кредит полностью выплачивается, то цикл останавливается и $total тоже перестает увеличиваться.
>$i — это что? Из названия понять невозможно. $credit — это что?
там было написанно $i=$credit, а $credit это сумма которую осталось выплатить анону, с каждой итерацией она уменьшалась постепенно уменьшалась и когда становилось меньше 0, то цикл заканчивался. > if ($payment==7777) { > .. > $payment++; >Также, пропусти код через phpformatter.com
http://phpclub.ru/mysql/doc/date-calculations.html Поясните, зачем вычитать единичку, сам синтаксис и работа функций мне понятна, а вот все эти даты и прочее я никогда не понимал, даже по порядку месяцы не смогу назвать на память, ибо не обращаю на это внимание в жизни.
Есть задание: запилить одностраничный сайт с опросом, после прохождения которого выводится статистика по все ответам на опрос. Как делать? Я только страницу написал, как данные передадются, обрабаываются и выводятся (не цифрами, а графиками) вообще понятия не имею. А если найдётся кто-то, кто объяснит как дауну, скину почту и тонны нефти
>>520557 Если одностраничный, то здесь даже сессии не нужны. Человек выставляет чекбоксы и отправляет форму. Php выводит в ответ html и графики с результатами, а также выдернутую из базы данных статистику. Это элементарно, если ты не понимаешь как это работает, то нужно сначала выучить основы php и sql. Делать за тебя это конечно никто бесплатно не будет. Так что прикрепляй почту и пиши бюджет, может кто и согласится.
Ребята, ответьте на такой вопрос. Я сейчас перед выбором какой язык учить. PHP или Java. Ознакомился с областями применения обоих языков. Обе области меня устраивают. Я бы сказал так 60% PHP и 40% Java. Но выбираю все-таки Java только из-за того, что все говорят о смерти PHP, о том что в будущем уже его не будет и что Java будет самым востребованным. Так вот собственно вопрос. Сейчас мне осталось 2 года учебы в универе а потом нужно будет искать место работы. Смогу ли я через 2 года нормально зарабатывать или даже устроиться на постоянную работу изучая PHP или все эти слухи о смерти PHP правда?
>>520571 Платят за PHP меньше, чем за Java. Но работ больше. Умрет вряд ли, слишком популярный, легкий в освоении, тулзов кучи и сайтов на нем уже много написано.
Что-то когда оп пропадает, лалки начинают от скуки тралиться.
ОП, как появишься, посоветуй как правильно стилизировать поле для загрузки файла. Я полистал какие-то левые статьи, там советую фигню. В одном месте говорят тянуть jquery, в другом какие-то дикие пляски с псевдоэлементами типа ::after и ::before Может есть какой-то универсальный и "правильный", т.е. наиболее оптимальный способ? Прежде всего камнем преткновения является невозможность отредактировать текст на кнопке загрузки (или я читал устаревшие материалы?). Поэтому предлагают кнопку вообще нафиг убрать, и вместо нее присобачить какие-то костыли. Короче, мне нужна тупо круглая кнопочка с плюсиком в центре, а название подгруженного файла должно отображаться где-то в другом месте, в списке ниже например.
Также тебе стоит почитать про именование в БЭМ: https://ru.bem.info/articles/bem-for-small-projects/ (только про именование, остальное по моему дурь: блоки и виджеты прекрасно делаются на серверном языке программирования вроде PHP без всяких BEM tree которые только все усложняют. Хотя с другой строны блоки на клиентских технологиях не привязаны к языку на сервере. Но мне они все равно не нравятся, выглядит как костыль какой-то).
> $total = $total + $credit × $percent + $comission; > $credit = $credit + $credit × $percent + $comission; это выражение аж 4 раза повторяется. Избавься от копипасты.
Число 39999 повторяется 6 раз, надо вынести его в переменную чтобы было удобно менять.
> getBalanceInFuture(39999, 0.04, 500, 0, 5000, 39999); Почему ты передаешь число 39999 2 раза? Передавай один раз.
Что хранится в переменной total? Если это сумма выплаченная школьником то почему ее начальне знаечние 39999? Что это значит? Школьник в первый месяц заплатил 39999 сразу?
> Сравни ответы со своими, Совпадения ответа недостаточно. Код должен быть понятен и логичен. Очевидно что в самом начале полная сумма выплат равна нулю.
Вася родился в 2001 году. Сейчас 2015. Сколько Васе лет? Можно ли ответить на этот вопрос не зная день и месяц рождения?
Вычитать или не вычитать единичку надо в зависимости от того, был уже у Васи в этом году день рождения или еще нет, так как от этого зависит его возраст.
> RIGHT(CURRENT_DATE,5)<RIGHT(birth,5) Это как раз и есть костыльный способ сравнить день/месяц рождения с текущими. даты в MySQL выглядят как 2015-07-25 потому последние 5 цифр хранят месяц и день.
>>520647 В общем, из того что я прочитал, мне больше всего понравился следующий способ: 1. Кнопку загрузки сделать прозрачной (именно opacity, а не display:none или visibility), чтобы она по прежнему оставалась рабочей. 2. А "под ней" отпозиционировать пустышечку кнопки той самой формы, цвета и текста, что нам нужны. Как идея? Ну я пока так делаю, потом может кто-нибудь опытный нарисуется, прокомментирует это дело.
Тестовое задание (если это оно) должно проверять твои знания, а не наши. Устройство на работу это не контрольная в школе и от того даже если ты спишешь, ты справляться с рабочими обязанностями не сможешь.
Делаем поле прозрачным на 100% и под ним выводим все что угодно. Также, придется добавить яваскрипта чтобы выводить имя выбранного файла (не забудь проверить на очень длинных именах). Также, проверь свой CSS чтобы во всех браузерах невидимое поле выводилось ровно над нарисованным.
> говорят тянуть jquery Можно и без jQUery, это всего лишь обертка над DOM. Разумеется JS и DOM надо знать. Но без них ты и jQUery не выучишь.
> в другом какие-то дикие пляски с псевдоэлементами типа ::after и ::before У input нет содержимого и потому нет псевдоэлементов.
> Может есть какой-то универсальный и "правильный", т.е. наиболее оптимальный способ? Мое имхо лучше вообще не стилизовать. Или брать хороший готовый плагин.
А так это бессмысленная трата времени + вреднестатистический «фронтенд специалист» это быдлокодер учившийся по видеокурсам и гарантированно в половине браузеров его виджет работать не будет.
> Поместить прозрачный input[type=file] внутрь элемента label, > Использовать имитацию клика по скрытому input[type=file] средствами JavaScript. Работает не везде и мне потому не нравится.
И вообще я не понимаю, зачем его стилизовать?
> Ключевой задачей было поставлено создание «резинового» input[type=file] Резиновость создается средствами CSS
Код разумеется копипастить из статьи не стоит. И код и верстку лучше сделать самому, чтобы добавиться более стабильной работы и большей кроссбраузерности. Также, мне кажется, стоит предусмотреть что-нибудь на случай отсустсвия яваскрипта.
Анон с микрофреймворком, я гляну код, но чуть позже. У тебя кстати непонятно где именно фреймворк, а где само приложение так как все идет в одном проекте. Неудобно. index.php это часть фреймворка или нет? Как его вообще устанавливать? Он поддерживает установку через композер в папку vendor? как добавить твой фрейморк в существующее приложение?
>>520682 То есть при хорошем самообучении (у меня действительно есть большое желание PHP изучать и мне это нравится) я могу в будущем рассчитывать на то, что найду заработок на этом или постоянную работу в офисе? Если взять хотя бы ближайшие лет 10.
>>520688 Найдешь, но платят PHPшникам стабильно меньше остальных языков. Гляди графики на пикрелейтед, по всем странам PHP программеры самые нищенки из всех.
Ты в скольки браузерах проверил? Это странная особенность вебкита а не стандарт.
В стандарте явно это не написано:
http://www.w3.org/TR/css-pseudo-4/#treelike > When their computed content value is not none, these pseudo-elements generate boxes as if they were immediate children of their originating element
Но у элементов вроде input нет детей и потому не может быть псевдоэлементов.
> Нужно только разобраться, как вывести название подгружаемого файла, желательно без js. Без JS никак
График недостоверный. На ноде нельзя написать ничего сербезного, с чего бы за нее стали больше платить чем за другие языки? Это наверно 3 хипстерские вакансии на всю страну, по которым судить нельзя.
Ну и вообще, так как на PHP гораздо больше вакансий то понятно что среднее будет меньше. Так как на ноде среднее берется из 3 хипстерских вакансий в Москве, а на PHP среднее из хороших московских вакансий и вакансии натягивателя шаблонов в Урюпинске.
Это явно непраивльные графики. Хорошо оплачиваются и востребованы C#, Java, PHP. Недоязыки вроде ноды никому не нужны, ты много знаешь банков где софт на ноде рабоатет?
> Java Школа была создана для того, чтобы обучить талантливых кандидатов языку Java практически с азов, а затем растить их внутри Центра Разработки Дойче Банка как профессионалов.
> Во время обучения каждый студент получает заработную плату в размере 100 тысяч рублей.
для ноды есть аналогичные возможности обучения? Нет и никогда не будет потому что ничего сложнее чатика на ней написать нельзя. А на Яве можно.
Ну благо долбоебов-снобов с предрассудками немного и они обычно никакого успеха в IT-сфере не достигают. Так что думаю их мнением можно пренебречь и пойти работать в нормальные фирмы.
Как корректнее писать стили? Я имею ввиду, если у меня кусок кода повторяется для разных элементов, может вынести его в отдельную кучку? Это будет компактнее, но с другой стороны, тогда будет сложно собрать из разных правил общее описание для одного элемента.
Например, у меня есть стили вида .class1 { height: 100px; width: 400px; background: linear-gradient ....... // здесь десяток строк с кроссбраузерным градиентом } .class2 { height: 20px; width: 50px; // снова те же градиенты }
Вынести ли в одно место общий код, или строго писать полный набор правил для каждого конкретного объекта?
>>520831 Учи LESS. Переменные и миксины позволяют использовать одни и те же куски кода по много раз. Просто один раз пишешь кусок кода, а потом ставишь в стилях ссылку на этот кусок.
>>520831 Я пишу как у тебя в примере. Потому что может понадобится изменить класс2, например, бэкграунд. Придет выковыривать и удалять куски кода. Лишний геморрой. А вообще да, двачну вот этого >>520850 прогрессивного гуя.
Не нужен, если нет задачи делать несколько почти одинаковых тем. И к тому же добавляет лишнее звено в процесс деплоя и разработки (если речь о сайте из нескольких страниц и одного css файла), замедляя их.
Пененес для теста парочку не совсем глобальных настроек в куки. Теперь планирую подогнать туда все аналогичные временные настрйоки. Ну например те же самые сортировки. Что бы пользователь мог насортировать себе странички как угодно, и все это дело бы там лежало. Поисковый запрос я туда не буду выносить, пусть живет в get и обнуляется при любом перезаходе.
Теперь вопрос следующий. Например у меня будет большая кучка настроек. В принципе мне удобно, для каждого конкретного места проверять свою конкретную куку, и её же менять. Но зато в браузере будет иметься куча разных кукисов вида: name: hide_user, value: yes
Не то что бы всё это должно быть зашифровано, просто хотелось бы передать туда какой-массив, что бы все лежало компактно.
Пока что планирую написать пару функций, в которую буду передвать нужное значение куки, она будет добавлять её в массив настроек и с помощью serialize будет его туда упаковывать и ставить пользователю. Ну так же и обратное. Когда надо будет узнать какая настройка стоит у пользователя. Будет спрашивать куки, userialize-ить её, копаться в массиве с настройками, и отдавать их контроллеру.
Просто это выглядит слишком громоздко как-то, и немного костыльно.
>>520947 У тебя так получатся очень жирные куки, ОП этого не одобрит. Хочешь использовать куки, можешь пихать в неё строку-последовательность цифр, где положение в строке означает настройку, а сама цифра представляет значение этой настройки.
ОП, я, наконец, решил задачу про лайки: http://sqlfiddle.com/#!9/5da51/1 Использовал только 2 джойна и группировку. Только не допёр, как подсчитать взаимные лайки через COUNT(), поэтому использовал SUM().
Интересный момент с взаимодействием стилей hover с пользовательским яваскриптом. Суть такова: если менять стили яваскриптом напрямик, то они побеждают hover. Онклик такого яваскрипта сильнее ховера от css. А вот если написать функцию, которая добавляет класс со стилями, то стили прописанные в ховер почему-то сильнее.
Не могу внятно выразить мысль, так что накидал небольшой пример: http://jsfiddle.net/8jx5bpt0/ Объясните, почему так происходит? И чем по-сути является срабатывание hover? Это как я понимаю намертво встроенный в браузер скрипт? Почему тогда в css нет других событий типа onclick или onmouseover?
>>521138 Также, как и в любой другой сфере после 40. Ты либо создаешь себе "имя", либо становишься мамкиным начальником. Иначе будешь обычным хуем 40летним, как и в любой другой сфере. Впрочем, если тебе 20-30, загадывать что будет через 10 лет - полная хуйня. Всё очень быстро меняется сейчас.
Привет, ребята. Можете скинуть код кредитного калькулятора вашего с заданий? Мне задали такое же, но на другом языке, не хочу тратить время на еблю с алгоритмами просчета кредитной ставки. Буду очень благодарен.
>>520961 Серьезно? Мне надо что бы куки были после дешифровки стройным массивом, понимаешь? В массиве у меня могут быть значения как угодно выстроены. А если я буду строку использовать как куки, то надо будет её дербанить, что бы привести к общему виду. В общем понимаешь? Алсо я тут посмотрел, куки вообще получаются небольшие. Даже если я добавлю больше настроек чем пока ожидаю.
Неделю читал учебник по JS, родил ответы на комментарии по клику и вообще доделал древовидные комменты. Сейчас еще почитаю учебник и переделаю чтоб форма ответа появлялась под комментом на который отвечаешь.
Есть вопрос по самому файлообменнику, что там не так, что еще допиливать нужно.
Аноны подскажите, кто дружил phpstorm с xdebug? Вроде, все делаю, как надо. Однако стоит нажать кнопку "debug", как открывается линк localhost:9000/session-там-чего-то-id=xxxxx И ничего не происходит. Просто бесконечно открывается эта ссылка, без всяких ошибок. Слушалку дебаггера включаю, настроено по-моему все верно.Ставил xdebug на убунту с помощью apt-get install
В прошлом треде анончик решил задачу по списку студентов. Хочется посмотреть что у него получилось.
Не совсем понимаю как подключить его базу данных studentBackup.sql
Все файлы из github кинул в Apache25\htdocks. Установлен по инструкции Apache, PHP, Mysql, этого достаточно чтобы запустить его список студентов, или что то еще надо?
И еще вопрос вдогонку, начал изучать php, двигаясь по http://archive-ipq-co.narod.ru. Для удобства прикрутил NetBeans в качестве IDE, и вот делая задания на циклы внезапно вспомнил, как в Delphi можно было поставить точку останова и пошагово прогнать выполнение программы. Очень мне помогало.
Нет ли возможности так же отлаживать программы для php? Я пробовал ставить какие то точки останова, но пошаговой трассировки так и не смог достичь.
>>521547 Заработало, спасибо. >>521516 У меня в браузере вообще ничего не происходит, все происходит в окне IDE, там можно смотреть как программа выполняется и значение переменных.
Может быть у тебя все работает, но ты не туда смотришь?
>>521555 Юзай netbeans, в нем включи php - debugging - port 9000, session id netbeans-xdebug. В php.ini включи xdebug.remote_enable = 1 xdebug.remote_handler = "dbgp" xdebug.remote_host = "127.0.0.1" xdebug.remote_port=9000. Поставь расширение xdebug helper в chrome и включи в нем в настройках интеграцию с netbeans. Все работает тогда.
Я спросил тебя прочел ли ты документацию и разобрался ли как работает xdebug? Это не такая штука которую достаточно поставить и она работает. Она должна успешно соединиться с IDE и если у тебя например сервер в виртуалке то разумется соединиться изнутри с хостом может быть невозможно.
Напиши какая у тебя ОС, где установлен Апач и тд. Без этой информации тебе никто не поможет, телепатов тут нет.
Тут куча людей которые делают список студентов, ты про какой говоришь? Там обычно надо:
- создать базу данных - закачать в нее дамп (например консольной командой mysql -uusername -p database_name < dump.sql , вот гайд по консоли: https://gist.github.com/codedokode/10539213 ) - найти конфиг и вписать туда свои реквизиты доступа к БД - включить отображение ошибок в PHP, display_errors - если используется композер (если есть файл composer.json), то установить его, открыть консоль, перейти в папку с проектом и сделать composer install - открыть сайт в браузере и посмотреть есть ли ошибки, если есть то исправить
Нельзя делать unserialize с данными полученными от пользователя, это небезопасно, так как позволяет вызывать деструкторы с произволно заполненными полями и может скрывать в себе другие уязвимости.
У меня все хорошо, прочитал о xdebug и сразу же все через 10 минут заработало. Проблемы у другого анончика, он как я понял на linux сидит и у него phpstrom, а не Netbeans.
Ховер это не явскрипт. Это псевдокласс CSS. При наведении мыши на элемент к нему применяются дополнительно свойства, описанные в селекторе с псевдоклассом hover.
То есть если есть стили
.element { ... } .element:hover { .. }
То второе правило по умолчанию отключено и включается только при наведении мыши на любой элемент с классом element.
:hover можно применять в сочетании с другими правилами, например:
tr:hover td .some-class { ... }
> если менять стили яваскриптом напрямик, то они побеждают hover. Онклик такого яваскрипта сильнее ховера от css. Потому что правила в атрибуте style имеют больший приоритет чем описанные в CSS файле. Почитай про приоритеты селекторов:
У нас в ОП посте есть задания на HTML/CSS которые помогут тебе углубить знания по этой теме. Я бы советовал их пройти (а может и наши задачи по JS) так как вижу что у тебя тут есть непонимание.
>>521049 Ещё я думаю, что если во втором джойне исключить повторяющиеся пары, то взаимные лайки можно подсчитать и через COUNT(). Правда, как это реализовать -- не знаю.
Эти цифры прописаны в атрибутах. Тебе надо как-то сделать чтобы они отображались на странице. Для этого тебе нужен «сгенерированный контент», то есть элементы которые создаются с помощью css-правил. В CSS для этого есть псевдоэлементы, например ::before и ::after
- они не выделяются и не копируются в буфер обмена в некоторых браузерах - они могут не читаться программами чтения текста - их нету у одиночных элементов вроде img, input
> AND l2.userLiked = l1.userLiker А это нужно? Там ведь стоят условия джойна:
> ON u.id = l1.userLiker > ON u.id = l2.userLiked
которые делают то же самое.
А вообще, молодец, правильно решил, надеюсь что джойны ты теперь понимаешь и можешь писать с закрытыми глазами. Многие запросы так и реализуются — ты просто джойнишь все участвующие таблицы и отсеиваешь лишнее через WHERE.
А еще, ты хочешь получше SQL изучить? У меня есть задачка про борду (кстати хорошая задача для собеседоваия — жаль что таких не дают, она 99.9% кандидатов отсеивает):
- сделай базу для анонимного форума, форум состоит из тредов, треды из постов, пост состоит из id, даты и текста. Сделай вывод первых N тредов, каждый тред выводится как ОП пост + 3 последних поста если они есть. Сначала надо решить задачу на идельной нормализованной базе (запрос получается адски сложный), потом предложить способы денормализации (хранения избыточных данных) чтобы максимально упростить запрос, избавиться от кучи джойнов и заставить его использовать индексы.
Добрый вечер, намного ли сложнее написать инет-магазин по сравнению с сайтом абитуриентов из задания ОПа? Стоит ли делать это с нуля или воспользоваться wordpress или другими cms?
> взаимные лайки можно подсчитать и через COUNT() Это вряд ли, так как джойн делает полное декартово произведение. То есть если юзер поставил лайки a, b, c и получил от a, d, e то мы получаем все возможные их комбинации при джойне:
a a a d a e b a b d b e c a c d c e
Взаимный лайк тут (a a) и считать их удобнее через SUM.
Не могу не похвалить себя, какую я хорошую и развивающую задачу придумал. Простая, а так просто не решишь.
Хороший — намного сложнее, сам подумай, у нас одна таблица и одна форма, а в хорошем магазине пара десятков таблиц и сложная админка. Объем работы намного больше (хотя знания полученные в ходе решения задачи и помогут в написании магазина. но магазин лучше писать на фреймворке вроде Yii или Symfony 2). Лучше не писать его с нуля, а взять любую готовую CMS коих десятки.
>>521602 >А еще, ты хочешь получше SQL изучить? У меня есть задачка про борду (кстати хорошая задача для собеседоваия — жаль что таких не дают, она 99.9% кандидатов отсеивает): Конечно хочу. Попробую решить, параллельно допиливая абитуриентов.
>>521614 >Лучше не писать его с нуля, а взять любую готовую CMS коих десятки. Посоветуй если можешь, если бы ты создавал инет-магазин какой cms выбрал бы?
>>521614 >А ты скопировал код или написал сам? Если скопировал то вопросы лучше задавать его автору. Ну с автором никак не связаться, да и это загрузчик от тиниборды, вроде, но оптимизированный.
В мое время была модной Simpla (платная) — у нее админка красивая. Но вообще у меня опыта в создании ИМ нет, я не знаю например какие фичи нужны заказчикам и насколько их сложно/легко допиливать. На западе популярна Magento, которую по моему в Украине делают, Opencart (по моему это плагин к Друпалу, если так то представляю какой там код).
потому дам ссылки на рейтинги CMS — читай обзоры, смотри демоверсии, выбирай:
Тогда попробуй разобрать код построчно, например ты пишешь, что выводится ошибка. Посмотри в каком случае она выводится, почему, что к этому приводит. Наставь echo и var_dump чтобы увидеть что в переменных, может там что-то не то.
>>521587 да, у меня phpstorm. проблему решил. я какого-то хрена создал run/debug configuration web application еще давно, и через него как раз скрипт пытался открыться в браузере. как только удалил нафиг все конфигурации - заработало. спасибо, чем-то ты даже натолкнул меня на мысль, упомянув, что у тебя браузер не открывается а дебажится все в консольке
Парни, подскажите. Что за 'data' возвращает функция, не могу понять. В массиве, который получается, такого сочитания симвлов нету.
print_r($lol = arr());
function Arr(){ тут получение данных типа array return $retval['data']; }
Запуск скрипта при авторизацииПатя27/07/15 Пнд 20:48:15#460№521668
Всем прива! Есть скрипт /admin/index.php В нем форма авторизации. Если пользователь авторизировался, то инклудится /admin/vasya/admin.php Суть вопроса: как заставить скрипт /admin/vasya/admin.php, не работать, при переходе по прямой ссылке на него?
Господа, как это можно автоматизировать? Оно у меня потом в шаблон парситься, там особая структура, ее нельзя нарушать, поэтому просто %s не подходит. Пробовал for, но выводит только последнюю строку.
>>521823 Без них ты будешь javascript и css писать вручную, выйдет по объему сильно больше, читается хуже. Разбираться через год тебе будет в коде, написанном под фреймворк проще.
Аноны, что со мной за хуйня. Вот решаю задачки ОПа и постепенно дошел до больших задачек и вот есть задание, а у меня мышление как будто очень узкое и я просто не могу представить как буду его решать, вроде все выучил до этого и багаж знаний есть, но вот когда доходит до задачки, то я просто втыкаю в задание и блять даже план решения составить не могу как его решать.
>>521947 >мне не дано Именно что не дано. Это не язык программирования, а беспорядочное нагромождение костылей. >вроде все выучил до этого и багаж знаний есть Не делай так больше.
Вот такой код, чомуто не работает(это упрощенный вариант, это задание от специалиста, я делал эту лабу раньше и все работало): <? define('PATH_LOG', 'path.log'); $dt = time(); $page = $_SERVER['REQUEST_URI']; $ref = pathinfo($_SERVER['HTTP_REFERER'], PATHINFO_BASENAME); $path = "$dt|$page|$ref\n"; $handle = fopen('log/' . PATH_LOG, "a+") or die("Не могу открыть файл!"); fputs($handle, $path); fclose($handle); Выдает: Warning: fopen(log/path.log): failed to open stream: No such file or directory in C:\Users\Public\OpenServer\OpenServer\domains\mysite2.local\inc\log.inc.php on line 6 Попробовал создать в директории папку через mkdir, все окей, тобишь с правами все в порядке. Нехуя не понимаю тогда.
Претендую на платину, вопрос следует добавить в шапку. Понятное дело, что это сугубо индивидуально, но сколько обычно проходит времени от начала изучения до работы джуном / возможности иметь копейку с фриланса? Допустим, если уделять по 4-5 часов в день изучению языка.
Где можно найти API для яндекс каталога, мне нужно отобрать определённые сайты которые есть в яндекс каталоге, можно конечно попробовать сделать это через http запросы и при помощи дальнейшего парсинга, ну это как-то не очень, наверняка у него есть АПИ подскажите где найти?
Изучайте, пока не прикрыли, если кому любопытно. Хотя это скорее сборник антипаттернов, как писать не надо (такой большой проект сделан в виде кучи процедурной лапши).
Задай вопрос в треде, если что-то непонятно, ОП придет и ответит. если ты начинающий, то вполне нормально что что-то тебе неочевидно, тем более что в больших задачах там не всегда есть подсказки как решать.
Я привык читать мобильную версию так как на ней меньше лишнего и нет этих дурацких блоков ссылок сбоку и дурацкой панели слева. Но ты прав, у других людей могут быть другие предпочтения, наверно лучше постить обычную ссылку.
Алсо, на российских сайтах этого нет, но на Hacker News уже целый день висит новость о том что андроид взламывается через отправку MMS (взлом происходит при попытке телефона проиндексировать видеофайл без участия пользователя). Честно говоря, я всерьез подумываю, не стоит ли вместе со смартфоном покупать отдельную симку, ведь к номеру могут быть привязаны электронные кошельки, банковские карты. Тот же сбербанк по моему по умолчанию позволяет завладев телефоном, выводить деньги. В сочетании с удаленным выполнением кода это позволяет просто грабить всех подряд. Это просто неправильно, такого быть не должно, ведь в этом случае если вы потеряли (или у вас отобрали телефон, или перевыпустили сим карту, или вы установили троян), вы можете еще и денег лишиться.
Как видите чтобы не запутаться, автору пришлось в комментарии описать структуру массива с данными. В случае использования класса описывать ничего не надо, так как поля класса описаны в коде.
Еще и переменную назвали бессмысленно: $info.
Кстати, те, аноны, кто учатся в нашем треде и делают задание на студентов, используют именно ООП-подход, как в лучших домах фреймворках.
Ну и дополню, в случае использования ORM библиотеки Doctrine 2 им бы не пришлось вообще писать функци и insert/update — доктрина предоставляет готовые функции для этого.
Большой проект не всегда значит highload, а значит большой по объему. Потому использование фреймворка как правило оправданно. Ну вот возьмем тот же сайт фриланс.ру. Можно ли считать его высоконагруженным? Я считаю, что не очень.
Там 76 000 человек в день (в 2013 году), допустим сейчас их стало 150 000, допустим каждый в среднем просматривает 20 страниц, тогда это выходит около 3 млн запросов в день. Один сервер такое может и потянуть, наверно у них их несколько, но это еще не такая посещаемость, когда тебе приходится шардить базу (ну и судя по их коду шардинга у них нет).
Ну и любой проект не становится высоконагруженным за один день, обычно проходят годы. Если ты не пишешь игру или приложение для соцсети которую планируется активно раскручивать, то фреймворк поможет сэкономить тебе кучу времени на планирование архитектуры и написание кода.
Так, я видел примеры когда проект изначально писался на фреймворке, а потом был аккуратно перенесен на более простой движок, заточенный под этот проект. Также видел много примеров самописных движков и практически всегда они были ужасны.
Потому начинать все же стоит с фреймворка. Просто надо разобраться какие там есть возможности для оптимизации кода, в той же доктрине их немало.
>>521852 в не функциональности. сам по суди, человеку нужен сайт для продажи товара, что он выберет уродливый и криво сверстанный сайт с админкой, каталогом и бд или красивенький чисто информационный лэндинг со стразиками? конечно первое.
>>522024 Без випов на заказ даже заявку не подать, випы для ньюфани грабительские, личку с заказчиками прикрыли. на фл.ру происходит полный беспредел. может собраться и норм биржу сделать?
А зарабатывать на хлеб себе на чем будешь, няша, если не на про аккаунтах?
В принципе платить за размещение или получение заказа нормально. Но вот платить за возможность может быть получить, а может не получить заказ — это нехорошо.
>>514869 День добрый, есть ли что-то подобное learn.javascript.ru по CSS или HTML, с чего начать, умею только в питон немного, но это пока что хобби, хочу начать фрилансить, яваскрипт, думаю, быстро освою, а вот вёрстка это же не программирование, поэтому реквестирую что-то, что поможет мне поднять знания подставове.
MVC заключается в том что мы не смешиваем все в кучу, а разбиваем на 3 части. Контроллер зарашивает данные у модели и передает их вью для вывода. Попробуй написать код задачи про студентов и посмотрим его насколько он соответствует MVC.
>>522108 я это понимаю, хоть ты и повторяешь как попугай одно и то же, я не понимаю принцип ООП в МВК, пальчиками перепечатать пример, чтобы работало я могу, а вот изменения или правка мне не даются, ибо не понимаю принципа.
>>522141 Если я с нуля напишу, то это уже будет не совсем МВК и ООП. Вот я сейчас так свой проект пишу, пока что даже не знаю, как через шаблон добавлять новые статьи и осуществить пагинацию, сделал вывод 8 статей на странице и усе. потом покажу.
>>521982 Я устроился джуном на внезапно ПИТОН через 3 недели после прохождения кодеакадеми. Увидел вакансию со стажировочкой и обучением, прислали задание калькулятор кредитов на sinatra, потратил пару вечерков на изучение синатры, написал калькулятор, отправил вместе с резюме.
2 месяца практики, потом взяли джуном. ДС40к зарплата
Когда мне нужно сделать связь между таблицами в базе данных, то есть ввести внешний ключ, я всегда делаю это не явно, то есть не пишу команду Foreign key при создании базы данных, а просто завожу поле где будет хранится нужный мне ключ и потом использую его когда мне надо в каком-либо запросе.
1) да, не стоит. Во-первых в твоей базе потом хрен разберешься, во-вторых нет гарантий целостности ссылок и со временм копятся ссылки на несуществующие записи.
Я вообще не понимаю какая выгода от не использования ключей? Никакой. Так делают только неучи которым лень потратить 30 минут на изучение темы и которые спешат быстрее быдлокодить.
Доделал чтоб форма ответа открывалась под комментом, пол дня голову ломал чтоб понять как это правильно сделать. Пока что выглядит не оче, но потом дизайн допилю. ОП, посмотри что у меня там вообще и что нужно переделать
На форматировании внимания не акцентировал, так как заелся с висящими примечаниями, конкретно с их правильным позиционированием. Повторить вроде удалось, но решение очень хрупкое, изменения ширины не выдержит. Что я делаю не так?
>>522511 О, спасибо, не видел. А чому там не Dependency Injection? Программеры у Zenda не осилили, или там в этом качестве только Service Locator подходит?
Мне что-то не особо нравится, как-то они перемудрили по моему, посмотри лучше как в Symfony DI Container сделан если хочешь хороший пример (его можно использовать и отдельно от самой симфони).
>>522516 Все, понял. В Zend\DI выходит не сам DI (его ручками пишут для всех нужных классов), а какой-то умный DI Container, который в код смотрит, все DI находит и сам где надо классы инициализирует и injection делает.
>>522707 Вот как раз и решаю. Сделал радиокнопку с лейблом. Уже все работает кроме того, что див не меняется после нажатия на него. При наведении и клипе сделал изменения.
>>522713 Ну во первых надо проверить, нажимаются ли у тебя кнопки. Если у тебя стоит дисплей:нон, поставь отображение кнопок и посмотри нажимаются ли они. Если да, то остается дело за малым, добавить нужное свойство селектору с псевдоклассом :checked
>>522717 Да, работает. нон с дисплея кнопок убрал. Вот как все выглядит. :checked на что вешать? На див? Если на него, то у меня не работает. Если на радиокнопку то работает, но вокруг кнопки а не дива и если дисплей нон на кнопку вернуть то ничего не видно.
Хотя я понял, ты же вешаешь checked на сам див, это не будет работать. Псевдокласс :checked работает только с инпутами, ты ведь не можешь нажать на див. Тебе нужно поставить такой селектор, который бы связывал нажатую кнопку и сопутствующий ей див (или лэйбл). Кури "селекторы и их комбинации": http://htmlbook.ru/css
>>522748 Потому-что селектор + применяет правила ко второму элементу, а не первому. То есть в div + input правило будет применяться к input, а не див, значит если мы хотим, чтобы правило применялось к диву, нужно сперва, чтобы див шел после инпута в хтмл коде, а потом нужно сделать селектор iput+div
> :checked на что вешать? На див? :checked относится только к радиокнопкам и чебоксам. Ты пробовал посмотреть его описание например тут: http://htmlbook.ru/css/checked ? Там в самом начале написано:
> Псевдокласс :checked применяется к элементам интерфейса, таким как переключатели (checkbox) и флажки (radio), когда они находятся в положение «включено».
Также, ты читал внимательно статьи на которые тебе я давал ссылки? В CSS есть такие селекторы как + и ~ (поддерживается в меньшем числе браузеров). Изучи эти селекторы.
Соответственно идея примерно такая, делаем такое дерево DOM:
div.switch ....label // чтобы ловить клики по всей области кнопки ........input type=radio // сам инпут ........span.switch-body // сама кнопка, которая содержит текст и меняет цвет
Ну и сразу же предупрежу что не надо злоупотреблять сложными селекторами. 99% правил в твоем CSS должны состоять из одного-двух-трех классов разделенных пробелом или > .
Надо сделать нормальные имена классов, k и lk разумеется годятся для проверки но как решение не годятся. Имена лучше всего делать вида «блок-элемент», например:
Кстати судя по http://www.quirksmode.org/css/selectors/ селектор ~ поддерживается начиная с ИЕ7, раз так, твой код должен работать в максимально большом числе браузеров.
Так написано что в банках такое (обычно) не работает.
А вот новые сервисы, работающие с биткойнами, пока видимо ни про CSRF ни про смс-подтверждение не в курсе и в них эту уязвимость можно применить: https://news.ycombinator.com/item?id=9966123
Всегда защищайте ваши формы CSRF токенами. ну и читайте внимательно наши уроки.
Как узнать, какие варианты написания значения могут быть у поля для загрузки файлов? У меня даже на убунту выдает почему-то "C:\fakepath\filename". Эта строка всегда такого вида вне зависимости от ос и браузера?
Подскажите, где смотреть такие моменты. Научите гуглить, короче. Вот перешел на сайт w3.org, там в поиске вбил input file. Попадаю на страницу http://www.w3.org/TR/html-markup/input.file.html Так, тут есть раздел DOM Interface, и ссылка на http://www.w3.org/TR/2012/WD-html5-20121025/common-input-element-apis.html#dom-input-value Нет, про value здесь говорится только в общих чертах. Но чуть ниже о свойстве filename (хотя я вообще-то всегда обращался для получения этой строки через "value", это неправильно?) >On getting, it must return the string "C:\fakepath\" followed by the filename of the first file in the list of selected files, if any, or the empty string if the list is empty. >Note: This "fakepath" requirement is a sad accident of history. See the example in the File Upload state section for more information. По ссылке >For historical reasons, the value IDL attribute prefixes the filename with the string "C:\fakepath\". Some legacy user agents actually included the full path (which was a security vulnerability). As a result of this, obtaining the filename from the value IDL attribute in a backwards-compatible way is non-trivial. The following function extracts the filename in a suitably compatible manner: дают какую-то свою универсальную функцию
В целом почти сам разобрался. На всякий случай уточню, правильно ли я понял, что в современных браузерах всегда используется эта виндовая строка, которую можно спокойно сплитить по бекслешу? Можно ли использовать fileInput.value, или же предпочтительнее что-то другое, там в документации говорится о каком-то filename, я не понял, к какому вообще дом-объекту относится это свойство?
Аноны, те из вас, кто читает всякие It-сайты, наверно уже натыкались на упоминание задачи про переворот бинарного дерева. Если вам интересно, то на одном из западных сайтов или в твиттере человек возмущался тем, что его, уважаемого разработчика, пришедшего на собеседование в гугл завалили этой идиотской задачей вместо того чтобы поговорить про его опыт и знания.
Конечно, я сильно сомневаюсь что это правда, так как эта задача не требует вообще ничего думать, профессиональный разработчик решит ее за минуту. В Гугле вряд ли бы стали давать задачу школьного уровня.
Но вы пока не профессиональные разработчики, почему бы не поломать голову? Вот задача:
Вообще, структура из узлов, которые связаны друг с другом, называется граф. Дерево это частный стучай графа, в котором нет циклов и у каждого узла только один родитель.
С деревьями связано много интересных алгоритмов и задач:
Бинарное (двоичное) дерево — это дерево, у каждого узла которого может быть не более 2 детей. Их обычно называют «левый» и «правый» ребенок.
«Перевернуть» дерево значит пройтись по всем узлам в дереве и поменять местами «левого» и «правого» детей.
Узел дерева обычно содержит еще какие-то данные. Например, число, букву, строку, или что-нибудь еще. В данной задаче это значения не имеет, но если узлы с числами выстраивать в определенном (отсортированном порядке), мы получим упорядоченное дерево, в котором можно довлоьно быстро делать поиск. Именно упорядоченные двоичные деревья, например, используются в индексах базы данных для ускорения их поиска. Префиксные (не двоичные) деревья можно использовать для поиска слов с опечатками в словаре. Это я к тому что деревья важная штука и много где используются.
Для начала, вам, конечно, надо реализовать само дерево. Для этого в PHP надо сделать класс (любители массивов идут в какой-нибудь другой тред), который представляет один узел дерева. Из объектов такого класса можно будет построить дерево.
Потом надо будет придумать способ обхода всех узлов дерева. Для этого нужна либо рекурсивная функция, либо очередь, куда мы складываем новые найденные узлы, которые планируем посетить:
> У меня даже на убунту выдает почему-то "C:\fakepath\filename". Браузер в целях защиты пользовательской информации не передает полный путь к файлу. Имеет право.
> правильно ли я понял, что в современных браузерах всегда используется эта виндовая строка, которую можно спокойно сплитить по бекслешу? Ненадежно. Я бы сделал более надежный алгоритм, который принимает любое из имен:
file.txt /tmp/file.txt c:\test\file.txt
> Можно ли использовать fileInput.value, или же предпочтительнее что-то другое, там в документации говорится о каком-то filename, я не понял, к какому вообще дом-объекту относится это свойство? filename это какое-то странное свойство, с которым я сам не сталкивался и не уверен что оно вообще везде поддерживается.
Можно использовать value если нужно только имя. Также, в новых браузерах есть объект File (в свойстве input.files) который содержит информацию о выбранном файле:
> там в документации говорится о каком-то filename, я не понял, к какому вообще дом-объекту относится это свойство? Это не свойство, а режим, прочти что написано выше:
> The value IDL attribute allows scripts to manipulate the value of an input element. The attribute is in one of the following modes, which define its behavior: > ... > filename > On getting, it must return the string ...
Это просто значит что у файловых инпутов свойство value находится в режиме (?) filename и хранит путь или имя выбранного файла.
>>522911 Понятия не имею, что такое "режим", лучше действительно буду обращаться через api объекта file, files[0].name или лучше в цикле если выбрано несколько файлов.
Срочно надо выучить Wordpress для того что бы взяли на работу, посоветуйте каких-нибудь хороших уроков Вордпресс как для разработчика, создание тем и плагинов и прочее там.
>>522907 >Для начала, вам, конечно, надо реализовать само дерево. Для этого в PHP надо сделать класс (любители массивов идут в какой-нибудь другой тред) А само дерево в виде массива хранить можно?
Во-первых, я вижу по структуре что ты вдохновлялся Юи. Это не лучший пример для подражания, особенно если ты смотрел на устаревший Yii1, а не Yii2 так как его автор тот еще велосипедист и любитель все делать по-своему. Более того, Юи это большой фрейморк, потому делать микрофреймворк по аналогии с ним неправильно.
В качестве пример микрофрйемворка стоило бы посомтреть на SLim или Silex. Они сделаны совем по-другому и их архитектура лучше подходит для крошечных проектов. А Юи-подобная архитектура подходит плохо, она громоздкая и избыточная.
Далее, твой фреймворк нельзя подключить через композер. Его нельзя установить в отдельную папку, и он тянет с собой какой-то index.php с кодом. Вот допустим я бы решил написать под него приложение. Как отличать где код фрйемворка, а где мой код? Твой фреймворк предполагает что все это надо перемешать в кучу, это неправильно. Сторонний код должен ставиться через композер и лежать в отдельной папке.
Разумеется, библиотеки и фреймворки стоит выносить в отдельный неймспейс, чтобы избежать конфликтов имен с пользовательским кодом и другими библиотеками.
Что это за ерунда? Почему ты все классы наследуешь от какого-то Компонента? Наследование предполагает что классы представляют собой что-то однотипное, похожее. Но у Валидатора и Контроллера нет ничего общего и наследоваться от одного предка они не должны.
Зачем ты примешиваешь код автозагрузки во все классы? Он должен быть отдельно, а в случае фреймворка он вообще должен быть реализован через композер. Каждый класс должен заниматься своим делом. Это не задача Валидатора заниматься автозагрузкой. Ну и я не понимаю, зачем подключать файлы через require когда в PHP есть настоящая автозагрузка: http://habrahabr.ru/post/136761/
Ты же пишешь пользователю непонятную ему информацию, и не логгируешь информацию об ошибке. Администратор сайта о ней никогда не узнает. ДОЛжно быть наоборот, пользователю — заглушка, администратору — запись в лог (и исключения позволяют это сделать).
> https://github.com/DmitryMachavariani/micro/blob/master/framework/kernel/DataBase.php#L28 > } catch (PDOException $e) { > die($e->getMessage()); Это неправильно. Ты пользователю вываливаешь информацию о базе данных, котрую он не понимает, а в логи ничего не пишется. Этот код пишут в учебниках для примера, а не для того чтобы его копировали в реальные приложения.
Сам класс базы данных тоже спроектирован неудачно, ты смешал в одном классе и довольно бесполезный построитель запросов, и обертку над PDO. Посмотри например как устроен Doctrine DBAL, там все разнесено в отдельные классы.
Построитель запросов должен идти отдельным классом. Тем более что в 90% случаев у нас запрос неизменен, его можно просто прописать строкой и нужды в построителе нету.
> public function where($where = null, $type = 'AND') { Функция не экранирует данные при сборке, это SQL инъекция.
Также, у тебя не экранируются данные при вставке в HTML. Это XSS уязвимость.
> https://github.com/DmitryMachavariani/micro/blob/master/index.php Константы пишутся большими буквами, смысл их неясен. зачем нужна константа "url" если логичнее сделать такой метод в объекте Request? Какой смысл в константе "FILEPATH" и почему это константа а не метод?
В общем, на этом, думаю, можно проверку закончить и остальное не проверять. Потому что все эти ошибки разбираются в нашем задании про студентов и я тут начинаю пересказывать комментарии к этому заданию, лучше ты прочти их сам: https://github.com/codedokode/pasta/blob/master/student-list.md
Вот мое мнение: писать свои велосипеды, это в общем неплохо и полезно. Ты узнаешь что-то новое, лучше начиаешь разбираться в других фреймворках. Но в товем случае, тебе надо больше смотреть на существующие технологии и фреймворки и меньше вариться в собственном соку, потому что код пока что очень слабый и в нем полно проблем. Ты не знешь многих базовых вещей, которые надо изучать до фрнймворков.
Если ты решишь наши задачи про студентво и файлообменник (в ОП посте есть ссылки), кстати, ты сможешь многих таких ошибок избежать. А если изучишь существуюие микрофреймворки вроде Slim или Silex то сможешь избежать и остальных ошибок.
Вот краткий список вещей которые стоит тебе посмотреть:
- ООП и наследование - composer - автозагрузка в PHP - фреймворк Slim - плейсхолдеры в SQL запросах - htmlspeciaclahrs и XSS
Если тебе что-то непонятно или есть вопросы, задавай, я поясню и дам ссылочки.
Для графиков есть JS библиотеки либ оможно рисовать их средствами PHP на сервере либо рисовать в SVG файле. А в твоем случае график вообще можно из дивов сделать.
Если ты все это делаешь потому что не осили исправить плохой код то я тебя не поддерживаю. Если пользователю действительно надо чтобы при нажатии сортировки она надолго сохранялась (в чем я сильно сомневаюсь) то можно использовать куки, если нет то надо делать это через URL.
Для сериализации можно использовать json_encode, лучше наверно просто отдельные куки.
Стрелочку лучше вписать через html-мнемонику, так как ее нельзя ввести с клавиатуры (ну то есть у меня она конечно есть но у других людей может и не быть и они не смогут нормально редактировать код).
> Задание №4 Хорошо, молодец, это задача на знание inline-block, вертикального выравнивания и удаления пробелов между инлайн-блоками.
Надо исользовать json_encode либо отдельные куки. если ты хочешь чтобы настройки привязывались не к компьютеру, а к аккаунту, лучше вообще их в базе хранить.
> Задание №6 У списка надо убрать кружочки. В меню нужно сделать больше расстояние между пунктами по вертикали (на глаз, как на картинке).
> src: url("http://www.xfont.ru/files/fonts/5/247509.ttf"); Требушет встроен в винды и есть на других платформах, так что это не нужно. Ну и если речь не об учебном задании, я бы не рискнул подключать шрифты с левого сайта. Более того, у меня серьезные подозрения что они там не с разрешения правообладателя, так как требушет принадлежит майкрософту.
Заголовок там по моему надо сделать не-жирным.
Текст и меню тоже надо сделать требушетом, этот шрифт можно прописать как основной на теге html или body.
> Задание №7 Ок, хорошо, я вижу что ты указал для кнопки и input разную height. Я советую тебе еще почитать про свойство box-sizing если ты о нем еще не знаешь.
> Задание №8 Когда указываешь font-size всегда указывай и line-height иначе он наследуется и поулчится не то что надо. Основной размер и стиль шрифта надо указывать не на p (это как минимум странно, почему размер применяется только к тексту внутри абзацев, а как же другие теги? ), а на html или body.
div там лишний и его надо убрать. Мне кажется тегов p и aside вполне достаточно. clear можно перенести на aside.
Отступ для абзацев надо задавать не маргином на детях, а паддингом на родителе, посмотри даже в задании написано:
> не задавай поля с помощью margin на <p>. Поля задаются с помощью padding на родительском элементе
Шрифт крупный, все поехало. Надо делать поля через паддинг чтобы этого не было. текст не только внутри абзацев бывает.
>Задание №9
>div { > border: 1px solid #a3a3a3; Это не годится так как стиль применяется вообще к любым дивам и ломает верстку если вставить эти блоки на реальную страницу. Пиши стили которые не ломают чужие теги.
> .greyBlock:after { > content: " "; Это старый clearfix, сейчас похитрее штука есть, microclearfix, ссылка на нее в подсказке к заданию. Но твой вариант тоже подходит.
> <p class="inside text"> У p надо убрать классы, так как на практике у нас есть кусок HTML который надо вывести, например, текст поста из базы данных, и мы не хотим в нем искать теги и добавлять в них классы, а хотим просто вывести как есть. То есть на p не должно быть никаких классов.
Опять же шрифт должен применяться не только к абзацам, а к любому содержимому, спискам, тексту вне тегов.
> до меня так и не дошло, как сделать так, чтобы текст не обтекал левый блок, а шёл отдельной колонкой Сделать большой padding-left на .greyBlock. желтый квадрат можно загнать влево отрицательным маргином: https://gist.github.com/codedokode/3f6063edf0a2227eb313
> Господа, как это можно автоматизировать? Массивом.
> Оно у меня потом в шаблон парситься, там особая структура, ее нельзя нарушать Его надо выкинуть и переписать на твиге, вот мое мнение.
Код кошмарный. Не пишите так, хорошие дети.
Интересно, что заставляет людей писать этот ад? Почему они не хотят изучить Slim, twig, doctrine, symfony или хотя бы Yii2 и сделать нормально? Ведь все равно с таким кодом ни в одну нормальную компанию не возьмут.
> $title8 > $parse->set_tpl('{TITLE8}',$title8); 8-е название! Восьмое! Поэтому вы никогда не должны изобретать свой шаблонизатор, а должны взять твиг.
В следующий раз на аналогичной задаче додумаешься. Потому надо решать сейчас как можно больше задачек. Программирование во многом состоит из написания того что ты уже видел раньше.
Какая польза без фреймворков? Какие виды сайтов по твоему выгоднее писать на чистом PHP? Никакие. Почему фреймворки не учишь? мог бы начать с нашего задания про файлообменник например.
> Простой сайт с админкой и бд могу написать, что там еще можно уметь? Может код людям не нравится, который без фреймворков? Может он еще и без ООП? И выглядит как в учебниках 10-летней давности?
>>522995 >Как фронтенд может быть бесполезным Фронтенд макак итак как говна расплодилось, их неохотно берут на работу за пределами дс по крайней мере. потому что бэкэнд важнее
Имеется в виду что у инпутов разных типов (файл, поле ввода, чекбокс) value ведет себя по-разному, и там описаны вырианты такого поведения, это и есть «режимы».
Код на Си можешь не читать, только теорию. Других ссылок не нашел. Да и какая разница, код-то ты все равно должен написать сам, так что код на Си это делать никак не мешает.
Можно расположить все тексты друг над другом, сделать их прозрачными и при переключении анимировать opacity. Можно сделать чтобы текст уезжал влево и другой выезжал справа, за счет свойств left или transform. Можно вообще трехмерные трансформации сделать:
> input:checked + label + input + label + article + article + article { > display: block; А можно ли обойтись без таких адских селекторов? Вот тут пост например на тему есть: http://chikuyonok.ru/2009/04/dl-tabs/ хотя он со своими недостатками.
Вот так вот: <script type="text/x-template" id="menu-template">
Заметь, я пишу x-template так как MIME типа text/template нет, а для своих придуманных типов принято приписывать x-.
Для js-test.html можно было не писать маршрут, а кинуть его в public и обращаться напрямую.
> commentButton.onclick = function(){ не полагайся на то что браузер создает глобальные переменные по id, используй getElementById явно.
> onclick="appendPostForm({{comment.id}}, '{{comment.user}}', postForm{{comment.id}})" Используй json_encode для надежной подстановки данных в скрипт. Что если в user встретится кавычка или перевод строки? Как минимум, скрипт сломается.
ОП хуй я твой рот ебал)) Чо важным себя таким считаешь, да скотинка? Сам поди какой-то престарелый пидор, работающий преподом в какой-то шараге, лысеющий с пивным пузом и появляющейся сединой в голове, еще и совращающий студентов в перерывах между парами. Прямо женоподобный манерный снобизм так и пыщет в твоих убогих портянках. Как можно быть таким лузером, вынужденным к 40 годам работать в шараге и давать советы шольникам на сосаче, лол?
Это будет как минимум дольше. В коде будет разбираться и поддерживать дольше и сложнее. По моему опыту, в 99% случаев это будет быдлокод (смотри дамп фриланса выше по треду). Заказчик очевидно окажется в проигрыше от сотруюничества с таким велосипедистом.
>>522027 >Папка не создается автоматически, только сам файл. Если папки log нет то будет ошибка. Спасибо, позже попробую написать что-нибудь типа простенького файлового менеджера, чтобы лучше покрыть эту тему, или задание на файлообменник сделаю ваше, если доберусь.
> public function createChilds() Этой функции тут не должно быть, как мне кажется. Она лишает нас возможности управлять созданием узлов, например какого он должен быть класса и что передать ему в конструктор. Удобнее сделать методы вроде задатьЛевогоРебенка().
Также, мне кажется свойства лучше сделать непубличными. Например, при добавлении узла мы должны поступать примерно так:
- проверить что этот узел не имеет родителя - прописать себя в parent узла - прописать узел в одного из детей - если на его месте был другой узел, надо его удалить
У тебя поля публичные и нет никаких гарантий что они все будут в согласованном виде. Правильнее сделать их непублимчными и сделать методы добавления/удаления детей которые гарантируют что все ссылки будут проставлены правильно. Этим ты сбережешь время разработчиков которые будут работать с ствоим деревом.
> if (!empty($base->leftChild) && !empty($base->rightChild)) { Тут будет ошибка если один из детей есть — его потомки останутся неперевернутыми.
Ну и конечно, я вижу, что для тебя эта задачка слишком простая. Может сделаешь задание чуть посложнее?
- напиши методы добавления/удаления детей с сбалансировкой дерева
В сбалансированном дереве у каждого узла есть какое-то знчение, например число. Число в любом из левых потомков узла должно быть не больше чем число в самом узле, и число в любом из правых потомков должно быть не меньше чем в самом узле.
Дерево называется сбалансированным если в нем нет длинных ветвей из одиночных узлов (точное определние: если взять глубину левой и правой ветвей любого узла, они отличаются не более чем на единицу):
1 ...2 ......3 .........4
Выше пример несбалансированного деерва. Если посмотреть на узел 1 то слева у него нет потомков, там глубина ветки 0. А справа аж 3 потомка, глубина ветки 3. Непорядок. Если его сбалансировать, получится пирамидка:
.....2 1.........3 .................4
Есть разные алгоритмы балансировки: АВЛ и красно-черные деревья. Говорят, первое проще.
Если решишь это и будет желание, я дам задачку на поиск слова с ошибками в словаре с помощью деревьев (это примерно то же что делает ворд, когда предлагает варианты исправления опечатки).
>>523026 Ой, не пизди. Сидел с таким престарелым преподом-пидором, он мне хуету всякую советовал, давно устаревшую. Сам примеры писал, хуже чем тут в треде постят. Преподы вообще не шарят ничего в программировании. Так бы и прозябал в неведении, если бы не ОП.
>>523137 >Может сделаешь задание чуть посложнее? >Поломай голову еще немного.
>Если решишь это и будет желание, я дам задачку на поиск слова с ошибками в словаре с помощью деревьев (это примерно то же что делает ворд, когда предлагает варианты исправления опечатки).
Конечно попробую решить, но позже. Сначала абитуриентов добью, а то уже неделю ничего в них не правил, всё статейки в сети читаю да задачки решаю. Скоро и забуду уже что и как там (в абитуриентах) устроено.
>>522971 Foreach почитаю, попробую, но пытался сделать способами, которые выдавались в уроках. На счет регулярного выражения и скобок, видимо запутался, думал, что после | отсчет заново начинается. Спасибо за помощь
Добрый день. Меня сюда послали из руби треда. Суть такова, я хочу овладеть ЯП, чтобы иметь некий более-менее постоянный и главное удаленный заработок. Я пришел куда надо?
>>523349 SCRIPT_NAME - путь к обрабатываемому файлу на web сервере (может быть include файл) PHP_SELF - путь на web сервере к запрошенному юзером файлу (не include, только что юзер запросил) __FILE__ - путь к обрабатываемому файлу в файловой системе (в том числе include )
ОП, у меня есть вопрос. Я один из анонов который делает файлообменник на слиме (с доктриной и твигом). И вот стоит у меня вопрос что мне делать дальше. Есть маленькая конторка в которую я могу пойти, там вроде в основном работают на зенде, но из того что я вижу быдлокод и велосипеды там цветут буйным цветом и я не уверен что смогу научиться там чему-нибудь хорошему. С другой стороны я могу продолжить обучаться сам и здесь в треде вместе со всеми, освоить yii и symfony и потом пробовать вкатываться во фриланс или в конторку посерьезней.
Короче не знаю я пока какой стул выбрать. Сам я быдлоадмин в банке за три копейки 25го лвла, могу посвящать учебе большую часть рабочего дня. Жду советов мудрых
Посмотри на результат. В PHP_SELF и SCRIPT_NAME будут разные значения, как заметил выше >>523351
Ты можешь спросить, эй, а что это за /a/b/c ты приписал? Разве так можно? Да, можно, это древняя фича протокола CGI (которую перенял Апач) и она задумывалась для создания человекопонятных URL вроде /index.php/news/today
То, то дописано после имени скрипта (/a/b/c), идет в PATH_INFO.
Если есть возможность, стоит смотреть в строну Symfony 2 и может быть фронтенда (ну все эти продвинутые JS фреймворки), с их знанием наверно можно найти работу получше. С другой стороны, слишком долго с обучением затягивать тоже не стоит.
Я кстати на Yii вообще никогда ничего не писал, просто знаю его чуть-чуть по документации и по тому что тут аноны на нем делали. Так что не знаю, стоит ли на него тратить время. С другой стороны, он распространен. С третьей стороны, те, кто на нем пишут, скорее всего пишут еще хуже чем те что на зенде.
Файлообменник, если это ты скидывал, тоже постараюсь глянуть.
Нет, перекатываться мы туда не будем. Хватит уже недотредов которые только сбивают всех с толку и содержат неправильные ссылки на предыдущий пост. Завтра сделаем нормальный тред. Картинку с котом впрочем может быть возьмем.
Не надо так говорить, может у него хорошие намерения и он просто пытался помочь треду. Но блин, ссылка на предыдущий пост указывает не туда, заголовка нет, привычной картинки нет, это людей только с толку сбивает. Лучше я чуть позже сделаю нормальный тред.
>>514869 (OP) Привет, аноны. Мне стало интересно, вот вы тут учите: >PHP (а также JS/CSS/HTML/SQL) Разделение труда вообще существует? Допустим я хочу фрилансить, что-бы успешно этим заниматься мне нужно учить и вёрстку и пхп?
>>523623 Бэкенд программерам нужны только основы верстки и базовые знания javascript/jquery. Обычно бэкендам верстку уже готовую дают, и самому верстать из psd не нужно. Фронтендам нужно хорошо знать верстку, углубленно javascript и кучу javascript библиотек для фронтенда. Если тебе в фронтенды, то лучше в треде по верстке сиди. Алсо, пикрелейтед. Синим там, что бэкенду нужно знать, остальное фронтендам.
>>523632 Бэкенда полно разного же, в зависимости от выбранного языка/cms/фреймворка/библиотек. Там все в картинку не влезло бы. В треде тут стандартным для PHP программера инструментам учат, почитай сайт ОПа, поделай задания, понятнее станет.
>>523623 Back-end это по большей части серверные дела, которые клиент не видит, front-end это уже то, что непосредственно видит клиент, и с чем взаимодействует, как мне думается
Привет, котаны, два вопроса: 1. Это легитимный тред? Если нет, то киньте линк. 2. В общем, освоил основы пыхи, джс, джиквери, мускуль, теперь пора учить, то, что принесет мне трудоустройство и соответственно профит. План такой - делаю как говорят, в прочессе учусь\разбираюсь и следующим делаю уже свой проект. Вот решил по этому гайду заниматься https://github.com/githubjeka/yii2-tutorial Кто что думает, особенно ОП, что можешь сказать после беглого взгляда.
Пока мы в этом треде, сегодня-завтра сделаем новый.
У нас есть задачки на студентов и файлообменник в оп-посте, их решают до фреймворков. Если ты точно уверен что знаешь то что в них изучается (работа с формами, таблицами, композер, ООП, MVC) то ты можешь их не решать, хотя я бы их как минимум посмотрел. Там много полезной информации.
Также, заметь, у нас в Оп посте есть задачки на SQL.
Туториал это неплохо но я бы параллельно читал официальную документацию.
По Yii2 у нас есть большая задачка на сайт с тестами. Ты можешь ее решать или делать свой проект, как хочешь.
Если хочешь, можешь потом показать код на проверку.
>>518739 >>516349-кун снова репортинг ин Взяли на работу с хайлоадом все-таки, хоть я вообще в нем ни в зуб ногой и половину вопросов на собеседовании завалил. Срочно им добить отдел программерами надо было, подходящих кандидатов мало. Через пару недель выходить. Сказали, что недостающему доучат, главное что основы знаю (тут отдельное спасибо ОПу за хорошие задания и внятные объяснения). Сижу теперь повторяю все перед работой, потом еще отпишусь.
>>523901 Все что ты перечислил я знаю с гуглом и работал с этим. Даже свой минифреймворк написал, просто думаю вкатиться в ии2, потому интересно не пробовал ли кто по сей ссылке ходить до меня.
Ну вот и хорошо, это твой шанс поучиться за счет работодателя.
Ты там выше писал что в SQL не очень разбираешься, я бы советовал прорешать наши задачки на SQL + для хайлоада обязательно конечно надо почитать про индексы:
>>523931 >Сказали, что недостающему доучат, главное что основы знаю (тут отдельное спасибо ОПу за хорошие задания и внятные объяснения). Ну тогда я спокоен за свою судьбу, лол. И спасибо тебе, что отписался.
Куда в html можно спрятать айдишник? Допустим, у меня есть список каких-то записей, по клике на запись должен идти аякс-запрос и сбоку выводиться подробная информация из базы по этой записи. Дело за малым, нужно передать айдишник, чтобы по нему выдернуть нужную информацию. Первая мысль естественно сохранять его в какой-нибудь невидимый элемент (или добавить свой атрибут). Но может быть есть более корректные способы? Я бы загуглил, не знаю что писать в поиске.
>>523984 Какой гет в html? Я говорю о клике по дом-элементу.
Ну ладно, положу айдишник в какой-нибудь дополнительный атрибут. Подозреваю, что оп назовет это говнокодом, и мне придется переписывать. Кстати, если прописать свои атрибуты в html, валидаторы будут ругаться? ... Мне даже пришло в голову проверить: будут. Error: Attribute fid not allowed on element div at this point. Куда же тогда его засунуть?
>htmlspecialchars Ну это как я понял только если мы собираемся выводить данные, записанные в базу от пользователя. Я думаю, что в случае с айди или временной меткой это можно опустить (?полувопрос)
Нет, ты должен любые данные обрабатывать с помощью htmlspecialchars. Например символ & ты должен выводить как & а < как < — это правила HTML.
> Я думаю, что в случае с айди или временной меткой это можно опустить Если число то можно пропустить их через intval, но с htmlspecialchars будет логичнее. И это для тебя должно быть привычкой. А если ты будешь использовать современный шаблонизатор вроде twig, он делает это сам.
Смотрите, я ОП-хуй, я настолько уебок, что не в состоянии создать новый тред ранее, чем неделя после бамплимита, все потому что я криворукий тормоз. Поэтому сижу и как обоссыха отписываюсь в упавшем в бамплимит треде, лол, каждый раз прокручивая до десяти страниц вниз, вот это я лузерок, дети, смотрите внимательнее, во что превратитесь лет через десять безрезультативной дрочки пхп.
>>524231 Нет, ничего не было. Опыт эникеем был пару лет в шараге. Взяли только потому что хорошо на интервью отвечал про все эти отличия абстрактных классов от интерфейсов и трейтов от closures. Вопросов было реально много, практически по всем темам, БД, ООП, новые фичи PHP, css/html, javascript, jquery, git, системы деплоймента, юниттесты, линукс, memcached всякие, nginx, фреймворки, библиотеки, jira. Плавал я только в БД и фреймворках, остальное из ОПовых объяснений и чтения документации более-менее знал. В итоге сказали, что знаю больше, чем средний выпускник института, который к ним приходит, поэтому берут. Сказали еще, что не любят учить всему по сто раз заново с азов, поэтому когда готовый уже приходит и можно сразу сажать с заданиями в трекер разбираться, это плюс большой.
>>523981 Нет. Wordpress ковырял под темплейты. Ну у них сказали фреймворка сейчас тоже не будет, избавляются постепенно, переписывая модули на чистый php.
Только что доделал последнее задание по CSS, а именно сверстал макет. В каком виде мне нужно прислать его на проверку. Загрузить зипом на ргхост или записать код на каком-либо сайте?
В общем я попытался разобраться сначала с гитхамбом, но не смог, на jsfiddle я не понял как картинки добавлять, да и экран там не полный (или можно на полный развернуть, но я ни тем, ни другим сервисом не пользовался до этого), поэтому я решил сразу прислать вам в виде сайта, а вы уже сможете открыть код и посмотреть. css я в индексном файле оставил, но ясное дело, что для него отдельный файл нужно создавать. Так же я не смог разобраться со словами в шапке, при большом уменьшении экрана они скатываются вниз, так же я резко смещается вверх блок с серым фоном, который находится под портфолио, если уменьшается количество отображаемых работ в портфолио (при выборе категории работ ALL GRAPHIC и т.д.). Хотелось бы услышать замечания по работе, так же помощь по устранению тех ошибок которые я совершил, но больше всего я хочу услышать о том как я пишу. Многое слышал о требованиях к читаемости кода. Вот и хочу знать читаем он у меня или нет. А то я просто новичок и это моя первая работа, перед этим только делал остальные 12 заданий из ссылки в ОП посте (сюда их правда не присылал, показывал их другу студенту-программисту, ОПа лишний раз нагружать уже не хотел).
Справедливости ради, они идут на уступки. Судя по требованиям подходят даже люди со знанием уровня кодеакадеми и видеокурсов. Впрочем, если там есть хороший тимлид-надсмотрщик то все может получиться.
Ну и хочу, пользуясь возможностью, напомнить, мое мнение, что видеокурсы для программиста это абсурд. Я понимаю видеоуроки типа «как поменять обои в виндоус» для обычных, непрофессиональных пользователей. Но если ты хочешь стать программистом, ты не должен опускаться до уровня блондинки которой надо показать какую кнопку нажать. Видеокурс! По программированию!
Не ведитесь на это аноны. Те, кто делают такие курсы, просто пытаются кажущейся простотой заманить как можно больше человек (например с целью продать им курс). У них нет цели подготовить хорошего специалиста, у них цель получить ваше внимание и ваши деньги.
Программированию нельзя обучиться, повторяя чьи-то действия, это (пока еще) не работа сборщика на конвеере. Здесь надо уметь думать.
Справедливости ради, мой учебник тоже пытается выглядеть простым, чтобы заманить побольше читателей. Но в дальнейшем более сложные задачи отсеивают тех кто просто хочет повторять увиденное.
Я вот не пойму как вообще с этими цмс работают вручную. Довелось с одной столкнуться, я даже не смог найти где храниться хтмл код страницы, хотя казалось бы, что может быть проще? Но нет, все инклюды прочекал в пхп файле главной страницы, нигде ничего нет.
>>524416 html код обычо можно найти через админку цмс. Там он не всегда в явной форме написан, иногда бывает собственный язык разметки, который в админке прикрепляется к страничке в виде ее темплейта. Вот этот темплейт открываешь и редактируешь на языке цмс, по нему длинная дока есть. А цмс уже его преобразует в html при выводе.
>>524423 В дешевой веб-студии обычно под копирку за пару дней лепят однотонные сайты на битриксе или вордпрессе каком-нибудь. Особо многому ты там не научишься, потому что ни ООП, ни работы с БД, ни оптимизаций там не будет, будет сплошной копипаст одного и того же шаблона изо дня в день. Идти стоит, если бывают проекты, которые от месяца занимают и где в самом деле программировать надо. Так что если пойдешь, разузнавай на интервью, чем именно они занимаются, что за тулзы используют и какого типа проекты бывают.
Может он будет какие-то внтренние тулзы писать. Стоит идти или не стоит, зависит от твоей ситуации, с другой стороны слишком долго учиться тоже не очень полезно.
Таки слишком резкий переход от задачек к базе абитуриентов. Я щас задание прочел и сижу ахуеваю. Как я понимаю в маппер нужно запихнуть все функции, которые работают с БД напрямую. А в классе абитуриента тогда что останется, только переменные? В маппере для обновления каждого свойства абитуриента нужно делать разные функции, или это все можно объединить в одну функцию? И не совсем понятно как выводить поля с абитуриентами в таблицу. Их всех нужно будет в один массив запихнуть или перебирать по одному и выводить? Или может еще что-то можно почитать или сделать, прежде чем начинать это задание делать?
>Как я понимаю в маппер нужно запихнуть все функции, которые работают с БД напрямую. Маппер это объект который загружает и сохраняет другие объекты (Студентов) в/из базы. Так что да, работать с базой надо через него.
> А в классе абитуриента тогда что останется, только переменные? да
> В маппере для обновления каждого свойства абитуриента нужно делать разные функции, или это все можно объединить в одну функцию? Можно объединить. На практике тебе не нужно обновлять отдельные свойства, тебе надо обновить все и функция выглядит примерно так:
$mapper->save($abiturient);
> И не совсем понятно как выводить поля с абитуриентами в таблицу. Их всех нужно будет в один массив запихнуть или перебирать по одному и выводить? Что значит отдельные поля? У тебя есть массив объектов-абитуриентов, в шаблоне перебираешь их в цикле и выводишь:
Эмм, а в чем принципиальное отличие видеоуроков от текстовых? Все тоже самое, только более подробно и наглядно. Ну и плюс иногда наблюдать за тем как шарящий человек работает гораздо полезнее, чем зубрить голую теорию.
Поясните мне пожалуйста за хостинг сайтов. Вот сделал я например свой первый сайт и хочу, чтобы его увидел весь мир. Как это организовать? Могу я например для этого выделить дома системный блок и хостить с него?
>>524469 На heroku.com зарегай бесплатный акк и погоняй там свой сайт, так проще всего. Потом проапгрейдишь до платного, если понадобится. Кроме heroku еще горы бесплатных хостингов есть, вот тебе целая куча http://www.free-webhosts.com/free-php-webhosting.php Дома скорее всего не сможешь, многие провайдеры блочат порт 80, скорость на отдачу низкая, ip меняется, домашний роутер кучу одновременных запросов не выдержит.
Где можно почитать про всякие dhcp, mac-адреса и прочие сисадминские вещи? А то стыдно такое не знать. Что происходит, если в настройках роутера поменять мак-адрес wan?
>Что происходит, если в настройках роутера поменять мак-адрес wan? Сменится мак роутера. Если провайдер привязывает акк к маку, то не сможешь больше зайти в инет, пока провайдеру новый мак-адрес не сообщишь. Если не привязывает, то просто будет оборудование провайдера новый мак-адрес видеть. В инет твой мак-адрес не уходит, теряется на первом же роутере.
>>524415 >видеокурсы для программиста это абсурд Согласен. Но видеокурсы делают не для программистов, а для тех, кто хочет им стать, но не написал за всю жизнь ни строки кода, и не имеет ни малейшего представления о программировании. Многим катастрофически не хватает демонстрационных примеров. Вот только для этого и существуют видеокурсы. Посмотреть, как оно работает, получить общее представление, и уже за подробностями лезть в ублюдочную техническую документацию, которую как я начинаю подозревать пишут даже не люди, а генерируют боты.
У тебя в универе была высшая математика? Что, сразу после лекций гнали на экзамен решать интегралы? Или может все-таки были практические занятия? В конце концов психически здоровым людям всегда приятнее воспринимать информацию на слух, слышать голос другого человека.
>>524479 >ублюдочную техническую документацию, которую как я начинаю подозревать пишут даже не люди, а генерируют боты
Документация обычно охватывает все случаи применения какой-нибудь функции или технологии, т.е. раскрыт весь потенциал. Для разбирающихся в основных понятиях людей очень удобно, не нужно рыться в разных местах, можно вникнуть за 5 минут. В курсах обычно учат только поверхностно и небольшой части возможностей и внутренних механизмов, полного понимания, как и что работает у тебя не будет.
>психически здоровым людям всегда приятнее воспринимать информацию на слух, слышать голос другого человека О типах людей слышал? Есть визуалы, есть аудиалы, есть кинестетики. Программисты как раз чаще визуалы. На слух воспринимаются подобные темы визуалами довольно тяжело.
>Мы понимаем, что для новичков «OSI» и «TCP/IP» — это страшные слова. Самоутверждение.
>Начнём с постановки задачи. Есть некая фирма, занимающаяся, допустим, производством лифтов, идущих только вверх, и потому называется ООО «Лифт ми ап». Расположены они в старом здании на Арбате, и сгнившие провода, воткнутые в пожжёные и прожжёные коммутаторы времён 10Base-T не ожидают подключения новых серверов по гигабитным карточкам. Итак, у них катастрофическая потребность в сетевой инфраструктуре и денег куры не клюют, что даёт вам возможность безграничного выбора. Это чудесный сон любого инженера. А вы вчера выдержали собеседование, и в сложной борьбе по праву получили должность сетевого администратора. И теперь вы в ней первый и единственный в своём роде. Поздравляем!
Что за галиматью я читаю? Я спросил про основные термины из области системного администрирования, ты мне подсунул какую-то парашу.
>>524487 О, это уже получше. Сразу видно, профессиональные преподаватели, снисходят до объяснения тех терминов, которые употребляют, а не посылают на гугл или в википедию. Вот допустим в википедии я хочу почитать про эту самую модель OSI, о которой я так много слышал. Что я вижу? >Сетевая модель OSI (базовая эталонная модель взаимодействия открытых систем, сокр. ЭМВОС; 1978 год) — сетевая модель стека сетевых протоколов OSI/ISO (ГОСТ Р ИСО/МЭК 7498-1-99). Ну офигеть теперь. Я не знаю, что они подразумевают под "моделью", что такое "открытые системы", что такое "стек", что такое "протокол" понимаю смутно, имея базовые знания только по http. Как ты думаешь, полезна для меня эта статья? У интуита по крайней мере делаются попытки объяснять те важные термины, которые они употребляют. В первой же лекции например дается определение открытой системы. http://www.intuit.ru/studies/courses/2/2/lecture/28 Так что здесь ни к чему не могу придраться. Придется читать. Жаль только, что в текстовом виде. В аудио/видеоформате я мог бы послушать и на толчке, и за едой.
>>524495 Спасибо, остановлюсь таки на интуите. У специалиста действительно то, что ты говорил: затягивание времени с целью выкачать деньги, много пауз, разговоры не по теме, иногда сёрбанье кофейка и сморкание в микрофон. И это у Борисова, который там лучший лектор.
Но объясняет хорошо, без его курсов я бы не осилил самостоятельно учиться по документации, как ты советуешь.
Протокол это описание способа и языка передачи данных. Ну в случае интернета, описывается например формат пакета с данными, из каких байтов он состоит и что они обозначают. Какие пакеты можно передавать и как. Вот например в статье про протокол IP приведен пример IP-пакета: https://ru.wikipedia.org/wiki/IP#.D0.9F.D0.B0.D0.BA.D0.B5.D1.82
В данном случеа «стек протоколов» значит что один протокол работает поверх другого, а другой поверх третьего. Например протокол HTTP соединяется с сервером с помощью TCP, а тот использует IP для передачи пакетов по интернету, а IP использует какой-то протокол физического уровня (например Ethernet, передающий данные в виде электрических сигналов в кабеле).
Модель OSI соответсвтенно разделяет стек (набор использующих друг друга) протоколов на уровни, начиная от низкоуровневых, физичсеских, опсиывающий принципы передачи данныех по кабелю, оптоволокну или телефонной сети, и до высокоуровневых, с которыми работает приложение.
OSI это абстрактная модель, и в реальности часть уровней из нее может не использоваться.
Мы разбиваем протоколы на уровни чтобы разбить на части описание способа передачи данных по сети (иначе все будет слишком сложно) и дать возможность подменять нижележащие протоколы не трогая вышележащие. Например, если мы заменим кабель на оптоволокно, меняется только протокол физического уровня (который определяет как биты кодируются электрическими сигналами или лазерными импульсами), а вышележащие протоколы мы используем те же так как они не знают по какой среде передается сигнал, а просто передают протоколу физического уровня набор байт которые надо передать.
Проверь мой файлообменник. Боюсь, я там сильно наговнокодил, особенно когда изобретал регистрацию. Но в целом я доволен, хоть и написал велосипед, но появилось хоть какое-то понимание. https://github.com/nsdvw/file-sharing
Пробовал выложить на бесплатный хостинг, но там (hostinger) куча проблем. InnoDB видите ли они не поддерживают. Пришлось убрать внешние ключи и транзакции. Все равно почему-то не работает (я имею ввиду, нельзя загрузить файл). Залил пока несколько файлов по ftp, залил базу, чтобы было хоть что смотреть. Библиотека gd, которая у меня рисует превью для картинок, у них тоже походу какая-то неправильная. Короче, ОНО НЕ РАБОТАЕТ, а куда смотреть и что исправлять не знаю. phpinfo очевидно, но мне эта информация ни о чем не говорил. А хотелось бы разбираться в этих наскальных надписях. http://filesharing.pe.hu/info.php В логах ничего нет. Про логгирование я кстати тоже не в курсе. Мне нужно что-то прописывать в коде, чтобы велись логи, или они всегда есть у администратора, только нужно ждать когда их скопируют мне в папку?
В чем может быть причина? Какие еще кроме транзакций и внешних ключей отличия InnoDB от MyISAM? Что я еще использовал: finfo, getId3, mod_rewrite Да нет, эти вещи вроде не могут вызвать проблем. Там что-то именно с загрузкой файлов. Только что отключил джаваскрипт, который аяксом отправлял запрос, выдает теперь голую страницу с надписью Access denied. Интересно.
О, теперь слим выдает ошибку Only variables should be passed by reference При чем тут передача переменных по ссылке? Нету там такого.
Файлы не скачиваются, вернее сохраняются пустышки по 0 байт.
>>524528 А, ну в целом как я и думал, прежде всего транзакции и внешние ключи.
Так что тут не в этом дело. Тут именно что-то с загрузкой файлов. Не понимаю. Где там у меня ссылка?
ААА.... в bindParam передается в качестве аргумента результат работы другой ф-ции, в данном случае json_encode. Кажется, оп говорил мне об этом когда-то, но я прослушал. Да и у меня на локалочке все работает, а у этих редисок видите ли нет. Где находится настройка, которая отвечает за это дело? Как вообще привести свой локальный сервер к "стандартному" что ли виду? Ставил апт-гетом на убунту, ничего не менял.
>>524539 Короче, теперь все работает, кроме скачивания. Потому что сторонний модуль x-sendfile. Плюс у них оказывается upload_max_filesize целых 8Mb. Какая щедрость. Там наверное еще лимит использования диска в районе 1gb. Нет, целых 2gb. >>524525 Надо будет попробовать это ваше облако.
>>524516 Ну вот, нормально объяснил, это я понимаю. Если бы так везде писали.
Ты эти пасты сохраняй, а еще лучше добавляй к своему бложику на гитхабе или народ.ру. Я например физически не в состоянии запоминать все с первого раза, нужно перечитывать по несколько раз.
Аноны, я не успею сегодня уже ничего проверить, решайте пока задачки, давайте я завтра попробую, очень занят сейчас, буду сейчас до вечера сидеть работать и завтра может тоже.
> В логах ничего нет. Про логгирование я кстати тоже не в курсе На хостингах обычно либо есть папка с логами, доступная по FTP либо просмотр логов в личном кабинете.
> О, теперь слим выдает ошибку Only variables should be passed by reference Посмотри в каокй строке и какой там код. Это может быть вызвано старой версией php например.
> Файлы не скачиваются, вернее сохраняются пустышки по 0 байт. Потому что нет модуля sendfile. Можешь сделать проверку есть ли такое расширение на сервере ( функция http://php.net/manual/ru/function.apache-get-modules.php но она может быть запрещена администратором) и если нет то отдавать файл через readfile.
> А хотелось бы разбираться в этих наскальных надписях. Это просто информация о конфигурации, включенныхмодулях, и настройках, заданных для php. Они описаны например тут: http://php.net/manual/ru/ini.php
> error_log /home/u448009642/.logs/php_error.log Вот и ответ где логи. Имей в виду что папки с точки в линуксе невидимые и могут не везде показываться (на доступ это не влияет).
> error_reporting 32759 Я бы поставил E_ALL на всякий случай
Вообще в 99% случаев нужен bindValue (в которой можно передавать любые выражения), зачем ты вообще тут bindParam используешь? Он используется обычно для вызова хранимых процедур, чтобы база могла вернуть какое-то значение, а оно бы записалось обратно в привязанную переменную. тебе это вообще не нужно.
В многих статьях в интернете тоже кстати bindParam вместо bndValue используют — их авторы неучи-копипастеры.
> . Да и у меня на локалочке все работает, а у этих редисок видите ли нет. Тебе надо проверить свою локалочку. может ты просто не видишь предупреждений и логи не читаешь? Тут ошибка в твоем коде.
> Как вообще привести свой локальный сервер к "стандартному" что ли виду? Настройки по умолчанию, можно включить display_errors либо читать логи, error_reporting поставить в E_ALL или -1 (фиксировать любые ошибки).
Ок, я наверно сегодня не успею, давай завтра проверю. у тебя явно есть ошибки, так как в моем фаерфоксе из 4 колонок четвертая переносится на новую строку, как проверю, скажу почему. Ты все предыдудщие задачи на HTML решил ведь?
>>524580 Все 12 задач по CSS у меня решены, только решения я сюда не присылал, их проверял мой знакомый студент-программист. А насчет 4го блока странно, у меня ни в одном браузере такого нету и у двух моих друзей которых я просил проверить работоспособность тоже ничего не крашилось.
Кнопки ALL GRAPHIC ILLUSTRATION MOTION надо сделать нажимающимися, чтобы они сохраняли свое состояние. Можно использовать невидимые радиокнокпи + css3.
Код из блока style надо вынести в внешний css-файл и подключать через тег <link>
> <img src="img/rss.png" class="boll1"> Все картинки относящиеся к дизайну надо делать через background-image в CSS. Тег img используется только для картинок в содержимом статьи (фото, иллюстрации) или в твоем случае, для каритинок в портфолио.
Мелкие однотипные иконки желательно объединить в css спрайт.
Имена классов мне не нравятся. Что за bool1? Давай нормальные читабельные имена вроде social-icons
> "bb_first_line Обычно через дефисы пишут идентификаторы в CSS
> <div class="text1"> > <b>Our Features Works</b> Тег b не используется так как внешний вид текста должен задаватся в CSS, а теги задают смысл этого текста. В днном случае текст это заголовок и должен использоваться один из тегов h1-h6
> overflow-x:hidden; Либо объясняй зачем это либо удаляй
> .shapka { Не пиши транслитом, не знаешь английского используй гугл транслейт или яндекс-словари.
> font: 12px "Open Sans", Arial, sans-serif; Нужен @font-face инае шрифт не будет работать у тех у кого не установлен на компьютере.
> .second_block Нужно более понятное и объясняющее название
> <p><a name="link_portfolio"></a></p> Уже лет 10 можно вместо name просто приписвыать атрибут id к любому тегу. Старый учебник читал?
> GRAPHIC Капс лок надо делать не в тексте а через text-transform
В портфолио, лучше не делать по несколько копий каждой картинки, а помечать css классами к каким разделам она относится.
sphinx проще в установке, меньше и компактнее. Если он соответствует твоим требованиям и если тесты покажут достаточную производительность, можно его использовать.
А вообще, на монге можно выжать большую производительность (пожертвовав надежностью, транзакциями и связями) и она масштабируется на несколько серверов, если например ты делаешь высоконагруженную игру для соцсети то может быть она тебе поможет, хотя я не использовал ее в таких сценариях (но данные о платежах я бы все же хранил в SQL базе). Тут стоит почитать доклады компаний типа мэйл ру или разработчиков игр которые такие нагруженные приложения делают и посмотреть что они исопльзуют. Справедливости ради, у MySQL тоже есть какой-то драйвер для испльзования ее в режиме NoSQL и работы с InnoDB напрямую:
Аноны, тут вакансию вбросили, может кого из вас заинтересует или вы просто прокомментировать захотите (внезапно, вакансия запощена вконтакте): https://vk.com/topic-91062134_31717797
>>525121 Скобки нужно экранировать бекслешем, как и любой спецсимвол типа \?, \. Выучи сначала синтаксис, не хватайся за задачи, если не знаешь языка регулярных выражений. Задачи нужно решать только для закрепления знаний.
У тебя функция mt_rand () генерирует случайное число, но оно никуда не записывается. Запиши ее в переменную и тогда уже можешь выводить. Выглядеть это должно примерно так:
> Придется передавать ссылку на объект Field в объект Cat? Эта ссылка нужна, как без нее кошка будет ориентироваться и знать кто где находится?
У тебя сдеално вот так:
> public function lookAround(SplObjectStorage $listOfAnimals) И это не правильно по моему так как у тебя в программе ходят какие-то списки животных которые надо поддерживать в актуальном состоянии. Лучше при добавлении животного на карту передавать ему ссылку на Field, а через нее оно может видеть что вокруг.
Поедание можно сделать так: кошка при ходе на клетку, проверяет какое животное на ней нахолится:
- мышка — снимаем ее с карты и съедаем - кошка или собака - значит ошибка в программе
Решил что настало время все-таки подтянуть матчасть, потому что есть много пробелов. Так что выделю на это несколько недель.
Первые пять заданий на html. 1) 1 задание. Вариант 1 с дивами-обертками: http://jsfiddle.net/c62zkf53/3/ Вариант 2 с box-sizing: http://jsfiddle.net/c62zkf53/2/ Насколько я понял, первый вариант предпочтительнее, потому что префиксы браузеров -moz-, -webkit- и им подобные не любит валидатор. 2) http://jsfiddle.net/2zpm9mqa/ 3) http://jsfiddle.net/t5pmcLb5/1/ >из тегов можно использовать только <em> Это почему? При чем тут вообще em? Чтобы показать, что стили любого элемента можно переопределить? Не понял задание. 4) http://jsfiddle.net/frksyugb/ Чего мне jsfiddle подсвечивает красным закрывающие теги </div>? А, у них там принято писать <br/> под xhtml, поэтому разметка ломается. Не понял, как должен по заданию себя вести синий блок при малой ширине браузера. 5) http://jsfiddle.net/pnm2jrto/
>>525441 6) http://jsfiddle.net/8mk9bc62/ 7) Откуда-то берется один лишний пиксель. Пришлось поставить дробное число в паддинг. http://jsfiddle.net/3z6zpu9b/2/ 8) > верстка должна позволять без изменения CSS дописать или убрать любое число абзацев, списков, заголовков, картинок и примечаний Не понимаю, что имеется ввиду. Намек на выпадение плавающего блока? Решается заданием padding у параграфа. http://jsfiddle.net/vhm7wnh7/
Пагни, знакомлюсь с PHP по книжке Роберта Никсона "Создаем динамические вэб сайты с помощью..." и один пример у меня не работает :
?php function longdate($timestamp) { return date("l F jS Y", $timestamp); } ?> Аффтар грит, что функция должна вернуть дату в определенном формате, а у меня пусто (может пропущен echo или print в этом коде)?
>>525527 В коде описывается функция. Описывается, но нигде не вызывается. Сперва ты описал функцию, потом её надо вызвать, например хотя-бы так echo имяфункции(аргумент);
Я бы не сказал что они сложные для знающего JS программиста. Может просто к ним не прилагается уроков которые постепенно ко всему подводят? А ты читаешь учебник на learn.javascript.ru? В нем все что нужно для решения задач, объясняется.
>>525657 Ссылок на мануал будет достаточно. Я прочёл только первые три главы (Введение..Качество кода). Смог родить только вот что: https://jsfiddle.net/xc616ono/
Это чудо работает только если выполняются следующие условия: 1) у нас один генератор; 2) его имя "generator".
Также, придется прочитать про замыкания. Это немного сложно но ты ведь не полный ноль, ты php знаешь и тебе можно давать вещи посложнее чем новичкам: https://learn.javascript.ru/closures
Если кратко то в JS любая функция в момент создания захватывает (замыкает в себе) ссылки на переменные снаружи нее. Вот пример:
function createNewFunc() { var i = 5; // внешняя по отношению к testFunc переменная var testFunc = function () { return i; }; // создаем новую функцию return testFunc; }
var x = createNewFunc(); // в x лежит функция testFunc которая захватила ссылку на переменную i var y = x(); // вызываем функцию console.log(y); // 5
При этом разумеется в месте вызова функции переменная i не видна (так как это локлаьная переменная в createNewFunc):
console.log(i); // ошибка о несуществующей переменной
Прочти про замыкания и разбери этот пример.
То есть тебе придется пока начать с теории, прежде чем хотя бы первую задачу решить. Зато если ты это пройдешь то будешь хорошо понимать JS и он не будет вызыват удивления.
>>524590 >Кнопки ALL GRAPHIC ILLUSTRATION MOTION надо сделать нажимающимися, чтобы они сохраняли свое состояние. Готово.
>Код из блока style надо вынести в внешний css-файл и подключать через тег <link> Готово.
>Все картинки относящиеся к дизайну надо делать через background-image в CSS Готово.
>Имена классов мне не нравятся. Что за bool1? Давай нормальные читабельные имена вроде social-icons Заменил.
>Обычно через дефисы пишут идентификаторы в CSS Переделал.
>Тег b не используется так как внешний вид текста должен задаватся в CSS, а теги задают смысл этого текста. В днном случае текст это заголовок и должен использоваться один из тегов h1-h6 Переделал.
>overflow-x:hidden; Либо объясняй зачем это либо удаляй Весь контент сайта я сделал шириной 900px, с ноутбука спокойно могу увеличить масштаб до 150% (дальше уже никому и не надо). Но при 150% появляется нижний бегунок который переводит влево-вправо на пару пикселей которые даже незаметны. Вот я и убрал его чтобы при 150% он не появлялся т.к. по сути не нужен, а только мешает. Но все-таки убрал эту строку и вернул бегунок.
>Не пиши транслитом Все переписано, далее все буду писать на английском.
>Нужен @font-face инае шрифт не будет работать у тех у кого не установлен на компьютере. Посмотрел как его подключить. Нужно добавить в папку с сайтом папку шрифтов которая весит 1.2мб. Стоит ли того или я делаю что-то не так? Смотрел здесь http://fonts4web.ru/opensans.html
>Уже лет 10 можно вместо name просто приписвыать атрибут id к любому тегу. Старый учебник читал? Заменил где возможно. Осталось только это <input type="radio" name="button" checked="checked" id="button1"></input><label for="button1"><span class="button_all">All</span></label> Не понимаю как отсюда убрать name, т.к. без него крашится. Читал все в htmlbook.ru
>Капс лок надо делать не в тексте а через text-transform Переделал.
>В портфолио, лучше не делать по несколько копий каждой картинки, а помечать css классами к каким разделам она относится. Переделал.
>Почитай про clearfix и microclearfix hack Не понял в чем мой способ плох и вообще зачем так изворачиваться ради этой мелочи, ведь все и так работает.
Напомню, что загрузил все прямо на сайт maketi.esy.es
> Не понимаю как отсюда убрать name, т.к. без него крашится. Я говорил что тег-якорь <a name> устарел. Сейчас любой элемент с атрибутом id является якорем.
> <h2><span class="mw-headline" id=".D0.A3.D1.....D0.B9">Устройство и классификация якорей</span>
То есть id используется для обозначения якоря.
Сам атрибут name не устарел и в input конечно ничем заменить его нельзя и не требуется.
>>Почитай про clearfix и microclearfix hack > Не понял в чем мой способ плох и вообще зачем так изворачиваться ради этой мелочи, ведь все и так работает. Твой способ требует добавлять отдельный див. Клеарфикс позволяет просто добавить класс на элеиент чтобы тот охватывал (растягивался по высоте) все флоаты внутри него. Это достигается за счет создания в конце дива псевдоэлемента ::after со свойством clear: both. То есть тоже добавляется элемент с clear, но средствами CSS, не загрязняя HTML лишними служебными элементами.
Раньше, до CSS3, HTML был загрязнен всеми добавочными элементами. Например, чтобы сделать тень или скругление, часто в код добавляли кучу дивов:
Но с CSS3 большинство этих дивов не нужны и мы можем писать чистый HTML:
<h1>...</h1> <p>....</p>
То есть в данном случае способ с клеарфиксом предпочтительнее так как не требует загрязнять HTML лишними элементами. Ты дложен стремиться делать как можно более простой HTML, избегая оформления с помощью добавления лишних элементов.
Кстати, иконку адреса и телефона в подвале можно сделать через псевдоэлемент :before. Сделай-ка, ты же с ними знаком по предыдущим задачам, верно?
> Напомню, что загрузил все прямо на сайт maketi.esy.es Молодец, что так делаешь, удобно смотреть и проверять.
Кстати, говоря про добавочные элементы: в коде википедии спан это явно лишний добавочный элемент (возможно он для чего-то нужен). Чистый код выглядел бы так:
<h2 id="....">Устройство и классификация якорей</h2>
Ну и я тебе напомню что HTML служит для семантической (смысловой) разметки текста. А оформление дложно быть в CSS. Потому когда ты ради оформления (иконки телефона) добавляешь спан или див, это не очень правильно. Правильнее использовать только CSS. Понятно, что иногда без лишних элементов никак, но тут простая ситуация и они не нужны.
Если открыть инспектор в браузере (Ctrl + Shift + I) то можно увидеть что у тебя ссылки внизу криво спозиционированы. У ссылки есть активная невидимая область справа от кнопок (если навести мышь, она меняет форму). Это значит, ты что-то криво там сверстал, я как доберусь, посмотрю что именно.
А ты используешь робота-проверяльщика? Если используешь и обнаружишь что-то странное (например он принимает программу с ошибками) — пиши мне, я поправлю его.
>>525699 Да, я собирался его использовать, но только в том случае, если мне кажется, что написанная программа удовлетворяет условиям (а такого пока не было).
1) Оп, почему такая реализация избавления от пробелов не работает(код и результат на пикче)? Я подозреваю, что конструкция вида $text{$i} обращается к байту, а не к символу и по счастливой случайности половина строки действительно избавляется от пробелов. 2) Продолжаю натыкаться на разные интересные особенности php, вот например если создать массив вида: $arr = [1 => 3, '1' => 5], то будет создан массив с одним элементом 5 и ключом 1 типа int, тобиш '1' и 1 для массива одинаковые ключи как при создании так и при обращении.
> Я подозреваю, что конструкция вида $text{$i} обращается к байту, а не к символу и по счастливой случайности половина строки действительно избавляется от пробелов. Да. Символ пробела занимает ровно один байт и с ним код работает. Но чтобы удлить проблеы не нужен цикл, достаточно str_replace или strtr
> Продолжаю натыкаться на разные интересные особенности php, вот например если создать массив вида: $arr = [1 => 3, '1' => 5], то будет создан массив с одним элементом 5 и ключом 1 типа int, тобиш '1' и 1 для массива одинаковые ключи как при создании так и при обращении. Да. если строка-ключ выглядит как число то PHP преобразует ее в число. Иначе бы такой код не работал:
$a = ['1' => 'test']; echo $a[1]; // была бы ошибка
> Строки, содержащие целое число будут преобразованы к типу integer. Например, ключ со значением "8" будет в действительности сохранен со значением 8. С другой стороны, значение "08" не будет преобразовано, так как оно не является корректным десятичным целым.
> Числа с плавающей точкой (тип float) также будут преобразованы к типу integer, т.е. дробная часть будет отброшена. Например, ключ со значением 8.7 будет в действительности сохранен со значением 8
Ну и еще в цикле у тебя стоит mb_strlen которая возвращает число символов, а оно меньше чем число байт (кириллица = 2 байта) и ты в итоге проходишь только полстроки.
Чому все так плохо с utf-8 в пхп? И добавят ли его в php7 на уровне ядра? Я кстати, не совсем понял, что значит на уровне ядра, лол. Вот например вызвал phpinfo(), там есть раздел - mbstring. То есть это наше расширение для работы с мультибайтной кодировкой, support стоит в enabled, тобишь по умолчанию работает, у меня php 5.4, к слову. В чем отличие между "на уровне ядра" и в качестве врубленного по умолчанию расширения? Что мешает добавить функции mb_ в сам php? Или у них какая-то принципиально различная реализация?
В css есть селектор, который позволит выбрать только тот элемент, у которого есть определенный дочерний? Например <p>Раз</p> <p><span>Два</span></p> <p>Три</p>
Стиль нужно применить только к тому p, который содержит span.
Начал искать работу в Новосибе, чет все печально. Разослал вчера резюме куче фирм, большинство вообще еще даж не прочитало его еще. Несколько прочитало, но ничего не ответило. Одни ответили стандартным отказом, и лишь одни нормально ответили, что им нужен человек, который хорошо знает современный MVC-фреймворк. А я только начал Yii2 изучать. Кстати заметил, что почти все на первом yii сидят. Мне сразу учить вторую или все же первую выучить сначала? И какая между ними разница вообще?
Буду надеяться на то, что кто-нибудь из тех, кто еще не прочитал резюме возьмет.
Кстати посмотрел резюме своих "конкурентов", чет там вообще какие-то Васяны со знанием синтаксиса. Либо фирмы зажрались, либо я резюме как-то не так составил.
>>525879 Все эти джуниоры-миддлы от конторы зависят. В некоторых и на джуниора такое требуют, что сениор только знает, а в других на джуниора любого дауна берут, который видеолекцию php с ютуба посмотрел.
>>525881 Ну я тоже не понял, рассылал вроде одно и то же везде, в итоге в нормальную фирму взяли, в остальных всех отфутболили, даже в парашных. Видно от удачи зависит.
Ну я очень надеюсь на фирму НГС, которая еще мое резюме не прочитала. У них там вроде вполне демократичные требования. А знание Yii требовала Noveo. Вернее у них там это было "желательно" знать. Но судя по всему это "желательно" надо читать как "требуется".
>>525896 На джуниора же и были. Простые запросы с JOIN в mysql, на javascriptе аякс запрос написать, в jquery там элемент подвинуть, в PHP класс с конструктором и mvc паттерн, в таком духе.
Ну это все я знаю. Даже больше. Плюс есть пара проектов на гитхабе, написанных на MVC, один из них на фреймворке. Походу единственное, что мне не хватает это Yii. Но у меня сейчас нет возможности его учить, нужно ехать уже.
>Твой способ требует добавлять отдельный див. Клеарфикс позволяет просто добавить класс на элеиент чтобы тот охватывал (растягивался по высоте) все флоаты внутри него. Все понятно. Переделал, с технологией разобрался.
>Кстати, иконку адреса и телефона в подвале можно сделать через псевдоэлемент :before. Сделай-ка, ты же с ними знаком по предыдущим задачам, верно? Знаком, переделал.
>Напомню, что загрузил все прямо на сайт maketi.esy.es Молодец, что так делаешь, удобно смотреть и проверять. Надеюсь это был не сарказм, а то мне самому это удобно, я все сразу на сайт загружаю.
>Если открыть инспектор в браузере (Ctrl + Shift + I) то можно увидеть что у тебя ссылки внизу криво спозиционированы. У ссылки есть активная невидимая область справа от кнопок (если навести мышь, она меняет форму). Действительно были пробелы между блочными элементами. Переделал, теперь активные ссылки только на месте, но остались какие-то подозрительные полоски сбоку (которые как-то странно выделяются, по одной), но они безобидны и некликабельны.
Хотелось бы еще услышать ответ насчет @font-face, стоит ли загружать папку 1.2 мегабайта ради одного шрифта? http://fonts4web.ru/opensans.html
Так же еще возник вопрос насчет шрифтов. Выставляю все в px (например 16px) но при большом уменьшении масштаба текст явно становится больше, я не могу понять в чем дело. Скрины на пике. Как видно в 1 случае блоки с текстом становятся длиннее, а во втором строчка с адресом становится настолько большой, что вытесняет строчку с телефоном.
9) http://jsfiddle.net/9grpj1hf/ 10) Не имею понятия, как это решить. Например, сноска слева от курсивного текста должна ведь оставаться на той же высоте, что и текст, к которому она относится? То есть если текст переедет на новую строку при изменении ширины окна, то сноска должна быть всегда на том же уровне по вертикали. Напрашивается какой-нибудь ::before, но тогда вопрос, как зафиксировать положение этого псевдоэлемента по горизонтали. Как сделать полупрозрачную надпись на картинке, тоже не знаю. То есть непонятно как ее пристыковать к нижнему краю изображения. Если бы я знал хотя бы высоту этого блока, то мог бы использовать отрицательный margin. 11) http://jsfiddle.net/9tLfgyej/1/ Как-то коряво получается. Уголки вылезают наружу при выделении. Все-таки логичнее было бы использовать label с атрибутом for. Не понимаю, на каком основании это запрещено? Только чтобы сделать задачу "интереснее", или есть все же практические причины?
> Выставляю все в px (например 16px) но при большом уменьшении масштаба текст явно становится больше, я не могу понять в чем дело. Скрины на пике. Как видно в 1 случае блоки с текстом становятся длиннее, а во втором строчка с адресом становится настолько большой, что вытесняет строчку с телефоном.
1) в браузере может быть задан минимальный размер шрифта меньше которого он не уменьшается
2) шрифт в некоторых системах рендерится с привязкой к границам пикселей, соответсвенно при уменьшении масштаба он уменьшается непропорционально
Более того, один и тот же шрифт в разных ОС/браузерах рендерится чуть-по разному и там легко может набраться разница 1-2px на слово. Ты не должен делать какие-то предположения, что этот текст займет ровно стольуо пикселей, ты должен делать максимально надежную и прочную верстку.
label с атрибутом for доставляет небольшие неудобства когда ты не верстаешь инпуты руками, а например имеешь php код который их генерирует. В случае использования for мы должны правильно генерировать уникальные id, и заботиться чтобы они не сопадали.
Если ты верстаешь руками то
Впрочем, даже без for нам приходится беспокоиться об атрибутах name.
>>525930 >линии между кнопками почему-то двойные Поправил. https://jsfiddle.net/bc71zb8n/2/ Ты лучше подскажи общее решение, очевидно там неправильно из-за выпадающих уголков.
>>525928 Действительно есть какая-то граница. Крашится не постепенно, а с определенного момента уменьшения масштаба, при 50% и далее. При ширине 900, думаю, можно и не думать над этим, кому вообще нужно будет уменьшать ниже 450px, да и я так посмотрел, многие большие сайты крашатся подобным образом при сильном уменьшении масштаба.
>>525938 Решил проверить на всех установленных браузерах и вот какой результат. Есть предельно мелкий шрифт: Opera Yandex Chrome Отсутствует, а следовательно даже при уменьшении сайта до 1х1 пиксель все отображается абсолютно нормально: IE * Mozilla
>>525913 Может есть что годное почитать по ООП? как раз к нему преступаю. Статейки, ламповые бложики которые не кто не спалил, или годное чтиво про ООП но на примере другого языка?
Яваскрипт это ведь полноценный язык программирования как и PHP? Мне нужно учить его весь или только часть? Учитывая что язык программирования я выбрал PHP.
>>525982 Только часть. Обычно от PHP программистов не требуют полноценные тулы, использующие все фичи языка писать, достаточно простейших действий по манипуляции элементами и отсылке запросов. Часть пхпшников вообще одним jquery и готовыми тулами к нему обходится.
>>525992 Учи по w3schools сайту тогда, там в сжатом виде все, одни основы и с наглядными примерами. На learn.javascript.ru все более подробно и основательно разжевывают, но учить долго будешь.
>>526003 Все таки начал учить на http://learn.javascript.ru. Думаю разжевывание мне на пользу только пойдет. А насчет времени, ну по крайней мере до конца лета я собираюсь все по хардкору учить, как и CSS/HTML перед этим, тратя по ~10 часов в сутки. Ну а дальше как время свободное от универа будет, но думаю часов по 5 буду находить. И кстати, платиновый вопрос, при таком раскладе вообще долго я буду учить все это дело?
>>526007 >И кстати, платиновый вопрос, при таком раскладе вообще долго я буду учить все это дело? Зависит от тебя. От того, насколько ты обучаем. ОП называет примерные сроки 4-8 месяцев для нахождения работы джуном/стажёром в крупном городе.
Ты путаешь строку 'undefined' и значение undefined. Это кстати показывает почему лучше потратить чуть больше времени и почитать хороший учебник, а не прыгать по верхам.
>>526013 Все понял. Просто имею в запасе 2 года, пока учусь в универе гуманитарий, потом планирую переехать из своей мухосрани 250к в Питер. Судя по всему времени мне хватит. Желание учить программирование у меня действительно есть.
Раз никто не задает вопросы, пожалуюсь тут. У меня слишком громкие наушники. Я люблю слушать музыку негромко, чтобы она не отвлекала и уши не уставали, и этого непросто добиться. В системе у меня микшер стоит на нескольких процентах, и на сайтах я тоже ставлю громкость на минимум. Но у них (что ютуб, что вконтакте) такие крошечные полоски громкости что поставить нелольшую громкость сложно — ты либо ставишь ее на ноль, либо слишком громко. А в том же вконтакте вообще полоска микроскопическая. Причем, я подозреваю, они еще звук как-то вкручивают чтобы он был громче. Куда громче? Как же неудобно.
Пойду-ка лучше с торрентов что-нибудь скачаю, в плеере громкость нормиально регулируется.
>>526036 Как в гите откатиться на определенную версию (коммит) проекта? Допустим, у меня десять коммитов, и тут я обнаружил косяк, который пошел с девятой версии. Как откатиться на восьмую? (Гитбук читаю, дошел только до третьей главы пока) (и файлообменник мой проверь, блджад)
>>524520 https://github.com/nsdvw/file-sharing/blob/master/app/Model/Form.php Такую верификацию ты сам придумал, или где-то подсмотрел? Я сейчас тоже регистрацию делаю в файлообменнике, ОП все-равно пока ничего не проверяет, и встал вопрос верификации, я эту тему пока еще не вскрывал, пока только посмотрел твою, хотел узнать что ты на эту тему читал, откуда черпал информацию. Твое решение мне выглядит каким-то совсем непрозрачным
>>526064 Правила для проверки полей формы, заданные массивом, подсмотрел в yii. Велосипед с циклами для обхода этого массива изобретал сам. Хз, может и выглядит как говно, но по крайней мере хвалю себя за попытку вникнуть в принципы реализации таких штук.
> https://github.com/V3N0m21/Uppu3/blob/master/app/Resource/Comments.php#L47 > protected $fileId; Тут можно (и нужно) прописать связь с файлом. А в файле — обратную связь. Зачем нам id файла когда мы можем прописать связь и доктрина будет возвращать нам сущность-файл? Тогда мы сможем делать такие вещи:
Соответственно setFileId надо выпилить. Заметь, что в доктрине можно для установки связи вместо загрузки полноценного объекта использовать легкую Reference которая содержит только id и не обращается к базе при создании: http://doctrine-orm.readthedocs.org/en/latest/reference/advanced-configuration.html#reference-proxies (впрочем, это оптимизация которая очень редко когда нужна, в твоем случае не нужна).
> static public function saveComment($post, $em, self $parent = null) self в качестве тайп хинта точно работает? Это не будет воспринято как «объект класса self»?
> https://github.com/V3N0m21/Uppu3/blob/master/app/Resource/Comments.php#L121 > static public function saveComment($post, $em, self $parent = null) вот это неправильно. Комментарий не должен сам себя сохранять, у нас же data mapper.Сохранением занимается репозиторий либо класс-сервис. Если тебе нужны доаолнительные методы работы с базой, ты можешь сделать свой репозиторий, унаследовав стандартный:
Но в данном случае и это не нужно. Тебе надо отказаться от массиво-ориентированного мышления и вместо функции которая принимает массив создавать объект Comment в контроллере либо в хелпере.
То есть примерно так:
$comment = new Comment; $comment->... = $app->request->post(...); ...
if ($validator->isValidComment($comment)) { ... } else { ... }
Там кстати надо бы сделать нормальное добавление комментариев, с проверкой данных и выдачей ошибок. И наверно с аяксом, ты же изучаешь JS? Вот и сделай чтобы аяком отправлялся запрос на добавление комментария, запрос проверялся, и возвращались в JSON либо ошибки либо что все ок. При использовании аякса не забывай про такие вещи:
- индикация что идет обработка запроса, блокировка кнопки отправки на это время - обработка сетевых ошибок - возможность отправить запрос повторно при любой ошибке
Также можно добавить легкую клиентскую валидацию (вроде проверки что текст введен или проверки на длину) с помощью клиентской HTML5 валидации.
В случае отсутствия, ошибки загрузки или отказа JS либо должна быть возможность отправить форму комментария классическим способом, либо кнопки комментирования и форма должны быть скрыты.
Ну и аякс сейчас часто используется, тебе это пригодится. Если ты изучал jQuery, можно ее тут применить, можно без нее, на XMLHttpRequest и DOM.Если ты совсем JS не знаешь, то сделай отправку без JS, но с валидацией на сервере, как описано в моем уроке про формы.
Что с именами классов? Resource\File и Resourse\FileResource только путают. Я бы сделал папку Entity или Model для моделей. А остальное засунул в Helper.
Имена моделей обычно пишут в единственном числе, не Comments а Comment.Ведь у тебя в одном объекте хранится информация об одном комментарии.
> https://github.com/V3N0m21/Uppu3/blob/master/app/bootstrap.php Тут какая-то длинная простыня получается. Посмотри, может что можно вынести в отдельные функции (их можно определить тут же). Как минимум всю инициализацию доктрины стоит вынести в функцию чтобы не загрязнять глобальное пространство кучей переменных и избавиться от трудночитаемой простыни.
Также, пара замечаний по инициализации доктрины:
> $config->setAutoGenerateProxyClasses(false); Не уверен что тут нужен false. Ведь это значит что прокси-классы для моделей ты будешь генерировать сам, явно, командой. Я думаю удобнее разрешить генерировать их автоматически.
> $deleted = $cache->deleteAll(); Если ты хочешь откючить кеш, ты можешь просто к качестве драйвера указать ArrayCache (кеширование описано тут на англ: http://doctrine-orm.readthedocs.org/en/latest/reference/caching.html ). Также есть VoidCache который ничего вообще никуда не сохраняет.
Заметь что кеширование относится только к метаданным (распарсенным аннотациям) и DQL запросам, сами данные из базы доктрина не кеширует (и это хорошо).
в атрибутах {{ x | json_encode }} в теге script: {{ x | json_encode | raw }}
Кавычки не требуются.
> style="margin-left:{{ (comment.level -1) × 25 }}px;"> надо бы сделать ограничение отступа, чтобы комменты не уходили за правый край страницы на большой глубине.
Яваскрипт-код конечно у тебя нехороший, надо его переделывать нормально. Ну и HTML в строке это тоже изврат.
Кстати, тебе не обязательно иметь вторую копию формы. Ты можешь взять существующую на странице форму и переместить, если ты изучал DOM то метод appendChild переносит DOM-элемент в новое место:
var commentForm = document.getElementById(..)
function appendForm(...) { var comment = ...; comment.appendChild(commentForm); }
Если ты не изучал, то запиши себе на будущее разобраться с яваскриптом, потому что тут у тебя явные пробелы.
По CSS и JS, я советую не смешивать в одной папке твои файлы и файлы бустрапа. Внешние библиотеки лучше класть в отдельную папку и не трогать. Иначе замучаешься с обновлением, да и понять где чей код сложно.
Пока я сам файлообменник не смотрел, давай ты пока исправишь замечания. Если какие-то вопросы, уточняй, я более развернуто напишу.
Привет, ОП. Я снова запрострировал и забросил программирование. Мне очень тяжело даются сложные вещи, но я вновь готов их преодолеть. Я очень рад вновь оказаться в твоем треде. Я чуть не расплакался когда долго не мог найти его.
Прошлый раз мы с тобой остановились на задаче с кошками-мышками. Скоро я посмотрю код и напишу сюда что мне было так непонятно.
Надеюсь, ты не думаешь, что я легкомысленно отношусь к этому, напротив - мне очень важно знать программирование, и я очень ценю твою помощь. Просто иногда бывает очень сложно.
>>526075 Плохо понимаю. Скачал даже какой-то школьный учебник McKinlay S., Hastings B. - New Success - 2012 (Pre-intermediate и Intermediate уровни). Там есть аудио, упражнения на грамматику, вроде неплохо пошел.
Git-book не нравится, чувствуется что они старались как могли, но получилось как всегда, какая-то мутная хрень, и не документация, и не мануал.
Качнул несколько книжек, может какая-то из них пойдет. Ferdinando Santacroce | Git Essentials (2015) рутрекер. Судя по оглавлению, тоже сухое перечисление фактов, которые я видимо должен заучивать наизусть. Mike MqQuaid | Git in practice (2015) на трекерах не нашел, файлообменник http://nitroflare.com/view/B7637D869441A00/1617291978git.pdf Пролистал, вроде неплохо, автор даже снисходит до того, чтобы объяснять и показывать примеры.
Вот кстати, ты файлообменник доделываешь, самое время за HTML, JS и SQL взяться, если ты их еще не решал. Ну и далее фреймворки мучать.
Вообще, справедливости ради, выгоднее может быть сначала мучать Yii2 и симфони 2, а потом JS/HTML/SQL, так как на собеседовании это будет весомее, но ведь ты будешь ужасный код писать, будешь тратить много времени на отладку неработающих скриптов или верстки, это все равно надо знать. Мне не нравится когда люди хорошо пишут PHP код, но открываешь JS и там ужас какой-нибудь.
Ну а SQL тебе нужен в любом случае, даже чистые бекендщики хоошо должны его знать. И у нас есть задачки, помогающие в нем разобраться.
Цвет подчеркивания сильно не тот (там ближе к оранжевому). Верстаьщик не должен путать цвета и должен уметь пользоваться пипеткой или программой определения цветов.
Далее, если убрать width 500 и попробовать поменять ширину страницы то примечания слева съезжают. ПРоблема очевидно кроется в неправильном позиционировании:
> position: absolute; > right: 90%;
Нет никаких гарантий что 90% ширины страницы это нужная ширина. Это неправильное решение. Давай попробуем сначала словами сформуоировать, как должно быть?
Примечание должно правым краем почти примыкать к левому краю текста, то есть к линии расположенной на 90px от левого края
Как это реализовать? Я вижу 2 варианта:
- прижать правый край примечания к левому краю страницы c помощью right (оно станет невидимо), затем вытянуть вправо с помощью отрицательного margin-right. Этот трюк, использование right + margin-right часто исплоьзуется когда надо использовать и проценты и пиксели (например, центрирование). В новом CSS3 можно будет писать вещи вроде right: calc(100% - 90px) и трюк окажется не нужен. подробнее: http://habrahabr.ru/post/243821/
Пока это не очень поддерживается, так что применять пока не стоит.
- прижать левый край примечания к левому краю страницы. Сделать примечание фиксированной ширины (90px). Задать выравнивание текста в нем вправо.
Так вообще, пока неплохо. Я надеюсь в следующем задании ты познакомишься с фреймворком Slim и увидишь что он поудобнее твоего велосипеда. Ну и с шаблонизатором twig.
>Так вообще, пока неплохо. Я надеюсь в следующем задании ты познакомишься с фреймворком Slim и увидишь что он поудобнее твоего велосипеда. Ну и с шаблонизатором twig. То есть почти зачёт, после исправленных перечисленных тобой недочётов можно переходить к файлообменнику? Я уже и JS начал учить, хочу там всё с аяксом красиво сделать.
Вот я и до тебя добрался. Начнем с проверки HTML-разметки.
> <div class="header-words"> ><a class="header-word" href="HOME">Home</a> Традиционно меню делают с помощью списка ul/li (типа меню это список ссылок). Также, можно делать его через тег <nav>
> We are <b>Webpaint</b></div> Сейчас используют тег strong. Так как в HTML не должно быть кода отвечающего за оформление, то тег strong имеет значение «акцентированный текст»: http://htmlbook.ru/html/strong
> class="button1" Лучше сделать нормальное имя без цифры, например large-button
> <div class="pic-android"></div> Я думаю этот пустой див можно либо заменить на padding + backgorund либо (если используется спрайт) на псевдоэлемент. А класс обозначающий картинку перенести на родителя.
> <b>Consectetur</b> Это подзаголовок
> <h1>Our Features Works</h1> h1 это единственнвй и главный заголовок. Тут явно заголовок второго уровня (так как он описывает не всю страницу а только секцию на ней). Я думаю, на этой странице главный заголовок это «We are Webpaint».
> <p><a id="link_portfolio"></a></p> P значит абзац текста. Текста тут нет значит и p быть не должно быть. А атрибут id можно повесить на <section class="portfolio-buttons-and-works"> где ему самое место.
> <input type="radio" name="button" checked="checked" id="button1"></input> У input нет закрывающего тега.
> <a href="#" class="all graphic"> all наверно можно не писать, если оно у всех картинок есть?
> <h4>Vestibulum id ligula porta felis euismod semper, malesuada euismod.</h4> А вот это как раз обычный текст, по моему. Теги обозначают именно смысл текста в них. Ты не должен пытаться использовать h4 и h5 для задания размера шрифта. Это говорит о том что ты не очень пока понял смысл HTML-разметки.
> <a href="#rss"><div id="rss"></div></a> Див-то зачем? И без него наверно можно сделать ведь? Опять же, я бы сделал тут списком, но можно и просто теги <a> поставить. Вместо id лучше использовать класс так как они удобнее и их можно повторять.
> <h5>@ 2013 Webpaint. All Rights Reserved.</h5> Это не заголовок. hN это не тег для задания размера текста.
Теперь перйдем к CSS. Начнем с вопроса про шрифты.
Подключать их можно 2 способами: вручную (рекомендую, чтобы получше разобраться) и через Google Fonts (слишком просто для учебного задания).
Как видишь синтаксис получается непростой, так как разные браузеры используют разные форматы шрифта, а старый ИЕ вообще не умеет выбирать из нескольких вариантов и нам приходится его обманывать.
Вот тут информация про поддержку браузерами разных форматов шрифтов:
Заметь что там можно вырезать из шрифта лишние символы и сильно уменьшить его вес. Также этот сервис генерирует CSS для подключения шрифта. Попробуй им воспользоваться. Имей в виду что для генерируемого пользователем контента (комментарии) трудно угадать какие символы можно вырезать. Но у нас этой проблемы нет.
Также, тебе не нужен весь мегабайт шрифтов. Тебе нужны толкьо те начертания (того веса и наклона) которые реально используются на сайте. Особое внимание удели весам. Open Sans имеет по моему 5 или 6 вариантов разного веса (вес это степень жирности букв) и тебе надо выбрать правильные: https://www.google.com/fonts/specimen/Open+Sans
Имей в виду что не все шрифты можно свободно распространять. Не скачивай пиратские шрифты, особенно если работаешь с иностранными заказчиками. Вот к примеру одна российская студия преследует тех кто использует ее шрифты: http://www.artlebedev.ru/studio/legal/ Шрифты на Google Fonts разрешены к бесплатному использованию и с ними проблем быть на должно.
Для проверки что шрифт загружается из сети, ты можешь заменить его имя (временно) в CSS например на OpenSans2.
Также не забудь определить на html основной шрифт страницы (включая размер и цвет). Основной шрифт это шрифт которым набирается обычный текст, например статьи. Определяя его на html, ты тем самым задаешь его по умолчанию для всей страницы.
Что у тебя за странные отступы перед селектором в CSS? Обычно пишут так:
.class { ....x: y; }
Или так:
.class { x: y; w: z; }
Также, сохрани css файл в utf-8.
> header { > width: 100%; > min-width: 900px; У блочных элементов ширина 100% по умолчанию. min-width лучше указывать на html, чтобы это действовало на всю страницу а не на отдельные части
Насчет ширины — давай сделаем так. На совсем узкой странице пусть допустим ширина серединки будет 900px + 10px поля с краев. На более широкой странице ширина середины увеличивается до 1100px, а дальше растут уже поля с краев. Это достигается с помощью min (на html) и max-width (на wrapper).
Также, чтобы научиться адаптивному дизайну, попробуй сделать версию страницы для малекнькой (<= 800) ширины, когда страница перестраивается в виде вертикальной цепочки из блоков. Такие страницы удобно смотреть на смартфоне например. Для этого надо использовать media queries и @media. После того как это сделаешь, добавь meta viewport чтобы мобильные устройства знали что страница под них оптимизирована и не отображали ее в уменьшенном виде.
Для лого можно объединить теги div и a.
При наведении на меню оно окрашивается в какой-то не очень подходящий красный цвет. Я думаю, оттенок красного лучше взять с кнопки. Или хотя бы сделать его более светлым, он же на темном фоне.
> .top-dark-gray-block { > height: 350px; Старайся указывать как можно меньше фиксированных размеров. Идея CSS в том что мы стараемся все, что можно, определять автоматически. Тут высота блока должна определяться по содержимому + паддинги сверху и снизу.
Ну и править код в котором нет фиксированных размеров, тоже проще выходит.
> .first-line-top-dark-gray-block { > width: 900px; Вот это плохо, что ты копипастишь эти width 900px. Ты представляешь сколько труда придется приложить чтобы поменять это? Убирай-ка эту копипасту. Тем более, блочные элементы по умолчанию занимают всю ширину родителя и писать width тут вообще не надо. Почитай-ка: http://softwaremaniacs.org/blog/2005/08/27/css-layout-flow/
Логотип у тебя по моему меньше чем в макете. Кнопка See Portfolio не соответтвует размерами макету, возможно из-за отстутствия шрифта у меня.
> .first-line-top-dark-gray-block Вот это все равно плохое имя для класса. Неправильно в общем называть классы по внешнему виду. Ведь при редизайне они потеряют свой смысл. Достаточно добавить одну строку и first-line перестанет быть first. Надо давать такие названия: top-menu, jumbotron (блок с большим текстом), advantages, advantages-block (блок с 4 колонками), portfolio, portfolio-categories, portfolio-item. Это делает твой код долговечнее и читабельнее.
> box-sizing: border-box; Для расширения охвата браузеров добавь версии с вендорными префиксами, -webkit-box-sizing и -moz-box-sizing. Аналогично с border-radius и transition.
Например старый фаерфокс (до версии 29) не понимает box-sizing, а -moz-box-sizing должен понять.
> width: 25%; Если будешь делать 3 колонки помни про округление и что в итоге ширина в сумме может получиться больеш 100%
Проверь отступы. На макете например под 4 колонками есть паддинг снизу, пикселей 70-80, у тебя нет.
text-before-portfolio и portfolio-buttons-and-works это одна секция, не две.
Далее, вот этот вот элемент: <label for="button1">. Открой инспектор (ctrl + shift + i) и посмотри какую область он занимает на странице. Это происходит потому что это у тебя на дочернем элементе стоит margin-left 200px. Кстати, это тоже ошибка. Кнопки надо центрировать, а не подбирать отступ на глаз, который развалится как только мы добавим еще кнопку или поменяем текст. Вряд ли твои коллеги будут рады этому.
Тут надо просто сделать блок с text-align center, а внутри кнопки сделать инлайн-блоками. Чувствую, у тебя тут пробелы в знаниях имеются.
Почему инлайн-блоки, а не инлайн элементы? Потому что сейчас у тебя label по высоте меньше чем кнопка.
> border: 1px solid #FF6760; по моему тут проще вообще отключить бордер
> transition: 0.5s; Укажи анимируемые свойства явно.
> line-height: 3; не очень понятно зачем тут это если есть паддинг
> input:nth-of-type(1):checked + label > span, .portfolio-buttons-and-works > input:nth-of-type(2):checked + label > span По моему тут не нужны nth-of-type.
> input:nth-of-type(1):checked ~ .all, .portfolio-buttons-and-works > input:nth-of-type(2):checked ~ .all.graphic Я думаю вместо номеров удобнее и читабельнее исплоьзовать класс на инпуте, например portfolio-btn-all:checked
> .work { > width: 225px; > float: left; Флоат по моему правильнее применять не к картинке а к ссылке, а то как-то странно, ты флоатом вырываешь картинку из содержащего ее инлайн-элемента. Ширину картинки можно задать в HTML, чтобы браузер до ее загрузки знал ее размер.
> font-size: 0; Что за грязные трюки?
Социальные иконки надо выводить без img. Ты просто выводишь ссылки в виде квадратиков, и им задаешь background с отрицательным отступом, почитай:
При создании спрайтов оставляй отступы между картинками, так как при изменении масштаба браузер округляет размеры и может захватить кусочек соседней картинки.
Также для них надо сделать эффект при наведении. Например потемнение или осветление.
> #bottom-dark-gray-block-h5-1:before { > content: url(../img/kap.png); Эти мелкие иконки тоже надо засунуть в спрайт. И темные иконки с андроидом в блоке преимуществ тоже в спрайт.
> .social-icons { > margin-left: 365px; Используй text-align для центрирования.
> <a href="#rss"><div id="rss"> div можно выпилить. Ты всегда можешь сделать <a> блоком или инлайн-блоком или чем угодно.
У тебя есть скругление при наведении на картинку портфолио. Но там какое-то странно скругление, как будто оно обрезано как-то.
> То есть почти зачёт, после исправленных перечисленных тобой недочётов можно переходить к файлообменнику? > Я уже и JS начал учить, хочу там всё с аяксом красиво сделать. Исправь замечания и сдай снова на проверку. делать файлообменник можно не дожидаясь меня. Аякс будет на файлообменнике (добавление комментария).
Тебе нужен белый (выделенный) IP от провайдера, кроме сервера дома. Проще наверно найти платный или бесплатный хостинг, их очень много и выбор большой. Закачать туда свои файлы. Ну и купить домен или взять бесплатный или пользоваться тем который дает хостинг.
Провайдерское оборудование увидит другой мак, подумает что это кто-то подключился к твоему каналу или ты перепродаешь интернет (бред конечно) и отключит тебе интернет на всякий случай.
> У тебя в универе была высшая математика? Что, сразу после лекций гнали на экзамен решать интегралы? Или может все-таки были практические занятия? По моему только лекции + экзамен потом. ПРичем лекции такие что все равно надо самому разбираться.
Насчет практических занятий, они у нас есть: задачки. Теория у нас тоже есть. А видеокурсы — это то же самое что сидеть и подглядывать как старшекурсники решают уравнения.
Я считаю видеокурсы хорошо подходят для профессий где надо просто смотреть и повторять, например охранник, рабочий на конвеере, рабочий-строитель. Но не для программиста. Это несерьезно. Важно понимать что делает тот или иной оператор или функция, а не как его набирать в текстовом редакторе и куда нажать мышкой.
> Но видеокурсы делают не для программистов, а для тех, кто хочет им стать, но не написал за всю жизнь ни строки кода, и не имеет ни малейшего представления о программировании И рискует им так и не стать.
> Посмотреть, как оно работает, получить общее представление, и уже за подробностями лезть в ублюдочную техническую документацию, которую как я начинаю подозревать пишут даже не люди, а генерируют боты. Это приемлемо.
>>526186 >>526187 Спасибо за подробное объяснение моих ошибок, с завтрашнего для буду все исправлять. Сегодня и так 14й час за ноутбуком сижу. О Боги, да здесь же работы на годы! Все больше накатывает чувство стыда от того, что мой друг студент-программист сказал, что этот макет отнял бы у него максимум 4 часа.
> что такое "открытые системы", Это концепция что устройства разных производителей можно подключить к одной сети. Сейчас это кажется естественным и очевидным, но в 70-х каждый производитель компьютера изобретал свои форматы файлов, форматы дискет, свое сетевое оборудование, свои разъемы, свои клавиатуры, свои принтеры. И сам писал программы к своему компьютеру. Потому современному человеку не очень понятно что значит «открытый» и как может быть по-другому. Это как если бы например пользователи айфонов сидели в одном интернете, а поьзоатели андроидов в другом.
«модель» здесь значит «описание». «модель взаимодействия открытых систем» значит описание принципов, как устройства и программы разных производителей могут работать в одной сети.
Задачу про номера телефонов надо проверить на большом числе телефонов, чтобы убедиться что твой код правильный. Но руками подставлять номера — долго и скучно. Пусть работает робот, а не человек!
Для этого давай добавим в программу тесты, чтобы сразу было видно, верно все работает или нет. Сделай 2 списка номеров (правильные и нет), добавь их в программу и напиши цикл, который их по очереди прогоняет через регулярку и проверяет что они определяются как надо (если нет — надо вывести какой именно номер не распознается правильно).
Насчет первой задачи, я сам смотрю на нее и не очень понимаю почему там например написано 34% - 10. Мне кажется там должно быть 34% от внутренней ширины без учета полей. Вообще это была задача на знание того как у блоков вычисляется ширина auto и как их можно прижать влево/вправо маргинами.
> Вариант 1 с дивами-обертками: Ок, будем считать что верно.
> Вариант 2 с box-sizing: А на что влияет box-sizing? Он никак не взаимодействует с margin и учитывает разве что 1px у бордера, то есть практически не влияет на верстку.
> потому что префиксы браузеров -moz-, -webkit- и им подобные не любит валидатор. Охват браузеров все же важнее валидатора, да и код с одним дивом лучше чем с двумя.
Но валидатор может помочь найти ошибки в твоем коде и потому полезен.
> http://jsfiddle.net/2zpm9mqa/ > font: 14px/1.2 #000 arial; В конец списка шрифтов надо писать стандартный sans, sans-serif, monospace или cursive для тех у кого нет ариала.
> ? А, у них там принято писать <br/> под xhtml, поэтому разметка ломается. Ага до сих пор в параллельной реальности (в которой используют XHTML) живут
> Не понял, как должен по заданию себя вести синий блок при малой ширине браузера. Занимать все доступное место по ширине, как у тебя и сделано
> .menu li { > list-style-type: none; Это можно поставить на ul, оно наследуется
> По умолчанию > margin-before: 1em; > padding-start: 40px; Более того, раньше ИЕ использовал для отступа одно свойтво, а остальные браузеры другое.
> .menu a:visited, > color: inherit; Не уверен что это хорошо, ты отключаешь одну из удобных функций, возможность видеть где ты уже был. Хотя в меню иногда так делают, не уверен что это удобно.
> Тут должен начаться педантичный холивар, > какой способ лучше использовать: паддинги, > overflow или clear. Паддинги не удерживают флоаты, оверфлоу не для этого и имеет побочные эффекты в виде обрезания всего что выходит за края, потому наш выход это клеарфикс:
Заметь что эта штука там для благих целей: показывать выделенную кнопку. Но верстку может сломать.
Дробные числа не советую, разные браузеры округляют по разному, это лишние проблемы на твою голову: http://habrahabr.ru/post/31392/
Суть этого задания дать понять что инпут и кнопка используют разный box-sizing (что интересно так было всегда даже когда этого свойства не было. Несколько лет назад у меня не получалось сделать форму ровной, я начал мерять размеры элементов и обнаружил этот факт)
Надо для кнопки задать высоту. У тебя она не задана и в разных браузерах может получиться разной.
Между кнопкой и инпутом больше чем 10px
> 8 задача > верстка должна позволять без изменения CSS дописать или убрать любое число абзацев, списков, заголовков, картинок и примечаний Один анон сделал классы .note1, .note2 пришлось добавить намек что блоков может быть больше.
> Не понимаю, что имеется ввиду. Намек на выпадение плавающего блока? Это значит что если мы засунем туда стандартный текст вида
Твой вариант не пожойдет, так как с ним кто-то должен сидеть и руками переделывать все теги в тексте. А нам надо просто чтобы мы могли вставить в текст див с классом и получить примечание.
Почитай также подсказки к задаче.
> <div class="paragraph"> Ты только что изобрел тег <p>. Зачем?
> Решается заданием padding у параграфа. Нет, padding добавлять надо на контейнере или body. Иначе он будет применяться не ко всем тегам в содержимом.
Это кстати пример бардака, терминалы находятся в одной сети с кучей других устройств. Не знаю, банкомат это или просто терминал для оплаты но это пренебрежение всеми нормами безопасности. Достаточно «Вовану» скачать троян на комп и его автор получает доступ ко всем терминалам.
> Я кстати, не совсем понял, что значит на уровне ядра, лол На уровне ядра — значит все функции (их в PHP очень много, сотни) работы со строками правильно режут строки на буквы.
Сейчас PHP не поддерживает специально никакие кодировки а строки рассматривает как набор байт (то есть абстрактных чисел), а не букв. Строки в памяти хранятся в том же виде и кодировке, в какой вписаны в коде. strlen возвращает число байт в строке. Урок: https://gist.github.com/codedokode/ff99e357e9860ea169b8
Более того, разница будет например при сравнении строк. Сейчас строки сравниваются по кодам символов и например буква «ё» меньше чем «а» так как идет в юникоде раньше. Вот мой урок про сравнение строк: https://gist.github.com/codedokode/ea09d0224a4df0c4442f
Как видишь, там много разных интересных особенностей.
Сортировка тоже сейчас работает не по алфавитным правилами, а по значениям байтов, которые не для всех языков и букв идут в нужном порядке (для латинницы в английском работает).
PHP сам не знает какую кодировку ты используешь для программы. Это нигде не задается. Если у тебя все в utf-8, все хорошо. Если не все в utf-8 — начинаются проблемы и необходимость ставить барьеры для перекодировки, и легко сделать где-то ошибку.
Как я помню, поддержка требовала перелопатить весь код php и от нее отказались в итоге.
Другие языки, напрмер, JS, java, python, знают в какой кодировке они хранят строки.
> В чем отличие между "на уровне ядра" и в качестве врубленного по умолчанию расширения? У тебя правильно со строками работают толко mb функции, а все остальные — нет.
> 9) http://jsfiddle.net/9grpj1hf/ > <div class="clear-dummy"></div> Сделай-ка это клеарфиксом, как написано в подсказке под задачей, чтобы не полдить лишние дивы.
> font-size: 14px; Вместе с font-size указывай line-height
> <div class="description"> Я думаю, тут можно обойтись без этого дива. Попробуй его убрать.
> 10)
> Если бы я знал хотя бы высоту этого блока то это было бы задание не для нашего треда, а для /web
> Напрашивается какой-нибудь ::before, но тогда вопрос, как зафиксировать положение этого псевдоэлемента по горизонтали. Абсолютное позиционирование без указания top/bottom. Если не укзать положение то элеимент располагается там же где он был бы в потоке.
> То есть непонятно как ее пристыковать к нижнему краю изображения Абсолютное позиционирование конечно
Кстати, раз ты не смог с первого раза сделать задачу, тебе дополнительное задание: сделай чтобы при наведении мыши на картинку надпись плавно сворачивалась, а при уведении восстанавливалась. Тебе поможет transition.
> input[type="radio"] { > display: none; Это влияет на все кнопки на странице. Сделай чтобы действовало только на кнопки внутри твоего виджета иначе его нельзя добавить к существующей форме.
> Уголки вылезают наружу при выделении. Ты поверх скругленного label выводишь квадратный серый span вот он и закрывает уголки. Увеличь масштаб и увидь.
Ну и пока у тебя не очень похоже на рисунок, паддингов не хватает по горизонтали, тесно, тени нет на выделенной кнопке.
> Все-таки логичнее было бы использовать label с атрибутом for. Чем логичнее? Лишний код писать надо.
У меня без. Кстати, интуиция подсказывает мне, что ставя громкость программно (а не аналогово) на минимум, я уменьшаю динамический диапазон и качество звука. Но уши мне ороже.
Ну так одно дело когда ты делаешь в первый раз, другое дело когда не в первый. и одно дело когда делаешь для не знающего HTML заказчика и совсем другое дело — для нашего треда.
Я все же решил перекатиться в существующий тред. да, там много троллей, но ведь есть добропорядочные аноны, которые пришли учиться, которые решают задачки и задают вопросы, и мы не можем бросить их. Потому телепортируйтесь за мной: >>526228
>>526200 >не работает font: 40px/1.5 #333 "Times New Roman"; >потому что нельзя указывать цвет в font Что? А почему тогда работает font: 14px/1.2 #000 arial; ? Ну ладно, мне все равно привычнее писать правила по-отдельности: font-size, font-family, line-height и т.д.
Вопрос не по теме: я недавно пересел на эту вашу убунту, и последнее время стал дико тормозить то ли рабочий стол (xfce), то ли проводник (thunar, иногда вылетает, особенно если быстро кликнуть несколько раз кнопку переходу в папку выше). Может кто сталкивался, как там его лечить. Потому что кликаю правой кнопкой по значку на рабочем столе, и жду секунд пять, пока появится контекстное меню. Винчестер скрипит в это время, будто я запускаю yoba-игру.
Реквестирую топовые гайды или хотя бы годные по yii2(начиная с mvc и т.д). + Плейлисты на ютубе. Если не ответят, в следующем треде задам этот же вопрос. Спасибо
>>526456 Нету таких, сами в ахуе. Читай руководство, смотри код демок, которые идут вместе с фреймворком. Поищи простые проекты на гитхабе, написанные на yii.
Пагни в задании опечаточники как сделать всё как на картинке?7 Ну чтоб выводилось слово в котором произошла замена буквы и эта буква выделялась. У меня просто находит две буквы одна инглиш другая русская.
Всем привет. Я тут новенький, не кидайте ссаными тряпками. Погружаюсь в SQL, решаю задачки на sql-ex.ru Теория там написана сложным для меня языком, наверно я дебил, и она в большинстве случаев мне не помогает. Сейчас решаю задачу, видел, что некоторые запихивают в FROM скобки с SELECTом. Почему при таком вложении возникает ошибка? Где вообще почитать правила вложения в FROM? В примере я пытаюсь присвоить переменную avg_p первым скобкам и avg_l вторым чтобы позже сложить SUM'ом значения из этих двух переменных в одну. Если интересно, это задание №26 с вышеупомянутого сайта.
SELECT SUM(AVG_Price) FROM ( SELECT AVG(price) AS AVG_Price FROM pc p JOIN product pr ON p.model=pr.model WHERE maker='A') avg_p, (SELECT AVG(price) FROM laptop l JOIN product pr ON l.model=pr.model WHERE maker='A' ) avg_l
No column name was specified for column 1 of 'avg_l'.
Почему PHP? Потому что фейсбук и википедия на нем написаны, и вакансий море, и учить легко.
Это тред для начинающих. Не написал за свою жизнь ни одной программы? Ты наш человек.
Устанавливать пока что ничего не требуется, разве что редактор кода вроде Sublime Text 3, Notepad++, Netbeans PHP или PhpStorm (с ним будет удобнее).
Предыдущий тред был тут:
Что самое главное для программиста? Умение аккуратно оформлять код (читай второй пост).
Правила: ведем себя воспитанно, помогаем новичкам, постим ссылки на решения задачек, ОП их проверяет и дает советы и замечания. ОП отвечает даже на самые нубские вопросы. ОП заходит где-то раз в день-два, не жди его, решай задачки дальше.
У нас есть уроки по основам PHP, они собраны и выложены по адресу http://archive-ipq-co.narod.ru/ Это учебник для изучающих с нуля, то есть если ты вообще ничего не знаешь, то надо начать с него. Он простой и понятный (по крайней мере в начале). Там есть задачи, их надо решать обязательно (чтобы стать программистом, надо писать код — иначе никак). Пости ссылки на решения в тред, мы их проверим, напишем замечания и дадим советы по улучшению.
Если не знаешь как решать, запости код, напиши в каком месте остановился и попроси подсказку.
Учебник дает основы языка PHP, но чтобы делать сайты, этого недостаточно. Если ты его прошел, то надо переходить в более серьезным задачкам, которые научат тебя как выдавать страницы в браузер, работе с таблицами в БД, работе с формами, MVC.
- Простая, но полезная задача сделать список студентов: https://github.com/codedokode/pasta/blob/master/student-list.md
- Более сложная задача сделать файлообменник на микрофреймворке Slim: https://gist.github.com/codedokode/9424217
- Еще более сложная и долгая задача на Yii/Yii2: https://gist.github.com/codedokode/8733007
- После нее можно изучать автоматизированное тестирование
- Если ты все решил, переходи к Symfony 2/Doctrine 2
Чтобы делать эти задания, тебе надо установить Апач + PHP (можно заодно сразу и MySQL) на компьютер. Вот полезные инструкции:
https://gist.github.com/codedokode/10774100
https://gist.github.com/codedokode/7054af4a03865c4cc863
Может тебе понадобится пользоваться командной строкой, вот гайд https://gist.github.com/codedokode/10539568
Вот небольшой туториал по тому как начать использовать PHP на сервере для отдачи странички в браузер: https://php.net/manual/ru/tutorial.php Увы, уроков плавно подводящих к тому, как сделать задачи выше, пока нет, так что если что, задавай вопросы.
Решения задач лучше показать мне, особенно на ООП,так как сам ты вряд ли увидишь все ошибки. Пости свой код на гитхаб и вкидывай ссылку в тред по мере решения. Я прокомментирую и укажу на ошибки.
Также, у нас есть задачи которые позволят тебе изучить или подтянуть до нормального уровня знания JS/HTML/CSS/SQL. Решай их параллельно с задачами выше.
- HTML/CSS: https://gist.github.com/codedokode/58ebc90bd006baf4b35c
- JS: https://gist.github.com/codedokode/ce30e7a036f18f416ae0
- Проверялка решений на JS: http://dkab.github.io/jasmine-tests/
- MySQL: https://gist.github.com/codedokode/10539213
Что почитать
- Мануал по PHP — http://www.php.net/manual/ru/langref.php
- Сайт phptherightway (перевод на русский: http://getjump.github.io/ru-php-the-right-way/ )
- По PHP: Профессиональное программирование на PHP Джордж Шлосснейгл
- По PHP: Мэтт Зандстра — PHP: Объекты, шаблоны, методики программирования
- JS: learn.javascript.ru
- Про Git:
Подскажи сайты для поиска работы, я не умею гуглить? brainstorage.me, geekjob.ru, hh.ru
Нужен ли ООП, фреймворки, MVC? — Да, однозначно. Посмотри любую вакансию.
Сайт опять упал!!!!! — Не паникуй, а открой http://rghost.net/45000175
Оформляй код аккуратно!!! — например пропусти через phpformatter.com . Также, если ты пользуешься IDE вроде PhpStorm, Netbeans, Eclipse, то в них эта опция встроена, подробнее: https://gist.github.com/codedokode/8759492
ОП, сделай за меня мою работу или домашнее задание? — Это конечно, хорошая идея, но нет.
Где искать работу и заказы — hh.ru, geekjob.ru, brainstorage.me, fl.ru, odesk.com. Имей в виду, что кроме фриланса есть еще постоянная удаленная работа (remote job) когда тебе не надо тратить время на поиск заказов и переговоры с неадекватными заказчиками.