Сохранен 735
https://2ch.hk/pr/res/531765.html
24 декабря Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!

Клуб любителей изучать PHP 57

 Аноним 17/08/15 Пнд 23:12:30 #1 №531765 
14398423505680.png
14398423505691.jpg
14398423505722.jpg
14398423505773.jpg
Добро пожаловать в наш уютный тредик. Тут мы изучаем язык PHP (а также JS/CSS/HTML/SQL), решаем задачки и даже делаем простые сайты! Зачем? Кто-то хочет научиться программировать, кто-то - делать сайты, кто-то - просто размять мозги и заняться чем-то полезным.

Почему PHP? Потому что фейсбук и википедия на нем написаны, и вакансий море, и учить легко.

Это тред для начинающих. Не написал за свою жизнь ни одной программы? Ты наш человек.

Устанавливать пока что ничего не требуется, разве что редактор кода вроде Sublime Text 3, Notepad++, Netbeans PHP или PhpStorm (с ним будет удобнее).

Предыдущий тред был тут: >>523494 (OP)

Что самое главное для программиста? Умение аккуратно оформлять код (читай второй пост).

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

У нас есть уроки по основам 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) когда тебе не надо тратить время на поиск заказов и переговоры с неадекватными заказчиками.
Пиши верно Аноним 17/08/15 Пнд 23:13:53 #2 №531766 
14398424335070.png
14398424335081.jpg
А ну стой, злодей! Код нужно писать не как попало, а аккуратно и по правилам. Почему? Потому, что на неакуратно написанный код не хочется даже смотреть.

Если тебе лень выравнивать код руками, закачай его на http://beta.phpformatter.com/ и нажми «format». Робот исправит выравнивание и отступы в мгновение ока (да, прогресс не стоит на месте). Если ты используешь мощную IDE вроде PhpStorm, там тоже есть функция форматирования кода.

Горячие клавиши для форматирования кода в разных IDE: https://gist.github.com/codedokode/8759492

Вообще, в 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 пробела)

Вот ссылка на стандарты, где все это описано подробнее и даны примеры оформления:

PSR-1: https://github.com/php-fig/fig-standards/blob/master/accepted/ru/PSR-1-basic-coding-standard.md
PSR-2: https://github.com/php-fig/fig-standards/blob/master/accepted/ru/PSR-2-coding-style-guide.md


------------------

Итак, ты зашел в тред и решил помочь какому-то анону, дав ему совет или подсказку. Спасибо! Но прочти сначала эти напоминания, чтобы твоя помощь действительно была полезной.

Будь доброжелателен

Не годится: «Ты мануал хоть раз в жизни открывал, обезьяна?»
Не годится: «В гугле забанили?»
Не годится: «Твой код плохой»
Хорошо: «Вот, как можно улучшить этот код: ...»
Хорошо: «Ты неправильно используешь функцию abc(). Вот ее описание: ссылка, и как видишь ей надо передать строку, а не массив»

Объясняй

Не очень хорошо: «сделай как в этом коде»
Хорошо: «если ты вставляешь текст от пользователя в SQL запрос, то получается SQl-инъекция, которая позволяет взломать твой сервер (ссылки). Чтобы этого избежать, надо вставлять данные с помощью плейсхолдеров (ссылки)»
Хорошо: «Помни, что код пишется для людей. Если писать такие большие функции, то в них становится трудно разобраться...»

Не проповедуй

Мы учим использованию самых распространненных подходов, стандартов, библиотеки фреймворков. Если ты не любишь ООП, пробелы в коде, jQuery, сам PHP, то рассказать об этом стоит в каком-нибудь другом треде.

Ах да. Если тебе кажется, что что-то в учебнике или задачах можно сделать лучше — пиши, обратная связь всегда очень полезна.
Аноним 17/08/15 Пнд 23:21:12 #3 №531771 
Напомню себе проверить решения:

>>531680 https://github.com/MindiMakridi/RESTFUL задачка на превьюшки.
>>531566 maketi.esy.es
>>531508 https://github.com/never3ver/vector
>>531386 http://ideone.com/4t6fb2 номера телефонов
>>531338 посоветуй сайт на Юи
>>530370 абитуриенты https://github.com/blackberryJam/abiturients

И есои я про кого-то забыл, напомните о себе плиз.

Аноним 18/08/15 Втр 00:37:54 #4 №531815 
>>531771
Задание на yii снимается.
Я сначала сделаю какой-нибудь примитив, например сайт для объявлений. Просто набить руку, чтобы легче ориентироваться в api.

А потом так и быть возьмусь за задание с тестами. Его кстати кто-то вообще делал? Я где-то полгода мониторю тред, еще не видел чтобы кто-то брался.
Что там за "подводные камни"? Ты лучше сразу скажи, мне очень важно прикинуть время, которое у меня это займет.
Аноним 18/08/15 Втр 00:38:29 #5 №531817 
Анон спрашивал про ООП.

>>531797

Приведу тебе пример ООП подхода. Допустим мы хотим сделать программу которая ведет список сотрудников в компании, кто на какой должности, кто сколько зарабатывает. Мы делаем класс Сотрудник и описываем, какие у него есть свойства: имя, фамилия, должность, зарплата, находится ли в отпуске или на работе.

Затем мы добавляем методы, то есть функции, позволяющие делать что-то с сотрудником, например повысить зарплату, уволить, отправить в отпуск, вернуть из отпуска. Эти методы меняют свойства объекта, например метод повысить зарплату меняет значение свойства «зарплата».

Затем, у нас есть класс, мы создаем объекты этого класса, сколько у нас сотрудников, столько объектов, и заполняемих свойства:

$ivan = new Employee; // Создать новый объект класса Сотрудник
$ivan->name = 'Иван'; // задали ему имя
$ivan->position = 'менеджер';
$ivan->salary = 100; // задали зарплату

$petr = new Employee;
$petr->name = 'Петр';
$petr->position = 'продавец';
$petr->salary = 50;

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

То есть классы и объекты описывают какие-то сущности с которыми работает программа. когда ты изучишь ООП ты увидишь что оно очень логичное и естественное.
Аноним 18/08/15 Втр 00:40:45 #6 №531818 
>>531815

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

Подводные камни начинаются с самого начала. Почитай описание и попробуй представить как ты спроектируешь базу данных для тестов, вопросов, ответов? Разумеется в нашем учебном треде мы придеремся к малейшим отклонениям от нормализованной формы (с благими намерениями конечно, чтобы потом на работе твои коллеги не спрашивали какой идиот создал эту таблицу).
Аноним 18/08/15 Втр 00:44:00 #7 №531820 
>>531815

И знаешь, задание на тесты близко по сложности к реальным проектам. Я видел один реальный проект сравнимой, точнее даже чуть меньшей сложности на аналогичного уровня фреймворке. Его разработчики в нашем треде не учились и хорошим практикам не следовали. Код кривой, куча ошибок, причем часто вместо исправления они просто игнорировались и код как следствие работал через раз и понять почему он не работает было очень нелегко. Теперь этот проект будут дорабатывать и исправлять другие разработчики, посмотрим что выйдет. Переписывать радикально я думаю мы ничего не будем, зачем деньги на ветер выбрасывать, будут мучаться с тем что есть.
Аноним 18/08/15 Втр 00:52:44 #8 №531827 
И еще анон, который учит HTML/CSS и берется за JS, имей в виду что если хорошо это изучить (+ DOM и jQuery) то ты уже можешь быть верстальщиком как минимум. Без jQuery наверно вряд ли так как таких верстальщиков тысячи на фрилансе.
sageАноним 18/08/15 Втр 02:01:24 #9 №531840 
в ЭТОМ ТРЕДЕ ОДНИ ТРАЛИ. НАСТОЯЩИЙ ТРЕД С ОПОМ ТУТ http://2ch.hk/pr/res/528349.html
sageАноним 18/08/15 Втр 02:06:49 #10 №531845 
>>531827
ТАМ НУЖНО JS И ФРЕЙМВОРКИ ЗНАТЬ, ЧТОБЫ ФРОНТЕНДЕРОМ РАБОТАТЬ ГНИДА ПИЗДЛИВАЯ
Аноним 18/08/15 Втр 02:28:31 #11 №531848 
14398541119130.png
Анон, который делает макет, а ты видел крутые фичи в хромовском отладчике, которые на пикрелейтед? Есть возможность отлаживать адаптивную верстку и есть возможность имитировать медленную скорость соединения.

Хромовский отладчик не первый, до него был Firebug в фаерфоксе, а до него верстку отлаживали правкой кода и перезагрузкой страницы (кто хорошо знал CSS рендерил страницу в голове). Но он по скорости, удобству и фичам конечно на первом месте.

-----

В прошлом треде один особо наглый анон (наверно он прошел специальные курсы по оборзению) спросил не желает ли кто поработать на него бесплатно: >>530535

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

Если вы будете искать заказы на фрилансе, вы будете с таким сталкиваться. Иногда с другими формулировками: заплатить я много не готов, но если вы справитесь, вас ждут заказы за большие деньги.

Что ж, это учебный тред и тут такой пост как нельзя кстати. Таких людей, аноны, надо обходить за версту. Любой нормальный заказчик/менеджер понимает что труд стоит денег, его цель найти хорошего разработчика и удерживать его, а не торговаться неделю чтобы скинуть 300 рублей.

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

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

Это сложный вопрос. Участие за долю — это фактически инвестиция. Вы берете какую-то часть времени своей жизни и вкладываете ее в ваше совместное дело. Вы бы могли потратить это время на обычную работу за деньги, значит потенциальная выгода должна быть значительно выше чем зарплата за это время. Не забудьте, что ее надо оценивать с учетом риска. Ну например если шанс что стартап станет успешным и принесет вам 10 000 тугриков равен 5% то математическое ожидание (то есть средняя сумма которую вы заработаете сделав много попыток) составит 10 000 × 5% = 500 тугриков. Ну и помните что 5% шанс на успех это 95% шанс на провал. Потраченные зря месяцы работы в режиме 7×12. В то время как 50 тугриков зарплаты это реальные деньги которые вы получите в конце месяца и на которые летом вместо круглосуточного кодинга можно отправиться куда-нибудь путешествовать.

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

Вот например статья про веб-студию которая пыталась инвестировать в разные проекты, почитайте, очень интересный опыт (TLDR: профита не получилось): http://habrahabr.ru/company/mkechinov/blog/246547/

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

Ну и напоследок поменяю направление мысли еще раз. Ни Биллу Гейтсу, ни Стиву Джобсу зарплату никто не платил. Они работали за долю.
Аноним 18/08/15 Втр 02:32:08 #12 №531849 
Алсо, кто хочет посмеяться, тут еще много таких: https://www.avito.ru/sankt-peterburg/zaprosy_na_uslugi/it_internet_telekom/sozdaniye_i_prodvizheniye_saytov
Аноним 18/08/15 Втр 02:36:26 #13 №531850 
14398545867500.png
>>531849
Ещё бойан в тему.
Аноним 18/08/15 Втр 02:54:30 #14 №531851 
Там ссылка затерялась в многобуквенном посте, я ее раз вкину, она важная, студия инвестировала услугами в IT-бизнесы, итоги за 8 лет: http://habrahabr.ru/company/mkechinov/blog/246547/
Аноним 18/08/15 Втр 02:55:18 #15 №531852 
>>531818
Мне как раз редактор пока кажется самым сложным.
Ну ладно, с первого взгляда я накидал общую схему базы, так сказать сущности. Можешь пока посмотреть, насколько идиотски это выглядит.
По проектированию бд: это дело доверяют джуниорам, серьезно?

test
- id
- name
- description
- time_limit
- show_result (enum('0','1'))
- created_by
- added_date
- сделать результаты прохождения публичными (что это? с вашего позволения выбрасываю этот пункт)

tag
- id
- name

test_tag
- test_id
- tag_id

question
- id
- description
- test_id
- cost (или value? или worth? не силен в наглийском)
- answer_type_id
- sequence_number (номер по порядку для перетаскивания вопросов)

answer
- id
- text
- question_id
- is_right (enum('0', '1'))

answer_type
- id
- name

user
- id
- name
- email
- password

result
- id
- test_id
- user_id
- perform_date
- mark
- sum
- attempts
- fulfilled
Аноним 18/08/15 Втр 03:15:03 #16 №531855 
>>531848
Я на хабре видел предложение войти в долю и проспонсировать создание сайта.
Аноним 18/08/15 Втр 03:21:30 #17 №531856 
>>531852
В некоторых местах джуниорам доверяют целые проекты, как попадешь.
Аноним 18/08/15 Втр 03:30:09 #18 №531858 
>>531852

> По проектированию бд: это дело доверяют джуниорам, серьезно?
А по твоему господину джуниору полагается личный помощник по проектированию баз данных? Или может ручной гном который это за него сделает?

Конечно в разных компаниях делают по-разному. Где-то джуниора и близко не подпустят к базе. В нормальных разработчик разбирается во всех используемых в приложении технологиях и может без лишней помощи добавить пару таблиц или полей. А если в чем-то не уверен, проконсультируется с сеньором или специалистом по БД, как там лучше индексы поставить. Это же эффективнее получается чем когда он по каждому поводу кого-то зовет.

В некоторых компаниях изменения в Бд делает разработчик, но с одобрения главного разработчика.

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

> сделать результаты прохождения публичными (что это? с вашего позволения выбрасываю этот пункт)
Это значит, что результаты теста отображаются в таблице на сайте и любой может смотреть их. Иначе видны только студенту и преподавателю. Если у тебя нет регистрации то можно пока не реализовавать.

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

> cost (или value? или worth? не силен в наглийском)
points, число очков, наверно. value (ценность) тоже наверно подойдет

Насчет типов вопросов, там 4 типа по моему:

— одиночный выбор
— множественный выбор
— ввод числа с допустимой погрешностью (чему равно Пи?)
— ввод строки (напишите столицу России?)

У тебя это реализуется?

Кстати, у нас тут 4 типа вопросов или 4 типа ответов на вопрос?

Насчет answer_type_id, может лучше его ENUM сделать? Ведь типы ответов зашиты в коде и их нельзя менять через админку. (хотя конечно где-то было мнение что энум зло, но я не согласен).

Также, я не вижу где хранятся данные студентов ответы на вопросы. answer это ответы студентов или варианты ответов на вопрос?

Для вариантов ответов (точнее, для вопросов) можно сделать интересную вещь, наследование таблиц. Смотри, у нас есть 4 типа вопросов, у них есть общие поля а есть уникальные для своего типа. Это явно наследование таблиц и возможные способы его реализации давно описаны Фаулером:

http://design-pattern.ru/patterns/single-table-inheritance.html
http://design-pattern.ru/patterns/class-table-inheritance.html
http://design-pattern.ru/patterns/concrete-table-inheritance.html

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

> sum
Сумма баллов? Имей в виду это избыточные данные так как оценка считается из ответов студента. Но тут они конечно опрадавны так как иначе будут запросы громоздкие очень (например на сортировку учеников по баллам).

> marks
> attempts
> fulfilled
Непонятно назначение поля

Аноним 18/08/15 Втр 04:23:30 #19 №531864 
Как верстку на джумолу натянуть? Там все в пхп-шаблонах же.
Аноним 18/08/15 Втр 04:39:30 #20 №531867 
>>531864
Мы не умеем.
Аноним 18/08/15 Втр 05:39:23 #21 №531892 
>>531889
>>531888
>>531887
>>531886
>>531885
>>531883
>>531875
>>531876
Зая, ты проксю-то хоть надел?
Аноним 18/08/15 Втр 06:44:17 #22 №531903 
Почему среди пхп быдлокодеров столько шизофреников? В других ЯП такая же ситуация?
Аноним 18/08/15 Втр 07:16:14 #23 №531907 
>>531903
Иногда даже значительно больше.
Аноним 18/08/15 Втр 07:50:49 #24 №531910 
14398734490900.png
Почему у меня класс не находит. Вон же он лежит, йопта.
Fatal error: Class 'Slim\Views\Twig' not found in C:\xampp\htdocs\TwigBlog\app\start.php on line 27
sageАноним 18/08/15 Втр 08:00:28 #25 №531911 
>>531910
Что за IDE?
Аноним 18/08/15 Втр 09:04:16 #26 №531919 
>>531911
нетбинс
Аноним 18/08/15 Втр 09:12:11 #27 №531924 
>>531911
PhpStorm
Аноним 18/08/15 Втр 09:14:54 #28 №531926 
>>531910
Ну и убогий же дизаен.
Аноним 18/08/15 Втр 11:08:28 #29 №531948 
>>531919
Благодарю.
Кун с макетом 18/08/15 Втр 11:24:19 #30 №531956 
>>531827
>И еще анон, который учит HTML/CSS и берется за JS, имей в виду что если хорошо это изучить (+ DOM и jQuery) то ты уже можешь быть верстальщиком как минимум. Без jQuery наверно вряд ли так как таких верстальщиков тысячи на фрилансе.
Работа верстальщика мне почему-то не по душе. Мне может даже и нравится верстать, но именно в эту степь уходить не хочу, хочу все-таки в бэкенд. Просто в голове у меня такое представление, что уже даже соседский пес HTML\CSS курсы проходит и верстать учится и что верстальщиков ну уж очень много. Далеко сверх меры и найти работу будет сложно.
А вот в бэкенд я бы с головой хотел уйти и все все там изучать, даже надежда есть, что если будет несколько человек на одно место, то возьмут меня с мыслью "Да этот парень не просто выучил что-то и пришел штаны просиживать, в нем видно стремление к изучению. Глядишь через годик и сеньора нашего учить будет. Пожалуй, его и выберем."

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

И да, я сейчас начну тестировать шрифты, зарегистрировал уже сайт для этого отдельный. Сейчас перечитаю пост, ознакомлюсь со статьями, которые ты мне дал и покажу что получится сделать.
Аноним 18/08/15 Втр 11:31:44 #31 №531964 
14398867041990.png
Как решить эту проблему?
Аноним 18/08/15 Втр 12:28:36 #32 №531978 
>>531964
Ну же ребята хелп
Аноним 18/08/15 Втр 12:30:10 #33 №531979 
>>531956
У меня в вузике был предмет инженерная графика, вот очень похоже на верстку. Здесь линия 0,3мм, здесь 0,5мм, здесь шрифт с таким-то наклоном, тут с другим, здесь такой-то отступ, тьфу, параша.

мимо тожефронтенднелюблю
Аноним 18/08/15 Втр 12:37:27 #34 №531980 
Ну чуваки, ну кто ставил apache ну же отзовитесь
Аноним 18/08/15 Втр 12:45:53 #35 №531988 
>>531964
>>531980
Решетка в начале строки означает комментарий. Нужно раскомментировать строчку ServerName.
Чтобы раскомментировать, нужно удалить значок решетки.
Аноним 18/08/15 Втр 13:00:24 #36 №531992 
>>531988
Спасибо
Аноним 18/08/15 Втр 15:13:40 #37 №532033 
14399000207930.png
Почему.
Аноним 18/08/15 Втр 15:45:19 #38 №532049 
>>532033
Потому что счетчик остановился на 11, ведь уже на 11 месяце долг у тебя меньше месячной выплаты, на 11 шаге выполняется строка 16 для 11 месяца и тут же выполняется if.
Аноним 18/08/15 Втр 16:08:55 #39 №532055 
А как удаленно работать, если все просят поговорить голосом, а у меня социофапия дошла до такой стадии, что я не могу себя заставить говорить по вебке, только писать могу.
Аноним 18/08/15 Втр 16:36:00 #40 №532067 
>>532055
Соври, что настолько нищеброд, что нет денег даже на микрофон. Ну или притворись немым. А лучше поработай над своей социофапией.
Аноним 18/08/15 Втр 16:40:46 #41 №532068 
>>532067
Скажи что ты глухонемой. И я не шучу.
Ты можешь даже льготы получить за это, особенно от европейских и амуриканских работодателей, они очень положительно настроены к инвалидам и тянкам которые занимаются ИТ.
Аноним 18/08/15 Втр 16:43:31 #42 №532069 
>>532068
>особенно от европейских и амуриканских работодателей
Это ты про тех самых знаменитых, которые на слово ничего себе каламбур получился русским анонам верят?
Аноним 18/08/15 Втр 17:11:32 #43 №532078 
>>532067
Я так и сказал, он отморозился.
Аноним 18/08/15 Втр 17:12:22 #44 №532079 
>>532068
Можно сказать, что я глухонемая тянка в инвалидной коляске?
Аноним 18/08/15 Втр 17:12:52 #45 №532080 
Что такого фундаментального почитать по базам данных?
Аноним 18/08/15 Втр 17:18:38 #46 №532083 
>>532080
Дейт, Кодд.
Аноним 18/08/15 Втр 17:18:55 #47 №532084 
>>532080
Том Кайт, учебники по Oracle.
Кун с макетом. 18/08/15 Втр 18:09:56 #48 №532104 
>>531956
Фух, починили наконец мне интернет. Сел значит ставить шрифты и столкнулся с такой проблемой. Скачиваю шрифт, устанавливаю, все работает. Но вот курсивность и жирность выставить не могу. Я перебрал штук 5 и у всех жирность сразу максимальная. То есть можно только поставить 100 и чуть уменьшится. А курсив вообще не работает. Аноны, может подскажете хороший шрифт для тренировки, где и курсивность и жирность работает? Только мне бы какой-нибудь мудреный, с закорючками там. А то многие у меня уже откуда-то есть, а откуда удалять понятия не имею. Я так например не мог проверить работоспособность шрифта на макете.

И да, еще столкнулся с такой проблемой.
Скачал шрифт .ttf, поставил, все работает. Переконвертировал в .eot, добавил в порядке
.ttf
.eot
и не работает ни один.
Поставил
.eot
.ttf
и все заработало и в хроме и в ИЕ.
Я еще статьи не прочитал, только недавно вот сел за это дело. Может быть там разгадка есть. Типа определенный порядок форматов.
Аноним 18/08/15 Втр 19:00:57 #49 №532126 
>>531858
Переделал, посмотри еще раз структуру базы для testhub.
https://gist.github.com/nsdvw/b19480f1dd4f2f7f8de5

>А по твоему господину джуниору полагается личный помощник по проектированию баз данных? Или может ручной гном который это за него сделает?
Нет, полагается опытный наставник, с которым можно посоветоваться, и который проверит работу.
И речь об ответственности: проектирование бд вообще самая важная вещь во всем проекте, поэтому мне кажется странным доверять такое стажеру с опытом двух гостевых книг и файлообменника.
Собственно я всего лишь интересуюсь командным взаимодействием, везде ведь пишут в требованиях "умение работать в команде". А по твоим словам получается, что как вручат тебе тз, так полностью выполняешь проект молча и самостоятельно, начиная от дизайна и верстки и заканчивая тестированием.
То ли ты всю жизнь провел на фрилансе, где тупым заказчикам программисты и логотипы рисуют, и наполняют контентом, и раскручивают сайт в гугле; то ли скорее всего просто троллишь.

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

> http://design-pattern.ru/patterns/single-table-inheritance.html
На будущее отметил себе эту идею, но тут у меня пока получается немного по-другому: у меня варианты ответа хранятся абсолютно независимо от вопросов, так что это не тот случай.
Аноним 18/08/15 Втр 20:11:16 #50 №532168 
Пацаны, однокурсник предлагает прибыльную работёнку, нужно задрочить джумлу и клепать сайты. Мне бабки нужны, готов выполнять обезьянью работу. Только опыт в пыхе скудный, по верхам ООП+MySQL, говнокодил на CodeIgniter когда-то. Можно ли брать CMS, обладая лишь поверхностными знаниями?
Аноним 18/08/15 Втр 20:28:18 #51 №532176 
ОП, как можно быстрее в сложный навороченный сайт быстрее вникнуть? Пришел на работу, там гора каких-то классов, кругом сплошные абстракции, контроллеры, ООП, вьюхи, билдеры sql запросов, мапперы, что за что отвечает непонятно. Плюс еще старый сайт через какой-то самописный бридж подключен и часть функций на него переведена. Коллеги мало помогают, сказали типа ну сиди и втыкай, уже на меня тикетов навешали, результатов требуют. Спросил есть ли доки и описания какие, ничего нет конечно. Вообще как в подобный сайт вникать? Пока сижу просто классы читаю и методы, но их там тысячи и что за что отвечает, хз. В части даже явный говнокод, а в других наоборот паттерны всякие сложные вроде Data Mapper. Коллега, заметил, везде die(var_dump(всякие переменные)) сует и в браузере запускает, щас тоже так стал, может еще какие способы есть?
Аноним 18/08/15 Втр 20:56:12 #52 №532193 
>>532176
> Коллега, заметил, везде die(var_dump(всякие переменные)) сует и в браузере запускает, щас тоже так стал, может еще какие способы есть?
Расскажи коллеге про xdebug. Ну и сам посмотри.
Аноним 18/08/15 Втр 20:58:32 #53 №532195 
>>532176
пздц
Аноним 18/08/15 Втр 21:16:49 #54 №532210 
>>532193
Для xdebug вроде нужно же страницу знать, не? А там когда запускаешь, все идет через какой-то центральный контроллер, а по ходу еще штук 100 других контроллеров, подконтроллеров, родительских и унаследованных классов и сервисов подключается. И не поймешь даже, откуда страница вылазит.
Аноним 18/08/15 Втр 21:18:53 #55 №532213 
>>532210
Фреймворк-то как называется? Зенд штоли?
Только не говори, что это самописная хуйня или йоба-смс от вована.
Аноним 18/08/15 Втр 21:28:24 #56 №532220 
>>532213
Самописная хуйня со вставками других фреймворков. В подключениях в Composere там засветились Zend, Symphony, Yii, CodeIgniter и еще штук 5 каких-то. Нахуй они там нужны, хз, но части классов на одном, части на другом. Чтобы этот зоопарк вместе работал, переходники самописные кругом рулят и кусками все разнесено. Работников, как я понял по отметкам @author в коде, там за несколько лет куча посменялась, и все свои тулы использовали, так что теперь в этом черт ногу сломит.
Аноним 18/08/15 Втр 21:35:21 #57 №532222 
>>532220
И еще, размер всего сайта - 3 гига. И это без картинок и БД и со сжатыми через grunt css и javascriptами. Только, чтобы выкатить на рабочий комп, целый день ушел.
Аноним 18/08/15 Втр 21:35:56 #58 №532223 
14399229560320.jpg
Привет, котаны, рад снова видеть нормальный официальный тред, но это лирика, а теперь вопрос.
Подскажите в чем проблема и где ее искать: есть бубунта 14,04, есть апаче2, есть вихост. Все работает, все сделано и настроено еще год назад. Страничка на указанном порту открывается, но вот я добавляю папку АССЕТС с ксс и тут же получаю в фаербаге 403 форбидден и адресс моего ксс файла, который лежит в директории на которую вхост создан(условно говоря МойПроект/АССЕТС/мейн.ксс). Что за нах? При чем с менйом я как-то порешал просто добавил права 777 на всю папку МойПроект, но вот добавляю еще один ксс файл и снова та же петрушка, но теперь именно с новодобавленным фалом. chmod на var/www/ уже пробовал, правда паранойи из-зa поставил u+w -R. Подскажите срочно если кто имеет возможность, а то я вместо написания кода уже полчаса туплю с этой проблемой.
Аноним 18/08/15 Втр 21:37:52 #59 №532225 
>>532104

Обычно 1 файл содержит только шрифт одного начертания и жирности. Ну например в случае Open Sans:

OpenSansBold — полужирный
OpenSansExtraBoldItalic — особо жирный курсивный

Потому ты должен в каждом блоке font-face кроме названия под которым этот шрифт будет доступен, указать его жирность, курсивность (иначе браузер подумает что это нежирный некурсивный шрифт). Можно также указать и другие хакартеристики , а именно (список отсюда https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face ):

font-variant, font-stretch, font-weight, font-style

Ими ты описываешь характеристики шрифта в файле на который указывает свойство src. И браузер будет знать что например жирная или курсивная версия шрифта тут.

В некоторых случаях браузер способен сам сгенерировать курсивное начертание, если его нет в шрифте или ты не указал файл для него. Это делается механическим наклоном букв и называется faux italic (механический курсив). Это довольно некрасиво, посмотри на картинку и ты увидишь что в настоящем курсивном начертании буквы меняют свою форму: https://upload.wikimedia.org/wikipedia/commons/1/17/Cyrillic-italics-nonitalics2.svg

Они выглядят по-другому так как курсивный шрифт это шрифт имитирующий рукописные буквы (а обычный шрифт имитирует выбитые на камне буквы, потому в нем больше прямых линий, а в курсивном больше скруглений ускоряющих написание).

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

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

http://alistapart.com/d/say-no-to-faux-bold/real-styles.png
http://alistapart.com/d/say-no-to-faux-bold/smear-slant.png

В твоем случае, у Open Sans есть курсивный/некурсивный варианты, и 5 вариантов веса (жирности) (Light, Regular, SemiBold, Bold, ExtraBold). При их комбинации получается 8 вариантов шрифта с одинаковым названием но разными свойствами. Ты должен их правильно описать.

Кстати, на досуге еще подумай, почему жирность шрифта по английски называется «weight» то есть «вес».
Аноним 18/08/15 Втр 21:38:41 #60 №532226 
>>532220
пздц (2)

Я бы на твоем месте еще подучился у опа, а потом устроился в нормальную контору.
Там ты все равно ничему не научишься, тем более что коллеги как я понял даже хуже тебя разбираются.
Человеческая жизнь не стоит и одной строки Бодлера Год ракования в быдлоконторе не стоит одного поста опа.
аминь

Если очень нужны деньги, то на крайняк можно на полставки ходить чистить вордпресс, а в свободное время учиться.
Аноним 18/08/15 Втр 21:39:58 #61 №532227 
>>532223
upd. в общем, сразу же попробовал опять прописать chmod 777 -R /home/huykin/myProject/, ребутнул апаче на всякий случай и все заработало. Ну что за пздц, котаны? Мне что после добавления каждого файла такой хуетой маяться? Почему цшмод не пашет на постоянной основе(я думал раз прописл права и все в ажуре, ан нет). Как быть, поясните чайнику от линупса.
Аноним 18/08/15 Втр 21:41:03 #62 №532228 
14399232632790.jpg
>>532226
Как же я буду смс-то чистить?
Аноним 18/08/15 Втр 21:41:42 #63 №532230 
>>531910

А что в файле Slim/View/Twig.php? Ты его не трогал? Не менял там ничего?

Также, подключение автозагрузчиков должно идти первым.

Также, ты 2 раза создаешь объект Slim.

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



Аноним 18/08/15 Втр 21:55:46 #64 №532233 
>>532226
Меня никуда не брали просто больше. Еще там какой-то скрам-хуям со скрам-мастером. На практике это выглядит так - висит доска во всю стену с именами всех, а на ней, какие на ком тикеты. Плюс отдельная доска, где завершенные тикеты на весь тим. Каждый день приходит начальник и с утра пидорасит, кто чем вчера занимался и почему на ком-то тикетов больше положенного висит. Все эти тикеты стремятся быстрее закрыть, чтобы не быть пидорасом. А если на доске с тимом тикетов мало образовалось, то пидорасы уже все, и собирают совещание, чтобы отхуесосить весь тим. Поэтому все коллеги стремятся хуяк-хуяк и в продакшн, как тут в прошлых тредах ржали. Наверное поэтому такой зоопарк и неразбериха.
Аноним 18/08/15 Втр 21:57:45 #65 №532235 
>>532233
Скрам-хуям, насмотрятся всяких там кремниевых долин и давай "перенимать опыт", а перенималка не выросла.
Аноним 18/08/15 Втр 21:59:52 #66 №532237 
>>531910

Чтобы понять в чем ошибка, поставь вот сюда: https://github.com/slimphp/Slim/blob/2.x/Slim/Slim.php#L129 var_dump который дампит разные переменные и посмотри чему они равны. Может он имя файла неправиоьно определяет.

>>531979

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

>>532104

> Переконвертировал в .eot, добавил в порядке
Ты format указываешь в свостве src? код показывай.

>>532126

> Нет, полагается опытный наставник, с которым можно посоветоваться, и который проверит работу.
В этом случае SQL код пишешь все равно ты и надо уметь проектировать. Наставник только проверит работу, а разъяснять тебе принципы нормализации не будет.

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

> А по твоим словам получается, что как вручат тебе тз, так полностью выполняешь проект молча и самостоятельно, начиная от дизайна и верстки и заканчивая тестированием.
Нет, я про другое. Если делается новый сайт и в компании/команде есть отдельный версальщик то верстку дадут ему. Но если например надо добавить новый раздел на существующий сайт или какой-нибудь попап с настройками, то тут отвлекать верстальщика это только лишняя потеря времени на взаимодействие. Быстрее самому сделать. Аналогично, если тебе надо что-то поменять. Не звать же верстальщика ради добавления в форму автодополнения на jquery UI, верно?

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

Как видишь, без знания SQL или HTML/CSS ты эти задачи не выполнишь.

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

Аноним 18/08/15 Втр 22:01:49 #67 №532238 
>>532227
Вроде нужно своего пользователя в группу www-data добавить.
Аноним 18/08/15 Втр 22:12:49 #68 №532249 
>>532233
А когда начальник вместе с заказчиком собираются что бы всех похуесосить это Agile.
Аноним 18/08/15 Втр 22:14:56 #69 №532250 
>>532126

В твоей базе все же есть путаница. Как ты хранишь правильные ответы на вопрос с вводом текста или вводом числа с погрешностью? Как ты хранишь введенные студентом ответы на такие вопросы?

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

- с одиночным выбором
- с множественным
- с вводом числа
- с текстом

Соответственно у них есть общие, а есть уникальные для одного типа поля. Значит это 4 разных сущности которые наследуются и к ним применим один из описанных паттерном (STI, ClassTI, ConcreteTI).

> ограничение по времени на ответ в секундах
Комментарии надо указывать через слово COMMENt тогда они сохранятся в базе и помогут другим людям разобраться в ней:

http://stackoverflow.com/questions/2162420/alter-mysql-table-to-add-comments-on-columns/2162456#2162456
http://phpclub.ru/mysql/doc/create-table.html

Комментарии можно добавлять на колонки или таблицы.

> date_added
Короче наверно просто писать added

> FOREIGN KEY (test_id) REFERENCES test (id) ON DELETE RESTRICT
Почему? При удалении тега или теста логично автоматически удалять его привязки (не сами теги а именно связь между ними).

> type ENUM ('один ответ из списка'
В ENUM пишут обычно компьютерно-читаемые значения на английском без пробелов, например chooseOne или select-one

> ENUM ('0', '1')
Значения энума нельзя делать числом так как числа понимаются MySQL как номер опции и это вызывает баги.

http://phpclub.ru/mysql/doc/enum.html
> Не рекомендуется сохранять числа в перечислении, т.к. это может привести к излишней путаннице.

> является ли вариант правильным ответом;
> не знаю как иначе хранить булев тип
Можно делать TINYINT NOT NULL, это не совсем булев тип но подойдет. Или ENUM но не с числами.

> пароль и имейл пока пустые для анонимного прохождения
Имей в виду что сам пароль в открытом виде не хранят в базе, это очень небезопасно. Хранить надо соленый хеш.

> ip CHAR(15) NOT NULL,
про IPv6 слышал? https://ru.wikipedia.org/wiki/IPv6#.D0.9D.D0.BE.D1.82.D0.B0.D1.86.D0.B8.D1.8F


Аноним 18/08/15 Втр 22:20:43 #70 №532251 
>>532168

Это больше верстка будет чем программирование. HTML знаешь?

>>532176

Начни с ответа на вопросы:

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

— какие внешние хранилища используются (базы/кеши/NoSQL)
— какие внешние API используются?
— какой фреймворк/библиотеки используются? (посмотреть можно в composer.json или в отдельной папке вроде vendor если у вас нет композера)

Если используется фреймворк то документация есть в интернете. Уже хорошо.

Далее попробуй посмотреть структуру папок и понять что вообще там есть.

Потом попробуй разобрать от начала и до конца как происходит вывод какой-нибудь несложной и желательно новой страницы (например страница новостей или что-нибудь вроде нее). То есть от index.php, через роутинг до нужного контроллера и шаблона.

> Коллега, заметил, везде die(var_dump(всякие переменные)) сует и в браузере запускает, щас тоже так стал, может еще какие способы есть?
Отладчик, но иногда var_dump и удобнее.

Аноним 18/08/15 Втр 22:28:50 #71 №532255 
>>532220

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

>>532222

Да ну, не может быть. Если файл весит 10 Кб то 3 Гб это 300 000 файлов. Может быть это вес репозитория с историей?

> Только, чтобы выкатить на рабочий комп, целый день ушел.
Плохо, на 2 последних работах я уже в первый день писал код либо правил баги. Правда я был не с нулевым опытом к тому моменту.

>>532176

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

Программист это не тот, кто пишет код. Программист это тот, кто решает задачи. Сейчас перед тобой задача в минимальные сроки понять архитектуру проекта, думай, как это лучше сделать? Разобрать как выполняется код на примере простой страницы? Выписать список папок и понять какие классы в них хранятся на примере одного из них? Изучить как сделана работа с базой данных?

Ну и плюс, у тебя есть еще возможность в ходе исправления чуть-чуть улучшать код, убирать неэффективные места. добавлят комменатрии, давать понятные имена функциям и переменным. Это же бесценный опыт. Держись за свою работу зубами и когтями.
Аноним 18/08/15 Втр 22:31:20 #72 №532256 
>>532255
Спасибо, ОП, приму к сведению советы и постараюсь им следовать.
Аноним 18/08/15 Втр 22:33:33 #73 №532257 
>>532176

Насчет var_dump, альтернатива это отладчик. Надо повозиться с настройкой xdebug, зато можно в IDE пошагово выполнять код и смотреть значения перемнных. Иногда впрочем var_dump воткнуть быстрее

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

> что за что отвечает непонятно
Ты ведь знаешь что такое MVC и паттерны работы с БД ( https://github.com/codedokode/pasta/blob/master/db/patterns-oop.md )? Значит должен понимать хотя бы примерно зачем они.

> через какой-то самописный бридж
Не SymfonyBridge имеется в виду?

Но начать надо с определения фреймворка, с разбора index.php, как делается роутинг.

Аноним 18/08/15 Втр 22:42:54 #74 №532262 
>>532251
>Joomla
>Это больше верстка будет чем программирование. HTML знаешь?
Лендинг на бутстрапе - мой потолок, всякие хитрые анимации на CSS3 делать не умею. На JS и JQuery игрульки писал. Но веб-кодер из меня никакой, увлечение этим длилось 2 месяца, забросил полгода назад. Сейчас нашёл книгу по джумле, там объясняют для тех, кто вообще не юзал PHP+MySQL. А однокурсник говорит, что нужно будет заниматься разработкой компонентов и модулей для Джумлы, при этом говорит, что Yii ему проще давался, lдля меня такие фреймворки - тёмный лес. Я же только на мини-фреймворках писал.
Аноним 18/08/15 Втр 22:49:24 #75 №532265 
>>532195

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

>>532210

Там ты ставишь точку останова в конкретном файле и смотришь чему в ней равны переменные, выполняешь код пошагово или перепрыгиваешь к следующей точке. Почитай про отладку:

https://netbeans.org/kb/docs/php/debugging_ru.html
http://www.angarsky.ru/drupal/otladka-php-xdebug-phpstorm.html
Гугл: отладка php кода

Суть в том, что в PHP на сервере устанавливается плагин xdebug. Когда ты выбираешь в IDE «начать отладку», она открывает порт, ожидая соединения от xdebug, и открывает страницу в браузере со специальным приписанным параметром. xdebug его видит и подсоединяется к IDE. После чего она через это соединения управляет интерпретатором PHP.

Netbeans и PhpStorm оба содержат средства для взаимодействия с xdebug и отладки. Есть и другие сторонние программы и расширения но я не знаю насколько они нжедные и удобные.

>>532223

Так разрешения наверно не стоят нужные. Сделай stat /var/www.../file.css и посмотри какие у него разрешения.

Имей в виду что для доступа к файлу нужно право на чтение во всех вышестоящих папках. Сделай stat и для них.

Чем ты добавляешь файлы? Надо настроить программу чтобы она ставила правильные разрешения.

>>532226

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

Или может он на собеседовании переоценил свои навыки? А, анон, что ты на собеседовании рассказывал?

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

>>532227

Ребутать апач не надо.

> Почему цшмод не пашет на постоянной основе(я думал раз прописл права и все в ажуре, ан нет).
Он меняет разрешения на сущесвующих файлах а не на будущих. Это не машина времени.

Тебе надо изучить систему разрешений в линуксе, почитать хорошую и подробную статью. А потом мануал по chmod на всякий случай.

>>532233

Держись за эту работу всеми когтями. Джуниорам полезно работать в сложных проектах в условиях постоянного стресса.

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

>>532238

Не обязательно, хотя можно.

Аноним 18/08/15 Втр 22:50:03 #76 №532266 
>>532262

Компоненты чуть сложнее, там придется в PHP коде джумлы разбираться.
Аноним 18/08/15 Втр 22:52:02 #77 №532267 
>>532266
Он мне скидывал код, там название статического метода - нижний пробел, то есть вызывать его нужно так ::_
Ну это же издевательство какое-то.
Аноним 18/08/15 Втр 22:54:19 #78 №532268 
>>532267

Во времена PHP4 не было private и через подчеркивание обозначали непубличные методы, может в этом дело?
Аноним 19/08/15 Срд 00:00:34 #79 №532282 
>>531903
>Почему среди пхп быдлокодеров столько шизофреников?
>>532265
>Джуниорам полезно работать в сложных проектах в условиях постоянного стресса.
Аноним 19/08/15 Срд 00:39:56 #80 №532299 
>>532250
Сдаюсь.
Общую идею о наследовании таблиц понял, эти паттерны STI, ClassTI и ConcreteTI.
Но я не понимаю в нашем случае, какие уникальные поля есть у разных типов вопросов.

У нас есть объект Вопрос. От него наследуется два потомка: ВопросСВыборомОтвета, ВопросСВпечатываниемОтвета.
Пусть будет QuestionWithChoice и QuestionWithTyping.
От QuestionWithChoice наследуются классы QuestionWithSingleChoice и QuestionWithMultipleChoice.
От QuestionWithTyping наследуются классы QuestionWithTypingNumber и QuestionWithTypingString.

Но какие же у них уникальные свойства, и как будут выглядеть таблицы?
На данный момент вижу, что все свойства у разных типов вопросов абсолютно идентичны.
У всех есть
description (собственно текст вопроса)
points (кол-во очков за верный ответ - впрочем, может тут подвох? если можно выбрать несколько вариантов, то можно получить не 100% за правильный ответ, а меньше)
test_id
type ENUM

Тогда зачем мне бить вопросы на несколько "наследуемых таблиц", если я могу их положить в одну?
Я ничего не понимаю.
Аноним 19/08/15 Срд 00:53:58 #81 №532302 
>>532299

Уникальные свойства, которые есть только у одного типа вопросов:

— вопрос с текстом — правильный текст
— вопрос с числом — число и погрешность

Аналогично, «ответ студента на вопрос» тоже может иметь в зависимости от типа свойства «выбранный вариант», «выбранные варианты», «введенный текст», «введенное число» (которое при желании можно объединить с текстом).

> Тогда зачем мне бить вопросы на несколько "наследуемых таблиц", если я могу их положить в одну?
Например чтобы в коде у тебя было несколько классов-моделей для разных видов вопросов.

Если ты положишь в одну это будет неявное STI.
Аноним 19/08/15 Срд 00:54:58 #82 №532303 
>>532299

Я не говорю что надо сделать 4 таблицы. Я говорю что ты должен понимать что и как тут наследуется. И метод выбирать исходя из плюсов, минусов и реально ли это реализовать в Юи. Я против STI ничего не имею.
Аноним 19/08/15 Срд 01:09:02 #83 №532307 
14399357427430.jpg
Потихоньку вкатываюсь в пыху из перла. Флоаты пыхи - дерьмище полное, 2 флоата даже сравнить по-нормальному нельзя. За ебаных почти 20 лет не смогли сделать нормальные флоаты, пиздец просто.
Аноним 19/08/15 Срд 01:18:22 #84 №532308 
>>532302
>— вопрос с текстом — правильный текст
Хм, я думал хранить варианты ответов в отдельной таблице и завести там колонку "верный/неверный" ответ. И для типов вопроса "введенный текст" и "введенное число" тоже хранить их как единственно верный вариант ответа в таблице с вариантами.
Значит, правильный ответ перенести в таблицу с вопросами?
Ок.
Тогда таблица с вариантами ответов будет нужна только для хранения собственно вариантов на выбор, то есть для двух из четырех типов вопросов.
Может и от нее избавиться? Забить варианты тем же енамом в таблицу вопросов? О, кажется нашлось еще одно уникальное свойство для выборочных типов вопросов.

> ENUM ('0', '1')
>Значения энума нельзя делать числом
Я же в кавычки взял. Или оно все равно приводится к числу? Хорошо, пусть будет yes/no.

>погрешность для числа
Это наверное допустимая разница между введенным и правильным числом?

Ладно, я лучше завтра на свежую голову. Нужно ведь еще разобраться >реально ли реализовать в Юи эти паттерны.
Аноним 19/08/15 Срд 01:19:18 #85 №532309 
>>532307
А, нет блять, в перле то же самое, но там хотя бы на изичах можно сравнить с помощью eq. Ебаное человечество, нет нормальных флоатов, пиздец.
Аноним 19/08/15 Срд 02:12:53 #86 №532314 
>>532307

Ты пишешь по моему глупости. Во-первых, сравнить числа через == в PHP ты можешь, но результат может тебя не устроить так как вычисления приближенные и числа окажется не совсем равны.

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

$epsilon = 0.00001;
if (abs($a - $b) < $epsilon) { ... }

Это описано даже в мануале: http://php.net/manual/ru/language.types.float.php

Эпсилон выбирается в зависимости от задачи и значений чисел. Подробный алгоритм описан тут:

https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/
http://floating-point-gui.de/

В Перле ситуация точно такая же. Я не раз замечал что критики PHP сами в предмете не разбираются.

Более того, в некоторых книгах предлагаются еще более абсурдные способы сравнения: http://docstore.mik.ua/orelly/perl4/cook/ch02_04.htm

Предлагаемая там формула очевидно неверная и дает ошибки если сравниваемые числа округляются в разные стороны. Если ты хотел упомнять этот способ то знай что он неграмотный.
Аноним 19/08/15 Срд 02:17:51 #87 №532316 
>>532308

> Хм, я думал хранить варианты ответов в отдельной таблице и завести там колонку "верный/неверный" ответ. И для типов вопроса "введенный текст" и "введенное число" тоже хранить их как единственно верный вариант ответа в таблице с вариантами.
У тебя не предусмотрена там погрешность. Да и бессмысленно делать отдельную таблицу для вопросов у которых ровно один вариант ответа — в этом случае логично ответ хранить вместе с вопросом.

> Может и от нее избавиться? Забить варианты тем же енамом в таблицу вопросов?
Как, интересно? Если хранить их в одном поле через запятую, то ты нарушаешь принципы нормализации, что одна ячейка дложна хранить одно значение (про нормализацию должен прочесть любой разработчик прежде чем браться проектировать БД так что советую набрать в гугле «нормализация баз данных» и прочесть, это любят на собеседовании спрашивать).

> Или оно все равно приводится к числу?
Не знаю, но я бы не рисковал, так как mysql любит преобразовывать типы данных молча.

> Это наверное допустимая разница между введенным и правильным числом?
Да, в стиле Пи = 3.14 ± 0.01 или ответ = 10 ± 5%

платина Аноним 19/08/15 Срд 02:42:26 #88 №532321 
14399413467240.jpg
Анон, есть ли у тебя стори о том как человек без математического образования зарабатывает на пхп-программировании. И вообще, такое возможно?
Аноним 19/08/15 Срд 02:46:55 #89 №532322 
>>532321
И еще. Скажи на своем или чужом опыте, анон, про необходимый минимум для Remote Work, а.
Аноним 19/08/15 Срд 02:48:43 #90 №532323 
14399417231010.jpg
>>532322
Например, обязательно ли проживать на территории страны работодателя?
Аноним 19/08/15 Срд 02:49:46 #91 №532324 
>>532323
В большинстве случаев имею ввиду. Закономерность.
Аноним 19/08/15 Срд 03:19:37 #92 №532329 
>>532233
Няш, а что ты умеешь? Какие задачки от ОПа решал? Что на собеседовании спрашивали?
4 задача по JS Аноним 19/08/15 Срд 03:56:04 #93 №532340 
В чем у меня затык?

ЮНапиши функцию fmap(a, gen), которая принимает на вход 2 функции, a и gen, где gen — функция-генератор вроде той, что была в первом задании. fmap возвращает новую функцию-генератор, которая при каждом вызове берет следующее значение из gen и пропускает его через функцию a.
http://pastebin.com/7grA8c76
Опросик. Аноним 19/08/15 Срд 04:08:19 #94 №532342 
14399464995010.jpg
Анонимус, а сколько часов в день ты тратишь на изучение|разработку? И на сколько продвигаешься за это время? Кол-во пройденного измеряй в своем материале.

Например:
4 часа в сутки.
50 страниц такой-то книжки такого-го автора.

или

столько-то тысяч строк кода за такое-то кол-во времени

Спасибо за внимание.
Аноним 19/08/15 Срд 04:21:13 #95 №532343 
>>532321
Важно не образование, а склад ума.
Иному человеку хоть профессора найми, он все равно не поймет математику.
Аноним 19/08/15 Срд 04:26:11 #96 №532344 
>>532321
У меня есть. Сидит на удаленке в какой-то немецкой конторе. Получает примерно 1.5-2к евро. Для бульбостана очень окей. Вышки нет, в школе сурово сосал в математике. В универ поступить не смог. Еще у него очень хуево с алгоритмами. Думаю даже задачу с кредитами с одного захода не порешает. Берет трудолюбием и упертостью. Сейчас вроде его отправили во фронтэнд.
Да и математику что мешает подучить на том же https://www.khanacademy.org/ для низкого старта + потом курсы с https://www.coursera.org/ и http://ocw.mit.edu/index.htm (да-да тот самый MIT совершенно на халяву). Мозги хорошо тренирует если небольшими дозами и регулярно. Это после отмороженной нашей школы кажется, что математика это ад и погибель, а на самом деле там красота и охуенность.
Аноним 19/08/15 Срд 04:33:41 #97 №532345 
>>532344
Не понял, он до фронтэнда он кем работал?
Аноним 19/08/15 Срд 04:40:40 #98 №532346 
>>532345
Пхп мидл девелопер.
Аноним 19/08/15 Срд 07:08:52 #99 №532351 
>>532321
А зачем пхп-макаке нужен матан?
Аноним 19/08/15 Срд 07:26:31 #100 №532353 
>>532176
Вот поэтому нужно сначала все выучить, а потом идти жаботать, дебил тупой.
Аноним 19/08/15 Срд 07:48:14 #101 №532358 
Задания по JS.
#11: http://jsfiddle.net/Lkoxgyux/
#12: http://jsfiddle.net/hxo9zyos/
Аноним 19/08/15 Срд 07:56:36 #102 №532361 
>>532230
>подключить Slim через композер,
что за композер? как через него подключать?
Аноним 19/08/15 Срд 08:17:47 #103 №532367 
>>532361
https://getcomposer.org/
http://habrahabr.ru/post/145946/
Аноним 19/08/15 Срд 08:58:38 #104 №532371 
>>532342
>50 страниц такой-то книжки такого-го автора.
чо бля? я перепечатываю с ютуба.
Аноним 19/08/15 Срд 09:22:29 #105 №532373 
>>532367
у меня аж голова заболела, пока читал.
Аноним 19/08/15 Срд 09:59:26 #106 №532376 
>>532342
Минимум 4 часа погромирования и минимум 50 страниц в сутки как раз.
Стараюсь обычно больше читать даже, чтобы создать себе общую картину, делаю также заметки и потом пишу код и стараюсь использовать новые фичи.
Аноним 19/08/15 Срд 10:05:49 #107 №532377 
>>532237
>код показывай
fontsmaket.esy.es
Аноним 19/08/15 Срд 10:18:52 #108 №532379 
>>532377

> src: url(../fonts/Rurintania.eot);
> src: url(../fonts/Rurintania.ttf);
Второе свойство тут переопределяет первое и первое никогда не срабатывает. Это то же самое что написать

color: blue;
color: red;

текст получится красным. Почитай про синтаксис правила src и как в нем указать несколько форматов.

> font-weight: 900;
> font-style: italic;
У тебя нет правил, описывающих жирный или курсивный шрифт. У тебя только одно правило @font-face и оно описывает обычный, нежирный и некурсивный шрифт. Чтобы добавить другие начертания, надо добавить правила @font-face для них и указать файлы с шрифтом в нужном начертании (RurintaniaBold или вроде того).
Аноним 19/08/15 Срд 10:21:36 #109 №532380 
>>532377

Что я хотел сказать, если в шрифте несколько начертаний, то надо несколько файлов (для каждого начертания свой файл) и несколько правил @font-face.

«Начертание» здесь значит разновидность одного и того же шрифта. то есть «жирный», «курсивный», «обычный» и тд.
Аноним 19/08/15 Срд 10:31:12 #110 №532382 
>>532379
>>532380
Официально признаю у себя дцп.
Все понятно стало. Сейчас попробую настроить тот шрифт OpenSans к тексту на тестовом сайте fontsmaket.esy.es
И именно только то, что нужно, а не все начертания.
Аноним 19/08/15 Срд 10:55:18 #111 №532389 
А где у меня пхп.ехе лежит? или его нужно заново устанавливать? не ищется на компе. в какую директорию композер этот ложить?
Аноним 19/08/15 Срд 10:56:01 #112 №532391 
>>532376
Что вы там читаете, синтаксис? Не проще ли проекты делать с ютуба?
Аноним 19/08/15 Срд 10:58:19 #113 №532392 
>>532389
а все, нашел, вот я туплю порой.
Аноним 19/08/15 Срд 10:59:56 #114 №532393 
>>532389

Композер ставится установщиком, если ты ставишь руками то можно кинуть в директорию с проектом или в любую на твой выбор. В этом случае придется писать путь к нему в команде.
Аноним 19/08/15 Срд 11:09:34 #115 №532394 
>>532391
Вот так и рождаются быдлокодеры. И зачем все эти Макконнелы и Таненбаумы пишут свои книги? Я уж молчу про паттерны, бест практисы, рефакторинги и сам кампуктер саенс как таковой. А ещё дискретная математика и алгоритмы.
Ведь всё это НИНУЖНА, сел и хуячишь с ютубчика!
Аноним 19/08/15 Срд 11:21:01 #116 №532396 
>>532394
возник вопрос - в гугле загуглил да почитал.
>2015
>читать книги по программированию
Аноним 19/08/15 Срд 11:24:44 #117 №532397 
>>532396

Начинающий не сможет любую информацию найти и понять. Ну и не имея определенного опыта, трудно сказать хорошее советуют или плохое.
Аноним 19/08/15 Срд 11:28:35 #118 №532400 
>>532396
В голос с тебя.
Интересно, как ты гуглишь Макконнела или Боба Мартина?
>меня опять не взяли на работу, сказали что пишу говнокод
>What does a good programmer's code look like? stackoverflow

топкек
Аноним 19/08/15 Срд 11:35:36 #119 №532401 
>>532397
Я к тому, что если уже работаешь в какой-то серьезной хуйне и получаешь дохуя, то есть смысл дрочить всякие алгоритмы, книги (которые устаревают быстрее видео с ютуба), а для нюфани главное, чтобы быстро и работало, а иначе это просто проеб времени на говно, которое не пригодится.
Аноним 19/08/15 Срд 11:44:00 #120 №532406 
>>532401
Если не ждать переводов, то книги выходят очень быстро. Я только в рашкокоммьюнити заметил такую нелюбовь к книгам, на реддитах и стаковерфлоу как раз частенько книги и рикаминдуют читать.
Ну, видимо поэтому второкурсники нормального вуза США работают в гугле, а нашим даунам и 10 лет опыта мало чтобы что-то лучше бодишопа найти.
Аноним 19/08/15 Срд 11:49:17 #121 №532410 
>>532406

В бодишопах тоже собеседования строгие. С видеокурсами максимум можно рассчитывать на провинциальную вебстудию.
Аноним 19/08/15 Срд 11:57:03 #122 №532413 
>>532410
А с чем можно рассчитывать хотя бы на бодишоп?
Аноним 19/08/15 Срд 11:59:30 #123 №532415 
>5. Arguably the best documentation for any language"

I should very much like to see that argument.

My impression of PHP documentation (after using it for three of the last five years) is that it's a endless pile of bullshit whose primary content is in user comments on the doc pages.

That's the core library. Third party libraries are typically wholly uncommented and undocumented.
Аноним 19/08/15 Срд 12:19:51 #124 №532426 
>>532410
я и живу в провинции, на что мне еще рассчитывать лол?
зато в видео все понятно, а от голой теории у меня жопа болит, потому что я перестаю ее понимать, если не вижу результат вывода.
Аноним 19/08/15 Срд 12:37:24 #125 №532438 
Мне кажется если вас всех избить, то у вас будет получаться лучше.
Аноним 19/08/15 Срд 12:47:14 #126 №532444 
>>532426

Ты ее не понимаешь так как скачешь по верхам, пропускаешь темы и берешься сразу за сложное.
Аноним 19/08/15 Срд 13:25:15 #127 №532456 
>>532438
Тебе в /hc
Аноним 19/08/15 Срд 13:39:42 #128 №532461 
>>532379
В общем вот что получилось.

fontsmaket.esy.es
Аноним 19/08/15 Срд 13:45:16 #129 №532465 
>>532444
А что я должен, калькуляторы сидеть писать?
Аноним 19/08/15 Срд 13:50:48 #130 №532474 
14399814482100.png
>>532406
Заябись книжку по ОПП за 90й год качнул да? Остальное про ООП мусолится то, что в любой онлайн документации есть. Вот очень мне интересно сидеть вычитывать, как в 1 и 2й версии обоже ООП не было, а потом какой-то хуй внезапно решил его ввести и насколько это спорный подход блаблабла, очень практично и очень пригодится столь ценное знание, чтобы понтануться перед столичными очкариками из Яндекса, что я аж обоже целую книгу про ОПП прочитал и теперь знаю ОБОЖЕ историю введения опп в пхп обожежежежежеж?
Аноним 19/08/15 Срд 14:18:35 #131 №532490 
>>532474
Качни последнюю «Java in a Nutshell» и ещё по C# есть неплохие книги.
Аноним 19/08/15 Срд 15:00:44 #132 №532508 
14399856441820.jpg
>>532474
Видишь этот взгляд?
Это презрение.
Аноним 19/08/15 Срд 15:22:33 #133 №532520 
>>532508
Фаулеру можно.
Но ты не Фаулер.
Аноним 19/08/15 Срд 15:38:46 #134 №532525 
14399879263560.png
>>532316
Если я правильно понял: у варианта ответа с вводом числа с клавиатуры есть свойства "правильное число" и "погрешность"; у варианта с вводом строки свойство "правильная строка"; у вопросов с вариантами вроде бы нет доп.свойств, но зато для них есть таблица с вариантами ответов.

Тогда так https://gist.github.com/nsdvw/b19480f1dd4f2f7f8de5

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

По нормализации имею общее представление.
Если своими словами, то первая нф: атомарность - в одной ячейке должно храниться только одно значение; вторая: неизбыточность - все свойства должны зависеть от первичного ключа, атрибуты зависящие от других атрибутов нужно выносить во внешние справочники; третья нф: транзитивность - поля не должны быть взаимоисключающими, например название города и почтовый индекс.
Аноним 19/08/15 Срд 15:40:08 #135 №532526 
>>532490
по шарпу да, но не пхп же.
Аноним 19/08/15 Срд 16:41:24 #136 №532531 
>>532314
Ну и нахуй ты столько написал? Я писал, что нельзя сравнить по-нормальному, без ебаных эпсилонов или подключения сторонних модулей. В перле с этим лучше >>532309. Если в том абсурдном примере, который ты привел, заменить != на ne, то флоаты будут сравнены по-нормальному.
А все, что ты написал наилегчайше гуглится/придумывается и вообще в официальном мане на странице флоатов все это обсосано в комментах.
>>532321
Большинство задач в веб-программировании решается без каких-либо тугих умственных размышлений, почти все можно решить на опыте и знаниях. Там даже хорошо, если чувак не выебывается и пишет тупой, одноклеточный код. Тем более, если это фронтенд.
Аноним 19/08/15 Срд 17:11:05 #137 №532553 
>>532531

Ты по моему так ничего и не понял
Аноним 19/08/15 Срд 17:12:02 #138 №532555 
>>532553
Ахах, объясни еще раз.
someApprentice 20/08/15 Чтв 00:09:06 #139 №532786 
https://github.com/someApprentice/Cat-and-Mouse

Итак, кошки и мышки введут себя совершенно странно: выходят за придел карты, появляются где заходят и вообще ведут себя как захотят!
Уверен, что я просто где-то ошибся в этих строках:
https://github.com/someApprentice/Cat-and-Mouse/blob/master/Classes/Mouse.php#L23-L43
https://github.com/someApprentice/Cat-and-Mouse/blob/master/Classes/Cat.php#L22-L42

Я помню, что ты предлагал мне высчитывать по балам наиболее выгодный ход, но мне интересней сначала высчитать площадь "опасной" зоны для мышки (в случае если несколько кошек окружают мышку) и потом можно так же по балам высчитать наиболее выгодный ход.
Аноним 20/08/15 Чтв 13:51:48 #140 №532946 
>>532786

Насчет поиска ошибок, сделай так: уменьши число мышей и кошек до 1-2-3 и сделай вывод при каждом ходе кто и как ходит, вроде

Мышь 1 переместилась с (10, 20) на (20, 30)

Чтобы увидеть где именно начинается странное поведение. После этого добавь вывод переменных, которые влияют на выбор хода (например $from, $speed, $x, $y из твоего примера) чтобы понять что приводит к таким ошибкам.

То есть мы идем от места ошибки к ее источникам.

Попробуй сначала найти ошибку сам. Если не получится, тогда я могу глянуть код.
Аноним 20/08/15 Чтв 17:26:06 #141 №533055 
Котаны как остаток добить? http://ideone.com/naBQNj
 Аноним 20/08/15 Чтв 17:45:04 #142 №533079 
Кто-нибудь из Перми есть? У меня есть большой гараж, го коворкинг центр замутим. Вместе будем пхп изучать, мб стартап замутим. Там чисто, не воняет, но надо всякую фигню выкинуть, поставить столы, стулья, диваны. Интернет через usb-модем только, потому что там нет провода к модему.

У меня идея для стартапа: приложение, которое позволяет установить дату для изменения. Т.е. например 1 января 2017 года мы меняем Х на Y, все подписываются, форсят пост (петиция, ватева), обсуждают, а кто после 1 числа не выполнил изменение, тот лох и пидр. Монетизация за счёт рекламы и спонсорских постов.
Аноним 20/08/15 Чтв 18:15:18 #143 №533108 

<?php
class foo {
var $bar = 'I am bar.';
}

$foo = new foo();
$bar = 'bar';
$baz = array('foo', 'bar', 'baz', 'quux');
echo "{$foo->$bar}\n";
echo "{$foo->$baz[1]}\n";
?>

Результат выполнения данного примера:

I am bar.
I am bar.


Почему
echo "{$foo->$baz[1]}\n"; но в классе foo нет массива baz
Аноним 20/08/15 Чтв 18:26:17 #144 №533123 
>>533079
> приложение, которое позволяет установить дату для изменения. Т.е. например 1 января 2017 года мы меняем Х на Y, все подписываются, форсят пост (петиция, ватева), обсуждают, а кто после 1 числа не выполнил изменение, тот лох и пидр
Не понял нихуя. Твоё приложение может изменить семнадцать миллионов строчек кода?
Аноним 20/08/15 Чтв 18:29:33 #145 №533126 
>>533108
$foo->$baz[1]
Вместо $baz[1] очевидно подставится его значение, то есть 'bar' (в массивах отсчет идет с нуля, поэтому элемент под индексом 1 это второй по счету). Поэтому выполнится $foo->bar.

>var $bar
Так писали в старом php4.
sageАноним 20/08/15 Чтв 18:31:23 #146 №533128 
>>533108
Потому что пхп - говно. Привыкай.
Аноним 20/08/15 Чтв 18:35:58 #147 №533134 
>>533126
>$foo->$baz[1]
Спасибо, но
Мы обращаемся к элементу массива расположенного в объекте класса foo, но baz находится вне класса foo, вот это вот не понятно
Аноним 20/08/15 Чтв 18:36:33 #148 №533136 
>>533126
Так написано в документации на русском
Аноним 20/08/15 Чтв 18:41:26 #149 №533143 
Чем отличается elseif от else if кроме как возможности переноса if на новую строку?
Аноним 20/08/15 Чтв 18:49:29 #150 №533150 
>>533134
>Мы обращаемся к элементу массива расположенного в объекте класса foo,
Ты как-то неправильно себе это представляешь.
Смотри, есть переменная $baz[1], ее значение строка 'bar'.
Ну вот это значение и подставляется вместо $baz[1] в выражении $foo->$baz[1].
То же самое, если ты напишешь
$word = 'hello';
echo $word;
Выведет строку 'hello'.
http://ideone.com/yS6r0Z

>>533143
Ничем, но else if (раздельно) нельзя использовать в альтернативном синтаксисе (с двоеточием).
http://php.net/manual/ru/control-structures.elseif.php
Так что лучше в php всегда использовать elseif, а else if оставить для js и не путаться.
Аноним 20/08/15 Чтв 18:51:15 #151 №533155 
>>533134
Ёбана, ты обращаешья к свойству объекта, используя переменную вместо прямого указания свойства. Т.е. $foo->$baz[1] а не $foo->baz[1], а $baz[1] у тебя имеет значение bar.
Аноним 20/08/15 Чтв 18:53:49 #152 №533158 
>>533155
>>533150
Да понял я понял что заменяется, вопрос в другом, как-то нелогично сделано.
Аноним 20/08/15 Чтв 18:55:52 #153 №533161 
>>533155
Тогда где он будет искать массив baz? Во всем файле или в своем блоке/области видимости?
Аноним 20/08/15 Чтв 18:59:43 #154 №533163 
>>533158
Переменные как бы для того и нужны, что тут нелогичного.
>>533161
В своей области видимости искать будет, в данном случае везде кроме объекта foo.
Аноним 20/08/15 Чтв 19:00:08 #155 №533165 
>>533161
В глобальной области конечно.
Это самая обычная переменная.

function foo() {echo 'hello, foo';}
function bar() {echo 'hello, bar';}
$x = 'foo';
$x(); // выведет 'hello, foo'
$x = 'bar';
$x(); // выведет 'hello, bar'

Вместо переменной подставляется ее значение, вот и все. С массивами то же самое, потому что элементы массива это обычные переменные.
Аноним 20/08/15 Чтв 19:02:35 #156 №533167 
>>533165
>$x = 'foo';
>$x(); // выведет 'hello, foo'
кошмар
Аноним 20/08/15 Чтв 19:14:15 #157 №533177 
>>532340
Помогите, в чем ошибка
Аноним 20/08/15 Чтв 19:28:16 #158 №533184 
Подскажите плиз как зациклить $balance?

for ($god = 1; $god <= 20; $god ++) {

$ostatokNekto = $nekto $procent;
$balance = $ostatokNekto
$procent;
$ostatokLet = $let + $god;
echo "{$god} год спустя {$balance} лет человеку {$ostatokLet}\n";
Аноним 20/08/15 Чтв 19:32:15 #159 №533187 
>>533108

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

$foo->$baz[1] равносильно $foo->{$baz[1]} то есть приоритет операций идет не слева направо. И как я помню, в последних версиях этот приоритет то ли поменяли то ли решили оставить.

>>533136

Значит этот абзац в документации остался со времен PHP4. Документация большая, всю ее в один день не перепишешь.

>>533143

elseif выглядит аккауратнее и является часть одно большого оператора if, а else if выглядит неаккуратно и является опереатором if внутри блока else.

>>533158

Есть такое понятние как приоритет операций. Ты же не возмущаешься что в математике сначала выполняется умножение, а потом сложение? Также, есть особенности парсера который разбирает код.

Ну и как я написал выше, такой код все равно писать нельзя.

>>533161

Он будет искать его по тем же правилам что и обычную переменную, в зависимости от того происходит дело внутри функции или снаружи.

>>533163

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

>>532340
>>533177

> for (var i = 0; i < arguments.length; i++) {
> args = arguments;
Ты не очищаешь массив args и при втором вызове seq() в нем останутся аргументы с предыдущего раза которые могут добавиться к текущим.

> res = a(gen(args));
gen(args) это не то же самое что gen(1, 2, 3). В первом случае ты передаешь один аргумент-массив, во втором 3 аргумента.

Чтобы передать массив как отдельные аргументы, надо использовать методы call либо apply:

http://javascript.ru/Function/apply
https://learn.javascript.ru/call-apply
Аноним 20/08/15 Чтв 19:33:30 #160 №533188 
>>532340
>>533177

Также я не понимаю, зачем тут переменная res (и кстати не сокращай, пиши result). Какой смысл что ты кладешь что-то в переменную и никуда дальше не передаешь?

Также, я не понимаю, почему переменные объявлены во внешней функции. Есть необходимость чтобы они сохранялись между вызовами внутренней? По моему такой необходимости нет.
Аноним 20/08/15 Чтв 19:34:55 #161 №533190 
>>533184

Переменная может вычисляться через ее старое значение, если она существует к этому моменту:

$balance = $balance + ...
$balance = $balance × ...

Если я правильно тебя понял.
Аноним 20/08/15 Чтв 19:44:42 #162 №533196 
>>533190
http://ideone.com/Y8pZ8K
Полный код что-бы понятнее.
Аноним 20/08/15 Чтв 20:17:44 #163 №533209 
А можно сделать чтобы функция возвращала два или более значений?
Аноним 20/08/15 Чтв 20:18:17 #164 №533211 
Как определить, что запрос был сделан аяксом?
На stackoverflow говорят прикреплять заголовок xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest")
и проверять его в массиве $_SERVER.
http://stackoverflow.com/questions/2579254/does-serverhttp-x-requested-with-exist-in-php-or-not

Вроде работает, но на всякий случай переспрашиваю, все-таки пять лет прошло, вдруг придумали что-нибудь новое.

>>533209
Массив возвращать.
Аноним 20/08/15 Чтв 20:18:54 #165 №533212 
>>533209
в пхп указатели есть?
Аноним 20/08/15 Чтв 20:20:13 #166 №533214 
14400912130660.jpg
>>533211
>Массив возвращать.
а вызывать в таком случае как её?
$array = array(funcName($arg, $arg2), funcName2($args...))


?так штоле?
Аноним 20/08/15 Чтв 20:21:19 #167 №533215 
>>533212
до 5.4 были ссылки.
Аноним 20/08/15 Чтв 20:21:38 #168 №533216 
>>533212
Указатели на сосач.
Аноним 20/08/15 Чтв 20:21:54 #169 №533217 
>>533215
сейчас есть?
Аноним 20/08/15 Чтв 20:25:58 #170 №533221 
>>533214
Чо? Как обычно вызывать. хотя хуй этот пых знает
Аноним 20/08/15 Чтв 20:26:03 #171 №533222 
>>533217
зависит от тебя кеек
Аноним 20/08/15 Чтв 20:26:42 #172 №533223 
>>533222
в 5.7 есть?
Аноним 20/08/15 Чтв 20:46:10 #173 №533242 
Что я пишу
<?php
$opName = "молодец";
for($i = 1; $i <= 10; $i ++) {
echo "Say\n {$i}";
}

ЧТо
<?php
$opName = "молодец";
for($i = 1; $i <= 10; $i ++) {
echo "Say\n $i";
}

Вывод один и тот же. В чем отичие "{$i}" и просто "$i".


Никто не сталкивался с проблемой, почему \n не переносит строку?
Аноним 20/08/15 Чтв 21:00:13 #174 №533251 
>>533211

> Как определить, что запрос был сделан аяксом?
А зачем? Что, аякс-запросы чем-то особенные?

Если это должно определять на тип результата (например вернуть JSON вместо HTML) то просто добавь явный параметр: /get/something?result=json

Иначе у тебя создается дурацкая ситуация когда один и тот же URL возвращает разные типы данных и это очень невесело отлаживать. Также, при одинаковом URL кеш может закешировать HTML ответ и вернуть при попытке запросить JSON. Это верный путь к быдлокодерству.

> На stackoverflow говорят прикреплять заголовок xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest")
Так делает jQuery но я считаю надо явно указывать что тебе требуется в URL. Иначе ты запутываешь код и получаешь проблемы с кешированием. Ну и дети с SO видимо плохо разбираются в HTTP.

По идее в HTTP уже есть заголовок Accept. Клиент может указать в нем тип данных, который он хотел бы получить. Например аякс-запрос мог бы указывать там Accept: application/json. Но это ведет к тем же самым проблемам.

Так что указывай параметр в URL.

>>533212

Есть ссылки, но в 99% они не нужны и ты делаешь то-то не то.

>>533214

$array = dSomething();

>>533217

Мануал бы открыл https://www.google.ru/search?q=php+%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B8&oq=php+%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B8&aqs=chrome..69i57j0l3.2608j0j7&sourceid=chrome&es_sm=0&ie=UTF-8

>>533242

> В чем отичие "{$i}" и просто "$i".
Мануал http://php.net/manual/ru/language.types.string.php#language.types.string.parsing

> почему \n не переносит строку?
Ты в браузере страницу открываешь? \n работает, открой исходный код страницы (Ctrl + U). Просто на самой странице не отображается по правилам HTML.

Чтобы переносы строк нормально работали и в браузере и в ideone (и в консоли), можно использовать для этого \n, а в начале программы поставить

header("Content-Type: text/plain; charset=utf-8");

Это заставит браузер воспринимать то, что выводит твоя программа, как обычный текст, а не HTML, и уважать переносы строк в нем (так как в языке HTML перенос строки равносилен пробелу).

Иначе перенос строки будет в исходном коде страницы (его можно увидеть нажав Ctrl + U), но на самой странице его не будет.

Аноним 20/08/15 Чтв 21:08:23 #175 №533255 
>>533196

Тебе надо сделать как в моем посте. Ну к примеру чтобы каждый раз увеличивать сумму на 5, можно написать

$balance = $balance + 5;

И в учебнике (во втором уроке по моему) написан способ записать это короче.

Также, не называй переменные транслитом, не знаешь английский, используй гугл транслейт или яндекс-словари. А русские слова лучше писать в комментариях русскими буквами.
Аноним 20/08/15 Чтв 21:09:09 #176 №533256 
>>533251
Спасибо
Аноним 20/08/15 Чтв 21:22:28 #177 №533268 
>>533255
Спасибки про транслит я помню.
Аноним 20/08/15 Чтв 21:26:33 #178 №533270 
>>533251
Легитимный ОП, ты ли это?
Аноним 20/08/15 Чтв 21:34:56 #179 №533276 
что-то тиипа такого
echo "{${$volume + $credit}} \n";
Аноним 20/08/15 Чтв 21:35:15 #180 №533277 
>>533276
Как вывести именно сумму
Аноним 20/08/15 Чтв 21:39:36 #181 №533279 
пишет Undefined variable
Как ее определить?
Аноним 20/08/15 Чтв 21:40:17 #182 №533280 
А нет, не то
Аноним 20/08/15 Чтв 21:52:18 #183 №533292 
Вот у меня есть две переменные $a = 1, $b = 2;
Как вывести их сумму? То есть
echo "{${$a + $b}}" пишу так, он пишет undefined variable
Как определить эту переменную?
Аноним 20/08/15 Чтв 22:09:45 #184 №533303 
>>533292
А так нельзя?
echo $a + $b;
Аноним 20/08/15 Чтв 22:40:08 #185 №533330 
>>533292

Ты какую-то ерунду нагородил. Зачем эти доллары и скобки? Пиши echo $a + $b;

Аноним 20/08/15 Чтв 22:41:06 #186 №533331 
>>533292

А если тебе надо это вставить в текст, лучш всего завести отдельную переменную:

$c = $a + $b;
echo "С равно $c\n";
Аноним 20/08/15 Чтв 23:31:38 #187 №533380 
>>531765 (OP)
>- По PHP: Профессиональное программирование на PHP Джордж Шлосснейгл
Может есть у кого в fb2?
4 задание по JS Аноним 21/08/15 Птн 01:19:22 #188 №533425 
Ребята, просто скажите, что исправить, чтобы задачка решилась.
Не нужно мне давать никаких статей читать.
Просто скажите, что исправить.

function fmap(a, gen) {
var args = [];
for (var i = 0; i < arguments.length; i++) {
args = arguments;
}
return function seq(){
res = a(gen.apply(undefined, args));
args = [];
return res;
}
}
Аноним 21/08/15 Птн 01:32:33 #189 №533430 
>>533425

> Не нужно мне давать никаких статей читать.
Почему?

> Просто скажите, что исправить.
Суть задачек в том чтобы научиться. От готовых ответов ты ничему не научишься.
Аноним 21/08/15 Птн 01:36:04 #190 №533431 
>>533430
потому что у меня уходит на одну простую задачку 1-2 дня
пишешь-пишешь, зайдешь в тупик, пишешь сюда, тут ждешь ответа пару часов, потом исправляешь то, что тебе сказали, а оно все равно не работает


Аноним 21/08/15 Птн 01:36:51 #191 №533432 
убивается вся мотивация
я уже сделал максимум, что я мог сделать
но ее решить не могу.

хочу посмотреть ответ и пойти дальше
Аноним 21/08/15 Птн 01:50:33 #192 №533433 
>>533432
>потому что у меня уходит на одну простую задачку 1-2 дня
Это нормально. Там нет простых задач, по крайней мере для начинающих.
Нужно научиться терпению, для программиста усидчивость, внимательность и упорство одни из главных качеств.
Тем более в php, здесь и мозгов не нужно, только трудолюбие.
Да и куда тебе спешить, ты же мелкобуквенный школьник, у тебя полно времени.
Аноним 21/08/15 Птн 01:58:48 #193 №533435 
Лол, сделал все-таки ее.
function fmap(a, gen) {
return function seq(){
var args = [];
for (var i = 0; i < arguments.length; i++) {
args = arguments;
}
res = a(gen.apply(gen, args));
args = [];
return res;
}
}
Аноним 21/08/15 Птн 02:42:58 #194 №533438 
>>533431

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

Если не получается, запости снова код и проси подсказку, а не готовое решение.

Ну и морально готовься что все равно придется прочитать весь learn.javascript.ru, так как там много полезного.

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

> for (var i = 0; i < arguments.length; i++) {
> args = arguments;
Это так и написано или вакаба съела символы [ ] ? Лучше постить код на jsfiddle тогда.

Далее, ты составляешь список аргументов в момент вызова fmap, а по условиям задачи, что надо передавать в gen? Список аргументов при вызове fmap (включая a и gen) или список аругментов при вызове внутренней функции seq?

Далее, args = [] , а это зачем?

Далее,
> res = ...
Ты создаешь глобальную переменную и это плохо, необходимости в этом нет, почему var забыл? Чтобы не забывать, пиши в начале функции

"use strict";

тогда точно забыть не получится.

Ну и наконец, для копирования аргументов вместо цикла for можно использовать хитрый трюк, мы можем взять метод slice() у массива и подсунуть ему вместо массива псевдомассив arguments, как описано тут: http://javascript.ru/arguments

Этот трюк часто используют так как он короче.

Насчет того, что приходится ждать. Да, советчиков тут не очень много и у них есть другие дела. Чтобы не ждать никого, ты можешь параллельно начать решать следующую задачу или например задачки на HTML/CSS или PHP, если ты ими интересуешься. Ну то есть подумай сам, как эффективнее организовать, я не ведь запрещаю несколько задач параллельно решать.

>>533432

Нет, ты не сделал все, что смог. Если ты будешь заниматься программированием (пока ты только изучаешь основы) то каждый раз перед тобой будет стоять какая-нибудь новая проблема. Однако задача программиста как раз их решать. Иначе они были бы не нужны.

Ну и ты можешь решать другие задачи пока ждешь подсказки. Это же не запрещается.

>>533435

Ты же 2 поста выше написал что сделал все что мог и решить ее не можешь!

Раз ты смог, тогда улучши код:

— добавь "use strict"; в начале функции и перепроверь (описание строгого режима: https://learn.javascript.ru/strict-mode ), в начале скрипта может не срабтать. Скорее всего будет ошибка из-за переменной res

— не сокращай названия, пиши result вместо res

— избавься от переменной res, она не нужна так как мы можем сразу вернуть результат без сохранения в переменную. Очищать args не требуется так как это локальная переменная и она уничтожится при выходе из функции.

Также рекомендую показать решения других задач, вдруг там есть что исправить.
Аноним 21/08/15 Птн 03:06:13 #195 №533440 
На некоторых зарубежных сайтах иногда вижу вежливые предупреждения об использовании кук. Это просто тактичность, или может есть какие-то технические моменты, о которых нужно знать разработчику?
Что такого страшного в кукисах, чтобы писать о них ворнинги?

Например:
Ironmaiden.com uses cookies, by continuing to browse the site, you are agreeing to our use of cookies. Click here to find out more.
Аноним 21/08/15 Птн 03:16:28 #196 №533441 
>>533440

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

На моем сайте кстати внизу тоже про это написано мелким шрифтом.
Аноним 21/08/15 Птн 03:18:21 #197 №533442 
>>533440

Вообще, закон задумывался как лучше, предупредить пользователя что за ним следят, но вышло в итоге куча надоедливых предупреждений. А как избавиться от слежки? Сложно, но для начала можно отключить куки на всех сайтах кроме тех где они нужны (где есть логин или что-то сохраняется в куки). Хром позволяет делать такие вещи, я например отключил яваскрипт на всех сайтах кроме нескольких доверенных.
Аноним 21/08/15 Птн 03:57:04 #198 №533444 
>>533441
А что за секретные данные могут попасть в куки, что так беспокоиться о них? Ну пароль от этого конкретного сайта, статистика посещения.
Не понимаю, в чем конкретно угроза безопасности. Даже если куки будут украдены посторонними личностями, не вижу ничего смертельного.

>>533442
>как избавиться от слежки?
В чем слежка? Что запишут мой айпи или пароль на конкретном сайте?
Да и слежки бояться, на улицу не выходить. В людях заложено пялиться друг на друга и оценивать, лезть не в свое дело.
А в будущем города будут усеяны видеокамерами, и все операции производиться по биометрическим данным (например отпечатки пальцев вместо кредитной карты в магазине). Так что параноикам не поздоровится.
Аноним 21/08/15 Птн 04:31:10 #199 №533445 
>>533444

С помощью кук сайт может следить за тобой. Он может запомнить когда и откуда ты пришел на сайт, что делал, куда ушел, даже если ты там был несколько месяцев назад. Это куки сайта, они действуют в пределах одного домена. То есть в общем выглядит не страшно.

Но есть вещь и похуже — это 3rd party (сторонние) куки. Эти куки ставят системы аналитики и рекламные системы так, что кука доступна на всех подключенных к ним сайтам и позволяет отслеживать твое перемещение по сети (куки ставятся в ифрейме либо посылаются при запросе скрипта со стороннего сайта, если тебе интересно). На какие сайты заходишь, какие поисковые запросы вводишь. Та же Google Analytics установлена на большинстве сайтов.

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

Было где-то демо, ты заходишь и тебе показывают последние посещенные тобой сайты, данные извлекаются из какой-то рекламной системы которая следит за пользователями через кнопки шаринга или что-то такое. Оно сейчас не рабоает, статья тут: http://habrahabr.ru/post/254217/

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

http://siliconrus.com/2014/03/florist-prices/
http://siliconrus.com/2014/08/more-mac/

Внимательный читатель заметит что система слежки не очень совершенна если у пользователя несколько устройств, например компьютер и айпад. Можно ли как-то исправить этот недостаток? Ну конечно, можно. Во-первых, андроид-устройства требуют от тебя ввести логин на гугле, по которому можно связать тебя с твоим компьютером (если на нем ты его исопльзуешь), причем Гугл кроме твоего логина как бонус получает твой номер телефона, данные симки. Но эти данные доступны только гуглу, что же делать другим рекламным сетям которые пока не способны выпустить ОС для смартфонов? На помощь придет провайдер который добавит в передаваемые браузером на сайт данные идентификатор клиента: http://habrahabr.ru/post/247465/

Это на мой взгляд особая степень свинства. Я пользуюсь интернетом не бесплатно, я за него плачу не для того чтобы мои данные продавались направо и налево.

Ты не беспокоишься? Прекрасно, но жругие могут так не думать.Как минимум это неприятно.

И надеюсь мой рассказ объяснит тебе мотивацию, почему крупные компании тратят большие деньги на разработку и бесплатно распространяют свои операционные системы и браузеры (точнее, гугл тратит, а мейл ру просто поменял скин и адрес для отправки собранных данных).

Также, тут есть политический момент. Самый популярный браузер — Гугл Хром, популярная система аналитики Google Analytics, самые популярные смартфоны это Android и iPhone,и как-то само собой вышло так, что вся эти информация со всего мира стекается в Калифорнию. По твоему, это справедливо, что гигантские массивы данных идут туда (и угадай с 3 раз, собирает ли их американская разведка или нет), а не например в Москву? Я считаю, несправедливо. Тем более как мы знаем, многие наши крупные руководители пользуются американской техникой с так называемыми «облачными» технологиями которые заботливо «бекапят» (это в наше время так называется) всю информацию прямиком на сервера подконтрольные США. Это конечно немного другая история, но все равно нехорошо как-то.

> В людях заложено пялиться друг на друга
Одно дело ты видишь на улице тысячу человек и ни одного не запомнил, другое дело, набираешь «Иван Иванов» и видишь полное досье и историю посещенных страниц.
someApprentice 21/08/15 Птн 04:34:32 #200 №533447 
https://ideone.com/5nFbAL - как это понимать?
Аноним 21/08/15 Птн 04:40:23 #201 №533448 
>>533447

case равносилен такому:

$value = $i; // вычисляем выражение в switch 1 раз

if ($value == ($i > 0)) { ... } // по очереди сравнивем его с выражениями в case
elseif ($value == (($i < 0))) { ... }
else { ...}

Обычно только пишут так:

switch (true) {
case $x == 1 : ...
case $x > 5: ...
..
}

А у тебя какой-то особо усложеннный пример. Не пиши такой код.
Аноним 21/08/15 Птн 04:46:10 #202 №533450 
>>533444

Ну и говоря об улице. Ты не имеешь права просто так следить на улице за кем угодно, в законе есть соответствующая (уголовная) ответственность. Вопрос, а почему бы не применить аналогичные нормы к умникам, которые пытаются стоять за спиной и пялиться в твой монитор с помощью всех этих систем?
Аноним 21/08/15 Птн 05:09:21 #203 №533452 
14401229610540.gif
Напоследок не могу не скопировать картинку с той статьи про анонимность.
Аноним 21/08/15 Птн 06:01:33 #204 №533459 
делаю файлообменник на слиме. Чтобы юзер мог выбирать галочку публичный-не публичный файл в поле нужно ставить значение ENUM "0", "1"? И тогда, если он ставит галку в чекбоксе, то в поле передается значение 1, в ином случае поле будет иметь значение ноль?
Аноним 21/08/15 Птн 06:04:53 #205 №533460 
>>533108
зачем два разаз определять переменую bar?
Аноним 21/08/15 Птн 06:15:38 #206 №533461 
14401269384410.jpg
>>533445
Довольно познавательно. Меня всегда интересовал вопрос безопасности. Довольно долгое время меня беспокоит вопрос о Tor Browser. У него открытый код, но поскольку я не очень хороший программист, я не понимаю что там написано. Плюс ко всему меня настораживает что проект начинался в армии США.
Аноним 21/08/15 Птн 06:16:03 #207 №533462 
>>533445
кстати, да, если ты не вылогинился из своих соцсетей, то чисто теоретически на стороннем сайте могут узнать айди соцсети. То же самое с регистрацией, когда вводишь на левых сайтах мыло и пароль, который у тебя от мыла - просто могут смотреть твой ящик, привязку вебкошелька, да вообще что угодно. Особенно эта параноай развивается, если проводишь все время в сети.
someApprentice 21/08/15 Птн 06:18:16 #208 №533463 
14401270968120.jpg
>>533461
Забыл подписаться...
Аноним 21/08/15 Птн 06:32:12 #209 №533464 
>>533445
>По твоему, это справедливо, что гигантские массивы данных идут туда (и угадай с 3 раз, собирает ли их американская разведка или нет), а не например в Москву? Я считаю, несправедливо.
Пидораха, залогинься.
Аноним 21/08/15 Птн 06:34:18 #210 №533465 
>>533461
Да, дети, не стоит читать забаненные роскомом новостные сайты через Тор, фу быть такими, сидите в чебурашке не рыпайтесь.
Аноним 21/08/15 Птн 07:32:00 #211 №533473 
Какую IDE для php выбрать? Установил всякие апачи, но в книжке пишут что лучше прогать в иде
Аноним 21/08/15 Птн 14:43:39 #212 №533475 
>>533473
Brackets ставь и хватит.
Аноним 21/08/15 Птн 14:43:53 #213 №533476 
>>533473
PhpStorm. на рутрэкере есть с ключом.
Аноним 21/08/15 Птн 14:44:32 #214 №533478 
>>533462
Не знаю, я в целях "безопасности" использую фейки.
В соцсетях у меня только в вк пустая страница, почты постоянной вообще нет. Часто пользуюсь угнанными у быдла акаунтами. В прошлом году выкладывали 4 млн взломанных ящиков мэйлру, оставил себе около сотни.
Не понимаю, чем мне может навредить даже потеря такого акаунта, не говоря уже о том, что кто-то узнает айди.

>>533450
>Ты не имеешь права просто так следить на улице за кем угодно
Совсем зажрались в своей Москве.
Тут на улице быдло может тебя невозбранно и обматерить и побить, а на него видите ли смотреть незаконно.
Аноним 21/08/15 Птн 15:18:33 #215 №533492 
>>533473
Вот: https://en.wikipedia.org/wiki/List_of_PHP_editors
Из бесплатных самый популярный Sublime Text 3.
Есть ещё гитхабовский Atom: https://atom.io/
Аноним 21/08/15 Птн 15:35:58 #216 №533501 
Добрый день, тредик. Давненько не заходил к вам, в основном потому что на работе хватает общения с php в последнее время и завален задачками. (работаю уже 4 месяца)

Зашел к вам, что бы спросить о подводных камнях по следующей теме: В общем мне дали таск написать сервис рассылки писем.

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

Можно как я понимаю слать письма напрямую средствами php - http://php.net/manual/ru/function.mail.php

либо через smtp сервер.

Через что лучше слать?
Я плохо пока понимаю с чем имею дело и простите за тупые вопросы.
Аноним 21/08/15 Птн 15:46:37 #217 №533506 
>>533501
А, еще кое что забыл. Как реализовать отписку от рассылки? Пока думаю что в базу вкручу каждому пользователю уникальный токен, который будет приходить в письме вместе со ссылкой на скрипт для отписки

site.ru/unsubscripe.php?token=current_user_token

ну и в базе будет меняться значение у поля:
subscribed на false
соответственно в дальнейшем пользователь который прошел единожды посвоей ссылчке - больше не будет беспокоен.

Выглядит просто, есть ли другие более изящные вариант?

Аноним 21/08/15 Птн 15:50:16 #218 №533509 
>>533506
Какие фреймворки ты знаешь? (Риторический вопрос)
Аноним 21/08/15 Птн 16:06:58 #219 №533518 
14401624186760.jpg
>>533509
На Codeigniter на работке ковыряюсь. У меня под рукой даже есть функция рассылки писем в одном проекте, а что?
Кун с макетом. maketi.esy.es 21/08/15 Птн 16:37:01 #220 №533538 
В общем, ОП, я не стал ждать когда дашь свой комментарий по поводу тестового сайта со шрифтами. И попытался настроить шрифты на макете. Вроде бы получилось.

Конвертировал в разные форматы. Получил 5 форматов, все их оставил, подсоединил. Вес папки шрифтов в 3 раза уменьшился. Потому как оставил только нужные шрифты, а именно обычный и жирный. При том, что можно еще уменьшить, удалив ненужные форматы.

В хроме, яндексе, IE, торе, мозилле, опере и с андройда шрифты подключенные видно.

И да, я знаю что по дизайну этот шрифт очень не подходит, но ведь главное, что я научился подключать шрифты? Не подходит еще и потому, что я нашел сайт, который по картинке определяет шрифт и тот, который используется в макете платный и стоит 79 долларов. Пиратской версии гугл не выдал да, я помню, что пиратские не надо использовать, особенно с зарубежными заказчиками, но ради тренировки на макете все-таки поискал.

И да, в IE теперь при наведении нормально углы срезаются на работах в портфолии, но вот не помню чтобы я это чинил, магия какая-то.
Аноним 21/08/15 Птн 16:45:23 #221 №533545 
Как узнать список модулей апача (на хостинге, например) средствами php?
Мне нужно отдавать файл через readfile, если не включен x-sendfile. Как это проверить?
apache_get_modules не предлагать, ибо он в списке disable_functions.
Аноним 21/08/15 Птн 17:02:26 #222 №533558 
>>531765 (OP)
Оп, я почти случайно зашел в /пр, по своим делам, и случайно же увидел этот тред.
Такая-то милота написана, читал оп пост и второй и не мог не улыбаться.
Добра тебе и удачи.
ОП 21/08/15 Птн 17:15:46 #223 №533569 
>>533558
Ой, спасибо милашка :З
Аноним 21/08/15 Птн 17:26:38 #224 №533580 
Делаю файлообменник, видео файлы принимать не хочет, говорит, слишком много байтов и content length выдает ошибку. Что делать-то? это XAMMP
Аноним 21/08/15 Птн 17:27:04 #225 №533581 
А вообще, кто учит, не хотите конфу организовать?
Аноним 21/08/15 Птн 17:29:32 #226 №533583 
>>533478
у меня не в вк, но в другой соцсети реалка, например. нет, ну не все же такие аутисты в сети одними фейками пользоваться, на тот же веб кошелек ты должен присылать свой паспорт, многие системы и программы требуют ввода телефона, который тоже зареген на паспорт.
Аноним 21/08/15 Птн 17:31:47 #227 №533587 
>>533581
Этот тред тогда что по-твоему?
Аноним 21/08/15 Птн 17:32:31 #228 №533588 
>>533581
Я не против, например, но где? Если в скайпе, то сразу нет. Зелло - неплохой вариант.
Аноним 21/08/15 Птн 17:38:15 #229 №533590 
>>533580
Есть лимиты на максимальный размер принимаемого файла и общий размер отсылаемых постом данных.
Выставляются в настройках php.ini
upload_max_filesize
post_max_size
Посмотри в phpinfo, чему они равны сейчас, выставь значение побольше.
Аноним 21/08/15 Птн 17:46:06 #230 №533594 
>>533588
У Паши можно. В Telegram.
Аноним 21/08/15 Птн 17:56:38 #231 №533596 
>>533509
И где ты? Зачем ты вообще спрашивал про фреймворки? Сижу теперь тебя жду пусть даже и просто за жизнь потереть, а не за рассылку
Аноним 21/08/15 Птн 18:09:26 #232 №533610 
>>533587
Ну вот например сегодня целый день не отправлялись посты, а если сосака упадет на неделю, где я буду задавать тупые вопросы?
Аноним 21/08/15 Птн 18:10:03 #233 №533611 
>>533590
спасибо
Аноним 21/08/15 Птн 18:35:22 #234 №533624 
Оп. Опять хочу потревожить тебя для уточнения задачи про кота и мышь.
Есть вот такая ситуация.
1 2 3 4 5 х
1 . . . . .
2 C M M . .
3 . M . . .
4 . . . . .
y
Вопрос:
1.Какую мышку можно съесть?.
2.Мышка на x = 2, y = 2 защищена?
2.Мышка на x = 2, y = 3 защищена?
Аноним 21/08/15 Птн 18:47:50 #235 №533632 
Сап, программач, хотел написать днем, но постинг не работал...
Подскажи, /pr/, вот мне достался по наследству от знакомого сайт, но я понятия не имею как им грамотно управлять. Решил решить проблему фундаментально, создать простенький сайтик ручками, без всяких CMS и прочего. Порыскал по форумам и напоролся на такой совет:
Сделай простой сайт (не статический, а с базой данных).
И усложняй, приделывая:
— админку для добавления, удаления и редактирования страниц (практика основных простых запросов к БД)
— сделай регистрацию и авторизацию на своем сайте (практика работы с $_POST и $_GET, сессии, cookies)
— сделай чтобы страницы могли быть вложенны друг в друга и чтобы можно было в админке изменять у страницы родителя. На сайте выводи дерево страницы. (познаешь основы «деревьев», рекурсию)
— сделай форму для закачки файла (практика прастейшей работы с файлами)
— сделай чтобы закачивалась картинка и масштабировалась (практика работы c библиотекой GD для работы с изображениями). Можно капчу попробовать сделать кстати.

Вопрос заключается в следующем. Если есть опыт работы с html, но абсолютно отсутствует знание PHP и представление о базах данных, то хватит ли мне первой ссылки ОП-трэда и вообще, нужна ли она? Нужны ли какие-то специфичные учебники по БД? Пользоваться консолью умею, практикую, MySQL установлен, как и Apache, но, опять же повторюсь, не имею понятия что это вообще такое.
Аноним 21/08/15 Птн 18:50:19 #236 №533635 
>>533624

Никакую. Можно только ходить вокруг и облизываться.
Аноним 21/08/15 Птн 18:54:09 #237 №533641 
>>533632

Я бы советовал посмотреть задачи из Оп поста про список студентов и файлообменник. Они тоже для начинающих но там подробные комментарии по реализации и они учат правильному коду. А в твоем задании нет никаких советов по архитектуре например.

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

> Нужны ли какие-то специфичные учебники по БД?
Нужны. В ОП посте есть задачи на SQL и там ссылки на туториалы для нубов.

Аноним 21/08/15 Птн 18:59:11 #238 №533645 
>>533641
Спасибо, буду работать.
Аноним 21/08/15 Птн 19:59:18 #239 №533670 
Как вывод системной команды построчно перенаправить в сокет?
Аноним 22/08/15 Суб 01:31:52 #240 №533696 
test
Аноним 22/08/15 Суб 01:55:09 #241 №533702 
Я вам посмеяться принес: http://siliconrus.com/2015/08/china-girls/
someApprentice 23/08/15 Вск 01:04:59 #242 №533714 
>>532946
ОПчик, я почти исправил все ошибки, осталась последняя:

Животные по карте перемещаются таким образом: https://ideone.com/UTm5nA

Так вот, когда дело доходит, что Кошка ловит Мышку, мышка не успевает понять что уже мертва, и ломает код пикрелейтед. Решение уже придумал:
Перед тем как передвинуть животное, нужно будет проверить не содержит ли ячейка, куда хочет переместиться, объект Животное, и если содержит, то вызвать метод этого животного, который "скажет" ему о смерти.
Перед тем это сделать у меня встал вопрос как проверить что это объект и обратиться к этому объекту?

if (is_object($this->map['x']['y]') или if (!$this->map['x']['y'] = '')?

И можно ли обратиться к объекту таким образом: $this->map['x']['y']->Die();

Сэнкс фо ридинг
Аноним 23/08/15 Вск 01:06:24 #243 №533715 
14402811843800.jpg
14402811843891.jpg
14402811844012.jpg
14402811844123.jpg
>>533714
Пики забыл прикрепить.
Аноним 23/08/15 Вск 01:06:57 #244 №533716 
Мануал по PHP от опа?
Аноним 23/08/15 Вск 10:11:35 #245 №533718 
https://www.youtube.com/watch?v=dYFaJiaK9lI
С 49:00 и до конца.
"Сделайте ваш код более декларативным...", "ООП призвано решить проблему изменяемого состояния в императивном программировании..." и т. д.
Чёт я не понял ничего. Что он хотел сказать?
Аноним 23/08/15 Вск 10:26:24 #246 №533721 
Аноны, как вы храните информацию? Evernote, org-mode и т.п.? Просто складируете файлы на диске? Облачные хранилища/органайзеры? Может кто-то юзает вики?
Аноним 23/08/15 Вск 10:27:32 #247 №533722 
>>533721
Какую информацию?
Аноним 23/08/15 Вск 10:30:17 #248 №533724 
>>531765 (OP)
Сколько мне еще эти сайты строчить? Я чот заебался уже файлообменник делать.
Аноним 23/08/15 Вск 10:31:58 #249 №533726 
Алсо как вот этой функцией отформатировать выводимые данные, как в ргхосте?
exif_read_data("file.jpg");
foreach($exif as $key=>$section) {
foreach($section as $name=>$val) {
echo "<tr><td>$name:</td><td>$val</td></tr>";
Аноним 23/08/15 Вск 10:32:39 #250 №533728 
>>533724
Не делай. Можешь попробовать устроиться на работу, если хочешь.
Аноним 23/08/15 Вск 10:36:57 #251 №533729 
>>533718
шизофрения какая-то.
Аноним 23/08/15 Вск 10:38:04 #252 №533730 
>>533728
Не получается чот( Все весомое портфолио требуют, опыт работы и знание более одного фреймворка.
Аноним 23/08/15 Вск 10:38:53 #253 №533732 
14403155336490.jpg
А нельзя просто сделать сайт, чтобы деньги приносил и все?
Аноним 23/08/15 Вск 10:39:39 #254 №533735 
>>533730
Ну делай, епт. Если задолбался, сходи развейся, и снова за работу.
Аноним 23/08/15 Вск 10:39:57 #255 №533736 
>>533732
Можно.
Аноним 23/08/15 Вск 10:47:09 #256 №533740 
>>533624
Оп, проконсультируй.
Заодно посмотри, пожалуйста, правильно ли я реализовал ,предложенный тобою, алгоритм.
https://github.com/Integer64/myTestSite.dev/blob/master/CatMouse/models/Cat.php>>533624
Аноним 23/08/15 Вск 11:03:44 #257 №533746 
>>533736
А как?)
>>533735
Я не могу развеяться, пока все не сделаю.
Аноним 23/08/15 Вск 11:07:27 #258 №533749 
>>533746
Сходи побегай, сделай физ-нагрузку, потом прими душ. И с чистой головой шуруй работать дальше над проектом.
Аноним 23/08/15 Вск 11:16:11 #259 №533751 
>>533740
Зачем ты диры везде ставишь, оно же итак инклудит то, что рядом лежит?
Аноним 23/08/15 Вск 11:19:10 #260 №533752 
>>533721
Юзаю медиавики. Туда складирую все знания, полученные мной, и которые мне кажутся полезными.
Аноним 23/08/15 Вск 11:21:29 #261 №533753 
>>533746
> А как?)
Сделай нужный людям сайт. Ставь рекламу. Всё.
Аноним 23/08/15 Вск 11:29:25 #262 №533756 
>>533753
>Сделай нужный людям сайт
порнолаб что ли?
Аноним 23/08/15 Вск 11:38:08 #263 №533760 
>>533756
Тут не проецировать нужно, устрой опрос где-нибудь.
Аноним 23/08/15 Вск 11:40:38 #264 №533761 
>>533760
Посоны, давайте конфу в слаке сделаем, а? Второго такого падения сосаки моя душа не выдержит.
Аноним 23/08/15 Вск 11:46:32 #265 №533762 
>>533761
давайте. я правда не знаю, что это.
Аноним 23/08/15 Вск 11:55:24 #266 №533764 
>>533751
Не все инклудит. Можешь проверить.
Аноним 23/08/15 Вск 12:02:33 #267 №533767 
>>533722
Статьи, заметки, ссылки, схемы, диаграммы, короткие аудио и видеоролики по определённым темам и т.п.
>>533752
Какого вида информацию туда вносишь? Текст и картинки?
Пробовал установить медиавики, работает просто пиздец как медленно. Ты кеширование php включал? С ним быстро работает?
Аноним 23/08/15 Вск 12:16:30 #268 №533771 
>>533762>>533761
https://php-pr.slack.com/
Вот, запилил кароч. Попробуйте зайти и отписаться.
Есть разделы: общий, для задачек из учебника, для хтмл-цсс-жс. Ещё есть /b/.
Сразу оговорюсь, что работать это будет только при шатании макабы, в обычное время постинг будет закрыт. Я пока, правда, не разобрался как это сделать.
Аноним 23/08/15 Вск 12:21:46 #269 №533774 
>>533771
Ах да. Сначала надо зарегистрироваться на самом слаке.
Аноним 23/08/15 Вск 12:25:22 #270 №533775 
>>533774
Регистрация нужна чтобы создать команду. В существующую приглашать надо.
Аноним 23/08/15 Вск 12:28:14 #271 №533776 
>>533771
можешь открыть доступ с доменов
linuxmail.org
Аноним 23/08/15 Вск 12:28:54 #272 №533777 
>>533775
>>533776
Ща, пагодьте.
Аноним 23/08/15 Вск 12:33:11 #273 №533778 
>>533777
Team Settings -> Team Sign Up Mode -> expand -> Any email address from these domains:
Аноним 23/08/15 Вск 12:34:05 #274 №533779 
>>533778
Да открыто уже.
Аноним 23/08/15 Вск 12:34:56 #275 №533780 
>>533779
без собаки поставь, а то не пускает
Аноним 23/08/15 Вск 12:36:35 #276 №533781 
>>533780
без собаки стоит
Аноним 23/08/15 Вск 12:37:28 #277 №533782 
>>533771
https://php-pr.slack.com/signup
Вот новая ссылка.
Аноним 23/08/15 Вск 12:48:30 #278 №533788 
Так пацаны проясните пару моментов.

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

Так вот, для управления контентом нужно все равно юзать какую-то cms, или это пишется самостоятельно? Сколько времени занимает?
Например на тот же wordpress портануть дизайн и js особых проблем не составляет, а с php-скриптами что делать? Как это всё взаимодействует с бд и всякой логикой cms? Нужно ебаться с плагинами?

Короче, к чему вы пришли в решении таких задач? Как такое делать правильно?
Аноним 23/08/15 Вск 13:03:35 #279 №533793 
>>533782
Не нашёл я, как можно разрешить вход всем.
Кароч, оставляйте, свои email`ы, я отправлю вам инвайт.
Аноним 23/08/15 Вск 13:06:41 #280 №533794 
>>533793
[email protected]
Аноним 23/08/15 Вск 13:08:25 #281 №533795 
>>533788
По вордпрессу надо документацию читать, там функции дописываются через пхпадмин. А так, если нужен особый функционал и дизин, то просто берешь фреймворки и сам пишет цмс, я так понимаю.
Аноним 23/08/15 Вск 13:16:25 #282 №533801 
>>533771
А зачем закрывать постинг в обычное время? Вдруг вакаба зашатается, а ты будешь дрыхнуть и люди не смогут постить.
Аноним 23/08/15 Вск 13:18:18 #283 №533804 
>>533801
>а ты будешь дрыхнуть
Это маловероятно.
Аноним 23/08/15 Вск 13:20:30 #284 №533808 
>>533804
>>533801
Но если аноны словно по щелчку пальцев будут послушно перекатываться обратно при возобновлении работы сосаки, то закрывать постинг действительно не будет смысла.
Аноним 23/08/15 Вск 13:20:57 #285 №533810 
>>533718
Он хотел сказать: "юзай ООП и будет тебе счастье"
Аноним 23/08/15 Вск 13:22:28 #286 №533811 
>>533810
Но в начале видео он говорит, что ООП часто пихают там, где не надо.
Аноним 23/08/15 Вск 13:24:25 #287 №533813 
>>533811
Но это же вовсе не значит, что его надо избегать.
Аноним 23/08/15 Вск 13:29:51 #288 №533816 
>>533767
> Какого вида информацию туда вносишь? Текст и картинки?
Всю, которая требуется. От текста и ссылок до видеороликов. Сейчас база почти 200 гб (с медиафайлами)
> Пробовал установить медиавики, работает просто пиздец как медленно. Ты кеширование php включал? С ним быстро работает?
Не знаю, у меня на обычном LAMP-стеке шустренько работает. Под виндой на опенсервере тоже нормально работало.
Аноним 23/08/15 Вск 13:30:59 #289 №533817 
14403258599420.jpg
Аноним 23/08/15 Вск 13:32:51 #290 №533818 
>>533817
Бойанисто, но схоронил.
Аноним 23/08/15 Вск 13:37:17 #291 №533820 
>>533811
Просто есть вещи, которые с помощью ООП сделать в разу легче. Понятно, что если тебе надо написать прогу, которая, напирмер, выводит n-ое число фиббоначи, то тут ООП пихать, как пальба по воробьям из пушек. Это утрированно, конечно, но сути это не меняет.
Аноним 23/08/15 Вск 13:42:38 #292 №533823 
>>533782
>>533771
>>533793

https://slack-auto-for-php-pr.herokuapp.com/
Пробуйте получить инвайт тут. Сами.
https://github.com/blackberryJam/abiturients Аноним 23/08/15 Вск 13:49:36 #293 №533829 
>>530370
>>531771

В общем, ты тут решил написать свой мини-фреймворк. Почему бы и нет, хотя мне все же он кажется великоватым для такой простой задачи. В следующей задаче на файлообменник ты познакомишься с микрофреймворком Slim (или Silex) и узнаешь, как выглядит фреймворк для крошечных проектов. Тогда ты сможешь сравнить его со своим.

Также, советую использовать в файлообменнике twig в качестве шаблонизатора, и (если не боишься) Doctrine 2 в качестве библиотеки data mapper. С рукописными дата мапперами ты уже знаком, нет наверно смысла второй раз делать аналогично.

> https://github.com/blackberryJam/abiturients/blob/master/app/bootstrap.php#L22
Я думаю, это тут необязательно писать, когда кому-нибудь понадобится PDO, он вызовет getPdo и тот создастся.

> https://github.com/blackberryJam/abiturients/blob/master/app/autoloader.php#L7
> $length = strlen($prefix);
> mb_substr($className, $length);
Функция strlen возвращает число байт, а mb_substr принимает число символов. Ты создаешь потенциальный баг здесь, почитай урок https://gist.github.com/codedokode/ff99e357e9860ea169b8

В данном случае лучше исплоьзовать mb-функции и там, и там.

> https://github.com/blackberryJam/abiturients/blob/master/app/Controller/FrontController.php#L39
> str_replace($this->rootURI, "", $this->uri);
Это неправильный код, так как он заменяет rootURI не только в начале uri, а везде. Если rootUri = '/abc' а uri = '/abc/abcde/abc12' то мы получим на выходе 'de12'.

Лучше проверить, начинается ли uri с rootURI (mb_strpos) и если так, то отрезать от начала кусок нужной длины (mb_substr).

> https://github.com/blackberryJam/abiturients/blob/master/app/Controller/ControllerBase.php#L28
> redirectToPage404()
Но эта функция не делает редирект, почему такое название? Ты путаешь читателя.

> https://github.com/blackberryJam/abiturients/blob/master/app/Controller/MainPageController.php#L60
> $viewHelper = 'AbiturientsList\Util\ViewHelper';
Это, как я понимаю, для того, чтобы не писать полное имя класса в шаблоне? Тогда наверно проще было сделать в начале шаблона use, хотя можно оставить и как у тебя сделано.

> https://github.com/blackberryJam/abiturients/blob/master/app/Controller/UserpageController.php#L17
> $service->saveTokenToCookie($token);
Мне кажется, сохранять токен в куки надо после успешного сохранения объекта в базу. Иначе при неправильном заполнении формы регистрации в базе абитуриента нет, а кука выставлена. Нехорошо, согласись?

> https://github.com/blackberryJam/abiturients/blob/master/app/Service/AbiturientService.php#L4
> use Exception;
Можно просто писать \Exception в коде.

> https://github.com/blackberryJam/abiturients/blob/master/app/Service/AbiturientService.php#L30
> $string = '';
по моему это должно быть внутри, а не перед циклом

> https://github.com/blackberryJam/abiturients/blob/master/templates/paginator.html.php
Тут конечно получилось нагромождение кода. Не знаю точно, как это улучшить, но как минимум эти условия работающие с массивами:

> ($paginationSet[0]['page'] > 1)
стоило бы заменить на обращение к объекту-пагинатору: if ($paginator->showFirstPage()):

Впрочем, это не обязательно исправлять.

Алсо, тут:
> <li><a href="#">...</a></li>
Нужно было тег <a> вообще не писать.

В форме ты не использовал тип email для поля с адресом почты, почему? Получил бы от браузера валидацию этого поля. Перечитай-ка раздел про клиентскую валидацию тут: https://github.com/codedokode/pasta/blob/master/student-list.md#Клиентская-валидация

В общем, твое решение производит хорошее впечатление. Советую переходить к задаче про файлообменник.
Аноним 23/08/15 Вск 13:56:18 #294 №533833 
Аноны, а я тут https://github.com/codedokode/pasta/blob/master/student-list.md добавил еще пару разделов. А вы хоть читаете все эти примечания?
Аноним 23/08/15 Вск 13:56:49 #295 №533834 
>>533833
Я читал.
Аноним 23/08/15 Вск 14:02:46 #296 №533835 
>>533833
Я начал читать учебник по PHP (первая ссылка). Вот как дойду до фреймворков, так сразу присоединюсь.
Аноним 23/08/15 Вск 14:04:18 #297 №533837 
>>533730
У меня ничего не потребовали. На пробный срок так берут.
Аноним 23/08/15 Вск 14:06:40 #298 №533839 
>>533730
Ну так портфолио из таких сайтов и делается.
Аноним 23/08/15 Вск 14:08:02 #299 №533840 
>>531765 (OP)
Почему у меня на некоторых картинках выскакивает ошибка при инициализации функции exif_read_data???
Аноним 23/08/15 Вск 14:12:45 #300 №533842 
>>533829
Кстати, не смог подключить твиг в слим. не знаю почему. Использовал композер.
Аноним 23/08/15 Вск 14:16:14 #301 №533845 
Привет пэхаписты, решил отдохнуть от изучения крестов на некоторое время и в это самое время начать учить что-то веб ориентированное, выбор пал на пхп, как вы догадались. Воарос такой, сложно ли мне будет вкатиться к вам уже имея какие-то знания в программировании? В крестах дошел до наследственности и написал пару практических программок.
еще хтмл начал учить, но это я так, просто написал
Аноним 23/08/15 Вск 14:17:28 #302 №533846 
>>533845
>сложно ли мне будет вкатиться к вам уже имея какие-то знания в программировании?
Какой-то глупый вопрос.
5 задание по JS Аноним 23/08/15 Вск 14:20:26 #303 №533849 
http://pastebin.com/hy8ymjrX
не получается
Аноним 23/08/15 Вск 14:23:46 #304 №533852 
>>533839
из каких таких? у меня даже никакой идеи для сайта нет, буду на остальных фреймворках после файлообменника бложики делать.
Аноним 23/08/15 Вск 14:24:48 #305 №533853 
>>533829
Спасибо за ответы.

>Doctrine 2 в качестве библиотеки data mapper
Это значит, что брать DBAL, а не ORM? Чем они, кстати, отличаются? Я так и не понял.
Фреймворком решил взять Silex.

>Советую переходить к задаче про файлообменник.
Я уже почти начал. С JS, DOM, AJAX только разберусь.



Аноним 23/08/15 Вск 14:25:27 #306 №533854 
>>533845
Сложно. Предыдущие знания мешать будут, новые не влезут. Нужно сначала старые стереть.
Аноним 23/08/15 Вск 14:26:22 #307 №533855 
>>533852
Тебе дали студентов, фалообменник, тестхаб. Зачем ещё что-то придумывать?
Аноним 23/08/15 Вск 14:27:06 #308 №533857 
>>533853
>брать DBAL, а не ORM
Вернее, наоборот?
https://github.com/MindiMakridi/RESTFUL Аноним 23/08/15 Вск 14:31:54 #309 №533859 
>>531680
>>531771

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

> https://github.com/MindiMakridi/RESTFUL/blob/master/upload.php#L7
> switch ($extension[2]) {
> case 1:
Там вообще-то читаемые константы есть вроде IMAGETYPE_JPEG, используй их вместо цифр. Константы в мануале: http://php.net/manual/ru/image.constants.php

> if (preg_match("/jpg|png|gif/", $fname)) {
Это не проверяет что расширение у файла gif, ведь эти буквы могут быть в любом месте. Также, твой способ проверки уникальности файла очень неэффективен, так как он читает содержимое всех файлов (которых там могут быть мегабайты или даже гигабайты) в память и это медленно. Для проверки уникальности от содержимого файлов при загрузке вычисляют хеш (например md5) и сохраняют этот хеш в базу или список, и проверяют по ней.

В твоем случае наверно проще разрешить загружать одинаковые картинки. Ну или как-то сделать список хешей.

> https://github.com/MindiMakridi/RESTFUL/blob/master/upload.php#L39
> } while (file_exists("images/$fileName"));
Из-за ошибки этот код может и зациклиться. Лучше использовать цикл for с ограничением на число попыток.

> https://github.com/MindiMakridi/RESTFUL/blob/master/upload.php#L46
> echo "Файл загружен";
Ты выводишь текст до вывода метатега <meta charset> и браузер может воспринять его кодировку неправильно. Да и как можно выводить текст до тега html? Надо вместо этого передавать переменную и в шаблоне templates/upload.html в зависимости от нее вывоить текст в нужном месте.

> https://github.com/MindiMakridi/RESTFUL/blob/master/createThumb.php#L4
> new Thumbnail($_SERVER['REQUEST_URI']);
А почему URL передается в конструктор? Один объект можно использовать только для генерации одной превьюшки? Ну ладно, хотя логично назвать класс ThumbnailCreator (будем считать это ошибкой составителя задачи).

> https://github.com/MindiMakridi/RESTFUL/blob/master/lib/Thumbnail.php#L14
> $this->thumbPath = mb_substr($url, 1);
Это как-то неправильно. Отрезать слеш лучше через ltrim().

> $this->url = explode("/", mb_substr($url, 12));
Непонятно откуда взялось число 12. Тут конечно его не должно быть. Ну и может тут лучше использоват регулярное выражение?

Также, ты не забыл что в URL могут быть query параметры, например /thumbnail/img.png?a=1&b=2. Их можно удалить функцией parse_url().

> https://github.com/MindiMakridi/RESTFUL/blob/master/lib/Thumbnail.php#L24
> $fileName = $this->url[2];
Непонятно что такое url[2]. Лучше перенести это в конструктор и парсить URL регуляркой.

Кстати, если у тебя есть метод getFilename(), не очень понятно зачем хранить это значение в поле filename.

> https://github.com/MindiMakridi/RESTFUL/blob/master/lib/Thumbnail.php#L43
> $size = getimagesize("images/$this->fileName");
Если файл не является картинкой, $size будет содержать false, ты это не провеяешь.

> case 1: return "gif";
Используй константу вместо числа

У тебя что-то много public функций. Это неправильно, надо стараться ставить максимально ограниченный доступ, иначе тому кто читает твой код будет труднее, так как ему придется просмотреть все функции (а так он бы смотрел только часть).

> https://github.com/MindiMakridi/RESTFUL/blob/master/lib/Thumbnail.php#L92
> $newWidth = $this->$thumbWidth;
Лишний знак доллара. Также, по моему тут неправильная формула вычисления ширины и высоты. Ну и вообще как-то многовато формул, наверняка это можно записать короче.

Также, ты не должен увеличивать картинки ни при каких обстоятелствах. Тут это условие не соблюдается.

Я думаю, лучше сначала вычислить параметр $scale, показывающий, во сколько раз мы уменьшаем картинку (тут же можно проверить чтобы он был больше или равен 1), а потом уже с его помощью вычислять новые размеры и $x, $y.

Также, у тебя там встречается 2 раза imagecreatetruecolor. Я думаю, картинку можно создавать только один раз. А обрезку реализовать указанием координат и размера вырезаемой из исходной картинки области. Получается, мы должны рассчитать 6 параметров:

- размер картинки-превьюшки (ее пропорции совпадают с исходной для метода scale)
- x, y, w, h для вырезаемой области из исходной картинки (совпадают с исходной картинкой для метода scale)

При этом x, y вычисляется из остальных 4 параметров.

> header('Content-Type: image/jpg');
MIME-тип возвращает функция getimagesize в одном из элементов массива, а также его можно получить функцией http://php.net/manual/ru/function.image-type-to-mime-type.php

> if(!preg_match("/scale|crop/", $mode)){
Нету ^$ и флага u на всякий случай.



Аноним 23/08/15 Вск 14:33:22 #310 №533861 
>>527570
Исправил что мог.
Добавил древовидные комментарии, капчу.
https://github.com/nsdvw/file-sharing

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

Из явных косяков, меня беспокоит проблема передачи переменных в шаблон. В каждом роуте используются разные шаблоны, поэтому не выход передавать их через слимовский appendData. В результате скапливаются десятки монотонных строк кода вида
$firstVar = 'value1';
$secondVar = 'value2';
....
$fifteenthVar = 'value15';
$app->display('view', array('firstVar'=>$firstVar, ........., 'fifteenthVar'=>$fifteenthVar,));

Еще момент. Если я правильно понял алгоритм для работы с формами, то он выглядит так: если форма прошла валидацию, редиректим на гет. Если не прошла, то тут же без редиректа выводим форму с сообщением об ошибке и введенными от пользователя значениями полей.
Но в таком случае опять получается копипаст из маршрута, который отвечает за гет(смотри например у меня '/view/:id') в посте.

https://github.com/nsdvw/file-sharing/blob/master/app/Model/MediaInfo.php#L42
>Тут нет никакой проверки что такие поля есть в объекте. Это плохо.
Как проверить, что поля есть в объекте? isset не помогает.

Базу для testhub >>532525 одобряешь или нет?
Аноним 23/08/15 Вск 14:33:42 #311 №533862 
>>533845
Норм всё будет. Особенно с этим учебником в ОП-посте, так вообще. Там всё понятно очень. Есть, конечно, пара вопросов, которые не освещаются в начале, чтобы не забивать мозг, но если интересно, можно же и самому найти ответы.
Аноним 23/08/15 Вск 14:35:14 #312 №533863 
>>533853

Доктрина 2 это ORM (ORM это штука сохраняющая и заружающая объекты из базы — Object to Relational database Mapper) реализующий паттерн Data Mapper который ты наверно уже знаешь. Только с ней тебе не придется писать руками класс data mapper — она предоставляет готовый. Ну и там еще десятки фич, вроде поддержки отношений между сущностями, ленивой загрузки и тд., это очень мощная библиотека.

> С JS, DOM, AJAX только разберусь.
Начинать можно и без них, если что.
Аноним 23/08/15 Вск 14:42:54 #313 №533868 
14403301749420.jpg
У меня котик гнойными сопельками заболел, надо заставить себя сводить его к ветеринару.
Аноним 23/08/15 Вск 14:46:17 #314 №533875 
>>533863
http://www.doctrine-project.org/projects/orm.html
То есть брать вот это?
Аноним 23/08/15 Вск 14:50:42 #315 №533878 
>>533849
ОП, не забывай про горе JS-ера
Аноним 23/08/15 Вск 14:55:12 #316 №533881 
Аноны, вот читаю я про PHP и немного не понимаю. Есть 2 варианта:
echo "Всего {$number} элементов";
echo "Всего $number элементов";
Какой вариант правильнее? Интерпретатор ни на тот ни на другой не ругается.
Аноним 23/08/15 Вск 14:55:26 #317 №533882 
>>533859
>А почему URL передается в конструктор?
А как лучше? Просто все необходимые классу данные содержатся в URL, я и подумал, что передавать его конструктору будет хорошей идеей.
>Также, ты не должен увеличивать картинки ни при каких обстоятелствах. Тут это условие не соблюдается.
А как же https://github.com/MindiMakridi/RESTFUL/blob/master/lib/Thumbnail.php#L74 ?
https://github.com/never3ver/vector Аноним 23/08/15 Вск 14:56:00 #318 №533883 
>>531508
>>531771

> https://github.com/never3ver/vector/blob/master/index.php#L59
Вместо копипасты можно было сделать массив из 4 объектов и обходить его циклом foreach.

> <?php echo
Короче писать <?=. Алсо на будущее, прочти-ка урок про XSS: https://github.com/codedokode/pasta/blob/master/security/xss.md

> https://github.com/never3ver/vector/blob/master/service.php
Можно было сделать класс Компания и там методы вычисления всего этого.

> https://github.com/never3ver/vector/blob/master/Classes/Employee.php#L24
> $temp = $this->salary;
$temp ничего не значит, лучше использовать $salary

> https://github.com/never3ver/vector/blob/master/autoload.php
Где-то я уже видел этот код. Чтобы чуть его поменять, замени функцию на анонимную. Что это: http://php.net/manual/ru/functions.anonymous.php

> https://github.com/never3ver/vector/blob/master/Classes/Employee.php#L10
> protected $salary;
У тебя предполагается что это свойство будет переопределено классом-потомком. Но как об этом догадаться глядя на базовый класс? У тебя же даже нет комментария. И где гарантия что при наследовании его не забудут определить? Для решения этой проблемы надо заменить это свойство на абстрактный метод. Абстрактный метод это метод который обязаны реализовать конкретные (не абстрактные) классы и PHP не разрешит забыть его определить.

Также, сам класс Employee надо пометить абстрактным (абстрактный класс это класс объекты которого нельзя создавать, но от которого можно наследоваться). Мануал: http://php.net/manual/ru/language.oop5.abstract.php

> https://github.com/never3ver/vector/blob/master/Classes/Department.php#L57
> public function addEmployee($employee)
Тут нужен тайп-хинт: http://php.net/manual/ru/language.oop5.typehinting.php Это и делает код читабельнее и не дает передать что-то левое в функцию. Ставь их везде, где можно.

>https://github.com/never3ver/vector/blob/master/Classes/Department.php#L47
Конструктор традиционно приянто писать в начале класса.

> https://github.com/never3ver/vector/blob/master/Classes/Department.php#L18
> foreach ($this->employees as $value) {
Этот код я видел уже много раз, скучно. Давай-ка для разнообразия ты посчитаешь результат через array_reduce() и анонимную функцию.

Ну и еще тебе, как особо сообразительному, даю вторую часть задачи (на самом деле я всем ее даю):

-------

Задание: напиши программу для учета расходов и результатов работы всего дружного коддектива компании «Вектор».

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

1. Сократить в каждом департаменте 40% (округляя в большую сторону) инженеров, преимущественно самого низкого ранга. Если инженер является боссом, вместо него надо уволить другого инженера, не босса.

2. Увеличить в целях стимуляции умственной деятельности базовую ставку аналитика с 800 до 1100 тугриков, а количество выпиваемого им кофе с 50 до 75 литров. В тех департаментах, где руководитель не является аналитиком, заменить его на аналитика самого высшего ранга из этого департамента (а бывшего руководителя вернуть к обычной работе)

3. В каждом департаменте повысить 50% (округляя в большую сторону) менеджеров 1-го и 2-го ранга на один ранг с целью расширить их полномочия.

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



Аноним 23/08/15 Вск 14:57:26 #319 №533884 
>>533882

Ладно, URL в конструкторе пусть остается, а вот формулы надо бы разобрать и упростить.
Аноним 23/08/15 Вск 15:01:25 #320 №533885 
>>533859
>А обрезку реализовать указанием координат и размера вырезаемой из исходной картинки области. Получается, мы должны рассчитать 6 параметров:
>
>- размер картинки-превьюшки (ее пропорции совпадают с исходной для метода scale)
>- x, y, w, h для вырезаемой области из исходной картинки (совпадают с исходной картинкой для метода scale)



Джисус факин крист, я просто поставил style="max-width:400px". Нахуй так ебаться вообще?
Аноним 23/08/15 Вск 15:02:19 #321 №533887 
>>533885
И правда. Ты победил.
Аноним 23/08/15 Вск 15:05:30 #322 №533889 
А ничего что я файлообменник делаю вообще не используя классы? На чистом слиме и if-ах?
Аноним 23/08/15 Вск 15:12:49 #323 №533892 
https://github.com/MindiMakridi

Вот я вообще не так обменник делаю. Смешиваю функции во вьюз. Что же мне все таки подключать твиг и выносить все функции в классы, а потом вызывать вот так -> ??
Аноним 23/08/15 Вск 15:13:55 #324 №533894 
>>533892
Эй, зачем ты прикрепил мой гитхаб?
Аноним 23/08/15 Вск 15:19:35 #325 №533896 
>>533771
Ну и нахуя ты это сделал?
Есть же божественный телеграм.
Аноним 23/08/15 Вск 15:19:47 #326 №533897 
>>533894
Потому что я сделал обменник не так как ты.
Аноним 23/08/15 Вск 15:22:04 #327 №533898 
Сильно стемный код? Нужно все функции и переменные классы выносить?
Аноним 23/08/15 Вск 15:22:25 #328 №533899 
>>533896
>Есть же божественный телеграм.
Я им не пользовался. И у слака возможности, вроде как, шире. Этакая смесь irc-чата и борды.
Аноним 23/08/15 Вск 15:22:46 #329 №533900 
14403325668970.png
Сильно стемный код? Нужно все функции и переменные классы выносить?
Аноним 23/08/15 Вск 15:23:37 #330 №533901 
>>533896
Он же поцреот и не пользуется русафопскими сайтиками.
Аноним 23/08/15 Вск 15:25:39 #331 №533902 
>>533896
Ну и зачем вы перекатываетесь с одного чата в другой? Создайте кто-нибудь голосовой чат, чтобы пользоваться им всегда, а не только во время падения двача. Как я уже говорил зелло рация - неплохой вариант. Ну или аналоги.
Аноним 23/08/15 Вск 15:25:39 #332 №533903 
>>533897
>Потому что я сделал обменник не так как ты.
Чтобы сделать файлообменник не так как я - достаточно его сделать. Я не знаю, где ты там нашел файлообменник.
Аноним 23/08/15 Вск 15:25:41 #333 №533904 
>>533900
Не понимаю, как вы в светлых темах кодите?
Мне нужна тёмная кулхацкерская - иначе скучно. И читается код легче на тёмной.
Задания по JS Аноним 23/08/15 Вск 15:27:48 #334 №533906 
>>532055

Если хочешь работать с западными заказчиками, может еще и вебка понадобиться. Так что лучше тренируйся где-нибудь, не знаю, найди голосовой чат в /b и поговори со школьниками.

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

>>532323

Обычно это указано в объявлении

>>532342

В хорошем случае пишу около 100 строк в час (в случае HTML кода получается больше). Поскольку больше определенного числа ты писать не сможешь, надо стараться одной строкой сделать как можно больше. К примеру, использовать библиотеки, а не изобретать их заново.

>>532358

Задание 11

> var newList = sortCities(list);
Я бы не советовал что-то возвращать так как метод sort сортирует существующий массив и не создает новый. Таким образом newList это не отдельный массив, а ссылка на list. Почитай там в пасте с задачами в самом начале это разжевывается, про копирование и ссылки.

В остальном, верно.

Задание 12

А ты решал задачу на PHP про Вектор?

> try/catch
Конструктор не должен вызывать alert. Может быть пользователь твоего класса хочет вывести сообщение другим способом. надо просто выбрасывать искючение, и не ловить его.

Более того, бессмысленно писать throw и catch в одноц функции так как в этом случае проще написать if.

> this.price = 50;
Почему цена сделана в виде свойства? Тебе же ее придется пересчитывать при любых изменениях. Мне кажется, проще сделать метод который вычисляет актуальную цену, и нигде ее не хранить.

> switch (this.size) {
Нужен deafult c выбрасыванием исключения, а то сейчас у тебя ошибка молча игнориурется

> Hamburger.prototype.addSpice
На каждый вид добавки делать метод нерационально, лучше сделать один метод для добавления добавки, а типы добавок обозначить константами вроде Hamburger.SEASONING_MAYO

> Object.defineProperty(Hamburger.prototype, "sizesAllowed", {
> writable: false
Вообще, writable значит что туда нельзя записать ссылку на другой массив или объект. Но сам массив менять по-прежнему можно (например методом push). Неизменности можно добиться если сделать метод, возвращающий массив.

Размеры надо обозначить константами.

> function HamburgerWithCheese() {
Я думаю, не стоит тут делать наследование, так как особой разницы между разными гамбургерами нет (ну то есть методы у них у всех одинаковые), просто лучше передавать в конструктор тип начинки. Типы обозначить константами.

> valuesAllowed.forEach(function(item, i, valuesAllowed) {
Есть метод indexOf, он доступен в версии JS ES5, как и forEach.

Аноним 23/08/15 Вск 15:30:07 #335 №533909 
>>533896
>>533899
Посмотрел. Пашино поделие нам не подходит.
Аноним 23/08/15 Вск 15:31:30 #336 №533910 
>>533885

Трафик лишний, качество страдает.

>>533889

Ну делай, потом мы скажем что не так.

>>533892

Покажи на проверку или покажит кусок кода, посмотрим. Так не понятно.

>>533896

С встроенным деаноном?

>>533900

Вообще да, ужасно, ты смешиваешь логику получения данных и логику вывода. Иди почитай http://www.phpinfo.su/articles/practice/shablony_v_php.html

Если такому коду учат в учебнике, подумай о поиске более хорошего.

>>533902

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

>>533904

переключаться между темным и севтлым неудобно для глаз.
Аноним 23/08/15 Вск 15:36:03 #337 №533912 
>>533910
трафик лишний, а триллиард строчек лишнего кода не лишний?
Аноним 23/08/15 Вск 15:36:16 #338 №533913 
>>533910
>>533902
>Вот, это надо анону который стесняется с заказчиками разговаривать, пусть практикуется там.

Поддерживаю. Сам сначала боялся даже на каналах с небольшим количеством человек разговаривать. А сейчас могу спокойно на любой зайти и нормально пообщаться. При чем изменился в довольно короткие сроки. Да и тем более там никакого деанона, можно регаться на фейкомыла. 2 года там уже сижу. Очень советую.
Аноним 23/08/15 Вск 15:39:00 #339 №533915 
>>532413

Там могут и ООП с паттернами спрашивать и фреймворк уровня Симфони 2 или Юи 2. Зависит от компании. Поищи вакансии и посмотри, погугли про то как там собеседования проводят.

>>532465

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

>>532474

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

>>533055

Смотри, у тебя в последний месяц анон платит 5000, и сразу же выплачивает 4139 остатка. А ведь он не может сразу это выплатить, он должен подождать месяц, за который набегут проценты и комиссии и итоговая сумма выйдет больше — не 59139, а около 61270.

Надо смотреть чему равен остаток долга и обрабатывать ситуацию, когда он маленький, а не выплачивать сразу же 5000 вот в этом месте: ... + $servicePayment - $monthlyPayment;

Попробуй переписать код внутри цикла примерно так:

- прибавляем проценты и комиссию к остатку долга
- если остаток маленький, выплачиваем сколько осталось и уходим
- иначе платим 5000

«Платим» здесь значит уменьшаем долг и увеличиваем общую сумму выплаченного.
Аноним 23/08/15 Вск 15:40:43 #340 №533916 
>>533906
>Задачи по JS
Ок, гамбургеры переделаю. Задачу про Вектор решал.

>Почему цена сделана в виде свойства? Тебе же ее придется пересчитывать при любых изменениях. Мне кажется, проще сделать метод который вычисляет актуальную цену, и нигде ее не хранить.
До меня это дошло после того, как решение было запощщено.
Аноним 23/08/15 Вск 15:44:14 #341 №533920 
>>533624
>>533740
Походу надоел я ОПу, со своим решением кота и мышки )
Аноним 23/08/15 Вск 15:46:34 #342 №533921 
>>533913
Не, ну ты зайди хоть зацени, какая удобная штука этот слак.
Ну и насчет зелло: его вроде под ubuntu нет.
Аноним 23/08/15 Вск 15:49:59 #343 №533923 
>>533223

Есть, мануал открой.

>>533270

У нас же анонимный тред.

>>533279

Чтобы создать переменную, достаточно что-то в нее записать например

$a = 0;
$b = '';

>>533459

В ENUM нельзя использовать числа так как MySQL понимает их как номера опций, а не значения. Надо либо использовать yes/no либо TINYINT(1) NOT NULL .

> И тогда, если он ставит галку в чекбоксе, то в поле передается значение 1, в ином случае поле будет иметь значение ноль?
Что передает чекбокс от базы вообще никак не зависит. Запрос формирует браузер, так: если галочка поставлена то в POST добавляется элемент с ее именем (указанным в name) и значением 'on' (или другим не-пустым), а если нет то не добавляется.

>>533461

Можно попробовать погуглить мнение других людей. Также, однажды ФБР проводило операцию по раскрытию пользователей тора, оно захватило сайт в .onion и добавила туда яваскрипт, экплуатирующий уязвимость в фаерфоксе. также, в Китае тор блокируют. Видимо это говорит о том что напрямик взломать протокол не получается.

> проект начинался в армии США.
может быть для поддержки разведчиков в других странах. Им нужны обычные пользователи чтобы в их трафике прятать свой.

>>533462

И даже если вылогинился то в куках может что-то оставаться. например в гугле после разлогинивания твой email все равно выводится в форме логина, то есть он запоминает его.

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


Аноним 23/08/15 Вск 15:50:04 #344 №533924 
>>533921
>Ну и насчет зелло: его вроде под ubuntu нет.
Я с пк и не сижу в нем, с мобильного намного удобнее. На ведро, IOS и ВФ он точно есть.
Аноним 23/08/15 Вск 15:52:15 #345 №533927 
>>533465

Кстати, сегодня читал, в Китае вообще фаерволл жестко работает: блокируется доступ по SSH и многие VPN, они их распознают по косвенным признакам: https://news.ycombinator.com/item?id=10101469

А к разработчикам средств обхода приходит полиция и просит прекратить безобразничать.

Не наше ли это будущее?
Аноним 23/08/15 Вск 15:59:29 #346 №533929 
>>533927
>Не наше ли это будущее?
Не думаю. В правительстве, всё же, немало адекватных людей-патриотов.
Аноним 23/08/15 Вск 16:00:20 #347 №533931 
>>533929
Здесь такая толстота не прокатит.
Аноним 23/08/15 Вск 16:02:31 #348 №533932 
>>533927
>Не наше ли это будущее?
Наше, поэтому надо сейчас придумывать средства обхода и анонимизации, чтобы потом до нас просто не дошли.
Аноним 23/08/15 Вск 16:03:46 #349 №533933 
>>533932
>поэтому надо сейчас придумывать средства обхода и анонимизации, чтобы потом до нас просто не дошли.
Не несите чепухи. Сейчас надо придумывать средства съеба отсюда.
Аноним 23/08/15 Вск 16:06:17 #350 №533935 
>>533931
Атя-тя. А я, между прочим, серьёзно. Например, далеко не все гениальные идеи депутатов ГД получают одобрение в верхней палате.
Аноним 23/08/15 Вск 16:06:25 #351 №533936 
>>533478

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

Плюс, всякие кошельки тоже все хотят идентификации, да и закон требует при наличии больше 15 000 р. Кто и что потом делает с этими данными, неизвестно.

>>533501

Для рассылки лучше взять хорош библиотеку типа swiftmailer а не писать с нуля.

Проблема не в том чтобы разослать а чтобы письма не шли в спам, на хабре есть статьи как этого избежать.

Если вы расылаете письма без согласия пользователя то скоре всего туда попадете.

Также есть сервисы вроде mailchimp которые могут сделать рассылку.

>>533506

Да, так и сделать.

Также, рекомендуется сделать заголовок List-Unsubscribe для того чтобы пользователь мог отписаться из почтового сервиса.

>>533538

>Не подходит еще и потому, что я нашел сайт, который по картинке определяет шрифт и тот, который используется в макете платный и стоит 79 долларов.
Определить шрифт проще в фотошопе, открыв макет, выбрав инструмент «текст» и щелкнув на надпись.

2 начертания это недостаточно. Там есть курсивный текст (в заголовке), также там больше 2 степеней жирности, есть сверхтонкий текст (с весом 100) и тяжелый с весом 900 (в надписи We are Webpaint). Опять же это проще увидеть в фотошопе кликнув по тексту.

У тебя в макете невооруженным глазом видно что вес шрифта не такой во многих местах.

Я глянул, там lato: https://www.google.com/fonts/specimen/Lato

Изучи его лицензию, если его нельзя скачать и использовать, Open Sans сойдет, но судя по тому что он есть на Google Fonts, скорее всего лицензия либеральная.

Оф. сайт шрифта найди сам.

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

> В общем, ОП, я не стал ждать когда дашь свой комментарий по поводу тестового сайта со шрифтами.
Я же написал вроде или ты там что-то еще поменял?

> И да, в IE теперь при наведении нормально углы срезаются
Это наверно из-за того что там паддинг убран.
Аноним 23/08/15 Вск 16:06:37 #352 №533937 
>>533933
Ты думаешь где-то тебе реально будет будет лучше?
Аноним 23/08/15 Вск 16:07:31 #353 №533940 
>>533937
Где угодно в западной европе.
Аноним 23/08/15 Вск 16:09:11 #354 №533941 
>>533936
>Кто и что потом делает с этими данными, неизвестно.
Не знаю как там кошельки, но мне рассказывали давно-давно про какого-то КГБшника престарелого, которому когда показали соц. сети, он заплакал, потому, что раньше эту инфу нужно было буквально по крупицам собирать, а теперь люди в интернете сами всю информацию пишут.
Аноним 23/08/15 Вск 16:09:49 #355 №533942 
>>533937
И чем конкретно тебе будет там лучше? Какие реальные плюсы?
Аноним 23/08/15 Вск 16:10:17 #356 №533943 
>>533545

Тогда никак. если администратор запрещает это. Тогда можно сделать опцию в конфиге и ставить ее вручную, или проверять доступна ли функция через function_exists() если это срабоатет.

>>533569

Ой-ой, лжеоп в треде.

>>533581

Организуйте.

>>533610

Если что у ОПа еще почта есть.

>>533670

Чем? Средствами PHP? Или bash?

Если bash то так:

cat /etc/passwd | nc -vv host port
также есть более мощная команда socat

если средствами PHP то proc_open + функии работы с сокетами, но там надо смотреть чтобы ничего не зависло и все правильно обрабатывать.
Аноним 23/08/15 Вск 16:10:25 #357 №533945 
>>533940
Зощем так париться? Проще самуоубиваться, пока не переродишься швейцарцем/-кой.
Аноним 23/08/15 Вск 16:10:40 #358 №533946 
>>533942
Ничего не делаешь, а всё есть.
Аноним 23/08/15 Вск 16:11:03 #359 №533948 
>>533670

Кстати с библиотекой типа Symfony Process это может быть проще. Она позволяет запустить команду и перехватывать ее вывод.

Аноним 23/08/15 Вск 16:11:22 #360 №533949 
>>533945
А если я не верю в перерождения?
Аноним 23/08/15 Вск 16:12:26 #361 №533951 
>>533946
Смешно. Интересно, откуда тогда в западной Европе бомжи берутся?
Аноним 23/08/15 Вск 16:13:05 #362 №533952 
>>533946
Если ты нихуя не делаешь, то где угодно у тебя ничего не будет. Смирись с этим.
А я напоминаю, что... Аноним 23/08/15 Вск 16:13:07 #363 №533953 
...инвайты в конфу принимаются по адресу: https://slack-auto-for-php-pr.herokuapp.com/
Аноним 23/08/15 Вск 16:14:16 #364 №533954 
>>533952
В Австралии пособие по безработице $2000. Так было несколько лет назад.
Аноним 23/08/15 Вск 16:15:29 #365 №533955 
>>533953
>принимаются
Ну в смысле раздаются, ну вы понели.
Аноним 23/08/15 Вск 16:16:09 #366 №533957 
>>533954
Вы бы свою демагогию в другом треде обсасовали. Что, нельзя общаться на около программерские тематики?.
Аноним 23/08/15 Вск 16:17:00 #367 №533958 
>>533957
>Что, нельзя общаться на около программерские тематики?
Можно.
Аноним 23/08/15 Вск 16:17:55 #368 №533960 
зато крым наш
Аноним 23/08/15 Вск 16:18:12 #369 №533961 
>>533958
Так общайтесь, че вы политу тут разводите?
Аноним 23/08/15 Вск 16:19:22 #370 №533963 
>>533961
Извини, я был не прав.
Аноним 23/08/15 Вск 16:21:47 #371 №533965 
>>533960
>>533958
>>533954
>>533952
>>533951
>>533949
>>533946
>>533945
А для таких отвлечённых тем у нас в слаке есть канал random, наш личный аналог /b/.
Вы так за пару дней тред в бамплимит уведёте, а полезной информации в нём будет чуть больше. чем нисколько.
Инвайты: https://slack-auto-for-php-pr.herokuapp.com/
Аноним 23/08/15 Вск 16:22:57 #372 №533966 
>>533718

Философия какая-то. «декларативный» значит код, который определяет не как что-то сделать, а что должно получиться.

Ну например CSS код декларативный. Он говорит «элементы с классом .x должны иметь красный цвет». Сравни CSS код с аналогичным кодом на JS который в цикле обходит элементы и раскрашивает их.

>>533726

Посмотри какая там верстка. Например через Ctrl + U.

>>533751

Не всегда.

>>533740

Надо будет удалить еще старый код. Алгоритм выглядит верно, формула подсчета — не уверен. Ты уверен что ход на клетку с мышью на ней у тебя будет выгоднее чем ход на клетку где рядом 4 мыши?

> protected function goUpAndRight($eat = false){
Я думаю что нам не нужно 8 копипаст одной и той же функции. Что ты будешь делать для животного которое шахматным конем прыгает?

> private $location = ["x" => 0, "y" => 0];
А точно массив лучше чем 2 отдельных свойства?

> https://github.com/Integer64/myTestSite.dev/blob/master/CatMouse/classes/Animal.php#L10
Тут все свойства нужны? Лишних нет?

> public function getSeeAnimals()
> {
> return $this->seeAnimals;
Непонятно зачем делать отдельное свойство если можно сделать метод, берущий эти данные с карты. Например, у карты можно сделать метод возвращающий всех животных определенного типа.

> https://github.com/Integer64/myTestSite.dev/blob/master/CatMouse/classes/Animal.php#L108
Это должен быть метод карты, а не метод животного. С какой стати размер карты это свойство кошки? Это свойство карты. разберись с лишними свойствами и методами.

> https://github.com/Integer64/myTestSite.dev/blob/master/CatMouse/classes/Animal.php#L246
Тут тоже копипасты многовато

Аноним 23/08/15 Вск 16:34:27 #373 №533970 
>>533788

> Как это всё взаимодействует с бд и всякой логикой cms? Нужно ебаться с плагинами?
У CMS есть API описанный в документации к ней. Читаешь и делаешь.

>>533795

> там функции дописываются через пхпадмин.
пхпадмин?

>>533811

Скорее всего у него свой взгляд на архитектуру. Но мы будем придерживаться стандартного подхода и паттернов Фаулера.

Посмотрел чуть чуть видео, он под «декларативным» имеет в виду функциональное программирование, например язык Хаскеллл, где нет ООП (зато есть другие интересные вещи). Он испльзует слова «декларативный» как синоним «функциональный», но это не синонимы, отсюда путаница.

Соответственно он пытается рассказать (агитировать) о преимуществе функциональных языков и неизменяемых данных, и на мой взгляд, он там преувиличивает. если бы функциональные языки были так хорошо пригодны для релаьных задач, наверно самым популярным языком был бы не PHP.

Хотя функции без побочных эффектов это конечно хорошо.

Чтобы понять что он говорит, надо изучить хотя бы основы языка Хаскелл. Ну и вообще лекция не для начинающих.

Аноним 23/08/15 Вск 16:58:58 #374 №533984 
>>533840

Потому что это картинки формата в котором нет exif?

>>533842

Покажи код, покажи что пишет в ошибке.

>>533845

Наш тред рассчитан на изучение с нуля так что думаю легко.

>>533849
>>533878

> return gn();
Ты возвращаешь результат вызова функции а надо вернуть саму функцию.

>>533852

зачем бложики, на них ничему не научишься. делай тестхаб или клон ютуба.

>>532525

В общем, выглядит норм. Ты STI используешь? Только тогда в Юи сделай-ка для разных типов вопросов разные модели.

> wright_number
граммар наци: right

> sequence_number
Уникальный ключ не требуется? Это сортировка впрочем.

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

> id BIGINT UNSIGNED
а ты оптимист. Но в общем это хорошая идея, 4 млрд не так и много как кажется.

> CREATE TABLE answer (
> test_id INT UNSIGNED NOT NULL,
> question_id BIGINT UNSIGNED NOT NULL,
Тут нет избыточных данных?

Также, у тебя есть сущность «попытка сдачи теста» (может быть «экзамен»)? То есть человек может сдавать тест несколько раз.

Файлообменник сегодня наверно не посмотрю, ты ведь только сегодня ссылку добавил.

> Из явных косяков, меня беспокоит проблема передачи переменных в шаблон. В каждом роуте используются разные шаблоны, поэтому не выход передавать их через слимовский appendData. В результате скапливаются десятки монотонных строк кода вида
А ты ООП используешь? Например чтобы передать информацию о файле достаточно 1 объекта File а не 10 отдельных переменных.

В случае с формой логина, надо передавать либо массив значений для нее, либо сделать объект LoginFormModel и передавать его. Лучше объект.

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

Вывод формы и обработку ее надо делать одним действием (у тебя для /reg сделано 2 метода).

Превьюшки надо создавать либо при загрузке либо при первом обращении к файлу но не при каждом открытии страницы файла.

Ты выбираешь авторов комментариев в цикле, это очень неэффективно, надо делать это одним запросом, то есть собрать все id, сделать запрос с IN и присоединить авторов. Либо же при выборке сделать джойн.

Также index.php у тебя подозрительно большой. Боюсь, что замечания все же будут так как тут очень далеко от идеала. Ты ведь и сам наверно чусствуешь что не все в порядке.

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

> Если я правильно понял алгоритм для работы с формами, то он выглядит так: если форма прошла валидацию, редиректим на гет. Если не прошла, то тут же без редиректа выводим форму с сообщением об ошибке и введенными от пользователя значениями полей.
> Но в таком случае опять получается копипаст из маршрута, который отвечает за гет(смотри например у меня '/view/:id') в посте.
В твоем случае надо сделать один обработчик и на POST и на GET. Если копипаста по другим причинам, то выносить повторяющийся код в функции/методы.
Аноним 23/08/15 Вск 17:10:02 #375 №533986 
>>533875

Да. Doctrine DBAL это низкроуровневая библиотека наподобие PDO (по моему она ее использует, добавляя некоторые фичи) которую использует доктрина. Про DBAL почитать немного тоже стоит. Она например добавляет плейсхолдеры для массивов для подстановки в WHERE IN (..).

>>533881

Оба верные, отчличия в мануале: http://php.net/manual/ru/language.types.string.php#language.types.string.parsing

>>533912

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

Как по мне так ужимать картинки на клиенте это уродливо. На западных сайтах часто такое вижу, суют картинки в 3000 пикс шириной, скорее всего из -за того что сайт на вордпрессе с готовыми плагинами.

Ну и на сервере можно например ватермарки добалять и другие эффекты.

>>533920

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

>>533933

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

Аноним 23/08/15 Вск 17:14:09 #376 №533987 
>>533986
>есть же родственники, знакомые, родные поля, березки, мосты, каналы. Да и не нужен ты никому за рубежом и без гражданства человек второго сорта. И культура у них другая
Каким-то совковым консерватизмом повеяло.
> Да и не нужен ты никому за рубежом
А здесь нужен? Что вообще люди вкладывают в термин "нужен" в контексте стран?
Аноним 23/08/15 Вск 17:17:44 #377 №533991 
>>533987
>Что вообще люди вкладывают в термин "нужен" в контексте стран?
Социальные связи они вкладывают, которых у программистишки и здесь-то нет, а там и быть не может.
Аноним 23/08/15 Вск 17:28:25 #378 №533993 
>>533984

> return gn();
Ты возвращаешь результат вызова функции а надо вернуть саму функцию.

все равно не работает.

а остальное все правильно?
Аноним 23/08/15 Вск 17:31:18 #379 №533995 
ОП, тыкни пальцем, что значит после скрипта ? и продожение?
Например http://2ch.hk/makaba/makaba.fcgi?task=market
Более доступного примера не придумал.
Аноним 23/08/15 Вск 17:37:33 #380 №533996 
>>533993

Натыкай там console.log() которые будут выводить аргументы в первой функции, во второй, и после объединения. Проверь, в правильном ли порядке они объединяются.
Аноним 23/08/15 Вск 17:37:40 #381 №533997 
ОП, как на ютубе реализовано запоминание времени, на котором было закрыто видео?
Аноним 23/08/15 Вск 17:50:01 #382 №534003 
>>533984
>А ты ООП используешь? Например чтобы передать информацию о файле достаточно 1 объекта File а не 10 отдельных переменных
Так проблема в том, что мне нужно передать в представление кучу переменных, которые между собой вообще никак не связаны (ну или я не могу уловить связь и выявить сущность).
Вот например переменные, которые встречаются в шаблоне, отвечающем за вывод описания конкретного файла.
$app->render(
'file_info.tpl',
array(
'file'=>$file, // это объект класса File, то есть собственно модель с информацией о файле
'title'=>$title, // title страницы, у каждой страницы разный заголовок; на главной это "SiteName - главная", на странице со списком файлов - "SiteName - загрузки" и т.д. не могу вынести в appendData
'login'=>$login, // залогинен ли пользователь? разве что эту переменную можно вынести "за скобки"
'loginEmail'=>$loginEmail, // это не прошедшее валидацию значение для поля имейл формы логина, чтобы пользователю не пришлось снова его вводить
'loginPassword'=>$loginPassword, // то же самое для пароля
'loginError'=>$loginError, // текст ошибки для формы, не прошедшей валидацию
'bookmark'=>$bookmark, // в дизайне что-то типа похожее на "Tabs" jQueryUI, то есть закладки; мне нужно знать, какая закладка активна
'preview'=>$preview, // в случае если файл является видео, аудио или картинкой, выводим плеер/предпросмотр; переменная содержит либо название подшаблона (video_preview.tpl, audio_preview.tpl, image_preview.tpl) либо false для прочих файлов (при false "виджет" предпросмотра не выводится)
'description'=>$description, // в таблице описания файла есть общие для всех типов файлов параметры (название, размер, дата загрузки и т.д.); и есть специфические характеристики (для картинки это разрешение, для аудио - время воспроизведения и т.д.); переменная определяет, какой из шаблонов для спец.информации подключить
'type'=>$type, // переменная для jPlayer, содержит тип файла в том виде, каком его читает jPlayer (например для видео webm это строка 'webmv')
'path'=>$path, // переменная для jPlayer, содержит путь к файлу
'comments'=>$comments, // массив объектов комментариев
'reply'=>$reply, // значение подставляется в hidden input формы комментирования, чтобы понять, на какой комментарий отвечаем (или ни на какой, значит это комментарий к файлу, а не ответ)
'postError'=>'', // в случае если форма комментирования не прошла валидацию, рендерим страницу с текстом ошибки
));

И так в каждом представлении. Я не вижу, в какой объект упаковать эту кучу, чтобы можно было удобно его передать в представление, эти переменные не связаны друг с другом. Так что я лучше забью на этот смарти, и потренируюсь с твигом. Кажется, его симпатичная система наследования (и переопределения) шаблонов должна большей частью решить эту проблему.

>Превьюшки надо создавать либо при загрузке либо при первом обращении к файлу но не при каждом открытии страницы файла.
А если файл был удален? Превью у меня не создается каждый раз при обращении к файлу, каждый раз проверяется существование превью, и если не существует, то создается. Видимо, я объединил проверку существования превью и его генерацию в одном методе, не нужно было этого делать. Сейчас посмотрю, уже не помню.
>Боюсь, что замечания все же будут так как тут очень далеко от идеала. Ты ведь и сам наверно чувствуешь что не все в порядке.
По мере того как проект разрастается, становится все сложнее ориентироваться в нем, неточности проявляются все сильнее и все скатывается в говнокод. Поэтому у меня позывы слиться и закончить уже с этим проектом.
Мне кажется, мне нужно сначала хорошо ознакомиться с каким-нибудь фреймворком, тогда смогу по подобию писать чистый и красивый код.
Так что постепенно переключаюсь на teshub. Сейчас только закончу с хелловорлдами на yii, приступлю к нему.
Аноним 23/08/15 Вск 17:55:22 #383 №534006 
14403417227610.png
14403417227631.png
>>533970
>Скорее всего у него свой взгляд на архитектуру.
У них вообще курсы необычно сделаны. Пикрилейтед1 программа курса "PHP5: Основа программирования".
И только после этого идёт курс "PHP 5: Императивное программирование".
А пикрилейтед2 (читать слева направо, сверху вниз) их взгляд на план развития до начинающего веб-разработчика.
Аноним 23/08/15 Вск 18:12:54 #384 №534013 
Захотел тоже подучить PHP, надо поставить апач и пхп думаю.
Ну поставил, а оно нихуя не запускается, сука.
http://www.php.su/prepare/?apache2_php5_win
Делал по этому гайду.
В частности, когда коментирую эту строку
#LoadModule php5_module C:/Program Files (x86)/Apache/PHP/php5apache2_4.dll
апач работает. Если убрать коментарий, то не запускается.
В лог еррор ничего не пишет.
Аноним 23/08/15 Вск 18:32:23 #385 №534021 
>>533997

какой-нибудь localstorage? Или если ты залогинен, логично на сервере держать эту информацию (чтобы потом проанализировать).

Можешь попробоать посмотреть отладчиком если разберешься. Он показывает localstorage.

>>534003

> Вот например переменные, которые встречаются в шаблоне,
Данные из формы логина логично объединить в объект, который можно использовать и в обработчике этой формы. Но если подумать, они не нужны на всех страницах. Они нужны только на странице логина.

> 'preview'=>$preview, // в случае если файл является видео, аудио или картинкой,
Это нужно только на странице файла. Логику выбора шаблона можно перенести в сам шаблон и не передавать переменную.

> 'description'=>$description,
> 'type'=>$type,
> 'path'=>$path
надо смотреть код, но интуиция подсказывает что можно и их убрать. Опять же это нужно только на одной странице.

> 'comments'=>$comments,
> 'reply'=>$reply
> 'postError'=>''
Эти переменные нужны только на 1 странице, а не везде.

Я потом проверю код и дам более подробные советы, что поменять.

> А если файл был удален?
Тогда ты не можешь просмотреть его страницу и создавать ничего не требуется.

> По мере того как проект разрастается, становится все сложнее ориентироваться в нем
А надо учиться писать чтобы код был понятным. И учиться проще на простых примерах (фйлообменник) чем на сложных.

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

> Сейчас только закончу с хелловорлдами на yii, приступлю к нему.
Приступай, а потом вернемся к файлообменнику.


>>534006

У них курс не вообще по всему PHP, а только по функциональному программированию в PHP, какие возможности там есть. Причем может быть (я не знаю) от тебя требуется знать это функиональное программирование на примере Хаскелл.

Ты наверно не так понял, подумал что это курс по PHP для нубов.

Вторая картинка выглядит адекватной. Линукс полезен, для написания скриптов и уверенной работы на сервере. Только не уверен что за паттерны стоит браться так рано.

Они тоже Слим изучают, как и мы, я смотрю.
Аноним 23/08/15 Вск 18:33:25 #386 №534023 
>>534013

У тебя путь с пробелами, ты его в кавычки взял? Я бы не советовал ставить PHp в папку, в пути к которой есть пробелы.
Аноним 23/08/15 Вск 18:43:39 #387 №534027 
>>534023
И в кавычки брал, и без кавычек.
Тоже над этим думал, но в мануале путь так же с пробелами и всё у них работает.
Странно это всё.
Кун с макетом 23/08/15 Вск 18:43:52 #388 №534028 
>>533936

>Определить шрифт проще в фотошопе, открыв макет, выбрав инструмент «текст» и щелкнув на надпись.
Ох, этого я и боялся. Ненавижу фотошоп всей душой. Ну что поделать, придется ставить.

>2 начертания это недостаточно. Там есть курсивный текст (в заголовке).
Хмм, действительно курсив. Вначале я подумал, что там обычный механический наклон. Переделаю.

>также там больше 2 степеней жирности, есть сверхтонкий текст (с весом 100) и тяжелый с весом 900 (в надписи We are Webpaint).
Понял. Я просто увеличивал и уменьшал жирность у OpenSansBold. Ну да, и самому это не нравилось. Опять поленился. Переделаю.

>У тебя в макете невооруженным глазом видно что вес шрифта не такой во многих местах.
Ну так и шрифт другой. Но вообще да, там в некоторых местах еще и тонкое начертание нужно. У меня его вообще не было. Добавлю.

>Я глянул, там lato: https://www.google.com/fonts/specimen/Lato
>Изучи его лицензию, если его нельзя скачать и использовать, Open Sans сойдет, но судя по тому что он есть на Google Fonts, скорее всего лицензия либеральная.
>Оф. сайт шрифта найди сам.
Сделаю. Но вроде бы даже не то название я находил. Может действительно бесплатный найду.

> При том, что можно еще уменьшить, удалив ненужные форматы.
>Это ничего не даст так как браузер и не грузит все форматы, а только нужный ему.
А что насчет начертаний? К примеру у меня есть файлы жирного курсивного и обычного шрифта. А на сайте только обычный текст. Что будет загружаться пользователю, если у него нету ни одного из этих шрифтов? Только обычное начертание или курсив и жирный тоже? То есть вопрос о том, можно ли запихнуть сразу всю папку со всеми начертаниями, чтобы потом если нужно будет добавить текст на сайт, не нужно было идти и конвертировать, но так чтобы эти неиспользуемые начертания не загружались, пока не нужны.

> В общем, ОП, я не стал ждать когда дашь свой комментарий по поводу тестового сайта со шрифтами.
>Я же написал вроде или ты там что-то еще поменял?
Да, я тогда подключил три начертания OpenSans к тестовому сайту, вот мой пост >>532461

Аноним 23/08/15 Вск 18:44:07 #389 №534030 
>>534027
Просто убери пробелы
Аноним 23/08/15 Вск 18:45:25 #390 №534032 
>>534030
А как их убрать то? Путь будет тогда не правильный.
Аноним 23/08/15 Вск 18:51:56 #391 №534037 
>>534021
>Ты наверно не так понял, подумал что это курс по PHP для нубов.
Они его называют не курсом по PHP, а курсом по программированию, а PHP - лишь средство. Для начинающих. Говорят, основан на SICP.
Аноним 23/08/15 Вск 18:54:29 #392 №534039 
>>533953
Я там переделал немного. Если не будет работать, пишите!
Аноним 23/08/15 Вск 19:16:57 #393 №534053 
>>534028

Можешь гимп попробовать, но не гарантирую что все откроется.

> К примеру у меня есть файлы жирного курсивного и обычного шрифта. А на сайте только обычный текст. Что будет загружаться пользователю, если у него нету ни одного из этих шрифтов?
Лучше всего проверить инспектором на вкладке Network. Я думаю, только те начертания, которые используются на странице. Ну и из нескольких форматов браузер выберет только одни.

>>534037

SICP значит «структура и интерпретация компьютерных программ» и вряд ли это курс для начинающих.
Аноним 23/08/15 Вск 19:20:17 #394 №534057 
>>534028

Тут http://fontsmaket.esy.es/ для italic нет шрифта так как там получается стиль

> font-family: OpenSansItalic;
То есть шрифт с названием openSansItalic и жирным, не курсивным начертанием, а в @font-face такого нет

Также я не понимаю почему ты 3 начертаниям одного шрфита даешь разные имена. Это только запутывает все.

Аноним 23/08/15 Вск 19:25:42 #395 №534061 
>>534028

Должно быть так:

@font-face {
font-family: Название под которым шрифт используется в CSS;
font-weight: какое это начертание;
font-style: какое начертание;
src: ссылки на файл с этим начертанием;
}

И еще несколько блоков с тем же названием, но другими weight и style и другими ссылками в src.

Ты явно теорию либо не почитал, либо хороших статей не нашел.
Аноним 23/08/15 Вск 19:30:52 #396 №534062 
>>534061
А, то есть потом уже в каждом случае в стилях не font-family подставлять, а weight и style. А само название шрифта в боди один раз прописать.
Сейчас переделаю на тестовом.
Аноним 23/08/15 Вск 19:37:24 #397 №534067 
ОП, проверь задание про айпад в кредит пожалуйста: http://ideone.com/gE28PA . Сильно плохо так организовывать циклы? И есть ли в PHP while?
Аноним 23/08/15 Вск 19:43:02 #398 №534069 
>>534067
Стой, ОП, не проверяй, я ошибку нашел.
Аноним 23/08/15 Вск 19:48:00 #399 №534071 
>>534069
Вот теперь: http://ideone.com/zbkGd8
Аноним 23/08/15 Вск 19:54:33 #400 №534074 
>>534061
Переделал. И чего-то понять не могу почему все жирным шрифтом а италик механический.
Аноним 23/08/15 Вск 21:13:40 #401 №534123 
Что почитать по теории ООП, можно на примере явы, ибо изучать не долго.
Аноним 23/08/15 Вск 21:15:29 #402 №534127 
>>534074

Инспектором посмотри внимательно какие стили применены к заголовкам (на вкладке Computed он даже идентификатор шрифта пишет).
Аноним 23/08/15 Вск 21:18:25 #403 №534129 
>>533868
У меня у котика в глазах(в краях) все время козявки, это гной? Может закапать? Правда он не домашний, т.е. у родителей в поселке живет, ползает на улице, иногда потрепанный приходит.
Аноним 23/08/15 Вск 21:31:25 #404 №534139 
14403546855770.jpg
>>534129
Ой, вы тут кошечек любите)))) Наверное и деток тоже))))))
А у моего ребеночка какашечки какого-то странного цвета.......
Как думаете, это плохо?((((((((((((((((((((((
Аноним 23/08/15 Вск 21:42:27 #405 №534146 
>>534129
Для кошек есть специальные глазные капли. Я у своей такое лечил. Сходи в какой-нибудь зоомагазин, там тебе посоветуют.
>>534139
На сосач, быдло.
Аноним 23/08/15 Вск 21:51:02 #406 №534151 
14403558624550.png
>>534146
Аноним 23/08/15 Вск 22:37:26 #407 №534184 
>>534129

Лучше наверно не рисковать самому лечить.

Аноним 23/08/15 Вск 22:39:41 #408 №534187 
Прошу прощения, что отвлекаю от спора любителей и нелюбителей животных.

Объясните, что такое делегирование, множественное наследование, трейты и шаблон mixin.
Почитал какие-то статьи, ничего не понял.
Можно своими словами и с аналогиями?
Аноним 23/08/15 Вск 22:57:19 #409 №534202 
>>533883
Осознал, приступаю.
Аноним 23/08/15 Вск 23:13:53 #410 №534222 
Котаны, я тут себе зверя делаю nginx + php-fpm + owncloud.
Сейчас собираю php5 из исходников с нужными моджулями Debian 8.1/php-5.6.12
Сконфигурировалось ровно, собралось тоже. Но тесты показали что не все так хорошо. Чем/как мне чинить косяки?


=====================================================================
FAILED TEST SUMMARY
---------------------------------------------------------------------
file_get_contents() test using offset parameter out of range [ext/standard/tests/file/file_get_contents_error001.phpt]
FPM: Test status page [sapi/fpm/tests/010.phpt]
=====================================================================

=====================================================================
WARNED TEST SUMMARY
---------------------------------------------------------------------
zend multibyte (8) [ext/mbstring/tests/zend_multibyte-08.phpt] (warn: XFAIL section but test passes)
zend multibyte (10) [ext/mbstring/tests/zend_multibyte-10.phpt] (warn: XFAIL section but test passes)
zend multibyte (11) [ext/mbstring/tests/zend_multibyte-11.phpt] (warn: XFAIL section but test passes)
Phar: bug #69958: Segfault in Phar::convertToData on invalid file [ext/phar/tests/bug69958.phpt] (warn: XFAIL section but test passes)
FPM: Test various messages on start, from master and childs [sapi/fpm/tests/015.phpt] (warn: XFAIL section but test passes)
=====================================================================
Аноним 24/08/15 Пнд 04:15:32 #411 №534282 
>>534067
>есть ли в PHP while?
Конечно есть http://fi2.php.net/manual/ru/control-structures.while.php
Можешь скачать мануал здесь http://fi2.php.net/download-docs.php Рекомендую chm с комментариями, тот что на ~30МБ.
>>534071
В расчёте есть ошибка, у софтбанка должно получиться 61268. Цикл, на мой дилетантский взгляд, сделан очень нелогично, переделай через while.
Проверка
>if ($servicePayment == 0) {
>$creditBalance += 7777;}
на мой взгляд тоже нелогична, вдруг нужно будет произвести расчёт для другого банка, где будет и ежемесячный платёж за обслуживание, и плата за открытие счёта. Подумай как можно переделать.
неоп
Вопрос по joomla 3 Аноним 24/08/15 Пнд 06:26:26 #412 №534291 
14403867863370.png
Надо добавить вкладку в стандартном компоненте контента, и там будут всякие файлы грузиться. Как это лучше всего реализовать?
С mvc знаком, а джумлу недавно начал изучать.
В идеале нужен компонент который .zip устанавливается без смс и писечек. Редактировать ядро табу ведь.
Аноним 24/08/15 Пнд 08:07:36 #413 №534302 
Я что-то не понимаю, как в контроллере можно пройтись по массиву, занести это в класс, а потом вывести во вьюхе.
Аноним 24/08/15 Пнд 08:09:46 #414 №534303 
>>534129
Не, козявки это нормально. А вот гнойные сопельки это плохо, в инете написано, что какое-то вирусное заболевание и будут осложнения и нужно к ветеринару вести (а у меня социофапия, как же я пойду к ветеринару (().
Аноним 24/08/15 Пнд 08:46:28 #415 №534305 
>>534303
Или съеби или ответь на >>534291
Аноним 24/08/15 Пнд 08:48:18 #416 №534307 
>>534305
>>534291
Ты съеби. Цмсочками балуются в web.
Аноним 24/08/15 Пнд 08:54:38 #417 №534308 
>>534307
>joomla
>cms
ясн
Аноним 24/08/15 Пнд 09:01:39 #418 №534311 
14403960995600.jpg
>>534308
https://en.wikipedia.org/wiki/Joomla
Аноним 24/08/15 Пнд 09:15:13 #419 №534315 
14403969133350.png
>>534308
Аноним 24/08/15 Пнд 09:49:25 #420 №534319 
>>531765 (OP)
http://www.php.su/articles/?cat=oop&page=006

Что думаете по поводу такого вот (ООП) построения вьюхи?

Аноним 24/08/15 Пнд 10:02:53 #421 №534331 
нет, я все-таки не понимаю, как из вьюхи foreach вынести в контроллер??
Аноним 24/08/15 Пнд 10:09:01 #422 №534335 
>>534331
Зачем?
Перебор данных во вьюхе для вывода - обычная практика.
Аноним 24/08/15 Пнд 10:14:02 #423 №534339 
>>534319
Ни в коем случае не следуй тому, что там описано. Статья очень устарела.
Если ты новичок, и задаешься таким вопросом - выучи фреймворк. Yii или Laravel.
Аноним 24/08/15 Пнд 10:49:54 #424 №534371 
14404025941500.png
>>534335
Мне сказали, что вот это вот говнокод, хотя функция использует переменную выведенную методом foreach.
Аноним 24/08/15 Пнд 11:06:57 #425 №534380 
14404036170380.jpg
>>534371
Это говнокод.
мимоэксперт
Аноним 24/08/15 Пнд 11:07:51 #426 №534381 
>>534371
У тебя проблема в том, что во вьюхе ищё и какая-то логика подготовки данных. Такого быть не должно.
Вся подготовка данных должна быть в контроллере. Во вьюхе только вывод.
Кун с макетом 24/08/15 Пнд 11:21:50 #427 №534392 
>>534127

Как я понял у заголовков hN изначально уже стоит font-weight: bold и поэтому у меня все было жирным. Вылечилось выставлением им в CSS
font-weight: normal
font-style: normal;
Аноним 24/08/15 Пнд 11:46:07 #428 №534407 
>>534381
А как я буду во вью реализовывать вывод данных в зависимости от наличия или отсутствия параметра в бд??
Аноним 24/08/15 Пнд 11:47:17 #429 №534408 
Т.е. не вывод данных, а вывод куска кода. Например, если юзер в бд определен, то пишем юзер, если нет, то пишем анонимас.
Мне что тогда в контроллере различные вьюхи подключать и дублировать их???
someApprentice 24/08/15 Пнд 11:48:54 #430 №534410 
ОП, прокомментируй пожалуйста эти посты >>533714 >>533715
Аноним 24/08/15 Пнд 11:50:24 #431 №534411 
>>534407
Этот параметр ты должен получить в модели, потом из модели передать в контроллер, обработать его как-то, если требуется, а потом аж из контроллера передать во вьюху. И во вьюхе проверить параметр через if/switch.
Аноним 24/08/15 Пнд 11:52:25 #432 №534413 
>>534408
>>534411
Тогда во вьюхе тебе нужно просто выводить какой-нибудь $user_title. А $user_title определять в контроллере. Вьюха не должна отвечать за обработку, она просто выводит данные.
Задания по JS Аноним 24/08/15 Пнд 11:56:56 #433 №534415 
Переделал.
#12: http://jsfiddle.net/c6xkz5Lw/
Аноним 24/08/15 Пнд 13:46:53 #434 №534451 
>>534307
Как с контентом работаешь?
Аноним 24/08/15 Пнд 13:57:22 #435 №534455 
>>534451
Например? О чем ты?
Аноним 24/08/15 Пнд 14:00:43 #436 №534456 
>>534413
Как я могу вот этот кусок вывести через контроллер?
не могу. Хотя можно конечно display none поставить, а в контроллере джаваскрипт прописать, но это пиздец.
if($cookieUser==$cookieLoad) {
?>
<div class="row">
<div class="col-md-6" style="padding-top:10px;">
<div class="btn-group" role="group" aria-label="...">
<a href="http://localhost/TwigBlog/download/<?=$value['id']?>"><button type="button" class="btn btn-primary">Download</button></a>
<a><button type="button" class="btn btn-success" data-toggle="modal" data-target="#myModal">Edit</button></a>
<a href="http://localhost/TwigBlog/delete/<?=$value['id']?>"><button type="button" class="btn btn-danger">Delete</button></a>
</div>
</div>
</div>

<?php
}
Аноним 24/08/15 Пнд 14:04:15 #437 №534458 
>>534408
О боже.

Вот смотри как это должно быть примерно.

ты в контроллере пишешь так

if (isset($user)) {
     $view_data['user_name'] = $user['name'];
} else {
     $view_data['user_name'] = "Anonimouse";
}



и такими вот примерно хуйнями заполняешь этот самый массив $view_data
далее у тебя есть например в модели функция: которая возвращает массив всех юзверей тебе, с их инфой.
и ты в контроллере для их плучения пишешь:

$view_data['users'] = get_users();

после чего ты просто передаешь этот готовый массив $view_data во вьюху и там выводишь из него данные

<h3>добрый день, <?=$viev_data['user_name']?></h3>

<p>На нашем говнофоруме уже зарегались следующие долбоебы:</p>
<ul>
<? foreach ($view_data['users'] as $user) { echo "<li>" . $user['name'] . "</li>"; }?>
</ul>

то есть использовать во вьюхе цикл что бы вывести список или таблицу - норм. Прост формируются все поля для вьюхи контроллером, ясно тебе?
Аноним 24/08/15 Пнд 14:28:51 #438 №534467 
>>534456
У тебя тут что за хуйня? Если типа зашел который загрузил файлик на сервер, то ему и показываем как бы ссылки на скачку и удаление того что он загрузил?
Это норм, как бы логично если зашел админ, то вывести через подобное условие ему ссылку на админку.

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


И вообще, я вангую уязвимость в твоем коде. Пусть я такой зашел к тебе на сайт, загрузил файл, мне выдало страницу, а на ней ссылка вида: http://localhost/TwigBlog/download/123
Хуясе подумал я, и давай вручную перебирать айдишники для даунлоада.
http://localhost/TwigBlog/download/1
http://localhost/TwigBlog/download/2
и так далее

А после того как все скачал, то и прошелся запросами такого вида:
http://localhost/TwigBlog/delete/1
http://localhost/TwigBlog/delete/2
...


Ибо нехуй говносайты делать.
Аноним 24/08/15 Пнд 14:50:21 #439 №534478 
>>534467
ебать сурово, ну ладно, токен там поставлю.
Аноним 24/08/15 Пнд 15:35:53 #440 №534504 
А еще не получается сделать запрос в бд по токену, он в варчар сохранен.
$app->get('/download/:token', function ($token) use($app) {
$files=$app->db->query("
SELECT * FROM files WHERE token = $token
");
Аноним 24/08/15 Пнд 15:37:31 #441 №534505 
>>534458
>в модели функция:
в какой модели?
Аноним 24/08/15 Пнд 15:40:59 #442 №534507 
>>534455
Например статьи, текстовая информация, изображения и прочее, если с сайтом после его завершения должен будет работать другой человек, далекий от веб-разработки.
Аноним 24/08/15 Пнд 15:42:45 #443 №534508 
>>534507
Для этого админка делается обычно. Если я тебя правильно понял
Аноним 24/08/15 Пнд 15:55:55 #444 №534517 
Давно не помню таких шатаний, пздц(((((
Аноним 24/08/15 Пнд 16:29:19 #445 №534530 
Что за фигня с яндекс капчей? Хотел еще себе на сайт прикрутить, но теперь передумал.
Аноним 24/08/15 Пнд 16:35:56 #446 №534531 
14404233568530.jpg
Сап проганы, у меня трабла. В ссылках почему то в конце вставляется <br>, из-за чего нихера не работает. Как исправить?
$post = preg_replace("~(https)://(.)pp.vk.me(.)(\s|\n|[,.?!](\s|\n)|$)~",'<img src="https://pp.vk.me\\3" title="https://pp.vk.me/\\3" width="256"><br>',$post);

Пик - результат регулярки.
Аноним 24/08/15 Пнд 16:37:02 #447 №534533 
>>534530
Её больше не будет. Сможешь о ней только на лурочке почитать.
Аноним 24/08/15 Пнд 17:20:46 #448 №534545 
>>534533
Что за лурочка.
Аноним 24/08/15 Пнд 17:21:30 #449 №534546 
>>534545
>.
?

fix
Аноним 24/08/15 Пнд 17:47:10 #450 №534556 
Ура, написал свой первый конструктор, круто.
Аноним 24/08/15 Пнд 17:49:12 #451 №534558 
>>534556
На каком языке?
Аноним 24/08/15 Пнд 17:50:10 #452 №534559 
>>534558
На русском.
Аноним 24/08/15 Пнд 17:55:42 #453 №534561 
>>534559
Покажи.
Заебался я эти гуглокартиночки выбирать! Верните мне моё реактивное капчевание!!!!11
Аноним 24/08/15 Пнд 18:08:33 #454 №534563 
>>534561
Конструктор - в смысле класс, который выводит хуйню из foreach
ДО этого вообще не особо понимал, нахуй эти классы нужны.
class test {
public function __construct(array $files){

foreach($files as $post=>$value){
return $this->name=$value['path'];
}}
$obj = new test($files);
echo $obj->name;
Аноним 24/08/15 Пнд 18:09:26 #455 №534564 
>>534533
Кстати, я вот думаю, что все заморочились с "ИИ" распознаванием картинок, чтобы новую капчку обходить.
Аноним 24/08/15 Пнд 18:31:36 #456 №534575 
Почему у меня эти переменные все равно не хотят во вью выводиться? в контроллере нормально пишутся, если эчо добавить.
Аноним 24/08/15 Пнд 18:32:29 #457 №534577 
14404303491920.png
>>534575
хуйня какая-то, проще во вью все писать.
Аноним 24/08/15 Пнд 18:52:08 #458 №534584 
>>534504
Пиздец, это слим, что ли?
Микрофреймворки для тех, кто может в архитектуру. Возьми Yii, а лучше Laravel, научись мвц, а потом за слимы берись.
И да, используй pdo.
Аноним 24/08/15 Пнд 18:56:01 #459 №534586 
>>534577
> проще во вью все писать.
Нахуя тебе тогда вообще вью, дебил? Ебашь всё в контроллере. И запросы, и обработку, и шаблоны через ечо.
У нас в конторе за такое..
Аноним 24/08/15 Пнд 19:05:04 #460 №534590 
>>534584
>Возьми Yii, а лучше Laravel
А чо не симфони или зенд сразу, а?
Аноним 24/08/15 Пнд 19:14:41 #461 №534592 
>>534586
Ну а чо эти переменные во вью не пишутся из контроллера йопт, я чо виноват йопта. хуле они не пишутся та
>>534584
сказали сделать файлообменник на слиме же.
Аноним 24/08/15 Пнд 19:15:29 #462 №534593 
Подскажите в каком двигаться направлении? В задаче "На словах ты Лев Толстой" Заранее благодарю.
Аноним 24/08/15 Пнд 20:54:03 #463 №534611 
Я правильно понял, что "ленивая загрузка" подразумевает, что сопряженные данные не загружаются при первом выполнении запроса, а только при прямом обращении к ним?
Например в Yii это выглядит следующим образом:
$post = Post::model()->findByPk(10); // у таблицы Post есть внешний ключ на Author, но в объекте $post на данный момент нет данных об авторе, а только "ссылка"
$author = $post->author; // здесь произойдет запрос на получение данных об авторе
"Жадная загрузка" соответственно грузит все сопряженные данные сразу при первом запросе.

Я на всякий случай переспрашиваю, потому что часто пишут неясно, приходится догадываться, а мои догадки могут быть неточными.
Безобразная капча, я иногда подвисаю, пытаясь понять что на картинке.
Аноним 24/08/15 Пнд 22:07:56 #464 №534649 
Странное дело, есть внутри одного дива шириной 283 пикселя ul список, который превышает ширину родительского элемента. Он имеешт ширину 311пикселей. Хотя у него явно задана ширина 100% и задан box-sizing:border-box, маржины, паддинги по нулям. Как он может быть шире родителя?
Аноним 24/08/15 Пнд 22:19:13 #465 №534653 
>>534593
Это та, где нужно стишки генерировать?
Все просто: берешь и вставляешь случайные слова из массивов word[1-5]. Рядом с заданием есть схема стиха.
Аноним 25/08/15 Втр 00:01:52 #466 №534691 
>>534653
Да про стишки, а как их рандомными сделать?
http://ideone.com/178JEj
Аноним 25/08/15 Втр 00:42:25 #467 №534711 
PHP или Node.js? Почему?
Аноним 25/08/15 Втр 00:49:55 #468 №534715 
>>534691
Выбрать рандомный элемент массива. Например mt_rand(0,count($word1)-1)
Аноним 25/08/15 Втр 00:52:35 #469 №534719 
>>534715
$randomWord = mt_rand(0,count($word1)-1);
echo $word1[$randomWord];

Быстрофикс
Аноним 25/08/15 Втр 00:55:31 #470 №534720 
>>534691
Ты для 1 и 2 строчки стиха используешь те же слова. Для каждой из них тебе нужно отдельно вызывать функцию mt_rand()
Аноним 25/08/15 Втр 00:55:50 #471 №534721 
>>534719
Ну и зайчем ты ему сразу рассекретил, можно было сказать что у него в коде тупо нет связи mt_rand и вывода результата, пусть бы чутка тыковку включил.
Аноним 25/08/15 Втр 00:57:02 #472 №534722 
>>534721
Я не сразу код посмотрел, виноват.
Аноним 25/08/15 Втр 01:36:07 #473 №534732 
>>534719
Спасибки.
Аноним 25/08/15 Втр 03:00:26 #474 №534745 
>>534592
> Ну а чо эти переменные во вью не пишутся из контроллера йопт, я чо виноват йопта. хуле они не пишутся та
Их нужно передавать в параметре. Почитай про шаблоны в доках слима. Там написано про передачу переменных

>>534590
Есть предложения получше?
Аноним 25/08/15 Втр 11:45:32 #475 №534752 
14404923326040.png
14404923326041.png
14404923326052.png
В общем, добавил доп. класс, вью теперь нормально выглядит. также сделал проверку на кукиес для вывода файла с опцией редактирования. Для удаления файла сделаю такую же проверку на кукис. Потом надо еще для кукисов значение рандомное сгенерировать.
И теперь надо еще как-то в зависимости от расширение файла подключить кусок для вывода картинки.
Аноним 25/08/15 Втр 11:50:27 #476 №534756 
>>534649
У меня в макете такое было совсем недавно. Для ul браузеры сами задают некоторый padding слева, у меня в хроме 40px был. Попробуй в инспекторе посмотреть, скорее всего слева паддинг и будет, нужно обнулить.
Аноним 25/08/15 Втр 12:28:42 #477 №534769 
>>531765 (OP)
поясните за history.pushState
Аноним 25/08/15 Втр 12:36:56 #478 №534774 
>>534769
всё, спс, понял
Аноним 25/08/15 Втр 12:56:14 #479 №534779 
Какие классы описывать для задачи со студентиками?, мне приходит на ум только класс для работы с БД который будет предоставлять методы для выборки данных из БД, для вставки данных в БД, обновления данных и т.д.
Аноним 25/08/15 Втр 13:16:21 #480 №534794 
>>534779
https://github.com/codedokode/pasta/blob/master/student-list.md#Рекомендуемая-архитектура
Аноним 25/08/15 Втр 13:24:39 #481 №534798 
>>534756
Там он обнулен. К тому же box-sizing: border-box должен высчитывать ширину с учетом паддинга, так что при width:100% он все равно не должен выходить за родительский элемент.
Аноним 25/08/15 Втр 13:27:17 #482 №534799 
Пока побаиваюсь юзать IDE, какие плагины поставить для sublime text 2? Для brakets видел классный плагин выводящий инфу о встроенных функциях php прямо в редакторе.
Аноним 25/08/15 Втр 13:30:29 #483 №534800 
>>534798
Я тоже думал, что обнулен.
>box-sizing: border-box должен высчитывать ширину с учетом паддинга
Этот паддинг не учитывается. Он дается браузерами автоматически, то есть ты его можешь нигде вообще не прописывать, но в браузере он будет отображаться.

Я вообще сразу на сайт загружал и в инспекторе хрома смотрел в чем дело. У тебя загружен куда-нибудь? Можешь код показать, а то так не совсем понятно.
Аноним 25/08/15 Втр 13:32:57 #484 №534801 
14404987776750.png
>>534800
Действительно паддинг 40 пикселей. Гугл говорит, что придется прописывать отрицательный марджин, чтобы убрать эту хрень.
Аноним 25/08/15 Втр 13:36:20 #485 №534803 
>>534801
Нет, так извращаться не нужно. Подбери обнуление паддинга в нужном месте. У меня вылечилось.
Аноним 25/08/15 Втр 13:59:23 #486 №534809 
14405003635070.png
ОП, вот такая табличка для студентиков. Пойдет?
Аноним 25/08/15 Втр 14:11:20 #487 №534814 
>>534809
email сделай уникальным. Еще нужно поле "Иногородний" или типа того, для места жительсва. И поле где ты будешь хранить токен, который мы сверяем с токеном из куки, которую мы поставим, что бы узнавать пользователей, когда им припрет редактировать свои данные.
Не ОП-кун.
Аноним 25/08/15 Втр 14:12:07 #488 №534815 
>>534801
Так же помни о том, что этот паддинг дает браузер, а значит в каждом браузере может быть свой паддинг. То есть ты сейчас выставишь отрицательный маргин 40, но к примеру в опере паддинг будет не 40, а 30, а в мозилле 20. В итоге ты только все порушишь. Нужно делать именно обнуление.
Аноним 25/08/15 Втр 15:48:50 #489 №534853 
В конфигурации базы данных в Yii есть параметр 'emulatePrepare' => true.
За что он отвечает? В документации http://www.yiiframework.com/doc/api/1.1/CDbConnection#emulatePrepare-detail непонятно.
Ссылаются на какой-то native prepare support. Я что-то упустил в изучении sql?
В мануале php тоже ссылаются на какую-то загадочную "эмуляцию". http://php.net/manual/ru/pdo.prepare.php
Что мне нужно знать о ней?
Аноним 25/08/15 Втр 16:43:11 #490 №534867 
>>534853
Я ваще не знаю, чё-как там в Юи, но думаю, это связано с http://php.net/manual/ru/pdo.setattribute.php
Ищи в списке PDO::ATTR_EMULATE_PREPARES
Аноним 25/08/15 Втр 17:01:50 #491 №534878 
14405113101920.png
>>531765 (OP)
Заебал чот ваш ideone, нагруженный рекламой.

нуфак
Аноним 25/08/15 Втр 17:05:03 #492 №534879 
Сап. Есть ли тут люди уровня чуть выше / ниже middle? В идеале если знаете Yii2, и инструменты типа docker, composer, то мог бы взять в личный open-source проектик, ковырять планировщик. Но даже если ничего не умеете, то могли бы проработать юзерские маскоты, реплики для них, либо библиотеки какие-то прикрутить. В общих чертах, это такой личный хэлпер, который помогает юзеру не превращаться в животное. Вопросы либо люда, либо в шкуп vokieana
Аноним 25/08/15 Втр 17:07:44 #493 №534880 
>>534879
Бесплатно я даже над твоей мамкой не буду работать.
Аноним 25/08/15 Втр 17:12:53 #494 №534884 
>>534880
Оплата тоже подразумевалась.
Аноним 25/08/15 Втр 17:13:25 #495 №534885 
>>534879
>Но даже если ничего не умеете
Тут все такие.

>могли бы проработать юзерские маскоты, реплики для них, либо библиотеки какие-то прикрутить
Мне кажется, решение ОПовских заданий принесёт больше пользы.

А к тебе бы я пошёл, наверное, был бы уровнем чуть повыше.
Аноним 25/08/15 Втр 18:26:59 #496 №534908 
>>533936
>Для рассылки лучше взять хорош библиотеку типа swiftmailer а не писать с нуля.
Спасибо за подсказку, взял на заметку. Если бы был вариант скачать просто файлик у них, что бы заинклудить его в код, то уже бы попробовал и её. В итоге отложил пока эту идею на пару дней. Сейчас экспериментирую с php:mail и даже через неё ничего не шлется у меня, даже самому себе, лол. Что делать то с этим? Полезу сейчас читать хабру.

Вообще я понял, что это блин похоже целая отрасль по зарабатыванию бабла в интернете, и никто просто так не даст высылать тебе письма. Так как еще с самой зари интернета все борятся со спамом и прочим говном. Похоже наш сервер теперь тоже в бане, из-за того что я пытаюсь отсылать почту, лол. В общем ничего не ясно чет.
Аноним 25/08/15 Втр 19:27:52 #497 №534937 
14405200723440.png
Помогите пикрелейтед
Аноним 25/08/15 Втр 19:33:39 #498 №534942 
я пьян господа, но все равно духу позвонить проститутке не хватает.
Аноним 25/08/15 Втр 19:38:21 #499 №534946 
>>534937
$foo = 'устаревшие функции, господа';
$foo = ucfirst($foo); // Устаревшие функции, господа
Аноним 25/08/15 Втр 19:40:38 #500 №534947 
>>534942
Очень интересно, продолжай.
Аноним 25/08/15 Втр 20:09:43 #501 №534960 
Ковырял пол дня sublime text 2, так ничего толкового от него и не добился, настройки нужно прописывать вручную, часть плагинов я тупанул и не понял как активировать, кароче это не мой уровень пока, хотя я понимаю что это мол "гибко, свои плагины, сниппеты и т.д.". Поставил NetBeans, а он такой няшный, все интуитивно, можно подключить встроенный php сервер(я пока не ставил вручную php), со сборками тоже все работает, форматирование вроде как по psr'вски, автодополнение и куча других фич, максимум няшнота.
Аноним 25/08/15 Втр 20:11:12 #502 №534961 
>>534960
ЧТо у тебя за сборочка?
Аноним 25/08/15 Втр 20:16:53 #503 №534963 
>>534961
Да я хз, ставил 100 лет назад на замену notepad++, но я не ожидал, что там так все сурово. Нет, я бы мог поковыряться, но пока не вижу необходимости, хочется писать код.
Аноним 25/08/15 Втр 20:18:34 #504 №534964 
>>534963
Нет нет, я имею ввиду сервер, там php mysql
Аноним 25/08/15 Втр 20:24:02 #505 №534965 
Так, у меня есть класс/модель абитуриент. В нем поля: имя, фамилия, пол, группа... Нужно ли делать их прайвит'ами или оставить паблик. То есть вопрос в том, как отдавать их значения. Обращаться как $obj->name, или создать метод который бы отдавал массив всех свойств(хотя, зачем? его же все равно придется разыменовывать.)
Аноним 25/08/15 Втр 20:25:40 #506 №534967 
>>534965
Инкапсулируй, так круче
Аноним 25/08/15 Втр 20:55:15 #507 №534989 
Аноны, подскажите бесплатный хостинг куда можно выложить сайт который написал?
Аноним 25/08/15 Втр 20:59:40 #508 №534991 
>>534989
Удваиваю. Сегодня прямо посреди процесса работы над макетом меня прервал hostinger своим нововведением.
Ты ведь, анон, тоже поэтому спросить решил, да?
Аноним 25/08/15 Втр 21:04:35 #509 №534995 
>>534991
У меня немного другая проблема, есть несколько сайтов на денвере которые написал (в том числе и файлообменик по заданию ОПа), есть знакомые у которых свой небольшая ИТ-контора и они как бы не против меня взять если я покажу им свои работы, поэтому хочу выложить что бы было что показывать.
Аноним 25/08/15 Втр 21:14:12 #510 №535000 
>>534995
Понятно. А я тут задание на макет делал и посреди работы сайт перестал загружаться и файлзилла подключиться не могла. Оказалось что на hostinger отключили бесплатные аккаунты и FTP.
Аноним 25/08/15 Втр 21:26:09 #511 №535006 
>>535000
Ты больше не знаешь никаких бесплатных хостингов?
Аноним 25/08/15 Втр 21:28:05 #512 №535007 
>>535000
Ты больше не знаешь никаких бесплатных хостингов?
Аноним 25/08/15 Втр 21:30:54 #513 №535009 
>>535000
Ты больше не знаешь никаких бесплатных хостингов?
Аноним 25/08/15 Втр 21:34:20 #514 №535012 
>>535006
Да как-то всегда только хостингером пользовался и до сегодняшнего дня его бы и посоветовал тебе.
Сам не знаю куда макет выложить.
Аноним 25/08/15 Втр 22:07:43 #515 №535017 
>>534649
Могу ошибаться, но возможно такая чертовщина из-за буллета(символа напротив каждого элемента списка). Возможно он и занимает эти 40px.
Аноним 25/08/15 Втр 22:10:19 #516 №535018 
>>535012
Я только что вроде бы разместил на бесплатном аккаунте на хостингере. Только там у меня проблема, как там редактировать файлы которые уже закинул на хостинг? Захожу в файловый менеджер и там можно только просмотреть файл, как там редактировать?
Аноним 25/08/15 Втр 22:12:44 #517 №535019 
>>534989
digitalocean
godaddy
либо 1gb
Аноним 25/08/15 Втр 22:19:42 #518 №535024 
>>535018
А, всё, уже нашёл, извиняюсь за тупой вопрос.
Аноним 25/08/15 Втр 22:20:39 #519 №535025 
>>534878
Дали же божественный Ad Block. Зачем рекламу жрать?
Аноним 25/08/15 Втр 22:33:19 #520 №535029 
>>535012
Если не сложно можешь сказать как правильно сделать подключение к базе данных на хостингере, я пишу такое:

$dsn = 'mysql:dbname=program;host=hostinger.ru';
$user = '21319358'; //ид пользователя
$password = 'tort512'; //пароль указанный при регистрации
$pdo = new PDO($dsn, $user, $password);

Но мне пишет следующее:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2003] Can't connect to MySQL server on 'hostinger.ru' (111 "Connection refused")' in /home/u653722351/public_html/inc/bd.php:5 Stack trace: #0 /home/u653722351/public_html/inc/bd.php(5): PDO->__construct('mysql:dbname=pr...', '21319358', 'tort512') #1 /home/u653722351/public_html/index.php(2): include('/home/u653722351...') #2 {main} thrown in /home/u653722351/public_html/inc/bd.php on line 5
Аноним 25/08/15 Втр 23:13:19 #521 №535042 
Оп, подскажи неофиту какой линукс накатить и каким сам пользуешься? Во многих вакансиях указано знания линуха, подскажи как эти знания получить. Немного не в тему треда, но всё же.
Аноним 25/08/15 Втр 23:25:30 #522 №535043 
>>535042
https://gist.github.com/codedokode/420c8c12a1edae25f0ec
Мануал от ОПа. И это очень в тему треда на самом деле.
Аноним 25/08/15 Втр 23:36:12 #523 №535048 
>>535043
спасибо, извиняюсь если не тем местом прочитал оп тред и сам пропустил
Аноним 25/08/15 Втр 23:41:45 #524 №535050 
Аноны, в задаче про файлообменик, я храню имя файла, размер файла, тип файла в базе данных. Я глупый? Для вывода этой информации можно же использовать обычные функции ПХП?
Аноним 26/08/15 Срд 00:01:55 #525 №535055 
>>534995
>есть несколько сайтов на денвере которые написал
Это какой-то новый язык программирования?
Аноним 26/08/15 Срд 00:06:11 #526 №535058 
>>534965
Можно оставить публичными, но тогда есть возможность для записи в эти поля. То есть ты/твой коллега может по ошибке что-то туда положить $obj->name = 'new name';
Лучше делать protected и писать геттеры (геттер - метод который возвращает значение переменной, function getName(){return $this->_name;}).
Аноним 26/08/15 Срд 00:10:44 #527 №535061 
>>535048
Еще много приятных гайдов наложено на digitalocean.
https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-on-debian-8 например.
Аноним 26/08/15 Срд 00:15:12 #528 №535062 
Гугло капча это что-то: «выберите все изображения где есть капуста» и куча мыльных салатов где вообще не понять их чего они сделаны. Оказалось, надо было выбрать все картинки где есть что-то зеленое.

>>534028

> Сделаю. Но вроде бы даже не то название я находил. Может действительно бесплатный найду.
Там используется именно Lato (кстати, это переводится как «Лето») и он бесплатен для использования в вебе, о чем написано на сайте: http://www.latofonts.com/lato-free-fonts/

Там же можно скачать архив с шрифтом в нужных форматах, уже сконвертированный.

>>534032
>>534013

Я все же советую установить PHP в папку без пробелов и убедиться что он работает как описано например тут:

https://gist.github.com/codedokode/7054af4a03865c4cc863

Вот урок по установке Апача, хотя там ничего не написано про твой случай: https://gist.github.com/codedokode/10774100

>>534071

> for ($i = 1; $i <= 2; $i = 1)
для вечного цикла есть while (true) {} или for (;;) { }

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

> return $paymentTotal;
> break;
return выходит из функции (и следовательно из цикла) и break никогда не выполнится.

> $creditBalance = 39999;
Это лучше сделать аргументом функции чтобы получилась универсальная функция на все случаи жизни.

> if ($servicePayment == 0) {
> $creditBalance += 7777;
Эта проверка в общем неправильная так как завтра банк может поменять условия или появится еще один банк без комиссий. Надо явно передавать дополнительный платеж как отдельный аргумент функции.

> if ($creditBalance <= $monthlyPayment)
Эту проверку надо делать после добавления процентов и комисиии (но до выплаты). то есть должна быть такая логика:

- прибавляем проценты и комиссию к остатку долга
- если остаток маленький, выплачиваем сколько осталось и уходим
- иначе платим 5000

Ну и ответ во втором банке получается 61268 по моему.

В общем, переделывай.

> Сильно плохо так организовывать циклы?
нехорошо так как запутываешь читателя

> есть ли в PHP while?
https://www.google.ru/search?q=php+while&oq=php+while&aqs=chrome..69i57j0l5.1945j0j7&sourceid=chrome&es_sm=0&ie=UTF-8
Аноним 26/08/15 Срд 00:15:16 #529 №535063 
>>535050
>я храню имя файла, размер файла, тип файла в базе данных
Все правильно. Лучше один раз собрать информацию о файле и занести в базу, чем каждый раз обращаться к файловой системе.
Имя разве не меняешь? А что если несколько пользователей загрузят файлы под одним и тем же именем, например "Безымянный.jpeg" или "ава.png"?
Что если кто-то загрузит php-скрипт и запустит его на сервере?
Оригинальное имя нужно сохранить в бд, а на сервере хранить под другим именем (приконкатенировать айди, временную метку, хеш) и расширением.
>Я глупый?
Да.
Аноним 26/08/15 Срд 00:48:35 #530 №535075 
>>534123

не знаю. У меня есть учебнике из Оп поста глава про ООП но там не все. Насчет Явы, раз ты упомянул ее, есть книга «Философия Ява, 4 издание», вот тут например глава про ООп из нее, но она замудреная местами: http://rastafara.nt.net.ua/index.php/%D0%93%D0%BB%D0%B0%D0%B2%D0%B0_1_Thinking_in_Java_4th_edition

>>534187

> делегирование
Это вызов функций другого (включенного в класс) объекта. Ну то есть у нас есть класс A и у него есть метод doSomething и он сам ничего не делает,а только вызывает метод doSomething у объекта класса B.

https://ru.wikipedia.org/wiki/%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD_%D0%B4%D0%B5%D0%BB%D0%B5%D0%B3%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F

> множественное наследование
Это когда класс наследуется от нескольких сразу (в PHP нельзя, и хорошо так как это приводит к путанице): https://ru.wikipedia.org/wiki/%D0%9C%D0%BD%D0%BE%D0%B6%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BD%D0%B0%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5

> трейты
это набор полей и функций который можно добавить в класс.

https://www.google.ru/search?q=%D1%82%D1%80%D0%B5%D0%B9%D1%82%D1%8B&oq=nhtqns&aqs=chrome.1.69i57j0.4290j0j4&sourceid=chrome&es_sm=0&ie=UTF-8

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

https://learn.javascript.ru/mixins

В чистом ООП примеси не нужны, да и мне они тоже не очень нравятся.

Аноним 26/08/15 Срд 01:02:41 #531 №535078 
>>534187

Если ты не очень понял, или хочешь разобраться лучше, давай-ка ты и потрудишься. Напиши простые примеры кода на PHP (или другом языке), демонстрирующие эти явления.

>>534222

Как минимум можно посмотреть подробный лог и поискать причину падения тестов там. Скорее всего либо ты при сборке что-то не добавил, либо баги в самом PHP

>>534291

Я не разбираюсь так что могу лишь посоветовать поискать в документации или погуглить.

>>534302

Я не понял, зачем тут класс и что именно ты хочешь сделать.

>>534319

Я думаю, что класс тут лишнее усложнение и смесь HTML с кодом класса смотрится некрасиво. Для вью лучше использовать обычные PHP шаблоны: http://www.phpinfo.su/articles/practice/shablony_v_php.html

>>534331

Код покажи иначе никто не ответит

>>534371

Да, это плохой код так как тут есть логика которую надо выносить в модель или контроллер: чтение списка файлов с диска. Это не задача вью, его задача отображать то, что ему дали.

Стили у тебя почем-то прописаны прямо в HTML, а не в CSS файле. Может HTML/CSS подучить стоит?

br в верстке это 100% признак незнания CSS.

В шаблоне надо использовать foreach с двоеточием как описано тут: http://www.phpinfo.su/articles/practice/shablony_v_php.html

Ссылки не должны собираться из кусков, а должны генерироваться функцией.

Килобайт это 1024, а не 1000 байт.

Ифов слишком много и все запутанно.

Обращений к кукам в вью быть не должно.

При выводе данных надо использовать htmlspecialchars.

Я рекомендую тебе сделать наше задание на список студентов. Там все это разжевывается и там подробные пояснения на эту тему. Если ты пытался делать файлообменник, то тебе пока рано это делать и лучше начать с более простой задачи.
Аноним 26/08/15 Срд 01:10:33 #532 №535080 
>>534505
ну погугли MVC, блин.
Аноним 26/08/15 Срд 01:18:08 #533 №535083 
>>534937
У тебя кодировка многобайтная.

Ты обращаясь к $text[0] обращаешься не к первой букве, а к первому байту этой буквы. Поэтому нужно тут через (mb_)substr первую буквы дергать, если хочешь её сделат большой.
Аноним 26/08/15 Срд 01:18:59 #534 №535085 
Аноны, я помню, там файлообменник надо проверить и кошки-мышки, сегодня не успеваю.

>>534392

Да, в браузере есть CSS правила по умолчанию, чтобы HTML без CSS был хоть как-то оформлен.

Там минимальные правила, они задают размер шрифта заголовков, маргины для разных элементов, вид ссылок, стили для списков. Приоритет этих правил тоже минимальный.

Стили для вебкита: http://trac.webkit.org/browser/trunk/Source/WebCore/css/html.css
Стили фаерфокса: http://hg.mozilla.org/mozilla-central/file/tip/layout/style/html.css

Ты должен иметь о них представление.

>>534407

Сделаешь переменную с понятным именем вроде $isFileAnImage (является ли файл картинкой?) и будешь проверять ее.

>>534408

Это элементарно:

<?php if ($user): ?>

<?php else: ?>

<?php endif ?>

Почитай статью про шаблоны и сделай задачу про студентов.

>>534413

Не, тут это не надо. Можно сделать что если юзер не залогинен то $user === null, иначе это объект User.

>>534478

Нужен токен либо проверка авторизации при удалении. Это обязательно. Ведь те же поисковики могут через браузер проиндексировать ссылки и перейти по ним.

Да, кстати, действия меняющие данные на сервере. вроде удаления, не должны делаться ссылкой и GET запросом, нужен POST запрос. Ты видимо HTTP не изучал (жаль, по нему конечно трудно найти хорошую статью).

>>534504

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

>>534505

Которая M из MVC

>>534507

Контент обычно хранят в базе (можно в файлах, если его не будут менять, но в базе гораздо удобнее).

>>534531

Непонятно что ты хочешь сделать. ЧТо такое \\3 например?

>>534563

Я не знаю, что ты за задачу решал, но выглядит подозрительно. Также, твой код неправильный. Какой смыцс делать return из конструктора? По моему ты что-то не так понял.

По ООП в моем учебнике есть глава и там объясняется что такое конструктор. Это функция, которая вызывается при создании объекта и инициализирует его.

Я советую вернуться к этой главе и прорешать все задачи там, сдать их и исправить замечания. Если ты пропускаешь разделы учебника то заслуженно страдаешь. Вернись и исправь пробелы в знаниях. Это касается и других уроков, не только ООП.

Аноним 26/08/15 Срд 01:27:56 #535 №535088 
Кто-нибудь вообще с первого раза гуглокапчу разгадывает? у меня он «указателем» назвает дорожный знак «кирпич». Там еще и перевод кривой.

>>534575

Ты не приложил кода ни текста ошибки, если он есть. Какой ответ ты ждешь?

>>534577

Еще проще вообще не писать.

>>534584

Ему просто надо изучать все последовательно, а не перепрыгивать уроки. Так как он пропускает темы то он и с более сложными фреймворками не разберется.

>>534592

Вернись и сделай пропущенные уроки. И все начнет передаваться.

> сказали сделать файлообменник на слиме же
только перед ним надо сделать студентов, а перед ними ООП, а перед ними пройти учебник. Пропускать эти уроки можно тем кто их хорошо знает, на пятерку, а у тебя там есть пробелы в знаниях.

>>534593

Генерируешь число от 0 до N-1, где N число элементов в массиве, и берешь соответствующий элемент из массива.

>>534611

Да, правильно. Чтобы проверить что ты все понимаешь, попробуй написать преимущества и недостатки жадной и ленивой загрузки. ЧТобы ты мог потом проанализировать какой способ когда лучше применять.

Подсказка: гугли «проблему N + 1 запроса»

> потому что часто пишут неясно, приходится догадываться
Можно код почитать.

>>534649

Инспектором посмотри какие на нем CSS правила. Они могут быть переопределены другим правилом.

>>534711

Смотря для чего.

>>534732

Решение на проверку потом сдай.

>>534745

> Есть предложения получше?
изучить пропущенные темы.

Аноним 26/08/15 Срд 01:33:54 #536 №535091 
Ура, ОП пришел, сейчас и мне наверное ответит. Сижу жду пока дойдет до меня :3
Аноним 26/08/15 Срд 01:39:47 #537 №535095 
14405423876830.jpg
Оп, я хотел спросить. Вот по поводу инкапсуляции и php блядь нигде не замечаю использывания этого принципа.

Везде стучаться на прямую к объектам, даже в фреймворках.
Что за дела? Где get/set-теры?
Аноним 26/08/15 Срд 01:40:46 #538 №535096 
>>535078
>Напиши простые примеры кода на PHP, демонстрирующие эти явления.

Я сейчас вожусь с Yii, там в руководстве говорится, что "Для компонентов реализован шаблон проектирования mixin".
http://yiiframework.ru/doc/guide/ru/basics.component
Поэтому пошел гуглить, и в результате насобирал еще колоду новых слов.

Но ты вроде более-менее внятно объяснил, так что поправь, если мои примеры будут неправильными.
Делегирование (фактически обертка над другим методом). В датаМаппере так хранится объект соединения с бд, и методы crud его используют.
class MyMapper
{
private $connection;
public function __construct(PDO $connection)
{
$this->connection = $connection;
}
public function save(Model $model)
{
$sth = $this->connection->prepare("INSERT ...");
...
}
}

>Это когда класс наследуется от нескольких сразу (в PHP нельзя)
Зато можно реализовать много интерфейсов, или это не то?
> трейты
>это набор полей и функций который можно добавить в класс.
Вот это непонятно. Что-то типа "импорта"?
class A
{
public function foo(){echo 'Hello ';}
}
class B
{
use A;
}
$b->foo();
Я что-то нигде не видел, чтобы эту фигню кто-то использовал, зато нагуглил вопросы на собеседованиях, там это зачем-то спрашивают. Может есть какие-то "подводные камни", то есть недостатки применения этого паттерна, или отдельные редкие случаи, когда он очень удобен? Вдруг спросят.

Что касается mixin, то это тоже самое что трейты, просто в реализации php? Ну и назвали бы тогда mixin, зачем новые кудрявые слова.
В общем, так и не понял, что такое "компонент" в yii, и как там реализованы примеси. Трейтами что ли? Ладно, пойду копаться в исходниках.

>Кто-нибудь вообще с первого раза гуглокапчу разгадывает?
Хм, у меня почему-то не каждый раз появляются картинки, в четырех случаях от пяти достаточно отметить галочку "я не робот".
Аноним 26/08/15 Срд 01:46:55 #539 №535102 
>>534752

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

>>534769

тут читал? https://www.google.ru/search?q=history.pushstate&oq=history.pushstate&aqs=chrome..69i57j0l5.4951j0j7&sourceid=chrome&es_sm=0&ie=UTF-8

Эти функции для того, чтобы твое яваскрипт приложение могло менять URL в адресной строке (не вызывая перезагрузку страницы), узнавать о событиях навигации (вперед/назад/смена URL) и полноценно поддерживало следующие функции браузера:

— назад/вперед
— добавление в закладки
— копирование/отправка URL со ссылкой на опрелеленный раздел в приложении
— обновить страницу не теряя открытую в приложении страницу


>>534798

Инспектором смотри какие CSS правила применены можешь скриншотом запостить.

>>534799

А почему не 3? Не знаю, почитай обзоры что ли.

Вот мои, без комментарииев:

AutoFileName\
DocBlockr\
Emmet\
FileRename-master\
PHP-Twig.tmbundle-master\
Sublime-JSHint-master\
SublimePHPCompanion\
XdebugClient\ (глючный, не работает)

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

>>534801

Ты уверен что совет в гугле именно к твоему случаю? Лучший выход изучить CSS как следует, у нас кстати есть задачки на HTML/CSS в Оп посте.

Я бы начал с вопроса, зачем ты ставишь width 100% если блоки по умолчанию занимают всю ширину родителя с учетом паддингов и маргинов. Ты зачем код и жизнь себе усложняешь? Надо знать возможности CSS и способы поиционирования элементов, а не переставлять свойства наугад.

>>534809

Табличку лучше SQL кодом постить (SHOW CREATE TABLE x \G )

>>534814

Верные советы

>>534853

Это опция PDO, как реализовывать плейсхолдеры?

— подставлять значения в SQL на стороне PHP и слать готовый запрос
— слать отдельно запрос, отдельно данные плейсхолдеров и пусть подставляет база

Опция нужна для баз не поддерживающих плейсхолдеры и для отладки багов.

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

>>534878


держи пасту в помощь: https://gist.github.com/codedokode/420c8c12a1edae25f0ec

>>534879

Если это работа, надо описывать условия и работы и оплаты подробнее.

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

>>534908

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

Почтовые сервисы вроеде mail.ru, yandex, google публикуют рекмендации для веб-мастеров по поводу рассылок.

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

В общем, гугли, изучай, не ленись.

>>534937

Когда ты обращаешьяс к строке по индексу:

$text[0]

ты получаешь не 1-ю букву, а первый байт. Соответственно ты ломаешь коды букв. Не используй этот метод, используй mb_substr.

Урок: https://gist.github.com/codedokode/ff99e357e9860ea169b8

Аноним 26/08/15 Срд 01:49:01 #540 №535105 
14405429411260.png
14405429411271.png
>не каждый раз появляются картинки
Пик1. Один раз на сессию?

Пик2. Помогите решить капчу: средняя тачка в нижнем ряду это пикап? Не разбираюсь в быдломобилях.
Аноним 26/08/15 Срд 02:09:52 #541 №535114 
>>535102
>Ты уверен что совет в гугле именно к твоему случаю? Лучший выход изучить CSS как следует, у нас кстати есть задачки на HTML/CSS в Оп посте.
>Я бы начал с вопроса, зачем ты ставишь width 100% если блоки по умолчанию занимают всю ширину родителя с учетом паддингов и маргинов. Ты зачем код и жизнь себе усложняешь? Надо знать возможности CSS и способы поиционирования элементов, а не переставлять свойства наугад.

Я смотрел в инспекторе, там паддинг задан нулевой , не знаю почему он переписывается браузером. Убирал в инспекторе галочку с width 100%, ничего не меняется, возможно баг инспектора и если убрать в ксс файле все станет нормально. А вообще это не мой сайт, если что, я просто наткнулся на одном сайте на полосы прокрутки и решил посмотреть, что их вызвало и был озадачен.
Аноним 26/08/15 Срд 02:12:07 #542 №535116 
>>534946

ucfirst не работает с кириллицей в utf-8 и потому ненпригодна в современном мире. да вообще она с момента рождения была малопригодна.

>>534960

Ну и хорошо, только поищи статьи/уроки или мануал почитай чтобы уметь основными возможностями пользоваться.

>>534965

Можно и так и так. В больших проектах лучше конечно прайват.

Для доступа пишешь геттеры\сеттеры для каждого поля, у меня в редакторе для них макрос сделан: https://gist.github.com/codedokode/cd2f41c8dcf1237fde4b

> или создать метод который бы отдавал массив всех свойст
зачем нам массив когда есть объект?

>>534989

Гугли, лентяй. Регистрируйся и тестируй на своем опыте самые популярные хостиги, заодно можешь потом тут отписаться.

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

>>535018

редактируешь у себя и выгружаешь через FTP/SFTP. Не надо ничего редактировать на хостинге. это плохая привычка.

>>535029

Для базы данных обычно отдельные реквизиты и пароль, задаются в админке хостинга при создании. Почитай FAQ, погугли. И проверь есть ли база на бесплатном тарифе.

>>535042

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

Уроков и статей море, погугли, попробуй.

Паста от меня: https://gist.github.com/codedokode/420c8c12a1edae25f0ec

>>535050

В базе удобнее так как можно например одним запросом посчитать средний объем файла или найти самый маленький файл.

>>535058

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

>>535063

Да, верно, файлы надо переименовывать, но так, чтобы админ мог потом понять где какой файл, потому не используйте случайные бессмысленные коды.

>>535091

Если ты файлообменник или кошки-мышки то потерпи, не сегодня.

>>535095

Привел бы примеры, а то трудно обсуждать. Я в симфони вижу очень много инкапсуляции, да и в Слиме есть немного.

Ну и есть тот факт что с сеттерами код больше. Вот в C# ты можешь создать поле и сеттер/геттер по умолчанию так:

string name { get; set; };

А в PHP надо поле + 2 функции написать. Ну что поделать.

>>535096

> Делегирование (фактически обертка над другим методом). В датаМаппере так хранится объект соединения с бд, и методы crud его используют.
Не, делегирование это когда вызывающая функция ничего не делает, только вызывает функцию и другого объекта. То есть не решает задачу, а делегирует ее решение кому-то другому.

Посмотри примеры кода: https://ru.wikipedia.org/wiki/%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD_%D0%B4%D0%B5%D0%BB%D0%B5%D0%B3%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F

>>Это когда класс наследуется от нескольких сразу (в PHP нельзя)
> Зато можно реализовать много интерфейсов, или это не то?
Можно, но интерфейс это другое. Интерфейс это
какая-то способность, умение (выражающаяся в наличии методов).

Ну допустим у нас есть игра, и некоторые объекты в ней умеют стрелять (танк, солдат), а некоторые нет. Можно сделать интерфейс IArmed (вооруженный) c методом fire() и сделать чтобы эти классы его реализовали.

И когда ты захочешь потом написать функцию, которая принимаает любой стреляющий объект, ты можешь указть это в тайп-хинте:

function fireAtEverybody(IArmed $subject) { ... }}

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

> Вот это непонятно. Что-то типа "импорта"?
Да, только не class A, а trait A. Мануал почитай.

> Я что-то нигде не видел, чтобы эту фигню кто-то использовал,
Я тоже. В чистом ООП вместо трейтов используют либо интерфейс + методы, либо интерфейс + делегирование либо используют промежуточный объект:

с трейтом:

$obj->traitMethod();

с промежуточным объектом:

$obj->getSomething()->traitMethod();

> Что касается mixin, то это тоже самое что трейты, просто в реализации php?
Скорее трейт это (один из) способов реализации миксина в PHP.

Аноним 26/08/15 Срд 02:14:56 #543 №535121 
>>535105

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

У меня каждый раз показывает.

>>535114

правила каскадируются и одни правила переопределяют другие. Ты все рассмотрел?

Без примера кода или скриншота не понять.

Полосы прокрутки могут быть вызваны много чем, достаточно длинного слова или картинки, выходящего за край экрана.
Аноним 26/08/15 Срд 07:04:51 #544 №535170 
>>535105
Я с этой капчей уже на форче натренировался. нет.
Аноним 26/08/15 Срд 07:06:41 #545 №535171 
>>535102
>У тебя тут много ошибок и тебе надо начинать с более простых вещей, а не браться за сложное.
Укажи ошибки тогда. Честно говоря, задачи твои говно - мне их скучно решать. Да и описаны они хуево, я их также как этот решу, файлообменник хоть на ргхосте посмотреть можно. Лан, раз указывать ошибки не можешь, то пошел нахуй. Сам как-нибудь напишу и залью в портфолио.
Аноним 26/08/15 Срд 07:30:43 #546 №535174 
>>535078
Да не охота мне лишний цсс было подключать. Ты чужую лень вечно на незнание списываешь и звучишь, как высокомерный мудак.
Аноним 26/08/15 Срд 07:32:14 #547 №535175 
И в твоем примере тоже ивы и елсы во вью допускаются, так что хуле вы раскукарекались.
?php if ($guestbook_messages): ?>
09.
<?php foreach ($guestbook_messages as $message): ?>
10.

11.
<?php if ($message['user_id']): ?>
12.
<p class="register_user_info">Пользователь:
13.
<a href="/users/<?=$message['user_id']?>.html">
14.
<?=htmlspecialchars($message['user_name'])?>
15.
</a>
16.
</p>
17.
<?php else: ?>
18.
<p class="anonim_user_info">Анонимный пользователь с IP <?=$message['user_ip']?></p>
19.
<?php endif; ?>

Read more: http://www.phpinfo.su/articles/practice/shablony_v_php.html#ixzz3jtNy8WvS
Аноним 26/08/15 Срд 11:15:42 #548 №535214 
Посмотрел вакансии джуниоров в Москве, совсем уж начальные знания требуют. Всего 2 нормальные вакансии и зп 25к. Зато куча вариантов, где требуют 1-3 года опыта и дают 50к+. Вроде как по требованиям я прохожу, но нет коммерческого опыта. Реально ли без него сразу устроиться на нормальную работу? Есть пара сайтов, но чистого пхп там мало, в основном Laravel + Angular.
Аноним 26/08/15 Срд 11:15:54 #549 №535215 
>>535116
ОП, почему ты мои посты >>534410 оставляешь без внимания?
Аноним 26/08/15 Срд 11:23:49 #550 №535221 
Что за логи и как они пишутся?
Кстати, вот задачку можете порешать.
https://docviewer.yandex.ru/?url=ya-disk-public%3A%2F%2FhgmHJY7TBoclM%2FmgYkJgib%2BkBAnt2FlfAwHmxsuyVkc%3D&name=%D0%97%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5.txt&c=55dd77b6cae1
Аноним 26/08/15 Срд 11:34:58 #551 №535224 
14405780983930.png
божи, зачем я начала гуглить вакансии?
Аноним 26/08/15 Срд 11:41:22 #552 №535225 
>>535171

Залей. Это будет лучшим свидетельством твоей безграмотности.

>>535175

Они там выглядят по-другому, не как у тебя

>>535215

Я вчера не успел проверить файлообменник и кошки-мышки. А без ответа чтобы их было легче найти.

>>535221

это обычный текстовый файл, где построчно записаны какие-то события.

https://ru.wikipedia.org/wiki/%D0%A4%D0%B0%D0%B9%D0%BB_%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D0%B8

> как они пишутся?
функциями работы с файлами типа fwrite

В задаче впрочем это не нужно.
Аноним 26/08/15 Срд 11:48:41 #553 №535228 
1. А как вообще ботов для вк пишут? Там же нужно иметь доступ к их коду для этого?
2. Зачем использовать в небольших проектах дата маппер, ведь это только лишнее усложнение кода ибо запросы нечасто делаются.
Аноним 26/08/15 Срд 11:49:00 #554 №535229 
>>535221
Это где такие тестовые дают?
Аноним 26/08/15 Срд 11:49:37 #555 №535230 
>>535225
А как узнать, сколько по времени функция или запрос выполняютя?
Аноним 26/08/15 Срд 11:51:10 #556 №535231 
>>535229
Да я погуглил вакансии, ДС, там еще предлагали работу репетитором пхп по скайпу лол (МВК, ООП) 500 рэ час. Везде кстати на удаленке требуют наличие гарнитуры и живое общение голосом, а у меня мик хуевый и прям в вебке.
Аноним 26/08/15 Срд 11:51:29 #557 №535232 
>>535095
Кстати, вот в Magento-о таки прайват, гененрируються сами, а если не получается, то можно всегда по нейму вытащить, ОП-кун, кстати по карьере вопрос, уже 3 месяц работаю с Magento и немного Wordpreess, вктатиться в нормальные проекты с фреймворками можно будет потом? Сейчас посмотрел код Laravel кончил от него просто
Аноним 26/08/15 Срд 11:54:46 #558 №535233 
>>535230
Можно что-то схожее по принципу сделать:
$a = time();
func();
$a = time() - $a;
echo $a;
Аноним 26/08/15 Срд 11:57:48 #559 №535235 
>>535228
>>535228
У vk есть открытое API для взаимодействия, бака. Гугли.

Затем, что это разделения логики + если потом что изменять в духе db или еще что-то, то тебе не придетсья переписывать половину кода
Аноним 26/08/15 Срд 12:01:24 #560 №535237 
>>535228

1. Смотря какие цели. Тут бот должен имитировать браузер, значит нужен селениум (может быть патченный) или что-то аналогичное. Мы тут не обсуждаем разработку вредоносных программ, а для невредоносных вконтакте предоставляет АПИ: http://vk.com/dev

2. Чтобы научиться использовать дата маппер и чтобы начиться писать более аккаратный код. Даже в маленьком проекте работу с базой надо выносить отдельно. Я не хочу видеть уродливый код как в других учебниках, где авторы сами толком программировать не умеют.

Да и веб-приложения маленькие редко бывают. Маленькими бывают только учебные задания.

>>535233

time считает с точностью до секунды что слишком грубо. Лучше microtime(true) который возврващает дробное число (там точность зависит от ОС, на винде около 15 мс, на линуксе больше).

>>535232

Можно, почему нет?


Аноним 26/08/15 Срд 12:03:11 #561 №535238 
>>535228

2. А что бы ты предложил? Чтобы использовались объекты, а не какие-нибудь массивы.
Аноним 26/08/15 Срд 12:03:15 #562 №535239 
>>535062
>> Сделаю. Но вроде бы даже не то название я находил. Может действительно бесплатный найду.
>Там используется именно Lato (кстати, это переводится как «Лето») и он бесплатен для использования в вебе, о чем написано на сайте: http://www.latofonts.com/lato-free-fonts/
>Там же можно скачать архив с шрифтом в нужных форматах, уже сконвертированный.

Я скачал фотошоп, открыл им этот макет. И да я аутист и не знал что PSD это фотошоповский формат. Так же не знал что там все по слоям расписано. То есть я точные цифры размеров блоков, кнопок, шрифтов и т.д. могу там посмотреть спокойно. Пока сложновато еще, никогда фотошопом не пользовался, как раз из-за его сложности, но разберусь как-нибудь.

Я вчера уже начал переделывать макет, скачал этот шрифт, правда пришлось сделать два, так как в макете присутствует еще Lato Black, он какой-то сверхжирный и в папке с различными начертаниями шрифта Lаto его не было. В общем все сконвертировал, в КСС подключил и начал понемного изменять шрифты текста на сайте, но прервало то, что мой аккаунт на хостингере отключили, как и у всех остальных, и теперь ищу другое место куда загрузить. Не могу найти пока, перепробовал кучу бесплатных хостингов, но все не нравятся.

И еще, столкнулся с такой проблемой что размер шрифта в макете и на сайте не совпадает. Я специально смотрел в макете, чтобы точно такой же размер поставить и вот пример. В макете слова в шапке написаны 13pt, выставляю на сайте такой и слова просто огромными получаются. Ставлю 13 но не pt а px и уже вроде похоже на правду, но тоже не уверен. Гуглил таблицу переводов фотошоповских pt в px и фигню только нашел. Например 13pt там равны 17px. Выставил 17px и те же огромные слова получились. На глаз получается подбирать шрифт?
Аноним 26/08/15 Срд 12:11:29 #563 №535241 
>>535239

> так как в макете присутствует еще Lato Black
Это просто начертание с жирностью 900, сверхжирный. Я скачал архив на 22 Мб с оф сайта с веб-шрифтами и там он есть.

> Не могу найти пока, перепробовал кучу бесплатных хостингов, но все не нравятся.
Можешь попробовать github pages, бесплатно, без рекламы. Нужно умение пользоваться гитом (FTP там нет), но он тебе все равно в дальнейшнем понадобится:

https://pages.github.com/ (на можешь попробовать бинг транслейтом обработать)

Книга по гиту: https://git-scm.com/book/ru/v1

Ну или поищи что-нибудь еще.

> В макете слова в шапке написаны 13pt, выставляю на сайте такой
pt и px не путаешь? В CSS pt = 5/4 px. В обычном мире pt (пункт) это https://ru.wikipedia.org/wiki/%D0%A2%D0%B8%D0%BF%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D1%83%D0%BD%D0%BA%D1%82

> В макете слова в шапке написаны 13pt, выставляю на сайте такой
Попробуй 13px ставить. Ну или на глаз подбери постепенно меняя размер. Ты еще помни что браузер можешь чуть по-другому рендерить шрифт потому идеально с фотошопом не совпадет все равно.

Аноним 26/08/15 Срд 12:12:45 #564 №535243 
>>535239

> но прервало то, что мой аккаунт на хостингере отключили
Ты можешь html файл сохранить на диск и в браузере смотреть же.
Аноним 26/08/15 Срд 12:26:59 #565 №535244 
Какая разница, какой код? Главное, чтобы работало и уязвимостей не было йопта.
Аноним 26/08/15 Срд 12:27:45 #566 №535245 
>>535238
Просто в контроллере хуячишь гет пост и сокл запросы.
Аноним 26/08/15 Срд 12:28:41 #567 №535247 
>>535235
>бака
почему ты разговариваешь, как анимешный пидорас?
Аноним 26/08/15 Срд 12:31:45 #568 №535250 
>>535237
>Апи
вот это вот получается, что любой пидр может получить данные из моих соцсетей, пиздец. чем больше я узнаю о сети, тем больше мне плохеет.
Аноним 26/08/15 Срд 12:55:33 #569 №535257 
14405829333810.png
>>535241
>Это просто начертание с жирностью 900, сверхжирный.

А что писать в font-weight? Что то типа ExtraBold делал так в 1й раз, но переделал на два шрифта или 900 Откуда эта цифра 900 еще, понимаю что есть диапазон 100-900, но где указано что у Lato Black веса 900??

>Можешь попробовать github pages, бесплатно, без рекламы. Нужно умение пользоваться гитом (FTP там нет), но он тебе все равно в дальнейшнем понадобится:

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

>pt и px не путаешь?

Не думаю. Прикрепил пикчу.

И да, сайт макета работает уже. У меня было много бесплатных аккаунтов нарегано, нужно было 2 только оставить. Удалил лишние. Я это к тому, что можно посмотреть как выглядят слова в шапке. По моему даже 13 px там много. maketi.esy.es
Аноним 26/08/15 Срд 13:10:42 #570 №535265 
>>535232
магенто же платный. у них платформа прям на сайте.
Аноним 26/08/15 Срд 13:41:55 #571 №535284 
Недостатки Active Record

Модели Active Record нарушаю принципы SOLID. В частности, принцип единой ответственности (SRP — «S» в принципах SOLID). Согласно принципу, доменный объект должен иметь только одну зону ответственности, то есть только свою бизнес-логику. Вызывая его для сохранения данных, вы добавляете ему дополнительную зону ответственности, увеличивая сложность объекта, что усложняет его поддержку и тестирование.
Реализации сохранения данных тесно связана с бизнес-логикой, а это означает, что если вы позже захотите использовать другую абстракцию для сохранения данных (например для хранения данных в XML-файле, а не в базе данных), то вам придется делать рефакторинг кода.
See? У датамаппера есть недостатки.
Аноним 26/08/15 Срд 14:26:26 #572 №535301 
14405883869510.png
Теперь я официально зашкварен видеокурсами.
Аноним 26/08/15 Срд 14:29:42 #573 №535305 
>>535301
еще и платными, кек.
если не жалко денег, то найми лучше репететора
Аноним 26/08/15 Срд 14:33:12 #574 №535309 
>>535305
Найти бы его ещё. За $9.
Аноним 26/08/15 Срд 14:34:04 #575 №535310 
>>535309
В месяц.
Аноним 26/08/15 Срд 14:35:31 #576 №535311 
>>535310
Алсо, чем ОП не репетитор?
Аноним 26/08/15 Срд 14:37:00 #577 №535312 
>>535311
Он не берёт деньги.
Аноним 26/08/15 Срд 14:37:04 #578 №535313 
>>535311
Он гуглить заставляет(((
Аноним 26/08/15 Срд 14:40:15 #579 №535316 
>>535312
>>535313
Мне норм.
Аноним 26/08/15 Срд 16:14:46 #580 №535335 
14405948868660.png
Почему перестановка местами этих шрифтов влияет на сами шрифты на макете. В боди прописан font-weight: normal;
Но он становится то тонким то нормальным, если эти 2 фонт-фейса менять местами.
Аноним 27/08/15 Чтв 08:26:31 #581 №535384 
»535247
Потому, что я еще застал время, когда онямужники знали, что kde на freebsd надо ставтить на порты, а ты сосал хуй :c
»535237
Оп-кун, еще есть PhantomJs, не обязательно анонам учить приемы автоматизированного тестирования.
»535265
У них есть community edition, который бесплатный и есть тырпрайз, работаю с обеими, когда как. Кстати денег срубить можно много, а можно и попасть, если облажаешься жутко и отвественным сделают тебя, но ты лохом последним должен быть.

Оп, ты вот что мне подскажи, что лучше сделать в качестве учебного на Laravel, а то файлообеменик слишком просто, а банальные блоги тоже не сложно и уныло. Сайт с тестами делать не хочу, у меня нет так много времени.
Аноним 27/08/15 Чтв 09:41:21 #582 №535405 
ОП, буду благодарен, если прокомментируешь данные программы:
http://ideone.com/BRxyii
http://ideone.com/HyfBsZ
http://ideone.com/pVKdWf
http://ideone.com/MfScps
http://ideone.com/2WdKog
http://ideone.com/tJujsL
http://ideone.com/4nb3tt
Аноним 27/08/15 Чтв 09:56:01 #583 №535409 
>>535225
>Я вчера не успел проверить файлообменник и кошки-мышки. А без ответа чтобы их было легче найти.
Так ты ответишь позже?
Аноним 27/08/15 Чтв 10:51:23 #584 №535424 
>>535409
Я не помню, чтоб он кого-то игнорировал. неОП
Аноним 27/08/15 Чтв 10:52:46 #585 №535425 
14406619663350.png
>>535301
Я знаю кунг-фу HTTP!
Аноним 27/08/15 Чтв 13:03:28 #586 №535452 
А как при помощи ПХП можно включать веб-камеру пользователя по его разрешению? Типо как в чатрулетке и на прочих подобных сайтах.
Аноним 27/08/15 Чтв 14:17:49 #587 №535470 
>>535452
Это делается на клиенте через js, причем тут php?
У-у сука, я тебе не гугл
Аноним 27/08/15 Чтв 14:25:30 #588 №535475 
14406747301910.jpg
>>535085
>Непонятно что ты хочешь сделать. ЧТо такое \\3 например?
Эта фигня в регулярках, номер строк после (.)
Т.е. \\3 это (\s|\n|[,.?!](\s|\n)|$)
Я хочу заменить ссылку на изображение вк на само изображение. У меня это получилось, но в конце ссылки приписывается блядское <br> с какого-то хера и всё ломает. Как ты можешь не знать регулярки? Это же азы.
sageАноним 27/08/15 Чтв 15:07:30 #589 №535505 
>>535384
> что я еще застал время, когда онямужники знали, что kde на freebsd надо ставтить на порты
С лурочки узнал?
Аноним 27/08/15 Чтв 15:12:19 #590 №535509 
14406775391110.png
br там берется из исходного текста куда ты скорее всего его сам же и вставляешь для перевода строки.

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

Твой скриншот инспектора вообще не в тему так как он не показывает исходный код HTML, а показывает распарсенное дерево DOM которое не совпадает с исходным кодом по разным причинам.

Также у тебя скорее всего там XSS которая позволяет злоумышленнику вствить произвольный HTMl код. Ты вообще неправильно делаешь, надо парсить исходное сообщение на узлы и их преобразоывать в HTMl а не лепить костыли с заменами на регулярках. Ты должен понимать где у тебя текст, а где HTMl код а я вижу что ты не понимаешь и думаешь что это одно и то же, хотя это не одно и то же. Например <b> как текст это 3 символа, а в HTML это тег.

Раньше на форумах пытались регулярками обрабатывать bb коды (разметку) и там всегда были уязвимости так как регулярки не заточены на работу с сложным кодом, где элементы могут быть вложены друг в друга.

Мне сейчас некогда обяъснять, как это сделать, но у меня нашлась картинка которая может быть поможет.
Аноним 27/08/15 Чтв 15:13:22 #591 №535510 
>>535505

Шапку треда посмотри. Слово бака самое что ни на есть уместное в этом ITT треде.
Аноним 27/08/15 Чтв 15:15:56 #592 №535513 
>>535475

и приведу тебе еще один пример почему нельзя просто вставлять текст в HTML без преобразования:

Текст: /index.php?a=1&copy=1
HTML: /index.php?a=1&amp;copy=1

Учел ли ты это в своем коде?
Аноним 27/08/15 Чтв 16:24:57 #593 №535555 
Реквестирую огромные статьи и книги про настройку сторонних шрифтов.
ОП, я тот кун с макетом и я не могу понять что там делать. Почитал уже и бред от яндекса про шрифты и много других статей. Ну не работает оно и все.
Аноним 27/08/15 Чтв 16:33:43 #594 №535557 
>>535085
Да я уже все это сделал. Осталось только дописать удаление файла, его публичный доступ, вью, ссылки ну и красиво запихать это все в валидаторы и дата мапперы (что я буду делать в последнюю очередь, когда уже все будет работать).
Аноним 27/08/15 Чтв 16:54:59 #595 №535562 
>>535555

В твоем случае, попробуй вес прописать не через слова типа lighter. а числом, и в font-face и в коде. Ну и проверь правильно ли везде выставлен вес и font-style.

> Откуда эта цифра 900 еще, понимаю что есть диапазон 100-900, но где указано что у Lato Black веса 900??

Тут например https://www.google.com/fonts/specimen/Lato


Аноним 27/08/15 Чтв 16:57:55 #596 №535564 
>>535562
>В твоем случае, попробуй вес прописать не через слова типа lighter. а числом, и в font-face и в коде.

А я, как обычно, до этого сам не догадался. Сейчас будет сделано.
Аноним 27/08/15 Чтв 17:07:24 #597 №535569 
Посмотрел код джумалы - ну и говно, ничего не понятно. Как там вообще что-то менять можно.
Аноним 27/08/15 Чтв 17:15:07 #598 №535574 
$app->get('/', function() use ($app, $obj) {
try {
$obj->thisMightThrowException();
$app->redirect('/success');
} catch(\Exception $e) {
$app->flash('error', $e->getMessage());
$app->redirect('/error');
}
});

Что делает thisMightThrowException(); в слиме? проверяет корректнось url? что это такое $obj?
Аноним 27/08/15 Чтв 17:34:30 #599 №535583 
>>535562
>>535564

Все работает. Спасибо за ссылку. Выстроил по ней вес.

Доделал все шрифты которые там используются. Так же, так как у меня теперь есть фотошоп, а, следовательно, и точные размеры элементов, я кое-что переделал, например кнопки теперь размером как и на макете. Правда там есть небольшая разница, потому что размеры реальные имеют например такой вид 148,21312412 px, их я округлял, но это совсем незаметно.

Проверить работу можно на прежнем месте http://maketi.esy.es/
Аноним 27/08/15 Чтв 18:20:28 #600 №535597 
>>535569

Там и не надо ничего менять а надо использовать API

>>535574

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

Аноним 27/08/15 Чтв 19:05:34 #601 №535625 
>>535078
>br в верстке это 100% признак незнания CSS
Из шаблонов Yii
<div id="footer">
Copyright &copy; <?php echo date('Y'); ?> by My Company.<br/>
All Rights Reserved.<br/> <!-- еще и с xml-ным слешом -->
<?php echo Yii::powered(); ?>
</div><!-- footer -->

Макаров быдло-боберкодер получается? Тогда кто я?
И чем плох <br>?
Я понимаю, когда весь шаблон испещрен этими брейками вместо использования блочных элементов. Но один разок вставить перенос мне кажется не грешно, чем тыкать два дополнительных дива или параграфа.

По делу: прикрутил twig к yii, обошлось почти без печальных последствий. Вопрос по этой строке из конфига 'fileExtension' => '.twig'
Для чего шаблонизаторы используют собственные расширения? У твига это .twig, у смарти .tpl
На что это влияет? Может на удобство поиска по файловой системе, или еще что?
На всякий случай интересуюсь, вдруг это важно, может есть какие-то соглашения по этому вопросу. По умолчанию yii не использует сторонние шаблонизаторы, так что я выставил эту настройку в .php, буду сохранять шаблоны под стандартным расширением, если не всплывет никаких подводных камней.

По синтаксису twig: как из него получить доступ к константам например? <?php echo __FILE__; ?> Как это прописать в твиг?

Я не робот. Спасибо абу.
Аноним 27/08/15 Чтв 19:08:34 #602 №535627 
Я не знаю, что за говно тут советовало выставлять в енум true или false, но у меня нихуя не проверяется это значение, поэтому я ставлю числа.
Аноним 27/08/15 Чтв 19:45:26 #603 №535643 
>>535625
Да он какой-то поехавший реально. До каждой запятой и закорючки доебывается.
Аноним 27/08/15 Чтв 19:48:15 #604 №535646 
>>535597
Ты долбоеба кусок, этот код я скопировал из ОФИЦИАЛЬНОГО руководства слима. http://docs.slimframework.com/routing/helpers/
Аноним 27/08/15 Чтв 20:04:40 #605 №535656 
>>535646
>>Ты долбоеба кусок
Потише, братишка, в этой ситуации.
Касательно кода: это просто абстрактный пример. На примере этого куска объясняют работу методов halt(), pass(), redirect() ,stop(). thisMightThrowException дословно переводится этоМожетВызватьИсключение. Подразумевается, что это какой-то метод, который может вызвать исключение.
Аноним 27/08/15 Чтв 20:53:32 #606 №535673 
Почему у меня аутолоадер не работает?
function myAutoloader($class)
{
$file = __DIR__ . '/classes/' . $class . '.php';
if (file_exists($file)) {
include $file;
}
}

spl_autoload_register('myAutoloader');
Аноним 27/08/15 Чтв 21:09:24 #607 №535688 
>>535673
Где у тебя папка с классами лежит?
Аноним 27/08/15 Чтв 21:20:43 #608 №535696 
14406996431260.jpg
Пиздос, в моем коде куча использования class_alias(), который облегчает жизнь, а на единственном бесплатном хостинге с доменом, фтп, пхп, мускулом, который я нарыл 000webhost.com эта функция не работает. Хост плохой или class_alias чем-то заменить? я пхп-неофит двух недель отроду и этой мое первое знакомство с хостингами
Аноним 27/08/15 Чтв 21:24:48 #609 №535697 
Посоны, что значит в PHP, когда названия классов с \ пишутся, например \Exception. Пробовал убирать \, переставало ловиться исключение.
Аноним 27/08/15 Чтв 21:32:05 #610 №535699 
>>535697
Про неймспейсы почитай.
Аноним 27/08/15 Чтв 21:50:36 #611 №535706 
ОП, поясни за TableDataGateway, у тебя на сайте непонятно. Есть пример его простой какой на PHP? Не въеду, чем от DataMapper отличается и как он вообще реализован.
Аноним 27/08/15 Чтв 22:06:41 #612 №535710 
>>535696
Если ты юзаешь такую поебень, то у тебя стопудово неправильная архитектура. Классам не нужны никакие альясы, есть же неймспейсы, есть трейты, есть наследование и интерфейсы, абстрактные классы в конце концов. Всего этого с головой хватает, чтобы без таких костылей обходиться.
Аноним 27/08/15 Чтв 22:17:12 #613 №535715 
>>535710
Я юзаю просто для того, чтобы писать не StudentMapper а SM, чтоб проще читалось и понималось.
Аноним 27/08/15 Чтв 22:31:49 #614 №535720 
>>535715
Если ты работаешь один, то конечно можно как писать как угодно.
Но если будешь устраиваться в хорошую контору, то коллегам подобное "упрощение" может очень не понравиться.
Аноним 27/08/15 Чтв 23:26:06 #615 №535741 
>>535706
Гугли на хабре есть примеры разбора ActiveRecord and DataMapper. Плюс погугли паттерн DAO в java
Аноним 28/08/15 Птн 00:24:25 #616 №535760 
Аноны, есть чатик с комнатами, диалоги сделаны при помощи яваскрипта и довольно быстро стираются, истории диалогов нигде нет. Хочу сохранять диалоги в блокнот, и поэтому попробовал написать парсер. Но парсит он как-то криво и сообщения вообще не парсит, парсит комнату не полностью. Парсю по адресу комнаты, который можно найти только в исходном коде. Как быть? Есть ли варианты? Я использую file_gets_contents, на curl не может быть других результатов?
Аноним 28/08/15 Птн 00:40:05 #617 №535762 
>>535760
Извини анон, кое-что прояснилось, но это привело к ещё большему количеству вопросов. Оказывается мне парсит не саму комнату, а страницу входа в неё (хотя на этом браузере я уже в ней нахожусь). Но войти в неё я не могу, через ту странице где я открыл её спарсенный вариант, так как при нажатии кнопки переводит на страницу
адрес_моего_денвер/login а надо адерсчата/login и дальше адресчата/room как это сделать? Если это сделать то дальше можно будет запускать скрипт каждые 30 секунд и парсить все сообщения.
Аноним 28/08/15 Птн 01:03:53 #618 №535769 
Двощ, запись $out .= $b, эквивалентна записи $out = $out.$b? Или как
Аноним 28/08/15 Птн 01:24:37 #619 №535779 
14407142774400.jpg
>>535078
> br в верстке это 100% признак незнания CSS.
> div в верстке это 100% признак незнания JS.
> html в верстке это 100% признак незнания PHP.
Аноним 28/08/15 Птн 03:00:28 #620 №535796 
аноны спасайте, траблы с mysql
есть скрипт, с бесконечным циклом, работает на линуксе
подключена база
та вот, через часов 5 работы скрипта выводит варнинги-Warning: mysql_fetch_array() expects parameter 1

$g = mysql_fetch_array(mysql_query("SELECT * FROM `stat` WHERE id='1'"));
Аноним 28/08/15 Птн 08:30:48 #621 №535816 
>>535688
в папке classes очевидно же.
Аноним 28/08/15 Птн 08:38:00 #622 №535818 
>>535796
Сделай проверку в бесконечном цикле, чтобы считал время и перезапускался каждые 4 часа.
Аноним 28/08/15 Птн 08:57:43 #623 №535820 
>>535769
бля, это настолько тупой вопрос, что я даже не знаю, попробуй оба и посмотри результат.
Аноним 28/08/15 Птн 09:59:57 #624 №535831 
>>535625

> Макаров быдло-боберкодер получается?
Просто плохо знает HTML/CSS. Он же не верстальщик в конце-концов. Следовательно, приводить его версту как образец точно не стоит.

Все же br это плохо. CSS предоставляет свойство display: block для вертикального расположения элементов. Более того, мы можем сверстать этот код лучше.

Вот это читается так: «тут строка, затем перевод строки, затем еще строка, затем перевод строки» (я выкинул одну из строк для упрощения примера)

Copyright 2015 by My Company.<br/>
Powered by YIi.<br/>

А вот это как «тут идет копирайт, затем информация о фреймворке»:

<div class="footer-copyright">Copyright 2015 by My Company.</div>
<div class="footer-powered-by">Powered by Yii.</div>

Нужны ли тебе пояснения почему второй пример лучше?

— разметка во втором примере не задает отображение текста, она описывает его смысл, чем является этот текст
— разметка во втором примере позволяет нам с помощью CSS позиционировать текст как угодно, хот вертикально, хоть одной строкой (ибо 3 строки в футере это перебор).

Верстать с помощью <br> это то же самое что в ворде выравнивать текст пробелами. HTML задумывался чтобы его использовали как во втором примере.

Заметь, что я выкинул одну из 3 строк. Если надо ее вернуть, я бы сделал так:

<div class="footer-copyright">Copyright 2015 by My Company. <br>All Rights Reserved.</div>
<div class="footer-powered-by">Powered by Yii.</div>

Либо так:

<div class="footer-copyright">
<p>Copyright 2015 by My Company.</p>
<p>All Rights Reserved.</p>
</div>
<div class="footer-powered-by">Powered by Yii.</div>

Так как «all rights reserved» это часть заявления об авторских правах.

> Для чего шаблонизаторы используют собственные расширения? У твига это .twig, у смарти .tpl
расширение обычно обозначает тип файла так что это логично. Плюс, это позволяет в ОС выводить разные иконки для файлов и открывать разные программы при двойном клике, это позволяет редактору выбирать нужную схему подсветки и автодополнения.

> На всякий случай интересуюсь, вдруг это важно, может есть какие-то соглашения по этому вопросу.
Принято называть твиговские файлы с расширением twig. В Симфони даже пишут file.html.twig чтобы показать что это HTML-шаблон. Так что не придумывай своих вариантов.

> как из него получить доступ к константам например?

{% set HELLO = constant('HELLO') %}

http://twig.sensiolabs.org/doc/tests/constant.html

> так что я выставил эту настройку в .php, буду сохранять шаблоны под стандартным расширением, если не всплывет никаких подводных камней.
Ты только путаешь читателя. В каком месте в twig шаблоне содержится PHP код?

>>535409

Отвечу.

>>535627

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

>>535646

Значит в официальном руководстве Слима несовершенный код. Возможно автор не очень хорошо знает исключения, но у тебя-то есть доступ к уроку про них: https://gist.github.com/codedokode/65d43ca5ac95c762bc1a

>>535673

Поставь там echo или var_dump который выведет имя класса и имя файла который ты пытаешься подключить, а также сработал if или нет.

>>535696

> , в моем коде куча использования class_alias(), который облегчает жизнь,
как? Я не видел код, но по моему ты делаешь что-то неправильно.

> Хост плохой или class_alias чем-то заменить?
Ищи другой хостинг, хотя по моему лучше не использовать эту функцию.

>>535697

Указание что класс в корневом неймспейсе: https://www.google.ru/search?q=php+%D0%BD%D0%B5%D0%B9%D0%BC%D1%81%D0%BF%D0%B5%D0%B9%D1%81%D1%8B&oq=php+%D0%BD%D0%B5%D0%B9%D0%BC%D1%81%D0%BF%D0%B5%D0%B9%D1%81%D1%8B&aqs=chrome..69i57j0l5.3349j0j7&sourceid=chrome&es_sm=0&ie=UTF-8

Алсо, вот вещи которые я научился распознавать с первого раза: указатели (на самом деле дорожные знаки), капуста, пончики (они круглые и с дыркой). Алсо капча истекает где-то через минуту если пост не отправить.
Аноним 28/08/15 Птн 10:16:33 #625 №535835 
>>535831
Лезть в файл, создавать стайлс.цсс, подключать его в хедере только чтобы поставить паддинг в 10 пикселей, когда можно было поставить br
Аноним 28/08/15 Птн 10:20:14 #626 №535837 
>>535706

Лучше наверно обратиться к первоисточнику (точнее переводу) и сравнить картинки:

Data Mapper:
http://martinfowler.com/eaaCatalog/dataMapper.html
http://design-pattern.ru/patterns/data-mapper.html

TableDataGateway:
http://martinfowler.com/eaaCatalog/tableDataGateway.html
http://design-pattern.ru/patterns/table-data-gateway.html

Я вижу разницу в том, что DataMapper заточен больше на работу с объектом Person: методы insert/update/select все принимают или возвращают этот объект. А вот TableDataGateway в общем может работать и без объекта, посмотри на методы insert/update.

> A Table Data Gateway holds all the SQL for accessing a single table or view: selects, inserts, updates, and deletes. Other code calls its methods for all interaction with the database.
TableDataGateway это класс, содержащий все SQL запросы. То есть каждый метод в нем обычно содержит 1 запрос на получение или изменение данных в базе. Для каждой таблицы делается обычно свой класс TDG, унаследованный от общего предка.

Например в TDG может быть такой метод обновления текста поста:

$tdg->updatepostText($postId, $newText);

Очевидно что в нем скрыт запрос UPDATE posts SET text = ? WHERE id = ?.

> The Data Mapper is a layer of software that separates the in-memory objects from the database. Its responsibility is to transfer data between the two and also to isolate them from each other
DataMapper это штука которая мапит (отображает, сопоставляет) объекты в приложении и строки таблиц. Она пытается создать абстракцию, как будто никакой базы нет, и все объекты лежат где-то в памяти. Тебе (в идеальном случае) не надо писать SQL код и вообще знать что база существует. То есть это более сложная штука.

В DM ты обновляешь пост примерно так:

$post = $postRepository->findById($postId);
$post->setText($newText);
$entityManager->flush(); // сбросить изменения в объектах в памяти в базу данных (что именно изменилось, определяется автоматически)

Как видишь в данном случае мы переложили работу по составлению SQL запроса на железяку, а сами работаем с обычным объектом, как будто бы никакой базы и нет. В данном примере ты можешь не увидеть преимуществ (плохо если так), но представь если например ты обрабатываешь массив объектов из разных таблиц, связанных с друг другом, вручную писать запросы на их загрузку и сохранение займет время и сделает код громоздким.

Вот другой пример чем DM отличается от TDG:

$post = $postRepository->findById(10); // делает запрос SELECT
$post2 = $postRepository->findById(10); // возвращает указатель на тот же объект что и $post

То есть DM с помощью Identity Map обеспечивает наличие ровно одного объекта для одной строки в таблице. А вот TDG таких гарантий не дает, так как устроен примитивнее.

То есть DM гораздо более сложная штука, чтобы последняя строчка работала как надо, нужна куча кода за ней, которая сравнит загруженные в память объекты с исходными данными и сгенерирует нужные INSERT/UPDATE/DELETE запросы.

Примером DM является доктрина 2. Если ты ее изучишь, я думаю ты осознаешь что именно есть в DM.
Как минимум это включает, кроме приведенного выше, еще поддержку работы с отношениями между таблицами и ленивую загрузку связанных объектов при обращении к ним.

Первоисточник вообще это книга Фаулера «Паттерны (шаблоны) проектирования корпоративных приложений». Можешь попробовать почитать как-нибудь, хотя она рассчитана на людей с опытом.
Аноним 28/08/15 Птн 10:33:41 #627 №535838 
>>535706

За счет абстракции от базы данных DM позволяет делать более универсальный и просто код. ПРедставь например что у нас есть база Сотрудников и Департаменов из задачи Вектор. Представь, что надо написать функцию, дающую премию при условии что человек сотрудник 1 ранга из отдела маркетинга. Вот как ее можно написать:

function giveAward(Employee $emp)
{
if ($emp->getRank() == 1 &&
$emp->getDepartment()->getType() == Department::TYPE_MARKETING) {
$emp->giveAward();
}
}

Как видишь, эта функция никак не привязана к базе данных. Она просто работает с объектом в памяти, и ей можно подсунуть как обычные объекты из той задачи, так и привязанные к базе с помощью Data Mapper объекты. Заметь, что тут нет ни строки SQL кода и ничего что бы вообще указывало на наличие базы. Это пример кода к которому ты должен стремиться.

Заметь так же что функция getDepartment() автоматически найдет и подгрузит из базы объект-департамент при первом обращении к ней.

Вот код обработки всех сотрудников с помощью DM:

$employees = $empRepository->findAll(); // загружаем все объекты-сотрудники и надеемся что их не очень много и они влезут в память

foreach ($employees as $emp) {
giveAward($emp);
}

$em->flush(); // сбрасываем изменения в базу

С другой стороны, если тебе надо обработать большую таблицу работников, то с DM мы вынуждены грузить их в память и поверь уже на 10 000 памяти будет отъедаться много. Да еще и время процессорное потратится. Через ТDG это будет намного быстрее работать, а память почти не нужна:

function giveAwardsToEmployeees()
{
$this->pdo->prepare("UPDATE employees e SET money = money + ? WHERE e.departmentId = ? AND e.rank = 1 ");
....
}

Грамотный разработчик должен понимать преимущества обоих подходов и уметь выбирать по ситуации.
Аноним 28/08/15 Птн 10:43:22 #628 №535844 
>>535715

Ты превращаешь свой код в нечитаемую кашу. Как это расшифровывать? Откуда я узнаю что значит SM? Ты предлагаешь мне перед чтением кода прочесть и выучить наизусть словарь сокращений? Боюсь, у меня нет на это времени как и у твоих будущих коллег, которым придется читать твой код.

Не делай так. Также, там в коде имя класса приходится писать всего 1 или 2 раза, в bootstrap.php. Почему это тебе приходится писать его чаще, а? Ты уверен что все правильно делаешь?

Ну и в конце концов, может пора уже начать использовать IDE с автодополнением?

>>535769

Почти эквивалентна (результат дает такой же хотя внутри работает чуть по другому).

Первый вариант приписывает строку к сущестующей строке, второй создает временную строку и сохраняет ее в переменную.

>>535779

Бред же. Или ты пошутить неуклюже пытался?

>>535796

Соединение разрывается наверно. Алсо функции mysql_ устарели, зачем ты по древним учебникам учишься?

>>535835

Там ведь уже создан и подключен, что ты глупость пишешь? Алсо есть еще тег style.

Самое важное что исплоьзуют br те кто не понимают концепцию HTML/CSS, как они работают. Так же как некоторые пользователи ворда не понимают форматирование и отступы.

Аноним 28/08/15 Птн 10:45:44 #629 №535845 
>>535762

Тебе надо изучить HTTP, HTML и JS наверно сначала, если ты не понимаешь как работает чат и как обменивается данными, то тебе рано писать такие скрипты. Алсо используй Chrome Webtools чтобы посмотреть как он устроен.
Аноним 28/08/15 Птн 10:48:13 #630 №535847 
>>535835

> лезть в другие файлы, читать мануалы, писать какие-то классы и отделять HTML от PHP, когда можно просто написать echo '<div>', mysql_fetch_query("SELECT name FROM user WHERE id = $_POST[id]"); как учили в видеокурсах на ютубе
Аноним 28/08/15 Птн 11:23:53 #631 №535854 
В общем в этом куске у меня не определена переменная $class, как ее определить? Не все классы же руками вбивать, иначе проще require поставить.
function myAutoloader($class)
{
$file = __DIR__ . '/classes/' . $class . '.php';
if (file_exists($file)) {
include $file;
}
}

spl_autoload_register('myAutoloader');
Аноним 28/08/15 Птн 11:32:49 #632 №535856 
>>535854

Как она может быть не определена? Проверь не опечатался ли ты и не русская ли там буква c
Аноним 28/08/15 Птн 12:07:17 #633 №535865 
>>535844
> функции mysql_ устарели
Знаю, слышал, но не понимаю из-за чего? Много букав читать не хочется, кратко объясни
Аноним 28/08/15 Птн 12:55:02 #634 №535883 
>>535865

Потому что так написано в мануале (открывал ли ты его?)

http://php.net/manual/ru/function.mysql-query.php
http://php.net/manual/ru/faq.databases.php#faq.databases.mysql.deprecated

Полная история на англ:

https://wiki.php.net/rfc/mysql_deprecation#why

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

Аноним 28/08/15 Птн 12:57:10 #635 №535885 
>>535865

Про старые туториалы отдельно написано:

> There are thousands of tutorials out there that teach users PHP using ext/mysql. Many of these tutorials also teach other outdated practices, such as magic quotes, improper (or no) escaping of user input and use of register globals, but undoubtedly some are also still of value. Removing ext/mysql in future will make these tutorials at best useless, and at worst, impediments to PHP takeup.
Аноним 28/08/15 Птн 12:59:01 #636 №535886 
14407559412290.jpg
ОП'чик и другие пэхэпэ няши из етого треда, у меня такая проблема: не могу понять почему не проходит запрос:
function save(Enrollee $enrollee) {
try{
$sql = "INSERT INTO students (name, surname, sex, group, email, points, birth, phone, nonresident)
VALUES (:name, :surname, :sex, :group, :email, :points, :birth, :phone, :nonresident)";
$stmt = $this->pdo->prepare($sql);
//var_dump((array)$enrollee);
$stmt->execute((array)$enrollee);
} catch (PDOException $e) {
print_r($e->getMessage());
}
}
Читаю в этот мануал: http://habrahabr.ru/post/137664/
Не понятно, последовательность prepare->bind->execute обязательна для запроса с placeholder'ами?
Ошибка вот такая: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined.
Кол-во параметров и свойств совпадает, названия тоже.
Аноним 28/08/15 Птн 13:14:22 #637 №535893 
Как вы может быть слышали, крупные компании (мейл, яндекс) обычно организуют свои школы, где берут способных ребят и доучивают их до джуниоров. Вот например на Хабре статья про них: http://habrahabr.ru/company/mailru/blog/265463/

Выглядит интересно, например мастер-класс по nginx проводит его автор (Игорь Сысоев), раньше он был сисдамином в Рамблеме, а сейчас у него компания, которая этот самый nginx (точнее поддержку) продает крупным корпорациям.
Аноним 28/08/15 Птн 13:18:16 #638 №535897 
>>535856
А в каком месте она определена, поясни? Может к этому коду еще что-то допистать надо?
при вар дампе выводит пустоту вместо имени класса.
Аноним 28/08/15 Птн 13:19:11 #639 №535898 
>>535886

> Не понятно, последовательность prepare->bind->execute обязательна для запроса с placeholder'ами?
bind можно не делать если ты массив передаешь в execute.

> Кол-во параметров и свойств совпадает, названия тоже.
А можно пруф, например сделай var_dump массива который ты передаешь в execute.

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

Нет такого, что число полей в объекте всегда равно числу колонок в таблице. Могут быть добавлены новые поля. которые не соответсвуют колонкам.

Логичнее сделать список полей и по этому списку циклом забрать поля из объекта и перенести в массив.

Также, по моему в массиве должны быть ключи с двоеточием в начале, точно так же как и записано в запросе. Уточни этот момент в мануале.
Аноним 28/08/15 Птн 13:21:06 #640 №535901 
>>535897

> function myAutoloader($class)
$class в скобках очевидно значит что в функции всегда есть переменная $class и она хранит первый переданный функции аргумент. Ты не прогулял ли урок по функциям?

Или ты пытаешься сдампить переменную снаружи функции?
Аноним 28/08/15 Птн 13:23:02 #641 №535904 
>>535583
ОП, скажи пожалуйста, будут еще какие-нибудь комментарии насчет макета? Ну там исправлять нужно еще что-нибудь? Или уже все, можно забыть о нем и переходить к следующим работам спокойно, не отвлекаясь на него.
Аноним 28/08/15 Птн 13:31:30 #642 №535908 
14407578909560.png
>>535898
>var_dump
делал ранее и не заметил, что он как то косячно преобразовал имена полей(на пикрелейтед)
>Ну и ты плохую идею придумал, объект превращать в массив. Где это такому учат? Не в нашем треде точно. Например как ты собрался гарантировать что никто никогда не добавит в этот класс новое поле, которое не сохраняется в базу?
Я об этом еще не думал, но я понял что ты хочешь сказать - делать максимально универсальный/масштабируемый код. Но ведь мапперы в таком маленьком приложении не нужны, во всяком случае мне пока сложно понять зачем. Позже начну повторять java и почитаю что-нибудь по паттернам/UML.
Аноним 28/08/15 Птн 13:31:41 #643 №535909 
>>535886
а хуй знает, возьми слим, там есть bindparameters (правда у меня тоже не сработали эти плейсхолдеры).
Аноним 28/08/15 Птн 13:36:28 #644 №535911 
>>535901
ват? откуда вообще эта переменная $class берется, он открывает папку классс и считывает тоже оттуда файл и пишет его имя в $class? наверное у меня просто пхп 4, а не 5 не работает. Или нужно дополнительно вызывать function myAutoloader(вот тут пишем имя класса)? или пееменная класс берется при создни объекта $obj = new $class?
Аноним 28/08/15 Птн 13:43:09 #645 №535912 
14407585890040.jpg
14407585890041.jpg
14407585890042.jpg
https://github.com/MindiMakridi/RESTFUL исправил всё.
>Также, у тебя там встречается 2 раза imagecreatetruecolor. Я думаю, картинку можно создавать только один раз. А обрезку реализовать указанием координат и размера вырезаемой из исходной картинки области.
Так и сделал. Но теперь результат другой, я не уверен, что правильный. Первая пикча - результат кропа по первому алгоритму, вторая - то, как обрезается сейчас. Третья - исходное изображение.
Аноним 28/08/15 Птн 13:46:27 #646 №535914 
>>535912
max-size пропиши, хуле хуйней страдаешь.
Аноним 28/08/15 Птн 13:56:04 #647 №535916 
>>535908
>делал ранее и не заметил, что он как то косячно преобразовал имена полей(на пикрелейтед)
разобрался, а дело было вот в чем:
>Если вы преобразуете в массив объект (object), вы получите в качестве элементов массива свойства (переменные-члены) этого объекта. Ключами будут имена переменных-членов, с некоторыми примечательными исключениями: целочисленные свойства станут недоступны; к закрытым полям класса (private) спереди будет дописано имя класса; к защищенным полям класса (protected) спереди будет добавлен символ '*'. Эти добавленные значения с обоих сторон также имеют нулевые байты.
Аноним 28/08/15 Птн 13:58:54 #648 №535917 
>>535916
а все из-за того, что тут http://habrahabr.ru/post/137664/ это было описано как фича
Аноним 28/08/15 Птн 14:01:50 #649 №535922 
>>535908

Для private/protected полей при преобразовании в массив в имена добавляются нечитаемые коды: http://php.net/manual/ru/language.types.array.php#language.types.array.casting

> Но ведь мапперы в таком маленьком приложении не нужны, во всяком случае мне пока сложно понять зачем
Мапперы там чтобы научиться их использовать, с моделями и чтобы приучить к мысли что SQL код должен быть в отдельном классе. Да и как без мапперов? у тебя же все равно где-то будет написан SQL код, почему бы не засунуть его в маппер.

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

>>535909

Слим тут вобще не причем, ты что-то путаешь. Это был вопрос про PDO.

>>535911

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

> откуда вообще эта переменная $class берется,
Ее передает PHP когда вызывает твою функцию-автозагрузчик. Он передает имя класса для того чтоьы твоя функция поняла какой файл нужно подключить.

> он открывает папку классс и считывает тоже оттуда файл и пишет его имя в $class?
Кто он? PHP? Он вообще ничего про твою папку не знает.

> наверное у меня просто пхп 4
В нем и spl_register_autoloader нет, да и ты можешь проверить версию командой phpinfo();

> Или нужно дополнительно вызывать function myAutoloade
Нужно понимать что ты пишешь и для чего. Почитай где-нибудь теорию про автозагрузку, например

http://habrahabr.ru/post/136761/

(если там плохо объяснено то попробуй сам подумать).

>>535912

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

Это значит что ты неправильно высчитываешь координаты и размер области на исходной картинке для вырезания.

Логика должна быть такая:

- у нас есть размер превьюшки, pw/ph
- у нас есть размер исходной картинки w/h
- из них вычисляем во сколько раз мы уменьшим картинку, scale, заодно проверяя не выйдет ли у нас увеличение вместо уменьшения
- получаем окончательный размер превьюшки (она может стать меньше если исходная картинка очень маленькая)
- из этих данных мы вычисляем размер вырезаемой области на исходной картинке, sw/sh
- из них мы вычисляем расположение вырезаемой области на исходной картинке, sx/sy

Имея sw/sh/sx/sy мы создаем превьюшку и переносим на нее кусок картинки.

Аноним 28/08/15 Птн 14:03:23 #650 №535925 
>>535917

Как мы видим, автор статьи ошибся.
Аноним 28/08/15 Птн 14:04:44 #651 №535928 
>>535844
> Бред же. Или ты пошутить неуклюже пытался?
Чем ты в CSS заменишь br? Маржином?
Аноним 28/08/15 Птн 14:16:43 #652 №535941 
>>535928
display: block
Аноним 28/08/15 Птн 14:19:54 #653 №535944 
>>535928

По моему у тебя тоже непонимание HTML/CSS. br, если он использован уместно (для обозначения разрыва строки), ничем заменять не надо. В стихах, почтовых адресах, текстах программ.

А вот если его используют для вертикального выстраивания блоков, это уже неправильно. В HTMl/CSS это делается гораздо удобнее.

Аноним 28/08/15 Птн 14:38:00 #654 №535951 
14407618801960.jpg
Как научиться алгоритмическому мышлению?
Ведь выучить синтаксис язка - дело максимум пары месяцев.
Аноним 28/08/15 Птн 14:44:36 #655 №535954 
14407622762000.jpg
>>535922
Все равно получается не то. Вот смотри, оригинал пикчи у меня 1600х639. Я беру меньшую сторону, то бишь высоту и приравниваю её к 100(так как я хочу создать 100х100 пикчу). Дальше 1600 умножаю на 100/639, получается 250.
В итоге получаем что-то вроде этого
imagecopyresampled($new_image, $old_image, 0, 0, $x, $y, 100, 100, 250, 100);
Результат пикрелейтед. Хотя с таким же алгоритмом и промежуточной картинкой получалась правильная превьюшка. Где ошибка в моих рассуждениях?
Аноним 28/08/15 Птн 14:52:45 #656 №535956 
>>535954

> Дальше 1600 умножаю на 100/639, получается 250.
А должно получиться 639×639
Аноним 28/08/15 Птн 14:53:50 #657 №535957 
>>535954

А, то есть я имею в виду что кусок который ты вырезаешь должен быть размером 639×639. А у тебя 250×250
Аноним 28/08/15 Птн 14:55:19 #658 №535959 
>>535957
250х100 же. К тому же в учебнике ОПа написано следующее:
>есть 2 режима уменьшения, когда например мы пытаемся вписать картинку 1000×200 в квадрат 100×100: CROP — уменьшает картинку до 500×100 и отрезает правую и левую части
По твоей логике мы уменьшаем картинку не до 500х100, а до 200х200
Аноним 28/08/15 Птн 15:11:22 #659 №535969 
>>535959

> Вот смотри, оригинал пикчи у меня 1600х639.
> я хочу создать 100х100 пикчу
Очевидно что для сохранения пропорций надо вырезать кусок размером 639×639 и уменьшить его в 639/100 = 6.39 раз. Возможно в учебнике просто не очень понятно сформулировано, но CROP это когда мы берем максимально большой кусок из исходной картинки, который пропорцими соответствует превьюшке. А SCALE это когда мы ничего не отрезаем, а только уменьшаем.
Аноним 28/08/15 Птн 15:28:58 #660 №535981 
>>535922
В слиме нет PDO, сасай.
Аноним 28/08/15 Птн 15:31:17 #661 №535983 
>>535954
Ошибка в твоих рассуждениях в том, что ты долбоеб, не использующий макс сайз.
Аноним 28/08/15 Птн 15:31:24 #662 №535984 
>>535898
>Логичнее сделать список полей и по этому списку циклом забрать поля из объекта и перенести в массив.
В таком случае названия полей в БД и название свойств в классе должны совпадать, причем на каждое свойство в классе должен быть описан гетер вида get[свойство]. Вот такой метод я набросал:
function getPropertiesObject(Enrollee $enrolle) {
foreach ($this->arrayOfFields as $value) {
$method = "get" . $value;
if(method_exists($enrolle, $method)){
$this->arrayProperties[] = $enrolle->$method();
}
}
//print_r($this->arrayProperties);
}
Аноним 28/08/15 Птн 15:34:11 #663 №535987 
14407652512310.png
>>535984
так читабельнее
Аноним 28/08/15 Птн 15:34:43 #664 №535988 
>>535983

Тебе же выше ответили почему ты не прав, вернись и перечитай.

>>535984

Можно сделать массив вида [имя поля => имя колонки].

> arrayOfFields
не надо писать arrayOf, пиши fields или fieldNames

Функцию лучше назвать getFieldsAsArray например.
Аноним 28/08/15 Птн 15:38:50 #665 №535993 
14407655308940.jpg
>>535969
Вот теперь у меня получается точная копия того, что было с промежуточной картинкой, которая вроде как правильная. Правда всё это:

>Логика должна быть такая:

- у нас есть размер превьюшки, pw/ph
- у нас есть размер исходной картинки w/h
- из них вычисляем во сколько раз мы уменьшим картинку, scale, заодно проверяя не выйдет ли у нас увеличение вместо уменьшения
- получаем окончательный размер превьюшки (она может стать меньше если исходная картинка очень маленькая)
- из этих данных мы вычисляем размер вырезаемой области на исходной картинке, sw/sh
- из них мы вычисляем расположение вырезаемой области на исходной картинке, sx/sy

>Имея sw/sh/sx/sy мы создаем превьюшку и переносим на нее кусок картинки.

Мне не понадобилось, я просто беру меньшую сторону картинки в качестве ширины и высоты исходного изображения и вырезаю квадрат из середины. Подозреваю, что я снова где-то не прав. Обновил репозиторий короче.
https://github.com/MindiMakridi/RESTFUL
Аноним 28/08/15 Птн 15:42:38 #666 №535996 
>>535988
>Можно сделать массив вида [имя поля => имя колонки]
зачем?
>не надо писать arrayOf
это еще почему
Аноним 28/08/15 Птн 15:48:45 #667 №535999 
>>535996

>>Можно сделать массив вида [имя поля => имя колонки]
> зачем?
Это если имена не совпадают

>>не надо писать arrayOf
> это еще почему
Потому что и так понятно что там хранится, если множественное число.
Аноним 28/08/15 Птн 16:37:07 #668 №536014 
>>535999
>Это если имена не совпадают
Но фишка была в том, чтобы к примеру передав в меппер поля таблицы, дернуть из объекта соответствующие свойства и записать их в таблицу.
Аноним 28/08/15 Птн 16:38:29 #669 №536016 
>>536014
И вообще это уже переусложнение, т.к. у нас все таки учебный процесс.
Аноним 28/08/15 Птн 16:58:49 #670 №536025 
>>535941
А если нужно два отступа?

>>535944
По-моему гораздо быстрее и проще для строчки написать br, чем делать для неё отдельный класс. Тогда львиная доля css-кода на крупном проекте будет из переносов состоять. Причем, иногда нужен перенос, но элемент не должен быть блочным.
Универсальнее и проще br. А там уже кому как нравится.
Аноним 28/08/15 Птн 16:59:42 #671 №536027 
>>535951
Пробуй всё, с чем ты сталкиваешься в реальности алгоритмизировать.
Аноним 28/08/15 Птн 17:00:25 #672 №536029 
>>535981
В пхп есть пдо, значит и в слиме есть.
Аноним 28/08/15 Птн 17:30:25 #673 №536044 
>>536025
Какие два отступа? Делаешь один отступ с помощью display:block, а его величину меняешь с помощью margin.
Аноним 28/08/15 Птн 17:31:13 #674 №536046 
Как сделать счетчик посещений страницы (например объявления)?
Если обновлять счетчик при каждом запросе, то можно быстро набампать посещения, обновляя страницу F5 (или через бота).
Значит нужно ограничение по айпи.
Но где его хранить? Если в базе, то при высокой нагрузке таблица посещений очень быстро достигнет гигантских размеров.
Чистить эту таблицу и обновлять счетчик по расписанию?
Или может сохранять не в таблицу, а логи, что лучше?
Аноним 28/08/15 Птн 17:39:22 #675 №536053 
я просто хочу быть программистом, сидеть в офисе клацать по клавишам получать за это копеечки, почему это так сложно? ;c
Аноним 28/08/15 Птн 17:41:42 #676 №536054 
>>536053
а то, я уже DataMapper второй день пилю.
Аноним 28/08/15 Птн 17:42:43 #677 №536056 
>>536053
Для этого есть вордпресс.
А программистам хорошо платят за огромные знания и умение решать нестандартные задачи.
Аноним 28/08/15 Птн 18:14:05 #678 №536078 
>>536046
Хранить ip посетителей в таблице1. При посещении страницы записывать ip в таблицу2. Раз в n времени (или n запросов) переписывать ip из таблицы2 в таблицу1, проверяя их на уникальность.
Но я хз, и вообще нуб.
Аноним 28/08/15 Птн 18:46:58 #679 №536096 
>>535845
А что значит выучить HTTP? Заголовки? Вроде бы как основы знаю. Но где можно почитать подробнее?
Аноним 28/08/15 Птн 19:17:55 #680 №536107 
Ну и зачем мне решать тупые задачки, если я могу просто погуглить и скопировать код или скопировать у чуваков итт? как-то тупо.
Аноним 28/08/15 Птн 19:18:58 #681 №536109 
>>536054
я еще даже не начинал... хотя че там пилить? мне просто тупо лень, никакой мотивации нет. как подумаю, сколько еще фреймворков и цмс и еще хрен знает каких подводных камней осваивать...
Аноним 28/08/15 Птн 19:28:59 #682 №536115 
>>536109
Мне кажется, ты слишком много думаешь.
Какая же теперь офигенная капча! Ничего выбирать не надо, просто галочку ставь и всё. И зачем нужны пасскоды после этого?
Аноним 28/08/15 Птн 19:31:37 #683 №536116 
>>536078
А лучше, наверное, парсить логи, да.
Аноним 28/08/15 Птн 20:13:31 #684 №536133 
Что такое cgi и cli? Если я правильно понял, cli это как модуль апача, а cgi независимая программа?
Если я хочу запускать php-скрипты по крону, нужно ставить cgi? Ставил php апт-гетом, так что наверное это cli.

Пытался запустить скрипт по этому мануалу https://masterhost.ru/support/doc/php/#cron
что-то не получается. Только выставил запуск каждую минуту, и другой путь к php.
1. Содержимое файла crontest (права 775)
0-59 ☆☆☆☆ /usr/bin/php5 /home/user/script.php (775)
2. crontab /home/user/crontest
? ничего не просходит (script.php должен писать в файл)

Скиньте может какой-нибудь внятный гайд по крону.
Аноним 28/08/15 Птн 20:27:49 #685 №536141 
>>536133
http://rus-linux.net/MyLDP/admin/cron.html
Аноним 28/08/15 Птн 20:34:02 #686 №536145 
Посоны,почему разработка под битрикс считается дном?
Аноним 28/08/15 Птн 20:44:04 #687 №536149 
>>536133

http://www.opennet.ru/cgi-bin/opennet/man.cgi?topic=crontab&category=1

Сделай crontab -l чтобы увидеть текущий кронтаб и проверить что там есть скрипт.

Также в ходе выполнения скрипта могут быть ошибки — PHP пишет их в поток ошибок, а крон пересылает их на почту (если она настроена). Также крон ведет логи, то ли /var/log/cron то ли /var/log/messages, посмотри их

Проверь работает ли скрипт запустив руками командой которую ты указал в кронтабе.

Также почитай http://php.net/manual/ru/features.commandline.php

CGI это древний (но зато очень простой) способ использовать внешнее приложение для отдачи данных пользователю. Идея была в том что при обращении пользователя по определенному адресу веб-сервер вызывает внешнюю программу или скрипт и отдает то, то она выведет, пользователю. Он давно не используется так как не эффективен. Почитать:

http://www.firststeps.ru/cgi/cgi1.html
http://www.tvs-sm.narod.ru/domains/web_design/html_guide/Charter16_1.htm

> Если я хочу запускать php-скрипты по крону, нужно ставить cgi?
CGI это стандарт взаимодействия веб сервера и программы. У тебя веб сервера тут нет значит и CGI не нужен, тем более он древний и неэффективный.


Аноним 28/08/15 Птн 20:44:26 #688 №536151 
>>536145
Потому что битрикс заставляет тебя пложить говнокод.
Аноним 28/08/15 Птн 20:53:06 #689 №536153 
Кстати, на memrise в сентябре будет конкурс на 1к $. Сам я давно им не пользуюсь, но тут вроде был анон, который недавно начал учить там слова, может это поднимет ему мотивацию.
http://www.memrise.com/blog/win-1000-in-our-september-back-to-school-learning/
Аноним 28/08/15 Птн 21:04:55 #690 №536161 
>>535838
>>535837
Спасибо, хорошо пояснил. У нас просто на фирме на хайлоад сайте TDG везде, а я даже понять не мог, почему там он, а не DataMapper. Теперь понятно.
Аноним 28/08/15 Птн 21:08:35 #691 №536163 
>>536107
Ну и зачем мне ездить на тупом троллейбусе, если я могу просто заплатить за проезд и сразу же выйти? Как-то тупо.
Аноним 28/08/15 Птн 21:45:13 #692 №536176 
>>532265
>Или может он на собеседовании переоценил свои навыки? А, анон, что ты на собеседовании рассказывал?

Вроде не переоценил, похоже оставят. Написал за эту неделю логгер для прокси с трейтами, интерфейсами и dependency injection, кучу юнит тестов, интеграционные тесты, новый роутер, который отлавливает параметры в строке, push нотификатор через curl с авторизацией по токенам, и еще всего по мелочи.

>Держись за эту работу всеми когтями. Джуниорам полезно работать в сложных проектах в условиях постоянного стресса.
Да, стрессово, но вроде уже понимать что-то стал. Кстати используются подходы все, какие у ОПа на сайте описаны, так что не так уж и непонятно в итоге получилось.

>Насчет стендап митинга по моему это нормально. ты рассказываешь что сделал, что не успел и почему, прежде всего чтобы самому подвести итоги и составить планы на сегодня.
Все равно Scrum мне как-то не очень нравится. В начале спринта целый день всем тимом обсуждают что запланировано на спринт с Продакт Овнером, потом еще день обсуждают всякие Code Review, где всем надо за свой код пояснять с разбором на проекторе во всю стену, потом Feature Planing еще на полдня, совместное писание тикетов, рисование скрам-схем и досок и еще множество подобных мероприятий. В итоге вместо кодинга у всего тима полнедели на разговоры про него уходит, причем какие-то малополезные, потому что полезные все со схемками и объяснениями обычно 1 на 1 отдельно потом бывают. Ну из полезного там только, что Scrum мастер постоянно сениоров зазывает лозунгами, чтобы юниорам помогли.
Аноним 28/08/15 Птн 22:53:14 #693 №536201 
>>536149
Ошибся с путем к скрипту, и не дал право на запись в файл.
Теперь работает, если запускать руками, но через крон не получается.
Путей /var/log/cron и /var/log/messages нет (убунту).
Есть папка /var/spool/cron/crontabs, но у нее какие-то странные права доступа
drwx-wx--T 2 root crontab 4096 Авг 28 22:33 crontabs
Что значит большая T?

crontab -l показывает скрипт, но я не вижу результата его выполнения.
Здесь https://masterhost.ru/support/doc/cron/#limitations написано, что
>существует ограничение на периодичность запуска программ из cron. Пользователь может запускать свои программы таким образом не чаще чем 1 раз в 1 час.
Это еще почему? А если мне нужно каждую минуту?

Ладно, в общем я пытаюсь решить проблему со счетчиком посещений. >>536046
Решил хранить айпи посетителей в отдельной таблице, а раз в час обновлять кроном основную таблицу и очищать вспомогательную.
Аноним 28/08/15 Птн 23:30:51 #694 №536212 
>>536201
О, заработало наконец. Помогло добавление в начале php-скрипта функции chdir(__DIR__). У меня использовались относительные пути при вызове функции fopen(), вероятно из-за этого была ошибка.
Permission denied - я сначала думал, что дело в правах, но оказалось, что он просто не может найти файл.

Почему так? Когда я запускал из браузера, скрипт прекрасно работал, а крону понадобилась эта функция chdir.
Наверное, что-то связанное с особенностями баша. Черт его знает, какую директорию он подсовывает в качестве текущей, наверное домашнюю пользовательскую.
Аноним 29/08/15 Суб 00:03:17 #695 №536228 
Оп-кун, а так какую учебку посоветуешь кроме тестов для лавараля?
Аноним 29/08/15 Суб 01:03:55 #696 №536240 
>>536176

code review это и есть средство обучения джуниора, мы тут тоже анонам с файлообменниками коде ревью делаем. Ну и вдобавок это способ обмена информацией, узнать что делают твои коллеги. И еще способ защититься от потомки чужого кода и появления в проекте плохого кода.

>>536201

> Путей /var/log/cron и /var/log/messages нет (убунту).
Странно, скорее всего ты не так или не там смотрел. Или у тебя прав нет на просмотр.

> Что значит большая T?
Там кроме флагов r,w,x есть еще 3 флага: SUIG, SGID, sticky. Если они применены к файлу это одно дело, а к каталогу — совсем другое:

http://www.opennet.ru/base/sys/file_access.txt.html
http://www.linuxcenter.ru/lib/books/kostromin/gl_04_05.phtml

>>существует ограничение на периодичность запуска
Это на их хостинге только


> Ладно, в общем я пытаюсь решить проблему со счетчиком посещений.
Вопрос сколько посещений он будет считать, если у тебя хайлоад то тебе нужен какой-нибудь мемкеш или редис с периодическим сбросом в таблицу, если нет то может и обычных таблиц хватит.

> а раз в час обновлять кроном основную таблицу и очищать вспомогательную.
Лучше ночью так как на время очистки она может заблокироваться.

>>536212

> Permission denied - я сначала думал, что дело в правах, но оказалось, что он просто не может найти файл.
Может нет прав на переход в один из каталогов в которые вложен файл.

> Наверное, что-то связанное с особенностями баша. Черт его знает, какую директорию он подсовывает в качестве текущей, наверное домашнюю пользовательскую.
по моему это в мануале описано который ты не прочел. Как раз не менять директорию а оставлять какая есть это логичное поведение.
Аноним 29/08/15 Суб 01:06:47 #697 №536241 
>>536201

Почему я вспомнил про редис? Потому что реально у mysql органичение порядка сотни или нескольких сотен транзакций в секунду (не по вине mysql, а потому что она стремится к надежности и ждет сброса данных на диск и HDD быстрее не умеет, разве что SDD). Ты можешь в него упереться при большой посещаемости.
Аноним 29/08/15 Суб 08:23:08 #698 №536279 
14408257881630.png
Аноны, поясните за string(2)? По идее должен быть string(1) (символ-то один).
Аноним 29/08/15 Суб 11:08:19 #699 №536308 
>>536279
Как я догадываюсь из-за кодировки. Занимает 2 байта может, а вообще ждем оп-а
Аноним 29/08/15 Суб 14:05:47 #700 №536350 
>>536115
почему много думаю? по-моему кодинг это просто тупо трата времени от безделья. когда хиккуешь дома, заняться нечем, думаешь, а давай деятельность поимитирую, какое-нить говно накодю...
Аноним 29/08/15 Суб 14:32:02 #701 №536358 
>>536240
Путей /var/log/cron и /var/log/messages действительно нет, запускал ls от суперпользователя. Ну и черт с ними.

>по моему это в мануале описано который ты не прочел
"Мануалы" поганого качества, являются справочниками для специалистов, а не приятными для чтения учебниками, коими обязаны быть. Вот например как там найти путь к папке логов?
Ага, нашел их в файле syslog.
И вообще на форумах говорят прописывать руками путь к файлам логов, например >/var/log/cron.log 2>&1

> а раз в час обновлять кроном основную таблицу и очищать вспомогательную.
> Лучше ночью так как на время очистки она может заблокироваться.
Так в innodb ведь "блокировка на уровне строк".

>если у тебя хайлоад то тебе нужен какой-нибудь мемкеш или редис с периодическим сбросом в таблицу
Каждый день узнаю новые слова. Ок, пошел гуглить мемкеш и редис.
Аноним 29/08/15 Суб 14:36:07 #702 №536359 
>>536153
Нечестный конкурс.
Если уже знаешь много слов, то можно спокойно набампать по несколько тысяч слов в день в нубских курсах.
Я за первые два дня набрал около 1,5 тысяч (все что помнил со школы), а когда пошли незнакомые слова, то стало намного сложнее.
Еще 1,5 тысячи взял за две недели.
Но вообще классный сайт, только очень утомительно часами напролет монотонно набирать слова.
Аноним 29/08/15 Суб 14:38:39 #703 №536360 
>>536359
Там по условиям конкурса они должны быть в long-term memory, то есть недостаточно один раз просто пробежаться по 1500 словам.
Аноним 29/08/15 Суб 15:57:41 #704 №536393 
>>536163
Зачем мне платить, если могу проехать бесплатно?
Аноним 29/08/15 Суб 16:06:11 #705 №536396 
>>536393
Если знаешь, как добраться, то незачем.
Аноним 29/08/15 Суб 16:08:00 #706 №536397 
>>536393
Зачем вообще учить всякую хуйню, если можно пойти работать гей-шлюхой?
Аноним 29/08/15 Суб 16:41:38 #707 №536408 
>>536397
Анус не вечный, знаешь ли.
Аноним 29/08/15 Суб 17:52:11 #708 №536442 
>>536397
Зачем вообще писать оригинальный код, если можно куски с чужих проектов натырить и собрать воедино?
Аноним 29/08/15 Суб 18:43:10 #709 №536462 
>>531765 (OP)
http://codepad.org/2VHQ0Tsf
Почему насчитал 9, если выше только 8?
Аноним 29/08/15 Суб 18:55:11 #710 №536472 
>>536462
Ты сравниваешь весь массив с ростом анона.
http://ideone.com/LKruCz
Аноним 29/08/15 Суб 19:00:37 #711 №536477 
>>536472
спасибо
Аноним 29/08/15 Суб 19:04:40 #712 №536480 
>>536308
А ОП ответит?
Аноним 29/08/15 Суб 19:15:34 #713 №536488 
>>536480
Сам бы уже 20 раз загуглил. В Википедии в статье про ютф8 все доступно написано. В этой кодировке символы могут кодироваться более чем одним байтом. В твоем случае кириллица. Два байта. Введёшь какой-нибудь японский иероглиф, будет, например, три байта. Латиница, цифры кодируются одним байтом. Когда дампишь строку, выводится количество байт отведенных под нее в памяти. В случае с латиницей это будет равняться длине строки.

неОП
Аноним 29/08/15 Суб 21:56:06 #714 №536562 
>>536393
Бесплатно можешь только нахуй проехать.
Аноним 29/08/15 Суб 22:53:08 #715 №536593 
Есть проблема анон, парсю при помощи simple_html_dom страницу выдачи гугла под определённый запрос. Нахожу все ссылки а также весь краткий текст для каждого сайта, который выводится гуглом. Всё нормально, могу вывести это у себя на страницы. Но когда мне нужно найти определённые совпадения слов в этом самом кратком тексте который я получают через свойство ->plaintext совпадения не находится, хотя они есть и вполне очевидны.

Для парсинга использую команду file_get_html, которая преобразовывает HTML в объект, но ведь если обращаться через ->plaintext это же будет обычный текст?
Аноним 29/08/15 Суб 23:09:05 #716 №536600 
>>536593

Вот сам код:

$html = file_get_html("https://www.google.com.ru/search?q=Если+вы+будете");
$search = $html->find('.g div.s span.st');

foreach($search as $s) {

$text = $s->plaintext;
$pattern = "/будете/";
$pos = preg_match($pattern, $text);
echo $pos;

}

В $search1 содержится спарсенное краткое описание страницы сайта с поисковой страницы гугла, $pos выводит одни нули. Хотя слово будете повторяется очень много раз на сранице.
Аноним 29/08/15 Суб 23:14:46 #717 №536605 
>>536600
Прояснилось немного, он находит только латиницу, кирилицу не находит. Значит это уже проблемы другого порядка. Но как сделать так что бы находил и кирилицу?
Аноним 30/08/15 Вск 00:36:38 #718 №536645 
>>536600
>$pattern = "/будете/u"
Попробуй так.
Аноним 30/08/15 Вск 00:37:33 #719 №536646 
>>536605
-->>536645
Аноним 30/08/15 Вск 14:36:24 #720 №536805 
>>531765 (OP)
Оп, дай совет про усложнённый вариант задачки про банкомат. Там где надо выдать минимальным числом купюр 6600.
https://github.com/someApprentice/Cat-and-Mouse/ Аноним 30/08/15 Вск 15:18:57 #721 №536831 
Наконец-то дошли руки до проверки.

>>532786

> https://github.com/someApprentice/Cat-and-Mouse/blob/master/Classes/Animal.php#L18
> $world->addAnimalToMap($this);
По моему, это не очень правильно, мышь не должна сама себя добавлять на карту, лучше это будет делать внешний код. То есть убрать World из конструктора и сделать вместо него метод:

$world->addAnimal($mouse);

Заодно пусть этот метод передает животному ссылку на $world, и ее не надо будет передавать в каждый метод. Ее проще хранить в поле у животного.

Тогда все логично: создаем мир, создаем кошек-мышек, ставим их на карту и понеслась.

> https://github.com/someApprentice/Cat-and-Mouse/blob/master/Classes/Animal.php#L28
> public function overviewWorld(World $world) {
Это должно быть где-то в World, например там может быть метод «получить карту в радиусе N».Но зачем нам этот метод? Зачем нам массив сложной непонятной структуры, если мы можем просто сделать у World метод «получить список животных в определенном радиусе»?

> https://github.com/someApprentice/Cat-and-Mouse/blob/master/Classes/Animal.php#L44
>public function searchTheAnimal(World $world, Animal $animal) {
Назначение метода непонятно. Зачем искать животное в массиве если его координаты хранятся в свойствах x и y?

> https://github.com/someApprentice/Cat-and-Mouse/blob/master/game.php#L8
> $mouse->move($world, $cat);
> $cat->move($world, $mouse);
Что ты сделаешь когда животных на карте станет больше двух? Этот код должен выглядеть так:

$mouse->move();
$cat->move();

> https://github.com/someApprentice/Cat-and-Mouse/blob/master/Classes/World.php#L3
> private $m;
> private $n;
Нужны нормальные названия полей

> protected $map = array();
В чем смысл этого поля? зачем хранить огромный массив клеток? Ведь теперь мы должны как-то остлеживать что если у животного поменялись координаты, надо перенести его из одной клеточки в другую. Тут ошибку сделать проще простого. По моему если убрать этот массив, все сразу станет проще.

> https://github.com/someApprentice/Cat-and-Mouse/blob/master/Classes/World.php#L26
> public function addAnimalToMap(Animal $animal) {
Тут нет никакой защиты от случая когда клетка уже занята, ты просто ее затираешь новым животным без следа.

Также, чем getCoordinate() удобнее чем getX() и getY()? По моему ты тут вводишь лишний массив без которого все только проще.

> https://github.com/someApprentice/Cat-and-Mouse/blob/master/Classes/World.php#L36
> if (!isset($from['x']) and !isset($from['y']) and !isset($to['x']) and !isset($to['y'])) {
> return false
Ты пишешь return false, а ты везде проверяешь что вернула эта функция? А если программист забудет написать проверку? В мире ООП у нас для ошибок есть исключения, почитай урок: https://gist.github.com/codedokode/65d43ca5ac95c762bc1a

> https://github.com/someApprentice/Cat-and-Mouse/blob/master/Classes/World.php#L41
> switch ($to['y']) {
> case ($to['y'] > $this->m):
Трудно понимаемый код. Почему нельзя написать if? Switch обычно используют как-то так:

switch($x) {
case 1: .... break;
case 2: .... break;
default: ...
}

> https://github.com/someApprentice/Cat-and-Mouse/blob/master/Classes/World.php#L43
> $to['y'] = $to['y'] - ($to['y'] - $this->m);
Что это значит? По моему, если сократить то получается $to['y'] = $this->m;

Но дело даже не в этом. Смотри, пользователь тебя просит поставить животное на конкретную клетку. Почему ты пытаешься что-то добавлять от себя и поставить его на другую клетку? Где тут логика? Если переданы неверные координаты, надо выкидывать исключение чтобы программист разобрался и исправил программу, а не молча подменять числа в надежде что это сработает. А если та клетка занята? А если той клетки тоже нет? Твоя программа вместо того чтобы сразу сказать что в ней ошибка, пытается это скрыть. ты ведь этим только себе жизнь усложняешь, это тебе же дольше эту ошибку искать придется.

> https://github.com/someApprentice/Cat-and-Mouse/blob/master/Classes/World.php#L35
> public function moveAnimal(array $from, array $to) {
Зачем тут массивы? Почему не $x1, $y1,$x2, $y2?

> https://github.com/someApprentice/Cat-and-Mouse/blob/master/Classes/Cat.php#L21
Вот тут 8 почти одинаковых скопированных условий. Копипаста это верный путь к ошибкам и опечаткам. Где гарантия что там их нет? Надо заменить копипасту на цикл. Можно сделать либо 2 вложенных цикла (по x и по y), можно сделать массив направлений и сделать цикл по нему.

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

> //Очень не красивое условие (находится наиболее далекая координата от первой попавшейся кошки из массива $search). Возможно ли это исправить?
Возможно. Использовать алгоритм оценивающий все варианты ходов в баллах и выбирающий наилучший.


Аноним 30/08/15 Вск 15:21:27 #722 №536832 
>>536805

Гугли «задача о рюкзаке»:

http://neerc.ifmo.ru/wiki/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0%BE_%D1%80%D1%8E%D0%BA%D0%B7%D0%B0%D0%BA%D0%B5#.D0.97.D0.B0.D0.B4.D0.B0.D1.87.D0.B0_.D0.BE_.D1.80.D0.B0.D0.B7.D0.BC.D0.B5.D0.BD.D0.B5

http://informatics.mccme.ru/mod/book/view.php?id=815

Там как ты видишь довольно хитрый алгоритм. Можно взять и менее оптимальный, но более простой алгоритм: перебираем все возможные сочетания банкнот, оставляя из них только те которые дают нужную сумму. Из этих берем сочетание с наименьшим числом купюр и выводим как правильный ответ.
https://github.com/nsdvw/file-sharing Аноним 30/08/15 Вск 15:26:53 #723 №536834 
>>533861

Я успел проверить не 100% кода, а где-то 70%, но думаю, найденных ошибок и замечаний тебе вполне хватит для начала. Код определенно надо улучшать.

> https://github.com/nsdvw/file-sharing/blob/master/db.sql#L25
> CREATE TABLE comment (
Если ты делаешь древовидные комменты, то в таблице стоит сделать ссылку на родительский комментарий как минимум. Она поможет например при необходимости восстановить или перепроверить значения в materialized path. Да и позволит легко определять кто родитель. Ссылка должна быть сделана с внешним ключом разумеется.

LoginManager надо сделать нормальным, не статическим классом и синглетоном в Слиме. Нужные ему зависимости (маппер) передавать через конструктор. Копипасту, где ты получаешь отдельный объект PDO прямо в классе, надо убрать.

Форму логина, встроенную в шапку, надо переделать так, чтобы с любой страницы она отправляла на отдельную страницу логина, где выводятся ошибки, если они есть (а если нет то после логина делается редирект на исходную страницу).

Тогда нам не надо в каждом действии передавать переменные $loginError = '', $loginEmail = '', $loginPassword = '' и не надо их указывать в шаблоне, так как они всегда пустые.

У тебя очень много копипасты в index.php, программист должен не копировать код, а думать как этого избежать.

> if (LoginManager::login()) {
> $login = true;
Вместо того чтобы это писать в каждом действии, лучше в самом начале передать объект LoginManager в смарти.

> $title = 'FileSharing &mdash; upload file';
Опять же, название по умолчанию можно передать один раз в начале index.php

> $bookmark = 'Upload';
Чтобы это не копипастить, можно их передать через view->appendData один раз в начаел index.php.

> $app->post('/login',
> $app->get('/login',
Не вижу смысла делать тут 2 функции ради одной страницы. Лучше объединить их в одну, которая обрабатвает и POST и GET.

> $app->get('/logout',
так как логаут изменяет состояние системы, его надо делать через POST.Также, защити-ка его CSRF токеном, для работы с токенами стоит сделать конечно отдельный универсальный класс, который можно подключить к любой форме, с методами сгенерировать токен если надо, получить токен, проверить токен: https://github.com/codedokode/pasta/blob/master/security/xsrf.md

> https://github.com/nsdvw/file-sharing/blob/master/public_html/index.php#L138
> $uploadError = (isset($_GET['error']))
При ошибке ты не должен редиректить. Ведь в этом случае пользователь не сможет повторно отправлить файл на загрузку нажатием кнопки F5. Соответственно эта проверка тоже не нужна. При ошибке надо просто снова выводить форум загрузки. По этой причине удобно объединить вместе функции / и /upload_file

> $file->size = ViewHelper::formatSize($file->size);
Это неправльно. Почему одно и то же поле хранит значение в разных форматах? Как в таком коде ориентироваться, когда непонятно в каком формате там лежит значение? Так быть не должно.

> echo json_encode($file);
При отдаче JSON надо выставлять заголовок Content-Type: application/json. Также, ты не должен применять json_encode к объекту, ну сам подумай, это же не массив а объект, как его можно преобразовывать в JSON? Это чревато раскрытием каких-то данных которые пользователь знать не должен, ведь твой код никак не проверяет какие поля можно отдать, а какие нельзя.

Этого быть не должно. Лучше сделать из класса массив только с перечисленными полями и его уже преобразовывать в JSON. Метод получения массива можно поместить в класс.

> echo 'error';
Это неправильно, ты в одном случае отдаешь JSON, а в другом текстовую строку, как ты отличишь одно от другого? Как ты передаешь в чем именно ошибка? Логично при ошибке тоже отдавать JSON.

> https://github.com/nsdvw/file-sharing/blob/master/public_html/index.php#L178
> if ($user->hash !== sha1($user->salt . $loginForm->password)) {
не надо копипастить по всему коду метод вычисления хеша, надо сделать отдельную функцию или метод.

> https://github.com/nsdvw/file-sharing/blob/master/public_html/index.php#L181
> LoginManager::setSession(array('id'=>$user->id, 'hash'=>$user->hash,));
Метод SetSession неправильный, у LoginManager должен быть метод «залогинить пользователя», принимающий на вход например объект User, а не метод принимающий массив неизвестного вида. Не стоит заменять объект на массив. Метод може выглядеть так: $loginManager->autorizeUser($user);

> https://github.com/nsdvw/file-sharing/blob/master/public_html/index.php#L215
> if (!LoginManager::isLoggedIn()) {
> $author_id = null;
> } else {
> $author_id = $_COOKIE['id'];
> }
Вся работа с авторизационными куками должна быть в классе LoginManager, а не размазана повсему коду. В данном случае логично у класса сделать метод getLoggedUser() который возвращает либо объект User либо null.

> $request_method = (isset($_GET['ajax'])) ? 'ajax' : 'direct';
Тут лучше использовать переменную $isAjax с значениями true/false. А то возникает вопрос например почему тут не используются константы вместо строк.

> https://github.com/nsdvw/file-sharing/blob/master/public_html/index.php#L224
> $app->response->redirect("/?error=$error");
При ошибке не надо никуда редиректить, чтобы пользователь мог отправить форму повторно.

> https://github.com/nsdvw/file-sharing/blob/master/public_html/index.php#L242
> $app->response->redirect('/view/?upload=ok');
Ты при успешной загрузке редиректишь на страницу в пути к которой не указан id файла. А как пользователь тогда получит ссылку на файл? Логичнее редиректить его на страницу файла.

> https://github.com/nsdvw/file-sharing/blob/master/public_html/index.php#L294
> $user->fromForm($registerForm);
Это как-то не очень правильно, получается у нас модель пользователя должна знать о форме его редактирования. Это неправильно так как модель ничего не должна знать о внешнем мире и как она редактируется. Вместо этого в модели формы должен быть метод, возвращающий или заполняющий модель пользователя.

> https://github.com/nsdvw/file-sharing/blob/master/public_html/index.php#L303
> $registerError = $registerForm->errorMessage;
> $registerLogin = $registerForm->login;
> $registerEmail = $registerForm->email;
Вместо того чтобы передавать переменные по отдельности, логичнее передать в смари саму форму.

> https://github.com/nsdvw/file-sharing/blob/master/public_html/index.php#L415
> $comment->level = Comment::getLevelFromPath($comment->materialized_path);
Вместо этого надо сделать метод getLevel()

> https://github.com/nsdvw/file-sharing/blob/master/public_html/index.php#L416
> $comment->author_id = $app->userMapper->findById($comment->author_id);
запрашивать записи по одной неэффективно. Надо собрать id авторов, выбрать их одним запросом, присоединить к комментариям. И делать это надо не в index.php, а в маппере.
https://github.com/nsdvw/file-sharing Аноним 30/08/15 Вск 15:29:50 #724 №536835 
>>533861

Полный текст поста вакаба не пропускает, видит там спам, читай дальше тут: http://pastebin.com/11PAUhyc

Аноним 30/08/15 Вск 15:53:11 #725 №536849 
>>533995

Это часть URL под названием query , с ее помощью можно передать скрипт на сервере какие-то параметры.

Структура URL: https://ru.wikipedia.org/wiki/URL#.D0.A1.D1.82.D1.80.D1.83.D0.BA.D1.82.D1.83.D1.80.D0.B0_URL

>>533714

> Так вот, когда дело доходит, что Кошка ловит Мышку, мышка не успевает понять что уже мертва, и ломает код
Ты не должен вызывать move у мертвых животных. Если ты хранишь в World список животных и удаляешь их из него при съедении, проблема решится сама собой.

> Перед тем как передвинуть животное, нужно будет проверить не содержит ли ячейка, куда хочет переместиться, объект Животное, и если содержит, то вызвать метод этого животного, который "скажет" ему о смерти.
Это лучше сделать по-другому, в методе передвижения кошки сделать вызов метода World, проверяющий, что на клетке на которую мы ходим. если мышка — снимаем ее с карты перед тем как сделать ход.

Удобно сделать метод $world->getAnimalAt($x, $y)

>>534415

> throw new Error('Введены неверные данные');
> return;
return никогда не выполнится и потому не нужен

> Object.defineProperty(Hamburger.prototype, "getCalAndPriceTable"
Чтобы не копипастить этот код defineProperty, и повысить читабельность, я бы сделал вспомогательную функцию:

addReadonlyMethod(Hamburger, 'getSomething', function () { .... });

Хотя тогда странно почему часть функций добавлена через defineProperty, а часть напрямую.

> throw new Error('Введены неверные данные.');
Сообщения лучше делать чуть более подробными а то сам же потом замучаешься искать в какой функции это произошло.

> Hamburger.prototype.addSeasoning
Там можно выбрать обе добавки, это должно быть не просто свойство а массив.

Соответственно алгоритм подсчета цены придется поменять.

> Hamburger.prototype.calculate
Лучше вместо передачи типа сделать 2 функции caluclatePrice и calculateCalorites которые будут ее вызывать.

Аноним 30/08/15 Вск 16:11:14 #726 №536865 
>>534456

Операции меняющие данные на сервере вроде удаления должны делать не кликом по ссылке а методом POST. Так предусмотрено в HTTP.

В ссылке незачем писать http://localhost, используй относительные ссылки без протокола и хоста.

> <a><button
Что за извращение? Почему button внутри тега a?

> <a href="http://localhost/TwigBlog/download/<?=$value['id']?>"><button
то же самое, извращение какое-то. В бутстрапе есть способ сделать чтобы ссылка выглядела как кнопка и наоборот.

> if($cookieUser==$cookieLoad) {
В шаблоне надо использовать версию с двоеточием и endif. Также шаблон не дожен заморачиватьяс с куками, а должен иметь переменную типа $isFileOwner (является ли пользователь владельцем файла).

> aria-label="..."
Что это значит?

>>534458

В шаблоне надо использовать foreach c двоеточием и endforeach

>>535214

наверно, все зависит от компании.

>>533714

> if (!$this->map['x']['y'] = '')?
тут точно ошибка так как надо использовать != а = это присваивание значения

> И можно ли обратиться к объекту таким образом: $this->map['x']['y']->Die();

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

>>535247

В нашем треде это слово уместно, на шапку посмотри

>>535284

Я вроде отвечал на тот пост уже. Актив рекорд это не датамаппер, это другой подход же.

>>535335

Замени lighter и normal на числа, может в этом дело

>>535384

Ты можешь из сайта с тестами сделать только создание и прохождение теста например.

Ну или сделай клон https://news.ycombinator.com/ или реддита. Они тоже простые.

Аноним 30/08/15 Вск 16:30:21 #727 №536883 
>>535452

там флеш либо яваскрипт

>>535951

решать простые олимпиадные задачи и читать разборы.

>>536393

бесплатно до ближайшего отделения полиции

>>536133

cgi = common gateway interface = интерфейс (правила взаимодействия) сервера и веб-приложения
cli = command line interface = интерфейс (правила взаимодействия пользователя с компьюетром) командной строки

>>536153

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

>>536228

Сделай клон реддит или news.ycombinator.com, постишь ссылки, комментируешь, лайкаешь, регистрация, модерация.

>>536350

кому как

>>536358

есть, только это файлы а не папки

> "Мануалы" поганого качества, являются справочниками для специалистов, а не приятными для чтения учебниками, коими обязаны быть. Вот например как там найти путь к папке логов?
По запросу ubuntu logs на втором месте: https://help.ubuntu.com/community/LinuxLogFiles

А вообще ты должен изучить структуру файловой системы линукс, там есть договоренности что в какой папке хранится. Конфиги системные например в /etc, пользовательские в домашней папке.

> Так в innodb ведь "блокировка на уровне строк".
Ну так а для удаления всех строк надо все их заблокировать. Ну не знаю, проверь попробуй может и не заблокирует.

> Ок, пошел гуглить мемкеш и редис.
Сначала лучше просто мемкеш

>>536480

там длина в байтах а не символах



переход Аноним 30/08/15 Вск 16:32:08 #728 №536887 
Этот тред закрыт. Ваши вопросы и ответы жду в следующем треде: >>536866 (OP)
Аноним 30/08/15 Вск 17:03:40 #729 №536900 
>>536350
Так оно и есть. Поэтому дома кодить есть смысл только для обучения. Потом устраиваешься на нормальную фирму, и пошло-поехало уже всерьез и надолго.
Аноним 30/08/15 Вск 22:32:05 #730 №537042 
>>536900
А чтобы устроиться на фирму, даже символически, за 8-10к работать, нужен год ежедневного 4-6 часового самообучения.
замкнутый круг
Аноним 31/08/15 Пнд 09:56:20 #731 №537228 
>>536831
>Заодно пусть этот метод передает животному ссылку на $world, и ее не надо будет передавать в каждый метод. Ее проще хранить в поле у животного.
>поле
В смысле в свойстве?

>https://github.com/someApprentice/Cat-and-Mouse/blob/master/Classes/Animal.php#L28
>public function overviewWorld(World $world) {
>Это должно быть где-то в World, например там может быть метод «получить карту в радиусе N».Но зачем нам этот метод? Зачем нам массив сложной непонятной структуры, если мы можем просто сделать у World метод «получить список животных в определенном радиусе»?
Потому что мир не может думать за место мышек. У них должно быть свое представление о мире. Понимаю что для изучения программирования такой подход не очень подходит, но пусть будет все реалистично. Это же не очень критично будет?

> https://github.com/someApprentice/Cat-and-Mouse/blob/master/Classes/Animal.php#L44
>public function searchTheAnimal(World $world, Animal $animal) {
>Назначение метода непонятно. Зачем искать животное в массиве если его координаты хранятся в свойствах x и y?
Этот метод предназначен чтобы найти чтобы найти других животных в обозримой видимости.

> protected $map = array();
>В чем смысл этого поля? зачем хранить огромный массив клеток? Ведь теперь мы должны как-то остлеживать что если у животного поменялись координаты, надо перенести его из одной клеточки в другую. Тут ошибку сделать проще простого. По моему если убрать этот массив, все сразу станет проще.
Мне просто сложно представить этот мир. В принципе, я с тобой полностью согласен. Я подумаю над этим.


> https://github.com/someApprentice/Cat-and-Mouse/blob/master/Classes/World.php#L35
> public function moveAnimal(array $from, array $to) {
>Зачем тут массивы? Почему не $x1, $y1,$x2, $y2?
А так понятно будет?
По моему так удобней - сразу видно какие координаты что значат. Почему так не правильно?

>Также, чем getCoordinate() удобнее чем getX() и getY()? По моему ты тут вводишь лишний массив без которого все только проще.
Ну использование одного метода избавляет от лишней писанины, плюс я не уверен что когда-нибудь потребуется отдельно X и отдельно Y.


> https://github.com/someApprentice/Cat-and-Mouse/blob/master/Classes/World.php#L43
> $to['y'] = $to['y'] - ($to['y'] - $this->m);
>Что это значит? По моему, если сократить то получается $to['y'] = $this->m;

>Но дело даже не в этом. Смотри, пользователь тебя просит поставить животное на конкретную клетку. Почему ты пытаешься что-то добавлять от себя и поставить его на другую клетку? Где тут логика? Если переданы неверные координаты, надо выкидывать исключение чтобы программист разобрался и исправил программу, а не молча подменять числа в надежде что это сработает. А если та клетка занята? А если той клетки тоже нет? Твоя программа вместо того чтобы сразу сказать что в ней ошибка, пытается это скрыть. ты ведь этим только себе жизнь усложняешь, это тебе же дольше эту ошибку искать придется.
Ну суть этого метода заключается в том, что животное может сгенерировать координату которая выходит за пределы карты. Этот метод всего лишь не дает им выйти за пределы карты. Так же я думал еще, с помощью этого метода сделать такую фичу: если животное пытается выйти за пределы карты, то оно ударяется об стенку, получает сотрясение и пропускает один ход о_х


> https://github.com/someApprentice/Cat-and-Mouse/blob/master/Classes/Cat.php#L21
>Вот тут 8 почти одинаковых скопированных условий. Копипаста это верный путь к ошибкам и опечаткам. Где гарантия что там их нет? Надо заменить копипасту на цикл. Можно сделать либо 2 вложенных цикла (по x и по y), можно сделать массив направлений и сделать цикл по нему.

>Код надо бы переделать на работу с любым количеством котов и мышей. Кстати, алгоритм оценки ходов прост, понятен, легко работает с любым количеством животных.
Мне не понятно это сделать. Я подумаю над тем что именно мне не понятно, и позже задам вопрос, если что-то останется непонятным
Аноним 11/09/15 Птн 11:09:43 #732 №541593 
>>537042
ну хуй его знает, я 4 месяца подрочил задачки опа, прочитал книжку, что он в оппосте советовал и устроился, ещё и норм зарплатка
Аноним 11/09/15 Птн 11:22:20 #733 №541596 
>>541593
и пускай те, кто говорят, что задачки опа полная хуйня, подрочат мой хуй себе в рот, я знаю, они любят отсасывать.
Эти задачки - как раз то, что нужно. На собеседованиях не спрашивают, как html теги писать, там задачи на логику в основном, а ОПовские задачки как раз такие. Он вообще молодец
Аноним 11/09/15 Птн 15:13:58 #734 №541663 
>>541593
Город какой? миллионик?
Аноним 11/09/15 Птн 16:31:21 #735 №541682 
>>541663
да
comments powered by Disqus

Отзывы и предложения