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

Клуб изучающих PHP 64

 Аноним 25/11/15 Срд 08:47:55 #1 №588512 
14484304752150.jpg
14484304752161.png
14484304752192.png
14484304752203.png
Добро пожаловать в наш уютный тредик. Тут мы изучаем язык PHP (а также JS/CSS/HTML/SQL), решаем задачки и даже делаем простые сайты! Зачем? Кто-то хочет научиться программировать, кто-то - делать сайты, кто-то - просто размять мозги и заняться чем-то полезным.

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

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

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

Предыдущий тред был тут: >>578124 (OP) ( не 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.me/ru-php-the-right-way/ )
- По PHP: Профессиональное программирование на PHP Джордж Шлосснейгл
- По PHP: Мэтт Зандстра — PHP: Объекты, шаблоны, методики программирования
- JS: learn.javascript.ru
- Про Git: https://git-scm.com/book/ru/v1

Нужен ли ООП, фреймворки, MVC? — Да, однозначно. Посмотри любую вакансию.
Сайт опять упал!!!!! — Не паникуй, а открой http://rghost.net/45000175 и получи личную немного устаревшую копию сайта
Оформляй код аккуратно!!! — например пропусти через phpformatter.com . Также, если ты пользуешься IDE вроде PhpStorm, Netbeans, Eclipse, то в них эта опция встроена, подробнее: https://gist.github.com/codedokode/8759492
ОП, сделай за меня мою работу или домашнее задание? — Это конечно, хорошая идея, но нет.
Подскажи сайты для поиска работы, я не умею гуглить? — hh.ru, geekjob.ru, moikrug.ru (склеен с brainstorage.me), fl.ru, upwork.com (бывший одеск). Имей в виду, что кроме фриланса есть еще постоянная удаленная работа (remote job) когда тебе не надо тратить время на поиск заказов и переговоры с неадекватными заказчиками.
Аноним 25/11/15 Срд 08:48:23 #2 №588513 
>>588512 (OP)
Еще. Код нужно писать не как попало, а аккуратно и по правилам. Почему? Потому, что на неакуратно написанный код не хочется даже смотреть.

Если тебе лень выравнивать код руками, закачай его на 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, то рассказать об этом стоит в каком-нибудь другом треде.

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

Ах да. Если тебе кажется, что что-то в учебнике или задачах можно сделать лучше — пиши, обратная связь всегда очень полезна.
Аноним 25/11/15 Срд 08:48:52 #3 №588514 
14484305327630.png
>>588513
Собственно ОП традиционно заслоупочил с созданием нового треда. А мне не хочется чтобы вопросы анонов уходили на 5 страницу /pr Так что создал новый тред. Надеюсь ОП прошлого треда меня не возненавидет за это.
Аноним 25/11/15 Срд 10:55:41 #4 №588566 
Анон, что ты умел, когда пошёл на самую первую работу с php? Что мне стоит уметь сейчас для того же самого? Чем ты занимался в начале? Не надо только отвечать "php+mysql", нужно более конкретно. Спасибо.
Аноним 25/11/15 Срд 12:01:12 #5 №588613 
>>588514
> 4 пробела
Я расстегнул ширинку. Открой рот пошире, чтобы не пропустить ни 1 капли.
У тебя на клавиатуре есть кнопка TAB, дебил. Когда ковыряешь чужой код - просто выворачивает от того, что там пробелы вместо табуляции. Ух, сука! Лично бы выебал каждого, кто использует пробелы, в жопу, чтобы знал, что нужно ставить табуляцию. Пидоры, блядь. Говно, залупа.
Аноним 25/11/15 Срд 12:14:28 #6 №588624 
>>588613
лол, тоже топлю за табуляцию, н очаще всего по дефолту в IDE стоят именно 4 пробела по нажатию на tab. Вообще надо смотреть PSR стандарт, вроде там пробелы, как раз.

>>588514
А за эту картинку надо убивать нафиг.
НАХУЯ ТАМ ДВОЙНЫЕ КАВЫЧКИ???
Одинарные, там нет переменных, заботьтесь о нагрузках, мать вашу.
Аноним 25/11/15 Срд 12:16:01 #7 №588627 
14484429618010.jpg
>>588624
Ну ты бы хоть учебник ОПа открыл для приличия.
Аноним 25/11/15 Срд 13:49:52 #8 №588705 
>>588613
Тоже всегда использую TAB. Но к сожалению по стандарту на оформление кода PHP нужно использовать пробелы.
Аноним 25/11/15 Срд 14:01:04 #9 №588711 
Лол, всегда скрываю этот уютный тредик для дегенератов.

Собственно подтверждение что пыхомакаки конченые:
>ко-ко-ко TAB
>покпок КАВЫЧКИ БЫСТРЕЕ!11

Алсо, вангую вскукареки того самого ОПа, что его здесь нет, лол.

/нить
Аноним 25/11/15 Срд 14:28:28 #10 №588733 
14484509085610.jpg
Я не понимат.
У меня есть некая библиотека helper, использующая паттерн factory.
В своем приложении я написал функцию getHelper для получения хэлпера.
function getHelper() {
$helper = helper::factory($params);
return $helper;
}
Вопрос: мне нужно в моей функции объявлять static $helper или factory и так мне всегда будет возвращать один объект?
Аноним 25/11/15 Срд 15:51:55 #11 №588788 
>>588512 (OP)
>Профессиональное программирование на PHP Джордж Шлосснейгл
Скачал бесплатно и без смс, а оно там 2003 года. Это норм?
Аноним 25/11/15 Срд 17:17:39 #12 №588887 
>>588788
Нет.
Аноним 25/11/15 Срд 17:50:44 #13 №588910 
Правильно ли я понимаю, что красно-черные деревья и логарифмы нам не понадобятся?
Алсо не помешали бы задачки на выполнение условий KiSS DRY SOLID. А то теория в вики какая-то туманная.
Аноним 25/11/15 Срд 17:54:38 #14 №588915 
>>588624
По стандартам вроде нужно ВСЕГДА двойные ставить, кроме исключительных случаев. Тоже всегда одинарные ставлю, а потом одергиваю себя и переставляю двойные.
Аноним 25/11/15 Срд 18:02:21 #15 №588921 
Я вот не могу понять, как стать фрилансером. Выучил я ПХП, немного подучил яваскрипт и джейквери (достаточно для создания стандартных эффектов на сайте), более менее разобрался с вёрсткой, ну например что то лёгкое могу сверстать из PSD, слегка разобрался с некоторыми КМС вроде Вордпресс. как мне например заиметь портфолио на фриланс-бирже? Для того чтобы создать более менее нормальное портфолио, необходимо уметь в дизайн, то есть красиво рисовать в фотошопе а потом переносить всё это в ВЕБ, фотошоп я почти не знаю, да и просто нарисовать ничего красивого не смогу, потому что нет способностей к этому. Как выйти из этой ситуации, я не могу быть фрилансером?
Аноним 25/11/15 Срд 18:14:24 #16 №588928 
>>588921
Бери готовые макеты.
Аноним 25/11/15 Срд 19:06:57 #17 №588964 
Анон, объясни, пожалуйста, ЛОГИКУ куска, который начинается с $t.

$array = array(
0 => 'home',
1 => 'contact',
2 => 'projects'
);

$t = $array[0];
$array[0] = $array[1];
$array[1] = $t;
Аноним 25/11/15 Срд 19:11:56 #18 №588970 
>>588964
В массиве меняются местами значения ячеек 0 и 1. $t - переменная буфер для времменного хранения значения 0-й ячейки.

Что в школе сейчас нет информатики или там не дают даже основ алгоритмов? Чисто из любопытства, а то вопросы иногда просто ппц.

Аноним 25/11/15 Срд 19:15:39 #19 №588973 
>>588970
Да препод придрался к тому, что я сделал сортировку через asort и зставил делать ПУЗЫРЧАТУЮ СОРТИРОВКУ алгоритмом, я вот и не понял, как эта фигня работает.
Аноним 25/11/15 Срд 19:21:18 #20 №588984 
>>588970
Алсо, почему нельзя сразу присвоить
array[0]=array[1]? Я что-то нихрена логику не понимаю, да я тупой.
Аноним 25/11/15 Срд 19:22:22 #21 №588985 
>>588984
И как ты потом присвоишь значению $array[0] значению array[1]?
Аноним 25/11/15 Срд 19:22:59 #22 №588986 
>>588984
Ты потеряешь значение array[0]. array[0] станет равен array[1].
Аноним 25/11/15 Срд 19:25:44 #23 №588989 
>>588985
>>588986
разобрался, спасибо вам. вообще, приятно, что вы отвечаете даже на тупые вопросы. в них порой сложнее разобраться, чем в сложных
Аноним 25/11/15 Срд 19:57:14 #24 №589004 
14484706341220.jpg
Анон, как функцией file_get_contents получить строкой содержимое веб-страницы по URL? Почему в Ideone это не работает? https://ideone.com/rHdAje
Аноним 25/11/15 Срд 20:00:22 #25 №589009 
14484708221530.png
>>589004
Аноним 25/11/15 Срд 20:14:00 #26 №589015 
>>588887
Чего она тогда в шапке делает? Объясняйтесь, быстро.
Аноним 25/11/15 Срд 20:27:50 #27 №589035 
Снова дебил с пузырьковым сортированием.
Анон, почему мы берем кол-во значений в массиве count-1? Почему не просто count?

function bubbleSort(array $a) {
$n = count($a) - 1;
do {
$swapped = false;
for ($i = 0; $i < $n; ++$i) {
if ($a[$i] > $a[$i + 1]) {
$t = $a[$i];
$a[$i] = $a[$i + 1];
$a[$i + 1] = $t;
$swapped = true;
}
}
} while ($swapped);

return $a;
}
Аноним 25/11/15 Срд 20:47:56 #28 №589057 
>>589015
Ну когда то она была очень даже ничего.
Хороших книг по PHP для начинающих нет. Или старое говнецо или вариация офф. мануала.
>>589035
Потому что первый индекс массива это 0 а не 1. Соответсвенно последний индекс массива равен количеству элементов - 1.
Аноним 25/11/15 Срд 21:45:12 #29 №589121 
>>588627
проиграл с пикчи, потому что в руби это правда. (интерполяция строк)
Аноним 26/11/15 Чтв 00:14:20 #30 №589316 
>>589057
А как тогда пхп учить-то?
Аноним 26/11/15 Чтв 00:20:50 #31 №589320 
>>589316
Мануал + учебник ОПа.
Аноним 26/11/15 Чтв 01:22:52 #32 №589364 
ананасы, выручайте, впал в ступор, прошел курс по пхп на кодакадемии и почитал мануальчик от Опа, но теперь не знаю, что делать дальше. Многие советуют начать писать что-нибудь свое, но я даже не знаю, с чего начать. Нужен дельный совет,с меня как всегда
Аноним 26/11/15 Чтв 01:48:16 #33 №589374 
>>589364
Пиши борду/бложик/форум/магаз - самые ходовые варианты.
Аноним 26/11/15 Чтв 02:43:47 #34 №589380 
>>588613
>>588624
>>588627
Вы бы хоть учебники почитали для начала, прежде чем бугуртить.
Аноним 26/11/15 Чтв 02:44:00 #35 №589381 
Практически доделанный файлообменник. Осталось только соль добавить и инфу о картинках в порядок привести. Все, что не смог сделать (слим композером, чтобы автолоад был, твиг добавить) - сделать не получилось. $app прямо в классы передаются, потому что написали, что надо было контроллеры подсократить, ну и это единственный способ был. Переименовать тоже не могу, ибо в сборке ИДЕ он уже как твигблог записался. В конечном итоге, переименовать могу только устанавливая на хостинг. Если есть какие-то уязвимости - напишите плиз.

https://github.com/toppestkek/TwigBlog
Аноним 26/11/15 Чтв 02:54:43 #36 №589382 
>>589381
Посмотрел исходники. Завидую тебе. Хорошо получается.
Аноним 26/11/15 Чтв 07:41:42 #37 №589422 
Кому нибудь давали задания на фриланс сайтах без портфолио и опыта? Хочу реальные задачи решать и чувствую, что я готов.
Аноним 26/11/15 Чтв 09:16:16 #38 №589436 
Допустим мне дают задание, допилить какой-нибудь функционал на сайте. Я так понимаю, что обычно дают доступ по ssh? Там можно как-то контроль версий прикрутить, чтобы ненароком не убить сайт полностью?
Аноним 26/11/15 Чтв 09:24:28 #39 №589438 
Можно ли добиться высот и создавать крупные проекты используя лишь процедурный стиль кодинга?

мимо-ниосилятор
Аноним 26/11/15 Чтв 09:28:44 #40 №589441 
>>589422
>Хочу реальные задачи решать и чувствую, что я готов.
ну вот тебе реальная задача.
Есть бд.
Есть приход товара и уход.
У каждгого товара есть уникальное имя.
На склад пришло 500 товаров и ушло 480.
Нужно найти оставшиеся 20 и вывести их имена.
Когда товар приходит - в бд появляется запись "Товар Игорь. на склад получен".
когда уходит - "Товар Игорь. со склада отгружен".
Естественно товар игорь и состояние отгрузки - разные ячейки.

И ещё, сделать это всё надо без использования SQL излишеств типа JOIN
Делай.
Аноним 26/11/15 Чтв 09:29:21 #41 №589442 
>>589438
Ну индусы же как-то работают
Аноним 26/11/15 Чтв 09:34:57 #42 №589444 
>>589441
>Делай.
Хуелай. Давай мне ссылку на фтп своего сайта и в админку добавь.
Аноним 26/11/15 Чтв 10:05:48 #43 №589457 
>>589444
Ты не готов.
Аноним 26/11/15 Чтв 10:08:07 #44 №589459 
>>589457
>Есть бд.
>Есть приход товара и уход.
Я тебе это из головы должен брать?
Аноним 26/11/15 Чтв 10:18:34 #45 №589461 
>>589459
>Я тебе это из головы должен брать?
Ты правда думаешь что кто-то будет давать доступ к продакшн базе сосачеру?
Аноним 26/11/15 Чтв 10:19:21 #46 №589462 
>>589461
Ну а хули ты тогда выебываешься?
Аноним 26/11/15 Чтв 10:21:08 #47 №589463 
14485224689500.jpg
>>589462
Аноним 26/11/15 Чтв 12:08:09 #48 №589550 
>>589461
То есть ты правда думаешь, что можно без доступа к бд, работать с этой самой бд? Я блядь не экстрасенс.
Аноним 26/11/15 Чтв 13:10:16 #49 №589584 
>>589441
Из "реальности" задачи здесь только неспособность заказчика грамотно сформулировать условие.

По сути есть таблица учета товаров. В ней колонка "Состояние" с enum ("На складе", "Отгружено"). Выбрать нужно товары доступные на складе на данный момент.
Запрос будет элементарный типа SELECT x FROM warehouse WHERE status = "in stock".
Что касается джойнов, то тут вопрос к проектированию базы, логичнее как раз каталог товаров хранить в отдельной таблице, а в таблице с учетом товаров на складе хранить только внешний ключ на описание товара.
Но если приложение простое то наверное информацию о товарах действительно лучше хранить прямо в учете склада.
Аноним 26/11/15 Чтв 13:15:41 #50 №589587 
Почему следующая версия PHP - седьмая , а не шестая?
Аноним 26/11/15 Чтв 13:17:50 #51 №589588 
>>589584

Ты имеешь в виду 2 разные базы на 2 серверах? Потому что если база одна и на одном сервере то джойном как раз проще может быть.

Аноним 26/11/15 Чтв 13:20:16 #52 №589590 
>>589587
Потому что планировали сделать шестую несколько лет назад, даже учебники по ней успели выпустить, а потом передумали. Чтобы не было путаницы.

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

Потренироваться в ООП можно на задачах из Оп поста Про вектор и кошек-мышек.
Аноним 26/11/15 Чтв 13:24:19 #53 №589595 
Некоторые тут пишут что не хотят работать программистом. А как вам работа в сети Магнит тогда? https://www.youtube.com/watch?v=KYeC8py22jw
Аноним 26/11/15 Чтв 13:31:54 #54 №589599 
>>588566
Когда осилил написать два плагина на wordpress, первую задачу с ЕГЭ для студентов и фронт-енд на уровне, фикса багов и мелкой вертски. Устроился дали учить magento
Аноним 26/11/15 Чтв 13:36:02 #55 №589601 
>>589381
Я бы роутинги и контролерры перенес бы в один класс в духе

indexController, adminController, uploadController, checkoutController
Аноним 26/11/15 Чтв 13:52:54 #56 №589605 
>>589588
Нет, я имею ввиду что если это приложение для предприятия уровня ИП "Вован и ко", то все можно свалить в одну денормализованную таблицу вида
id | название товара | еще колонки с описанием товара | дата поступления на склад | статус | дата отгрузки | количество

Ну у человека в условии джойны названы "излишеством", значит перед нами очевидный быдлосайтец, где тебя не только не поблагодарят за качественную схему базы или ооп-код, а наоборот выдвинут претензии за "лишнюю" сложность.
Аноним 26/11/15 Чтв 14:24:42 #57 №589622 
Тут такая дилемма: мне нужно, чтобы в имени файла присутствовало его айди из таблице. Но для того, чтобы узнать его айди, мне нужно его сначала добавить в таблицу. А чтобы добавить его в таблицу мне нужно знать его имя.
Аноним 26/11/15 Чтв 14:33:38 #58 №589628 
>>589622
Ты собрался дублировать айди в колонке, где хранится имя файла? Это не нужно делать, я понимаю что тебе ради уникальности нужно добавить какой-то суффикс к имени реального файла на диске, но в базе этого делать не нужно.
В базу сохраняй имя файла (из массива $_FILES), lastinsertid вернет тебе его идентификатор. Присоединяешь этот id к имени файла и сохраняешь на диск под этим именем.
При обращении к файлу получаешь его имя при помощи нехитрой операции типа "{$file->id}_{$file->name}".
Копипастить эту штуку по представлениям и контроллерам естественно ни в коем случае нельзя, сделай метод getName у модели File, который будет возвращать имя.

Этот алгоритм не помешало бы завернуть в транзакцию.
Потому что например приложение может успеть добавить запись в таблицу, но упадет и не успеет сохранить файл на диск. Или в случае если нет прав на запись в папку download, будет писать в таблицу а файлы не сможет переместить. Так что используй транзакции.
http://php.net/manual/ru/pdo.transactions.php
Аноним 26/11/15 Чтв 14:40:36 #59 №589633 
14485380367330.png
Не бейте пожалуйста. Я ввел код как в учебнике, нажал Run, и вот что мне выдало. Это не то, что показано на учебнике. Все нормально?
Аноним 26/11/15 Чтв 14:42:24 #60 №589636 
>>589633
Выдало то, что и должно было выдать.
Аноним 26/11/15 Чтв 14:59:16 #61 №589647 
>>589595
Я бы там не хотел работать. Но я и не писал, что не хочу работать программистом.
Те, кто это всё организовал - молодцы.
Аноним 26/11/15 Чтв 15:06:41 #62 №589654 
>>589599
А что значит "дали учить"? Что прям ничего не делай, сиди и учи?
Как сильно вообще гоняют джуниоров, сильно ли загружают?
Я например опасаюсь что приду и меня сразу нагрузят работой и будут требовать выполнения в сжатые сроки, а я чего-то не буду знать и буду гуглить по полдня.
Аноним 26/11/15 Чтв 15:07:30 #63 №589655 
>>589636
Т.е. я правильно выполнил первое задание? Да? Спасибо.
Аноним 26/11/15 Чтв 15:44:40 #64 №589694 
>>589654
Да, примерно так. Сказали, создай екстеншен, что делать и как, что не понятно гугли, потом спрашивай. Не, нормальные люди так делать не будут. Тем более ты сам говоришь сколько времени нужно(у нас так)
Аноним 26/11/15 Чтв 16:20:10 #65 №589732 
14485440105790.png
>>588512 (OP)
Скажем решил я написать один сайт на друпале, и мне нужно добавить новый content type.
Как лучше это сделать, написать отдельный модуль, который сам добавляет content type, а при удалении за собой чистит, или просто добавить этот тип в гуе?
Аноним 26/11/15 Чтв 16:20:28 #66 №589734 
Слышал, что перед тем как верстать из PSD, да и вообще верстать сайт, надо прописать какие-то стили, которые нейтрализуют все стандартные отступы и всё остальное, а также подключить все необходимые скрипты на js. Где можно почитать как это правильно делать?
Аноним 26/11/15 Чтв 16:21:47 #67 №589735 
>>589734
Тебе нужно научится верстать. Про ненужные отступы сам поймешь по мере обучения.
Аноним 26/11/15 Чтв 20:18:54 #68 №589911 
$_FILES['img']['tmp_name'];

Господа, если у меня данные вот в таком виде принимаются - это значит, что файлы не img, например, текстовые, аудио и зип архивы оно не примет??
Аноним 26/11/15 Чтв 20:21:37 #69 №589919 
>>589911
Чего блядь? img это просто индекс массива, а не тип файла.
Аноним 26/11/15 Чтв 20:21:46 #70 №589920 
>>589595
Нормально, там хоть вообще платят в отличие от программирования.
Аноним 26/11/15 Чтв 20:24:40 #71 №589926 
>>589422
Давали, но у меня такой разрыв жопы случился, когда я увидел то говно и что нужно было сделать, что я уже удалил этот "проект". Могу тебе устно пересказать.
Аноним 26/11/15 Чтв 20:35:34 #72 №589950 
Что если написать конструктор сайтов аля вордпресс или цмску типа опенкарта?
Аноним 26/11/15 Чтв 21:29:56 #73 №590025 
14485625965490.jpg
>>589926
Давай, рассказывай
Аноним 26/11/15 Чтв 21:33:06 #74 №590031 
>>589950
Нахуя?
Аноним 26/11/15 Чтв 21:56:19 #75 №590062 
>>588512 (OP)
Ковыряю Опенкарт. Что-то даже не могу понять, на какой имейл отсылаются данные в разделе Contact us.
Вьюхи прямо в темплейтах переделывать под другую верстку?
Аноним 26/11/15 Чтв 22:46:00 #76 №590115 
Пишу курсовую, где мне нужно базу данных подключить к простенькому сайту на пхп и хотелось бы поинтересоваться, существуют ли какие-нибудь готовые примеры с правильным кодом? Хочется увидеть как реализуются те или иные функции, а то вставлять костыли то тут, то там уже надоело.
Аноним 26/11/15 Чтв 23:02:56 #77 №590138 
>>590115
Можешь попросить у кого-нибудь из местных код их решения задачи про студентов из оппоста.
Аноним 26/11/15 Чтв 23:28:36 #78 №590147 
Пожалуйста, кто-нибудь может дать своё решение задачи про студентов из оп-поста?
>>590138
Спасибо.
Аноним 26/11/15 Чтв 23:40:17 #79 №590156 
>>590115

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

Это лучше чем ковыряться в чужом коде неизвестного качества.
Аноним 27/11/15 Птн 00:35:22 #80 №590187 
>>590147
Диплом тоже я за тебя получать буду? Нахуй пошел.
Аноним 27/11/15 Птн 00:37:00 #81 №590188 
>>590104
Посоны, что это за я хуйню я наблюдаю? Какие еще REST, SOAP, XML, JSON и curl? Почему нам никто про это не говорит?
Аноним 27/11/15 Птн 02:44:44 #82 №590235 
>>589550
>работать с этой самой бд?
Вы только посмотрите на него. Кто в здравом уме даст доступ к своей базе данных, ещё и рабочей. Какому-то сосачеру анонимусу который даже портфолио не имеет? Все данные для решения задачи у тебя есть. Если бы захотел - построил бы базу из 2 полей сам, сложного ничего нет. А так от тебя одни отговорки. Считай первое же задание рабочее ты провалил.
Аноним 27/11/15 Птн 02:49:36 #83 №590239 
>>589584
>логичнее как раз каталог товаров хранить в отдельной таблице
Нет. Каждый товар уникален и не имеет повторений. Каталог на них делать - вообще нет никакого смысла! Я имею ввиду вообще каждый. Тоесть нет в базе даже 2 одинаковых коробков спичек. У них просто 2 разных имени!
>Что касается джойнов
джойны - это плохой тон в SQL. Как goto. Об этом ещё Бобук говорил. Безсмысленные нагрузки создаёт там, где всё можно решить просто работой на стороне клиента.
Аноним 27/11/15 Птн 02:51:13 #84 №590240 
>>589605
>Ну у человека в условии джойны названы "излишеством", значит перед нами очевидный быдлосайтец, где тебя не только не поблагодарят за качественную схему базы или ооп-код, а наоборот выдвинут претензии за "лишнюю" сложность.
И это в то время, как 80% новых СУБД построенных после 2012 года как раз стараются максимально отказаться от джойнов?
Аноним 27/11/15 Птн 02:56:02 #85 №590241 
>>590239

> джойны - это плохой тон в SQL. Как goto. Об этом ещё Бобук говорил. Безсмысленные нагрузки создаёт там, где всё можно решить просто работой на стороне клиента.
А вот это плохо тебя характеризует. То есть инструмент специально придуманный для объединения данных из разных таблиц, а ты предлагаешь его не использовать, и написать свой велосипед который с большой вероятностью будет еще и хуже работать.

>>590240

Какие это СУБД? Оракл? MS SQL? Postgres? MySQL?

Алсо, почитай статью про СуБД без джойнов: http://habrahabr.ru/post/231213/

Очень незрелый подход.
Аноним 27/11/15 Птн 02:59:04 #86 №590242 
>>590188
>>590104
>XML
Кто-нибудь подскажет мне что работодатель этим хочет сказать? Зачем это вообще знать? По моему сколько работодателей, столько и разных вопросов по XML. И каждый его вертит как хочет. Кто-то его в андройде юзает по своему, кто-то в 1с, кто-то на него вешает самопальное подобие екселя. В любом случае новый работник будет просто недели 2 вникать что там наворотили. Отсюда мне вообще непонятно это требование.
Аноним 27/11/15 Птн 03:16:48 #87 №590243 
>>590241
>а ты предлагаешь его не использовать, и написать свой велосипед который с большой вероятностью будет еще и хуже работать.
Джойн как раз и есть велосипед который очень плохо работает.
>А вот это плохо тебя характеризует.
Когда у тебя в парочке таблиц по 5 миллионов записей... Попробуй как-нибудь сделать джойн. Если у тебя не облако - сервак вполне может просто затупить минуты на 2-5. Я не говорю что у меня такая БД. Но именно те, кто юзают например финансовые бд, почему-то как огня боятся всяких Join.
Аноним 27/11/15 Птн 04:00:34 #88 №590253 
>>590243

Делал джойны на миллионных таблицах. Не тормозило. Ты наверно просто не знаешь про способы оптимизации, как они выполняются итд.

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

> Но именно те, кто юзают например финансовые бд
Ты ведь в этой теме совсем не разбираешься, зачем фантазировать начинаешь? Или ты под финансовыми БД 1С подразумеваешь?

>>590188

Тебе нужны задания по всем этим темам? Порядок изучения примерно такой:

HTTP -> curl
json
XML -> SOAP

Стрелочка значит что прежде чем учить SOAP надо освоить XML.

Можешь начать с чтения про протокол HTTP, у меня есть недописанный урок, https://github.com/codedokode/pasta/blob/master/network/http.md

Ну и побольше информации есть в виипедии: https://ru.wikipedia.org/wiki/HTTP

После HTTP можно переходить к curl. Кстати пользоваться им напрямую довольно неудобно, я бы советовал нормальный ООП-ориентированный клиент вроде Guzzle 5

Также, держи задания на XML:

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

XML довольно важная тема, так как это очень распространенный формат.

> пару слов об xml
XML это формат для обмена данными (например интернет-магазин через XML может передавать данные о товарах и ценах в яндекс-маркет) и хранения данных (например конфиг с настройками программы может использовать формат XML). XML поход на HTML внешне, но в общем это отдельный не связанный с ним язык, отличия такие:

1) элементы и атрибуты XML не имеют никакого преопределенного смысла, ты сам решаешь что обозначает тот или иной тег
2) HTML используется для разметки веб-страниц (то есть тегами мы показываем что тут ссылка, тут заголовок, тут картинка), XML для произвольных данных
3) В XML все теги должны закрываться, есть самозакрывающиеся теги ( <x/> ), регистр букв в именах важен
4) В XML есть неймспейсы

Можно ли обойтись без XML? Можно изобрести свой формат, но вот что ты теряешь: другие разработчики не слышали про твой формат, а про XML слышали, для XML есть готовые парсеры/генераторы для многих языков, валидаторы, редакторы с подсветкой и автодополнением, визуализаторы, схемы. То есть для XML существует огромная инфраструктура для работы с ним и изобретать в таких условиях велосипед будет только неграмотный разработчик.

Благодаря популярности и инфраструктуре XML используется в перевую очередь в различных API для обмена данными между системами.

Неймспейсы нужны для того чтобы можно было объединить несколько документов в одном. Допустим 2 разработчика используют XML для описания товаров. Вася тегом <total> обозначает число товаров на складе, а Петя — цену товара. Если мы соединим вместе документы в Петином и Васином формате, получится неразбериха:

<data>
<total>6</total>
<total>300</total>
</data>

Неймспейсы решают эту проблему. Петя помещает все свои элементы в неймспейс http://petr.example.com/product, а Вася в http://vasya.example.com/goods и теги больше не путаются:

<data xmlns:vasya="http://vasya.example.com/goods" xmlns:petr="http://petr.example.com/product">
<vasya:total>6</vasya:total>
<petr:total>300</petr:total>
</data>

Ну разве не умно? Если каждый будет использовать для неймспейса свой домен то они гарантированно будут уникальными. Неймспейсы могут применяться как к элементам так и к аттрибутам. Их можно не использовать, если тебе не нужен этот функционал. Почитать: http://gberman.narod.ru/xmllections/ns/namespace.htm

Схемы XML. Схема (или DTD) — это машинночитаемое описание формата. Помнишь, я написал, что в XML смысл и правила использования тегов и атрибутов ты задаешь сам? Схема позволяет тебе описать эти правила, описать какие теги можно использовать, какие у них атрибуты, какие значения, как их можно вкладывать. Схема может использоваться для автоматической проверки данных на правильность, а также как документация (которую прочтет человек и поймет что к чему). То есть если какая-то система принимает данные в XML, разработчики обычно выкладывают схему с описанием данных.

Пример DTD для файлов принимаемых яндекс-маркетом: http://partner.market.yandex.ru/pages/help/shops.dtd
Пример схем какого-то росреестра: https://rosreestr.ru/site/fiz/postavit-nedvizhimost-na-kadastrovyy-uchet-/xml-skhemy/

Для схемы есть несколько альтернативных форматов (учить их наизусть не надо, просто глянь примеры):

DTD (самый древний): https://ru.wikipedia.org/wiki/DTD
XML Schema (XSD): https://ru.wikipedia.org/wiki/XML_Schema http://citforum.ru/internet/xml/scheme/
Relax-NG: https://ru.wikipedia.org/wiki/RELAX_NG

Схемы, как ты надеюсь уже понял, тоже огромный плюс XML. Имея схему ты можешь легко проверить соответствует твой XML требованиям системы или нет.

Еще есть такая интересная технология, как XSLT. Это язык преобразования XML-документа в другой XML- или HTML-документ. Правила преобразования также описываются в формате XML.

Также, есть такая вещь как XPath. Это язык запросов для поиска элементов в документе.

Для работы с XML в PHP есть расширения: DOM, SimpleXML (надстройка над DOM, с ограничениями), и потоковые XML Reader и XML Writer. DOM строит полную структуру документа в памяти и годится для небольших файлов (до десятка мегабайт). Потоковые библиотеки позволяют работать с гигантскими файлами (например картографическими файлами проекта Open Street Map, который создает открытую карту мира: https://www.openstreetmap.org/relation/2555133 . Файл с Россией весит там 2.5Гб в сжатом виде).

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

Задания (для их выполнения надо освоить HTTP, curl, Guzzle, XML):

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

Ну есть такие задачи на XML (ты ведь имел в виду расширение PHP DOMDocument):

1) скрейпинг (дана HTML-страница с сайта объявлений, надо с помощью DOM разобрать ее содержимое), сложность: несложно, быстро
2) геокодирование и использование Yandex Maps API (дан адрес, проверить, правильный ли он и определить район и ближайшую станцию метро), сложность: посложнее, но дает ценные знания
3) работа с ФИАС (сначала придется скачать 1.5 Гб архив с базой), надо скриптом разобрать базу и составить список районов и городов нашей страны. Огромную базу таких размеров в память не засунешь, надо исхитряться, например, с помощью XMLReader. Ну или если тебе не нравится ФИАС, можно сделать что-то аналогичное с OpenStreetMAp, например, распарсить оттуда координаты остановок автобусов.

Могу еще придумать задачи на XSLT и XSD/relax NG, если тебе интересна тема XML.

В общем, самой реалистичной из 3 задач мне кажется вторая.

1) Пользователь вводит адрес в одной из столиц (Москва или Спб — выбери сам), скрипт определяет район города и ближайшее метро.

Делается это с помощью геокодера Яндекса: http://api.yandex.ru/maps/doc/geocoder/desc/concepts/input_params.xml

Пример запроса: http://geocode-maps.yandex.ru/1.x/?geocode=Москва,+Тверская+улица,+дом+7

Первым запросом ты определяешь координаты по адресу (и существует ли адрес). Вторым обратным запросом, определяешь район и метро по координатам. Для запросов используется формат XML, так что использовать придется DOM или SimpleXML (и наверно XPath для поиска узлов). Для отправки запросов тебе нужен HTTP клиент, в минимальном варианте достаточно file_get_contents или curl (но лучше конечно использовать нормальный клиент вроде Guzzle). На бесплатном хостинге запросы наружу отправлять нельзя, так что наверно лучше запускать скрипт из командной строки или на своем компьютере.

Не пиши скрипт простыней, разбивай на маленькие функции.

2) Дана HTML-страница: http://spb.hh.ru/applicant/searchvacancyresult.xml?areaId=231&notWithoutSalary=&orderBy=0&text=xml&professionalAreaId=0&desireableCompensation=&compensationCurrencyCode=RUR

Надо загрузить ее HTML-код в DOM ( http://php.net/manual/en/domdocument.loadhtml.php ), распарсить ее, например, с помощью Xpath, и получить массив объектов JobOffer с полями: title (название вакансии), minSalary, maxSalary (0, если не указана), company (название компании), address, publishDate (дата публикации в вие объекта DateTime).

То есть HTML волшебным образом превращается в массив объектов, с которыми можно нормально работать, например, вывести список с помощью echo.

Не нравится парсить вакансии? Парсь торренты:
www.nyaa.eu/?page=search&cats=0_0&filter=0&term=watamote , надо создать массив объектов TorrentFile с полями category (одна из констант), title, torrentUrl (ссылка скачивания торрент-файла), size (числом), seeders, leechers, downloadCount

Честно предупрежу, HTML на сайте hh.ru адский и торренты вроде проще. Ну и для скрейпинга страниц удобнее использовать имитирующие jQuery библиотеки вроде phpQuery или Simple DOM HTML, но для изучения XML лучше будет использовать именно DOM и XPath.

Что скажешь?
Аноним 27/11/15 Птн 04:05:13 #89 №590254 
>>590240
Вот, кстати, поясните за Джойны. Например, ОП говорил, что под каждую сущность должен быть свой дата маппер и модель. Т.е. своя отдельная таблица под товары и например их владельцев. В дата маппере выборка делается только для одной сущности, потому что модель для каждого дата маппера - только для одной сущности. Т.е. джойн там никак не запихнешь. Как например в моем обменнике такой запрос для комментов:
"SELECT * FROM comments WHERE file_id = :file_id ORDER BY id DESC"
file_id - это внешний ключ идентичный id файла в таблице.
Аноним 27/11/15 Птн 04:06:40 #90 №590255 
>>590025
Я нашел это говно. Могу скинуть зип архивом и задание по памяти. Попробуй это хотя бы развернуть на локалке
Аноним 27/11/15 Птн 04:07:37 #91 №590256 
>>590188

Нагуглил SOAP, но перед ним надо изучить XML: http://gberman.narod.ru/xmlarticles/soap/1/content.htm

для работы с SOAP есть расширение: http://phpclub.ru/detail/article/soap и библиотеки

Еще: https://www.google.ru/search?q=php+soap&newwindow=1&gbv=1&sei=oqxXVtX3N4aisAHL2acQ

Про REST наверно поговорим позже, перед ним тебе надо изучить HTTP и JSON.

В общем, изучи что-нибудь из списка и попроси какие-нибудь задачки на эти темы.
Аноним 27/11/15 Птн 04:07:48 #92 №590257 
>>590254
Видимо они собираются взять одну таблицу, сделать выборку, потом к этой же таблице сделать джойн. Лол.
Я тоже не понял этого наркоманства чесно говоря.
Аноним 27/11/15 Птн 04:09:18 #93 №590258 
>>590254

Вообще, я тут подумал и это у тебя скорее не дата маппер, а Table DataGateway (урок на гитхабе обновлен, загляни в него).

Делать джойны к другим таблицам можно. Например если ты хоешь выбрать файл + все комментарии к нему сразу, это вполне можно сделать в классе работы с таблицей файлов.
Аноним 27/11/15 Птн 04:12:42 #94 №590259 
>>590253
>Ты ведь в этой теме совсем не разбираешься, зачем фантазировать начинаешь? Или ты под финансовыми БД 1С подразумеваешь?
Ну вот, унижения пошли.
Вообще имел опыт работы со SWIFT. (Если не знаешь что это - погугли. Кратко - все данные по всем картам Visa, MasterCard и прочим.)
У них примерно 2.6. миллиарда записей в год. Так что думаю эти ребята знают толк в джойнах, и в том, как именно они нагружают систему. У них все джойны были на стороне клиента. Это оказалось гораздо проще! Могу рассказать почему если хочешь.
Аноним 27/11/15 Птн 04:15:33 #95 №590260 
>>590258
Я не смотрел урок. Но в теории можно сделать
"SELECT Filenamecomments from komments WHERE filename = 'Рандомное имя файла'"
Не совсем понимаю на кой тут вообще Join? И куда его лепить?
Аноним 27/11/15 Птн 04:18:41 #96 №590262 
>>590253
Иногда ОП печатает так много текста на какой-то банальный вопрос, что мне хочется подойти к нему и обнять. А потом угостить его вкусным чаем.
мимо другой анон
Аноним 27/11/15 Птн 04:26:44 #97 №590268 
>>590260

В класс работающий с таблицей комментариев конечно.

> Не совсем понимаю на кой тут вообще Join?
Ну например тебе надо найти пользователей у которых объем загруженных файлов больше опр. величины и которые зарегистрированы больше месяца назад. Тут с джойном задача легко решается.

>>590262

В данном случае я взял 2 старых файлика с пастами и чуть добавил от себя.
Аноним 27/11/15 Птн 04:27:04 #98 №590269 
>>590262

Но спасибо на добром слове.
Аноним 27/11/15 Птн 04:27:09 #99 №590270 
>>590241
> Алсо, почитай статью про СуБД без джойнов: http://habrahabr.ru/post/231213/
>Делать приложение на рельсах
>Соцсеть
>На документированной БД
>Соцсеть!
Ребятам явно сначала надо было закончить университет. В особенности курс по СУБД. Прежде чем заниматься подобным.
Аноним 27/11/15 Птн 04:30:41 #100 №590271 
>>590268
Хм. Да, действительно. Так будет проще.
Спасибо. Убедил.
Аноним 27/11/15 Птн 04:45:04 #101 №590274 
Мда, XML и курлы похоже довольно общеязыковые вещи.
Аноним 27/11/15 Птн 04:54:34 #102 №590275 
>>590258
Ну смотри, допустим мне нужен один файл, выборку которого я делаю по токену (который передается в контроллер). Т.е. во время совершения этого запроса я еще не знаю id файла, он будет мне известен после выборки, когда массив результата распарсится. Как же я в этом же запросе приджойню коменты?
$sql = "SELECT * FROM files WHERE token=:token";
Аноним 27/11/15 Птн 05:06:32 #103 №590278 
>>590275

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

Мне кажется ты плоховато знаешь SQL. Если так, то могу посоветовать задачки на SQL из ОП поста.
Аноним 27/11/15 Птн 05:31:42 #104 №590282 
>>590278
Как ты себе это представляешь? Таблицы связаны по id в файлах и file_id - колонка в комментах, которые идентичны. SELECT * FROM files where token = :token JOIN comments ON files.id = comments.file_id

Ну и что такой запрос выведет?
Аноним 27/11/15 Птн 05:36:45 #105 №590286 
>>590282
И да, это еще не говоря о том, что массив данных для файла у меня парсится в одном классе, а комменты в совсем другом. А этот запрос вернет мешанину. И придется смешивать классы для парсинга файла и комментов, что приведет к каше. И это нарушит всю логику приложения и работы с дата маппером для комментов.
Аноним 27/11/15 Птн 06:03:36 #106 №590291 
>>590286

Это все зависит от ситуации.

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

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

В общем эта проблема решаема. Другой вопрос что в твоем простом приложении это наверно лишние сложности.

И это кстати объясняет почему стоит использовать готовую библиотеку-data mapper вроде doctrine 2: там эти проблемы уже решены.
Аноним 27/11/15 Птн 06:06:00 #107 №590292 
Анон, как научиться использовать гамильтонов граф? Я-то прочитал, но нихуя не понял. Помогите!
Аноним 27/11/15 Птн 06:33:14 #108 №590295 
>>590235
>Считай первое же задание рабочее ты провалил.
Нахуй кому-то решать задачи бесплатно для макаки, которая называет join'ы излишеством? Это что уровня "Памагите сделать за меня лабу, мне через час сдавать".
Аноним 27/11/15 Птн 06:45:19 #109 №590297 
>>590295
>Это что уровня "Памагите сделать за меня лабу, мне через час сдавать".
Ну простите что тут вам не дают задач по написанию фэйсбуков. Такова жизнь. И большая часть программирования состоит из решения вот таких задач.
Аноним 27/11/15 Птн 06:55:04 #110 №590299 
14485965042680.png
>>590295
>двачь, у меня нет опыта, хочу какую-нибудь рабочую задачку решить. Чувствую что готов.
>Вот тебе реальная задача.
>Чёт мне твоя задача не нравится. И решать её как-то мне не хочется. Да и условия по решению какие-то стрёмные.
>Ну не решай.
>И вообще ты хрен какой-то и денег мне платить не хочешь. Да и задачу стрёмную предложил чёт, на уровне лабы.
Вот как я вижу всю эту переписку.
Аноним 27/11/15 Птн 07:51:11 #111 №590303 
ОП, в задачи про доллары действительно не нужно ставить ?> или это опечатка? (в 2 копипастах и скрине, лол).
Аноним 27/11/15 Птн 09:20:23 #112 №590325 
>>590299
>Вот как я вижу всю эту переписку.
Читай внимательнее
>на фриланс сайтах,
а не двощах. Этот опездал вместо того, чтобы ответить на вопрос решил повыебываться, подсунув мне задание с которым он сам не смог справиться, с надеждой на то, что я её решу, а он просто спокойненько отправит её на тест.
Аноним 27/11/15 Птн 09:43:40 #113 №590329 
>>590303

Не нужно.
Аноним 27/11/15 Птн 12:17:50 #114 №590400 
>>590325
https://drive.google.com/file/d/0B5IDpvb_sbjXUkpSUm41SFNFWTA/view

на решай
Аноним 27/11/15 Птн 12:26:36 #115 №590409 
>>590400
>на решай
Ну решу, дальше что будет?
Аноним 27/11/15 Птн 13:04:34 #116 №590429 
>>590409
Будешь знать - готов ты или нет. Ну и немного кода для портфолио. Можешь также попробовать устроиться в эту компанию, они вроде до сих пор ищут.
Аноним 27/11/15 Птн 13:33:13 #117 №590439 
>>590400
Это на джуна?
Аноним 27/11/15 Птн 14:11:14 #118 №590447 
>>590429
Я же уже сказал, что готов. Я такие задачи каждый день на работе решаю.
Аноним 27/11/15 Птн 17:04:54 #119 №590550 
>>590447
>Я такие задачи каждый день на работе решаю.
>нет портфолио и опыта.
Кто-то тут нагло врёт.
Это взаимоисключающие параграфы.
Аноним 27/11/15 Птн 17:08:07 #120 №590551 
>>590550
https://www.google.ru/search?client=opera&q=nda&sourceid=opera&ie=UTF-8&oe=UTF-8
Аноним 27/11/15 Птн 17:11:01 #121 №590554 
>>590551
Тоесть ты скрываешь что у тебя есть опыт из-за NDA?
Ты не врёшь, ты уже нагло запизделся просто.
К тому-же я и сам так работаю, что однако не помешало мне создать мало мальское портфолио в свободное от работы время.
Аноним 27/11/15 Птн 17:13:46 #122 №590555 
>>590439
Нет, на сеньора блять. Джунам достаточно уметь делать хелловорлды.
Олег 27/11/15 Птн 17:18:58 #123 №590557 
>>590555
>Джунам достаточно уметь делать хелловорлды.
Нет.
Алсо
4. Хранение в БД MySQL.
Я конечно понимаю с какой целью... но всё-таки уточню. Как это может применяться?

мимоньюфаг
Аноним 27/11/15 Птн 19:15:08 #124 №590644 
>>590292
Ну как?
Аноним 27/11/15 Птн 22:05:57 #125 №590785 
Какие фреймворки сейчас надо знать, чтобы взяли джуником?
Аноним 27/11/15 Птн 22:06:41 #126 №590786 
>>590557
с целью хранения данных в БД
Аноним 27/11/15 Птн 22:25:10 #127 №590793 
Что если делать шаблоны под опенкарт и прадавать?
Аноним 27/11/15 Птн 23:34:11 #128 №590845 
>>590785
Открой вакансии и посмотри.
>>590793
Делай, прадавай.
Аноним 28/11/15 Суб 00:20:37 #129 №590881 
чатик
gitter(dot)im(slash)php-ua(slash)php
Аноним 28/11/15 Суб 01:16:24 #130 №590908 
Что-то я разочаровываюсь. Сначала кажется, что натянуть верстку на ЦМС - просто непосильная задача, но потом, разбираясь в темплейтах, оказывается, что это гораздо легче, быстрее и удобнее, чем писать аналогичный сайт с нуля. Но при этом это совершенно не творческий подход. Неужели вся задача phpшников и заключается в таком вот натягивании тем и ковырянии гуя?
Олег 28/11/15 Суб 06:46:43 #131 №590969 
14486824034550.png
>>590786
Я имею ввиду, зачем вообще хранить ссылки на страницы в БД?
Аноним 28/11/15 Суб 08:59:19 #132 №590979 
>>590554
Как я могу себе добавить в портфолио часть функционала на сайте? Весь сайт же не я делал. Что, мне писать "на этом сайте формочка, на том геолокация, здеся я ещё страницы поверстал"?
Аноним 28/11/15 Суб 09:59:23 #133 №590984 
Оп, а ты случайно не тот программист, которому бошку хотят пересадить? А то все сходится тогда.
Аноним 28/11/15 Суб 12:59:02 #134 №591027 
Интересные статьи:

http://m.habrahabr.ru/post/271795/ - игра в балду на SQL (кто хочет может сам попробовать написать запрос который проанализирует таблицы с состоянием поля и словарь и выберет подходящий ход)

http://m.habrahabr.ru/post/271807/ - история одного бага

Аноним 28/11/15 Суб 14:55:41 #135 №591065 
>>588512 (OP)
Ищу годный фак по yii для домохозяек на русском, помогите найти. В гугле какие-то бложики заточенные под адсенс и недописанные статьи на хабре.

Может нахуй этот yii? Какой фреймворк попроще и вообще дружелюбней? Учу потому что в вакансиях требуют, писать буду магазин с резиновыми хуями.
Аноним 28/11/15 Суб 15:26:12 #136 №591077 
>>591065
Посмотри на Laravel.
Аноним 28/11/15 Суб 17:11:03 #137 №591135 
Обьясните дауну, но вот что блять здесь не так?

Какого хуя он мало того, что не выводит, то что я прошу, так еще и выводит весь код. Почему, блять, так?

https://ideone.com/6bmEvu
Аноним 28/11/15 Суб 17:13:05 #138 №591136 
>>591135
Ты знаешь, что такое this и с чем его едят? Перечитай урок ОПа по ООП. А выводится всё, потому что ты <?php стёр
https://ideone.com/5yCNY7
Аноним 28/11/15 Суб 17:13:13 #139 №591137 
>>591135
Ну весь код не выводит, потому что <?php забыл, но однохуйственно выводит не выводит, что я прошу
Аноним 28/11/15 Суб 17:15:42 #140 №591138 
Привет, есть тут друпалисты? Что можете сказать про систему?
Аноним 28/11/15 Суб 17:15:46 #141 №591139 
>>591136

все разобрался, пасиб
Аноним 28/11/15 Суб 17:19:50 #142 №591140 
Анон, вопрос по регулярным выражениям. Как проверить то, что в тексте отсутствует запятая. Допустим во фразе "я был а она нет", запятая перед "а" отсутствует. Как это проверить?
Аноним 28/11/15 Суб 17:24:49 #143 №591143 
>>591140
Например /[a-zа-яё]\\s(а)\\s/ui
Аноним 28/11/15 Суб 17:28:55 #144 №591147 
>>591143
Так мне пробел нужен, а запятая, лил.
Аноним 28/11/15 Суб 17:31:43 #145 №591148 
>>591147
>не пробел, а запятая
быстрофикс
Аноним 28/11/15 Суб 18:04:37 #146 №591171 
>>591148
А я тебе что скинул?
Аноним 28/11/15 Суб 18:06:46 #147 №591173 
Напомню что у нас есть крутое задание на SPA (веб-приложение на яваскрипте): https://github.com/codedokode/pasta/blob/master/js/spa.md

Также, ответил на посты в предыдущем треде:

http://integer64.github.io/makeup/ - ответил тут >>586979
https://github.com/nsdvw/visit-counter - там вроде пока комментировать нечего
http://nsdvw.github.io/template.html - >>591165
https://github.com/never3ver/catsandmice/ - >>591166
https://github.com/someApprentice/Cat-and-Mouse - >>591167

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




Аноним 28/11/15 Суб 18:09:42 #148 №591176 
>>591027
>кто хочет может сам попробовать написать запрос
Я больше на это не куплюсь.

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

>>590654
>Исключения это часть интерфейса твоего класса или метода
Согласен. Хотя в данном случае универсальное исключение будет служить получается только как обертка, чтобы его удобно было ловить при смене клиента или драйвера бд.
>Если клиент редиса при получении ERR выкидывает исключение - хорошо.
Да, удалось разобраться при помощи эксперимента: специально вызвал ошибку (ltrim на строке) и проследил в стеке вызовов где было выброшено исключение. Кстати, это xdebug пишет этот стек, или так было всегда?
Так вот, исключение под названием Rediska_Connection_Exec_Exception (казалось бы, при чем тут соединение? я бы из названия подумал что это ошибка соединения) выпало в методе readResponseFromConnection.
https://github.com/Shumkov/Rediska/blob/master/library/Rediska/Connection/Exec.php#L274-L275
Так что да, редиска вроде адекватно реагирует на исключения, смотрит первый символ ответа, и если это '-' (в протоколе RESP означает ошибку), то выбрасывает исключение.
>придется по диагонали почитать ее код. Если ты собираешься заниматься программированием, тебе это не раз придется
Все равно они сами редиски, раз не написали нормальной документации. Я бы мог найти лучшее применение потраченному времени.

В общем, считаю работу оконченной, только ридми сейчас сижу пишу.
https://github.com/nsdvw/visit-counter
Аноним 28/11/15 Суб 18:12:16 #149 №591178 
>>588733

> Вопрос: мне нужно в моей функции объявлять static $helper или factory и так мне всегда будет возвращать один объект?
Скорее всего новый каждый раз, но лучше проверить документацию.

>>588788

Принципы ООП не поменялись с того времени, хотя конечно книга старовата.

>>588910

А какие могут быть задачи на красно-черные деревья? Ну не знаю, сделай на PHP реализацию этих деревьев с балансировкой и ООП. То есть должен быть класс представляющий узел дерева, и методы удаления/добавления узлов.

> и принципы SOLID KISS, чтобы лучше понимать ООП с конкретными задачами и примерами реализации.
Задачи Вектор и Кошки-мышки из учебника решал для начала?

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

>>588915

Не уверен.

>>588921

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

>>589004

защита от хакеров

>>589035

Попробовал бы сам написать - было бы понятнее наверно.

>>589364

Если ты весь учебник прошел и решил Вектор и Кошки-Мышки, и исправил все замечания по ним то в ОП посте есть задачи про студентов и файлообменник.



Аноним 28/11/15 Суб 18:38:05 #150 №591185 
>>589436

Не всегда. Чтобы не убить, стоит сделать сначала бекап.

Прикрутить контроль версий ты можешь но на своей стороне.

>>589655

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

>>589732

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

>>589734

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

Есть так называемый reset, но это плохая штука.

>>589950

Есть шанс умереть прежде чем допишешь до конца.

>>590062

Это друпал? Тогда скорее всего там используется модуль обратной связи и у него есть настройки.

> Вьюхи прямо в темплейтах переделывать под другую верстку?
Ты должен сделать «тему» для Друпала со своей версткой, чтобы можно было на нее переключиться. Почитай документацию друпала по темам.

Вообще не надо никогда править код библиотек и фреймворков - их потом нельзя обновить, и разобраться в этом тяжело. Хотя я видел такое не раз.

>>590242

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

При чем тут андроид или 1С? XML это отдельная технология и она была когда андроида еще не было.

> В любом случае новый работник будет просто недели 2 вникать что там наворотили. Отсюда мне вообще непонятно это требование.
Требуется знать сам язык разметки XML и библиотеки для работы с ним. А не то как его используют в андроиде.

тут >>590253 есть какие-то ссылки.

>>590292

Что именно ты не понял и что именно прочел? какую задачу ты пытаешься решить?

>>590969

потому что сами страницы хранятся там же в базе.

>>590908

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

>>590979

Ты можешь так и сказать заказчику.


>>590984

Нет

>>591065

У юи 1 и 2 есть документация на русском.


>>591138

делал сайты на нем, одна сплошная гора костылей, никакого ООП.

>>591140

искать такое выражение:

буква, за ней пробелы, за ней «а», за ней граница слова

>>591143

Лучше использовать \\b для указания на границу слова. У тебя после а обязан идти пробел, а там может быть другая запятая.

>>591176

> Я больше на это не куплюсь.
ну хоть почитай, впечатлись. Кто бы поверил что SQL так может?

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

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

> казалось бы, при чем тут соединение?
Там еще Exec - выполнение.

> Так что да, редиска вроде адекватно реагирует на исключения, смотрит первый символ ответа, и если это '-' (в протоколе RESP означает ошибку), то выбрасывает исключение.
Это радует.

> Я бы мог найти лучшее применение потраченному времени.
Написать 12-й драйвер для редиса?


> https://github.com/nsdvw/visit-counter/blob/master/Exception/VCException.php
название неправильное, это не ошибка счетчика, а ошибка редиса. Причем для базы данных нужно отдельное исключение, я так думаю.

> https://github.com/nsdvw/visit-counter/blob/master/Db/DbAdapter.php#L9
думаю в абстрактном классе не должно быть конструктора и мы не должны навязывать какой-то конструктор тем кто пишет наследников.

> https://github.com/nsdvw/visit-counter/blob/master/Redis/RedisAdapter.php
Стоит переименовать в AbstractAdapter или AbstractRedisAdapter.

> https://github.com/nsdvw/visit-counter/blob/master/Redis/RedisAdapter.php#L7
Возможно не стоит навязывать это поле наследникам?

> https://github.com/nsdvw/visit-counter/blob/master/Db/PdoAdapter.php
почему тут имя таблицы и колонки сделаны через сеттеры7 Их не обязательно задавать?



Аноним 28/11/15 Суб 18:49:19 #151 №591194 
>>591185
Сейчас поправлю.

Набросал еще черновик ридми, извиняюсь for кривой английский.
https://gist.github.com/nsdvw/1738db8e2c952134341c
Аноним 28/11/15 Суб 19:03:21 #152 №591199 
>>591194

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

- (1 маленький абзац) что это за библиотека
- (1-2 абзаца) чем эта библиотека лучше других подходов, зачем она вообще нужна, почему бы не делать просто UPDATE count = count + 1
- (кратко) пошаговая инструкция по подключению к проекту, с минимальными примерами кода
- (кратко) алгоритм работы
- (кратко) возможности расширения

Вроде он примерно соответствует твоему но пошаговой инструкции у тебя вроде нет, ну то есть «сделайте composer require» и так далее.

в теории, можно еще сделать папку example с 2 php-страницами где демонстрируется подключение и использование счетчика.

По словам:

cross-client - лучше написать driver independent
internally algorithms - наверно лучше написать implementation details - подробности реализации

> public function getDeltaVisits($pageID)
Возможно стоит еще сделать метод массового получения дельт?



Аноним 28/11/15 Суб 19:24:15 #153 №591209 
>>591194

> set key ttl if you want to store information about visits
> for last month only; default is 0, i.e. persistant
это по моему неправильно, объем данных в редисе так будет расти неограниченно. Нужно какое-то разумное дефолтное значение, например 1 сутки.
Аноним 28/11/15 Суб 20:29:24 #154 №591257 
Нет, это опенкарт.
Аноним 28/11/15 Суб 20:57:41 #155 №591281 
http://m.habrahabr.ru/post/271807/

Как закомментированная строка может случайно уйти в продакш? Такое вообще возможно?
Аноним 29/11/15 Вск 00:08:01 #156 №591440 
Когда-то давно одна маня в воркаче попросила сделать инет-магаз .. за 5 дней. Чтобы разделы и товары можно было добавлять, удалять и редактировать, в общем натянуть макет на готовую цмс. В общем, сверстал макет, по-моему, дня за 3, но прям с утра до ночи верстал, чтобы все резиновое было и не наезжало друг на друга пиксель в пиксель. И сейчас натягиваю этот макет на опенкарт (а там еще ру. яз. подключать надо). И я просто ахуеваю, насколько тут много работы и какое вообще говно можно сделать быстро-быстро всего за 5 дней одному человеку, и это он еще цену не называл.
Аноним 29/11/15 Вск 00:08:32 #157 №591442 
Как указывать в резюме или в анкетах опыт работы, если я год работал в черную я микроконторе, у которой даже названия нету, в которой помимо меня было 2 человека. И это по сути мой первый опыт. То есть я хочу написать в том же резюме, что занимался вот такими то вещами. Но не писать же, что работал в шараге за еду.
Аноним 29/11/15 Вск 02:47:59 #158 №591527 
Может мне кто пояснить за REST? Поизучал Slime нихуище непонятно, нахуй микрофреймворки вообще нужны?
Аноним 29/11/15 Вск 05:06:47 #159 №591558 
14487628072030.png
14487628072041.png
Аноны, поставил себе php, mysql, apache, phpmyadmin.

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

Код запускается, но выдает вот такую ошибку, с разными библиотеками.

Warning: PHP Startup: Unable to load dynamic library 'C:\Server\bin\PHP\ext\php_sybase_ct.dll' - Не найден указанный модуль.
in Unknown on line 0

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

Все настроил, все пути правильно указал, как исправить ошибку то?
Аноним 29/11/15 Вск 05:37:34 #160 №591563 
Не бейте лучше обоссыте. Первая задача из ООП пасты
http://ideone.com/6e7t1B
Аноним 29/11/15 Вск 12:40:09 #161 №591664 
>>591558
Поставить линукс + nginx, очевидно же.
Аноним 29/11/15 Вск 15:18:10 #162 №591777 
14487994906560.png
Анон, может кто-нибудь скинуть решение задачи с пикрелейтеда? Два дня уже не могу ее понять, получается фигня.
Аноним 29/11/15 Вск 15:24:10 #163 №591783 
>>591777
Вот мое решение, но я на первом же этапе фейлюсь и не могу понять: в чем проблема?
https://ideone.com/p1ez8k
Аноним 29/11/15 Вск 15:49:21 #164 №591802 
>>591783
А ифами уже не модно заруливать?
Аноним 29/11/15 Вск 15:55:52 #165 №591807 
>>591440
>он еще цену не называл
Кидай эту маню нахуй. Но магаз доделай, потом его толкнешь при случае.
Аноним 29/11/15 Вск 16:06:55 #166 №591814 
>>591558
Неправильно значит настроил.
Ссылки на инструкции по установке php в оп-посте.
Аноним 29/11/15 Вск 17:58:53 #167 №591869 
14488091339940.png
>>588512 (OP)
ОПА
Аноним 29/11/15 Вск 18:10:50 #168 №591880 
Ответ >>591875 на вопрос >>591832 про кеширование.

>>591869

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

Аноним 29/11/15 Вск 18:12:35 #169 №591882 
>>591880
причем с первого раза, как код исправил.
Аноним 29/11/15 Вск 18:16:49 #170 №591884 
Аноны, а хотите задачку на SQL? Полезно же голову поломать, все равно вы ничем не заняты.

Есть диапазоны Ip адресов и соответствующий им город, например

1.0.0.1 - 1.0.0.10 Москва
1.0.0.15 - 1.0.0.16 Лондон

Не для всех Ip адресов есть города. Диапазоны IP адресов не пересекаются.

Придумайте как хранить это и как искать город по IP адресу эффективно, с исплоьзованием индексов.

Более сложная версия: Ip адреса могут накладываться, например

1.0.0.1 - 1.0.0.255 Россия
1.0.0.10 - 1.0.0.20 Москва

В этом случае надо выбирать город по меньшему из диапазонов.

Если кому-то нужны реальные данные,

http://ipgeobase.ru/cgi-bin/Archive.cgi
http://habrahabr.ru/post/227183/
Аноним 29/11/15 Вск 18:26:02 #171 №591894 
>>591558
Начни с XAMPP
Аноним 29/11/15 Вск 18:26:36 #172 №591895 
>>591894
Сборки для быдла.
Аноним 29/11/15 Вск 18:31:20 #173 №591898 
14488110804290.jpg
>>591895
Ну что ты, братишка, всеж мы быдло.
Аноним 29/11/15 Вск 18:34:39 #174 №591903 
>>591884
Я занят, остальные тупые или ленивые.

> Диапазоны IP адресов не пересекаются.
Это правило для базы? База не должна принимать пересекающиеся диапазоны?
Первая мысль хранить left и right как в nested sets, вторая версия вообще деревом пахнет.
Аноним 29/11/15 Вск 18:51:08 #175 №591918 
>>591903

Нет, проверять это условие на уровне базы не требуется. Требуется наиболее эффективно организовать хранение и поиск города по IP.
Аноним 29/11/15 Вск 19:09:19 #176 №591928 
>>591918
Может я неправильно понял условие но такой вот вариант: 4 таблицы,
в 1: (ip, city_id)
во 2: (city_id, city_name)
в 3: (city_name, country_id)
в 4: (country_id, country_name)
Аноним 29/11/15 Вск 19:12:16 #177 №591932 
>>591928
Диапазоны могут быть очень большими, например 1.0.0.1 - 1.0.0.255
Очень избыточно создавать 255 записей для одного города/страны.
Аноним 29/11/15 Вск 19:17:09 #178 №591936 
>>591928

Не очень эффективно для каждого IP вставлять строчку, учитывая что их может быть до 4 млрд. Там часто большой диапазон, например 256 подряд идущих IP, соответствует 1 городу и выгоднее хранить его именно как диапазон.

Алсо

> (city_name, country_id)
не очень правильно, почему тут связь многие-ко-многим да еще и через название, а не через id города?

Нужна связь 1-М от страны к городу.
Аноним 29/11/15 Вск 19:32:10 #179 №591949 
>>591932
Тогда вместо строки ip, min_ip и max_ip и в запросе проверять попадает ли в диапазон.
>>591936
А тут да, как то не подумал.
тогда 1 таблица: (min_ip, max_ip, city_id)
2: (city_id, country_id, city_name)
3: (country_id, country_name)
Аноним 29/11/15 Вск 19:33:17 #180 №591950 
>>591949
Хотя наверное это тоже фейл :< с проверкой диапазона из-за точек в адресе.
Аноним 29/11/15 Вск 19:33:17 #181 №591951 
>>591949

Еще нужен запрос для эффективного поиска города по IP.
Аноним 29/11/15 Вск 19:34:00 #182 №591952 
>>591950

IP адрес можно преобразовать в UNSIGNED INT с помощью INET_ATON/INET_NTOA. Ip адрес это и есть одно число, просто записывается обычно в виде 4 чисел.
Аноним 29/11/15 Вск 19:40:11 #183 №591955 
>>591949
Держи еще намеки по оптимизации запроса
http://www.mysql.ru/docs/man/MySQL_indexes.html
http://ruhighload.com/post/%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0+%D1%81+%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D0%B0%D0%BC%D0%B8+%D0%B2+MySQL
WHERE min_ip <= x AND max_ip >= x не годится, будет использован только один индекс.
Аноним 29/11/15 Вск 20:13:58 #184 №591977 
Видишь какая польза от троллинга? Стоило назвать тупыми и ленивыми, как сразу зашевелились.

Не хочу спойлерить, но у меня там получился юнион с группировкой и having. Однако с explain беда, оно все равно не использует индексы, возможно из-за малого количества записей в таблице. Ты же умный, без текста понимаешь как выглядит запрос. Что я делаю не так?
Как быстро набить базу мусором ради кол-ва? Не хочу заливать реальную.

>>591952
Строки вроде тоже можно сравнивать.
Аноним 29/11/15 Вск 21:18:29 #185 №592007 
Нет, все-таки не понимаю, почему даже запрос вида
SELECT x FROM ips WHERE start_ip <= INET_ATON('1.0.0.18')
не использует индекс? В possible_keys есть, но в key почему-то null.
Аноним 29/11/15 Вск 22:00:17 #186 №592013 
>>591951
Нахуя тебе min_ip и max_ip ?
Проверить входит ли в диапазон можно с помощью BETWEEN, а найти максимум\минимум можно функциями MAX, MIN.
Аноним 29/11/15 Вск 22:03:45 #187 №592018 
>>592013
Перечитай условие.
Аноним 29/11/15 Вск 22:07:27 #188 №592022 
>>592007

должен использовать, type = range. Странно.

>>591977

Я не очень понимаю зачем там юнион и группировка. Мне кажется, можно сделать проще. Подумай как уложить диапазоны в таблицу чтобы можно было использовать индексы.
Аноним 29/11/15 Вск 22:08:33 #189 №592023 
>>591977

Набить базу - вбей в нее диапазоны вида

x ... x + 9

Где x меняется от 1 до миллиона с шагом 10. Я выше где-то делал это через времеенную таблицу. Или PHP скриптом.
Аноним 29/11/15 Вск 22:12:11 #190 №592027 
Аноны, пожалуйста, поясните, почему не работает мое регулярное выражение. В массив должны попадать все случаи, подчиняющиеся правилу. В моем случае в массив должны попадать случаи, когда после восклицательного знака и запятой нету пробела. Но попадает только одно значение: когда после восклицательного знака нет пробела. Я уже всю голову сломал.
https://ideone.com/AUDhsK
Аноним 29/11/15 Вск 22:20:46 #191 №592030 
>>592018
Можно попробывать через JOIN выбирать.
Или важнее вопрос самой организации данных в таблицах ?
Аноним 29/11/15 Вск 22:35:39 #192 №592042 
>>592030

Я не знаю, что имел в виду тот анон, но тебе хорошо бы пояснить свою идею, показав примерную схему таблиц и написав примерный запрос для поиска города по IP, а то непонятно что именно ты предлагаешь.
Аноним 29/11/15 Вск 23:00:38 #193 №592049 
14488272387010.png
Кому не лень, помогите аутисту. Пишу кулькулятор для даунов. Пока без всяких выебонов типа проверки деления на ноль, вычисления косинусов и т.п. Просто "+/-", умножить разделить. Собственно, делаю хтмл форму, куда вводятся циферки.
В результате имею хуиту пикрелейтед.
> Undefined variable: op1 in C:\Apache24\htdocs\lessons\calculator.php on line 33 Но она объявлена, блджад, и считается нормально.

деление-умножение пока закомментил http://pastebin.com/ZKbMGekZ
Аноним 29/11/15 Вск 23:18:37 #194 №592062 
>>592049
При первом запуске очевидно что в строке:
<input type="text" name="op1" value="<?php echo $op1; ?>"/>
переменная $op1 ещё не объявлена, ведь она объявляется внутри if конструкции.
Аноним 29/11/15 Вск 23:25:54 #195 №592069 
>>592062
Да, я уже понял, лол. Спасибо.
Хотел сохранить введенное число в форме, но мне лень переделывать учебную говнозадачку, почистил эти куски кода, все работает.
Аноним 29/11/15 Вск 23:38:18 #196 №592081 
>>592022
Знаю что range, но один раз срабатывает, а другой нет.
Вот тут не используется индекс. Почему?
http://sqlfiddle.com/#!9/c70a5/1
А тут используется
http://sqlfiddle.com/#!9/c70a5/2

Юнион и группировка для того, чтобы объединить результаты этих двух запросов и выбрать из них повторяющиеся более одного раза.
http://sqlfiddle.com/#!9/c70a5/4
Понятно, что это хуйня, потому что фактически мы берем один раз половину таблицы, которая может быть гигантской, потом склеиваем юнионом с еще одним гигантским куском только чтобы в итоге отсеять две нужные записи группировкой.
Это неправильное решение, вбрасываю потому что не понимаю, почему в одном случае индекс срабатывает, во втором нет.
И если писать запросы по отдельности, и в сложном запросе.
Аноним 29/11/15 Вск 23:40:12 #197 №592086 
>>592069
А теперь я понял, что достаточно было объявить в самом начале кода две переменные со значением нулл. Теперь все работает, введенные циферки сохраняются в форме.

Не знаю, правда, это сильно по быдлокодерски?
Аноним 30/11/15 Пнд 00:01:26 #198 №592096 
>>592013
А вот я кстати не знал, что BETWEEN можно использовать таким способом.
Почему-то думал, что только для запросов вида WHERE column_name BETWEEN первое_значение AND второе_значение.
Оказывается можно и WHERE значение BETWEEN колонка1 AND колонка2.

http://sqlfiddle.com/#!9/c70a5/5
Но если я правильно понял, between равнозначен where a > x and a < y, так что оба индекса по прежнему не удается использовать.
Аноним 30/11/15 Пнд 00:02:36 #199 №592099 
>>592081

> Вот тут не используется индекс. Почему?
Потому что почти вся таблица попадает под условие WHERE и выгоднее обойти ее всю чем искать записи в индексе и соответствующие им в таблице. Если mysql это заметила то хорошо. Также, возможно потому что записей мало.

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

> Юнион и группировка для того, чтобы объединить результаты этих двух запросов
Если ты уже выбираешь полтаблицы что тебе мешает добавить условие AND end_ip >= ?
Аноним 30/11/15 Пнд 00:03:56 #200 №592101 
>>592086
<input type="text" name="op1" value="<?= isset($op1) ? $op1 : ""; ?>"/>
мог не объявлять их в начале, а сделать так
Аноним 30/11/15 Пнд 00:07:11 #201 №592106 
14488312314920.png
давайте статистику по часам постить.
Аноним 30/11/15 Пнд 00:15:53 #202 №592114 
>>592106

У меня сегодня 7.5ч и если я не усну, то может еще 1-2 добавлю.
Аноним 30/11/15 Пнд 00:28:50 #203 №592124 
>>592101
Спасибо, учту.
Аноним 30/11/15 Пнд 00:40:48 #204 №592138 
>>592101

Не надо так делать. Переменные должны быть всегда определены. Как писать надежный код если ты сам не знаешь есть такая переменная или нет?
Аноним 30/11/15 Пнд 00:43:32 #205 №592141 
>>592099
>что тебе мешает добавить условие AND
Я же пытаюсь добиться оптимального использования индексов. WHERE x > a AND y < b сработает только индекс на x.
Аноним 30/11/15 Пнд 00:52:38 #206 №592151 
>>592138
Тогда лучше учту это.
> Переменные должны быть всегда определены

Даун из этого поста >>592049
Аноним 30/11/15 Пнд 00:53:00 #207 №592152 
>>592141

ну так а твой запрос

SELECT t1.id, t1.city FROM ips t1
WHERE t1.start_ip <= INET_ATON('1.0.0.18')

тоже только на start_ip работает и обходит полтаблицы. От добавления второго ограничивающего условия хуже уже не станет, наборот, меньше строк в итоге выбрать придется.
Аноним 30/11/15 Пнд 00:54:23 #208 №592155 
>>592106
Что это? Зачем это? Откуда это?
Аноним 30/11/15 Пнд 03:27:43 #209 №592249 
Вот взял в ОПпосте задачу на палиндромы - и это пиздец, я не могу понять логику выполнения. Т.е. я даже базовый алгоритм "здесь пишем это, а потом выясняем то" не могу составить. Причем теорию я уже довольно неплохо выдрочил, нужно ПОНЯТЬ как ее применять.
Есть какой-нибудь способ?
Может уделить пару недель какому-нибудь паскалю/бейсику? лол
Аноним 30/11/15 Пнд 04:45:32 #210 №592267 
Ну че, пацаны, идти чистить битрикс в qsoft?
Олег 30/11/15 Пнд 05:00:37 #211 №592270 
14488488374600.png
>>590969
Вроде-бы с айфонами элементарная задачка. Но прорешав всё остальное - почему-то застопорился именно на ней. По логике всё просто, отслеживаем когда нужно провести последний платёж и отводим в отдельный if. Но на самом деле какой-то бред у меня происходил всю ночь и оператор if ($creditBalance<5000) тупо не срабатывал!
В итоге после перезагрузки, сегодня написал на работе вот это.

https://ideone.com/qFTYEa
ОП, пожалуйста дай мне максимум критики, в том числе и по пунктуации и по самому коду. Может я что-то неправильно написал?
Аноним 30/11/15 Пнд 05:23:23 #212 №592277 
>>592270
Бля, даже я это говно осилил.
даун-с-калькулятором
https://ideone.com/OLzGzZ
За стилистику извиняюсь, копипастил с шторма
Аноним 30/11/15 Пнд 05:25:45 #213 №592278 
>>592277
Только сейчас увидел, что я зачем-то написал там елсеиф.
Видимо, я прирожденный говнокодер.
Аноним 30/11/15 Пнд 05:38:01 #214 №592281 
Сколько примерно будет стоить натянуть верстку на цмс (опенкарт). Интернет магазин, с разделами, поиском, добавлением, редактированием, удалением товара и категорий. И сколько бы это у вас времени заняло?
Олег 30/11/15 Пнд 07:22:52 #215 №592292 
>>592277
И я осилил. Надо уже поставить нормальный апач вместо сборочки.
Аноним 30/11/15 Пнд 07:25:20 #216 №592293 
>>592281
>Сколько примерно будет стоить натянуть верстку на цмс (опенкарт).
100$
>Интернет магазин,
+150$
> с разделами, поиском, добавлением, редактированием, удалением товара и категорий.
Если я это всё сам буду готовить \ вбивать \ редактировать \ фотать +1500$ сразу, по минимальной планке. Если нет - то 0.
>И сколько бы это у вас времени заняло?
1 месяц. Неделю на натягивание, 3 на тесты. Всегда с запасом по срокам беру.
Олег 30/11/15 Пнд 07:31:12 #217 №592295 
>>592277
Ты не посчитал проценты и не заплатил обслуживание по счетам банку в последний месяц. В итоге по программе ты вроде как всё заплатил, а на самом деле остался должен банку ~1498 рублей
Олег 30/11/15 Пнд 07:35:52 #218 №592298 
>>592295
Задача на процент по вкладу.
https://ideone.com/U6XDFS
Вроде условия правильные. Хотя я рассеяный и мог что-то упустить. Решать сел буквально 4 минуты назад. Надеюсь ОП проверит и скажет что я не совсем рукожопый.
Аноним 30/11/15 Пнд 07:42:02 #219 №592303 
>>592295
И правда, я об этом и не подумал просто, лол.
Аноним 30/11/15 Пнд 07:49:07 #220 №592306 
>>592303
https://ideone.com/GIF3G7
Вот так норм? илеон тупит что-то, вот добавил условие второе:

$creditBalance = ($creditBalance*$percent)+$servicePayment
$monthlyPayment = $creditBalance;
$paymentTotal = $paymentTotal + $monthlyPayment;
$creditBalance = 0;
Аноним 30/11/15 Пнд 07:50:52 #221 №592307 
>>592306
Блин, я тупой, не то сделал. Ну и хрен с ним
Оле 30/11/15 Пнд 08:54:39 #222 №592324 
14488628798810.jpg
>>592298
>5.5 Выполни код с картинки, чуть-чуть его переделав на свой лад.
ОП, у меня мозг немного не работает. Можно свою рулеточку написать? или в чём задача?
Аноним 30/11/15 Пнд 09:29:02 #223 №592328 
>>592324
На php есть аналог jQuery? Пропарсить кое-чё надобно.
Олег 30/11/15 Пнд 09:36:04 #224 №592329 
>>592328
>На php
> аналог jQuery?
Например jQuery.
Олег 30/11/15 Пнд 11:00:07 #225 №592341 
>>592324
>Задачка: доделай программу по ссылке http://codepad.org/5XEkSKHI для перевода текста на l33tspeak. Покажи нам результат.
Показываю.
https://ideone.com/iMYTNB
Аноним 30/11/15 Пнд 11:38:28 #226 №592361 
>>586973
https://github.com/V3N0m21/Uppu3
ОП, поправил твои замечания, но есть вопросы

> $cookie = $app->getCookie('salt');
> $app->setCookie('salt', $cookie, '1 month');
> Это я не понимаю. почему ты соль хранишь в куках? Соль не нужна пользователю, она должна храниться только в БД. Что ты тут за собственный алгоритм изобрел?

> Более того, ты еще и ищешь пользователей почему-то по соли. Это явно что-то не так.

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

> foreach ($users as $user) {
> $filesCount[$user->getId() ] = count($app->em->getRepository('Uppu3\Entity\File')
> Это неэффективно, делать запросы в цикле. Надо использовать запрос с GROUP BY (если у тебя меньше 1000-2000 файлов, если больше то и он не очень эффективен и надо заводить у пользователя поле с числом файлов и брать данные из него)

Я сделал через DQL
$filesCount = $app->em->createQuery('SELECT IDENTITY(u.uploadedBy), count(u.uploadedBy) FROM Uppu3\Entity\File u GROUP BY u.uploadedBy');
но этот запрос возвращает мне многомерный массив с которым неудобно работать. Правильно будет преобразовать его в такой как нужен мне? Ну то есть наверно так будет эффективней, но выглядеть это будет очень некрасиво, и неочевидно.

>Если ты отправляешь пользователя залогинится, то надо сохранять текущий URL (например /login?from=/users/) а после логина редиректить, причем дополнительн проверять что URL нходится на твоем сайте, чтобы нельзя было пользователя отправить на левый сайт.
Так и не придумал как это сделать в слиме. На страницу авторизации у меня редиректит проверка в middleware, как там можно сделать чтоб функция определяла с какой страницы нас заредиректило?
Аноним 30/11/15 Пнд 12:02:08 #227 №592368 
>>592329
То есть няшных селекторов в php не завезли? Парсинг на клиенте городить чтоле? - это же отстой.
Аноним 30/11/15 Пнд 12:19:04 #228 №592371 
Что если весь роутинг производить на сервере? И вызывать уже соответствующий скрипт. Какие подводные камни?
Аноним 30/11/15 Пнд 15:23:59 #229 №592481 
>>592371
Обычно делается через mod_rewrite что-то типа
RewriteRule . index.php
То есть одна точка входа, в самом приложении уже разбирается маршрут.
Можно конечно понаписывать десятки правил в .htaccess, но зачем?
Аноним 30/11/15 Пнд 15:25:49 #230 №592483 
>>592328
Если ты имеешь ввиду парсинг dom, то есть, смотри в гугле. Причем с jquery-подобным синтаксисом.
Аноним 30/11/15 Пнд 16:54:20 #231 №592575 
>>592481
Прописываем в location пути к разным сервисам, тем самым уменьшая оверхед. Например, есть у нас апи для авторизации, апи для комментирования. Лучше же разделить логику.
Аноним 30/11/15 Пнд 17:09:35 #232 №592582 
Решил продвинуть свои знания парсинга и спарсил с одной страницы курсы 54 валют. Потом, решил написать на основе всего этого калькулятор валют, сформировал многомерный массив, такого формата:

"Название валюты"=>array("Покупка"=>значение, "Продажа"=>значение, "Официальный курс"=>значение)

Но как мне написать глобальный парсер, на основе только этих данных, так как это всё курсы по отношению к определённой валюте. Как можно перевести любую валюту в любую валюту? Неправильно же будет вначале всё переводить в ту валюту к которой этот курс, а уже потом в необходимую?
Аноним 30/11/15 Пнд 17:22:20 #233 №592590 
>>592582
Конечно можно просто использовать коэффициенты, для этого достаточно разделить курс переводимой валюты к рублю на курс той валюты в которую переводят к рублю, но это же будет не правильно? Так не пишутся такие калькуляторы?
Аноним 30/11/15 Пнд 17:22:53 #234 №592591 
>>592582
Ну что ты глупостями занимаешься, банки предоставляют все курсы в xml-формате
http://www.cbr.ru/scripts/Root.asp?Prtid=SXML
Подожди опа, он придумает хорошее задание на парсинг dom или xml.
Аноним 30/11/15 Пнд 17:24:29 #235 №592594 
Дайте реальных заданий по вордпресс, допустим есть какой-нибудь сайт на вордпресс и на нём надо что то сделать.
Аноним 30/11/15 Пнд 17:27:50 #236 №592599 
>>592594
1. Натяни свою верстку (сделай тему).
2. Напиши плагин, например для автоматической проверки комментариев на спам.
Аноним 30/11/15 Пнд 17:36:36 #237 №592611 
>>592575

Это по моему не то о чем говорил анон. В твоем примере у нас несколько отдельных приложений, по этой же причине и такая конфигурация.

Аноним 30/11/15 Пнд 17:37:32 #238 №592613 
>>592594

Сделай упрощенный аналог https://m.roem.ru/
Аноним 30/11/15 Пнд 17:37:54 #239 №592615 
>>592599
Недавно сверстал из псд то что у ОПа в заданиях, хочу попробовать натянуть это на Вордпресс, но, не могу понять что там должно динамически изменяться.
Аноним 30/11/15 Пнд 17:41:25 #240 №592618 
>>592615

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

Аноним 30/11/15 Пнд 17:52:13 #241 №592628 
>>592590
Готовая библиотека валютного калькулятора
https://github.com/redco/redcode-currency-rate
Аноним 30/11/15 Пнд 18:23:53 #242 №592665 
>>588512 (OP)
Посоны, я наверно задам платиновый вопрос. Не будут ли всё писать на CMS, стоит к вам вкатываться?
Аноним 30/11/15 Пнд 18:25:29 #243 №592666 
>>592665
1. Не будут. 2. Как хочешь.
Аноним 30/11/15 Пнд 18:30:44 #244 №592673 
>>592666
> 1. Не будут.
А можешь сказать почему, чтобы я успокоился?
> 2. Как хочешь.
Ну а как думаешь, легче изучать веб или другие области? Где больше платят?
Аноним 30/11/15 Пнд 18:44:57 #245 №592681 
>>592673
Потому что нестандартный функционал нереально поставить на конвеер.
Не знаю, что такое легче или сложнее. По-моему это зависит от того, насколько ты любишь это дело.
Если не любишь и пришел только из-за денег, то сложно будет освоить даже верстку.
Платят много например в CERN или NASA, можешь попробовать к ним устроиться.
Аноним 30/11/15 Пнд 18:50:34 #246 №592688 
>>592681
Спасибо, анон, с CMS ты меня успокоил. То есть большинство сайтов, будут писать не на CMS?
> Если не любишь и пришел только из-за денег, то сложно будет освоить даже верстку.
Ну я уже немного вкотился, изучил CSS и HTML, немного продвинулся в JS и PHP.
> Платят много например в CERN или NASA, можешь попробовать к ним устроиться.
Просто я часто слышу, что в вебе зарабатывают меньше всех. Не знаю правда ли.
Аноним 30/11/15 Пнд 18:56:00 #247 №592693 
>>592688
>Просто я часто слышу, что в вебе зарабатывают меньше всех. Не знаю правда ли.
Сначала стоит определиться, что мы называем вебом. Фейсбуки, одноклассники - это всё тоже веб.
Аноним 30/11/15 Пнд 18:59:04 #248 №592699 
>>592693
Ну среднеарифмитическая зарплата у вебпрограммистов меньше?
Аноним 30/11/15 Пнд 18:59:11 #249 №592700 
>>592688
Большинство дешевых сайтов будут писать на cms. Но сливки будут всегда снимать грамотные разработчики, способные не только тыкать кнопки в админке, но и проявлять сообразительность, применять эрудицию.
Хорошие специалисты везде нужны и очень ценятся.
Другое дело что в вебе очень, очень много плохих специалистов, потому и средняя зарплата меньше.
Например в робототехнике наверное платят больше, но там и требования гораздо выше, потому быдлокодеры отстутствуют как явление.
Аноним 30/11/15 Пнд 19:04:00 #250 №592707 
>>592699
Если включить всех "вебмастеров", "контент-менеджеров", "администраторов сайтов", натягивателей вёрстки и прочих говночистов, которых почему-то называют разработчиками, то да, в среднем меньше.
Если сравнивать разработчиков со схожим уровнем компетенций, но разными средствами разработки, то разница минимальна.
Аноним 30/11/15 Пнд 19:04:07 #251 №592708 
>>592700
Я уже учился в институте, но бросил. Сейчас мне 22 года, и не хочется терять время. Как думаешь, можно ли самостоятельно стать хорошим специалистом? Легко ли найти работу без диплома?
Аноним 30/11/15 Пнд 19:19:07 #252 №592716 
>>592293
А если еще плюс сверстать макет адпативно-резиновый?
Аноним 30/11/15 Пнд 19:20:20 #253 №592718 
>>592716
2000$ проси, не меньше.
Аноним 30/11/15 Пнд 19:28:56 #254 №592726 
>>591884
А как часто меняются диапазоны?

Если строго задавать пустые диапазоны, то можно использовать только начало (или конец диапазона). Тогда с индексами не будет проблем.
Например так
http://pastebin.com/X4gc19D3
sqlfiddle опять лагает, не могу выложить.
А нет, вроде с пятой попытки запустился
http://sqlfiddle.com/#!9/5b673/3

С накладывающимися диапазонами только не знаю что делать. Может подзапросом их отсеивать по разнице между концом и началом?
Аноним 30/11/15 Пнд 19:44:48 #255 №592739 
>>592361
Ну а зачем называть "salt", назови понятно "username".
Аноним 30/11/15 Пнд 19:49:01 #256 №592743 
>>592700
Макет на цмску не так-то просто натянуть, там все равно нужно будет и в темлейтах ковыряться и рендеринг контроллеров менять и ООП с MVC знать, чтобы понимать, что вообще происходит и как это менять. А некоторые детали все равно невозможно сделать.
Аноним 30/11/15 Пнд 20:16:25 #257 №592760 
Зарепортил чатящихся пидарасов. Вот вы точно работы не найдете, если будете пиздеть на сосаче вместо того чтобы прокачивать знания.

>>591884
>Более сложная версия: Ip адреса могут накладываться, например
Под накладыванием подразумевается именно включение под-диапазонов в родительский диапазон, типа страна 1.0.0.1 - 1.0.0.255 город 1.0.0.10 - 1.0.0.20, или под накладыванием подразумевается пересечение типа 1.0.0.40 - 1.0.0.50 и 1.0.0.45 - 1.0.0.55?
Если первый случай, то пожалуй можно обойтись таким решением. >>592726
Аноним 30/11/15 Пнд 20:17:52 #258 №592762 
> натянуть
> сверстать
> адаптивный макет
Так это вы серьезно, кроме собственно пхп и сопутсвующего, еще и по цсс придется упороться?
Аноним 30/11/15 Пнд 20:19:17 #259 №592765 
>>592762
Ага, а еще по SQL, Java Script, системе контроля версий и еще бог знает чему.
Аноним 30/11/15 Пнд 20:21:12 #260 №592769 
>>592748
Зато у нас есть анонимные интернет друзья с борд.
Аноним 30/11/15 Пнд 20:24:22 #261 №592773 
14489042622440.jpg
>>592765
Командная строка, curl, XML, линукс, сети, локалка, яндекс метрика, поисковики, продвижение, сое, роботы, красно-черные и ЛФЛ деревья, алгоритмы Хоффмана и Дейкстера, графы и т.п.
Аноним 30/11/15 Пнд 20:26:46 #262 №592776 
14489044066050.png
>>592773
Аноним 30/11/15 Пнд 20:46:31 #263 №592799 
>>592765
К этому то я готов, но ВЕРСТАТЬ и НАТЯГИВАТЬ мне не очень хочется, иначе я бы во фронтенд пошел, там и проще, и быстрее.
Аноним 30/11/15 Пнд 21:14:52 #264 №592826 
>>592799
А что ты собрался на пхп делать, если ты даже с цмской не в состоянии работать и кое-как адаптивный макет сварганить, маня?
Аноним 30/11/15 Пнд 21:27:48 #265 №592836 
Продолжая тему определения города по ip.
Оптимальное решение задачи по хранению диапазонов может быть оп позже соблаговолит подсказать (я например нервничаю что не могу решить, это ставит под сомнение компетенцию), но в принципе здесь тоже не нужно писать свои велосипеды, потому что есть хорошие бесплатные сервисы и свободные базы. GeoIP вроде бы полубесплатный, там урезанная версия в light пакете. Мне понравился SypexGeo, он вроде бы вообще бесплатный, без ограничений, и по словам автора "самый быстрый".

Как вообще относиться к этой тенденции определения положения пользователя по ip-адресу? Вот у меня например провайдер выдает ip без привязки к региону. Когда захожу на сайты с автоопределением приходится каждый раз руками менять поисковый запрос на свое реальное положение.
Аноним 30/11/15 Пнд 21:35:00 #266 №592841 
>>592826
Почему ты думаешь, что я не способен работать с кмсками? Вполне себе могу.
Я просто немного шокирован тем, что еще и цсс нужно будет подтягивать, думал что этим фронтэндеры/дизайнеры занимаются. Ну и да, я не совсем еще представляю себе, чем занимаются пхп-оиды. Но раз уж нужен цсс - буду учить цсс.
Аноним 30/11/15 Пнд 21:42:11 #267 №592845 
>>592841
Ну хз, я когда приходил вебпрогером устраиваться, мне сказали только макет сверстать адаптивно, а "остальное отдадим программистам". Я обиделся и ушел. Все обычно с цсс и верстки начинают.
Аноним 30/11/15 Пнд 22:01:29 #268 №592857 
>>592760

> Под накладыванием подразумевается именно включение под-диапазонов в родительский диапазон
Да
Аноним 30/11/15 Пнд 22:02:30 #269 №592859 
>>592836

А без автоопределения не пришлось бы?
Аноним 30/11/15 Пнд 22:24:47 #270 №592892 
>>592859
Пришлось бы. Но суть не в этом, а в том что у части пользователей автоопределение работает неправильно.
Аноним 30/11/15 Пнд 22:59:09 #271 №592909 
https://github.com/jtet/Perceptron

Давайте перцептрон разберем. Что-то я не понимаю, как он устроен и как его использовать. Вроде установил композером, но вылетают ошибки. Класс\PHPUnit_Framework_TestCase не найен
Аноним 30/11/15 Пнд 23:10:06 #272 №592914 
>>592909

Подключи phpunit
Аноним 30/11/15 Пнд 23:12:38 #273 №592917 
>>592909
Что это?
Аноним 30/11/15 Пнд 23:17:57 #274 №592926 
14489146778670.png
14489146778671.png
>>592917
Открой википедию и посмотри.

Совсем вас тут оп своими копипастами избаловал.
Аноним 30/11/15 Пнд 23:19:27 #275 №592930 
>>592926
По моему это ты поехавший, а не я. Разбирать такое надо в sci, здесь одним синтаксисом не обойдешься, надо основы знать.
Аноним 30/11/15 Пнд 23:23:13 #276 №592934 
Итак, господа, позвольте мне уточнить, все-таки:
1)продолжаю задрачивать пхп
2)подтягиваю хтмл (курсы хтмлакадеми полгода назад прошел все, но уже подзабыл, форму, например, из головы не напишу)
3)css - до какого уровня? Неужели до того же, что в верстка-треде учат?
4)джскрипт, фреймворки - это понятно, к этом я готов был.
Аноним 30/11/15 Пнд 23:24:48 #277 №592935 
>>592917
Примитивная нейросеть. Если ее дописать и потренировать может распознавать числа, картинки и т.п.
Аноним 01/12/15 Втр 00:19:39 #278 №592979 
Задача про компанию «Вектор».Довольно интересная вынужден признать. Нужна критика, совсем хуита? Где, что можно подисправить?
https://ideone.com/apFxj8
Аноним 01/12/15 Втр 02:29:30 #279 №593022 
>>592762
Нет, если ты не фуллстек быдло.
А вот SQL, редиску и базовые навыки пердоленья в консолечку придётся.
Аноним 01/12/15 Втр 02:32:55 #280 №593023 
>>592681
Лольнул с дивана.
Пример - есть фирма "Мегафирма", продаёт свою цмс, скажем Z4.
Заказчику нужно почти как было, но чтобы в интернет-магазине можно было продавать не 5000 видов резиновых залуп, а 10000 и деревянных.
Нормальные люди просто допишут залупно-продажный модуль к имеющемуся, а не будут городить с нуля говно на шкрептах за 5 минут.
Аноним 01/12/15 Втр 02:45:49 #281 №593027 
>>593022
Спасибо, успокоил. У меня не очень хорошо с дизайном и всем, что с этим связано, лол. В консольку уже умею, бд потихонечку учу.
Аноним 01/12/15 Втр 02:45:57 #282 №593028 
>>592361
> Это сделано для того чтоб если файл загрузил анонимный, незарегистрированный пользователь, он мог потом зарегистрироваться и видеть какие файлы им загружены. Или так соль использовать нельзя?
Ты перегружаешь себя лишней работой. Если файл загрузил анонимус - пусть и будет файл который загрузил анонимус без всяких возможностей опознования.
Аноним 01/12/15 Втр 03:15:09 #283 №593032 
>>593028

Нет, мы обсуждали что при регистрации лучше перенести ранее загруженные файлы в аккаунт. Все ради пользователей.
Аноним 01/12/15 Втр 03:42:22 #284 №593035 
>>593032
Я вот даже не знаю зачем мне как пользователю такой функционал например. Ну и да, соль как-бы должна только в БД храниться.
Аноним 01/12/15 Втр 03:47:36 #285 №593036 
>>593035

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


Аноним 01/12/15 Втр 04:22:45 #286 №593038 
Ох ты ж елки зеленые, неужели у меня получилось запустить дебаггер в шторме? Кажется, это стоит отпраздновать.

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

http://habrahabr.ru/post/250323/
xdebug.remote_enable=on
xdebug.remote_handler="dbgp"
xdebug.remote_host="localhost"
xdebug.remote_port=9000
xdebug.remote_mode=req

За что отвечает xdebug.remote_enable? Не надо тыкать ссылкой на xdebug.org, я читал, но не понимаю смысла
>This switch controls whether Xdebug should try to contact a debug client which is listening on the host and port as set with the settings xdebug.remote_host and xdebug.remote_port.
Эта настройка определяет будет ли xdebug соединиться с клиентом отладки который прослушивается на хосте и порту, указанных в соотв.настройках
Что такое клиент отладки (debug client)?
Ага, из этой главы http://www.xdebug.org/docs/remote вроде бы явствует, что они так называют собственно саму ide.
Так почему все-таки remote? Что значит удаленный?
Если настройка remote_enable отвечает просто за включение дебаггера, то это странно, потому что дебаггер у меня явно работал до того как я это прописал в php.ini.
Например в phpinfo() выводилась секция xdebug, и профилирование я выполнял раньше. Или профилирование это другой инструмент, и на него это не влияет? Есть еще подозрение, что в убунту несколько этих php.ini файлов, потому что конкретно в /etc/php5/apache2/php.ini секции xdebug вообще не было.

remote_mode=req вроде по-умолчанию, так что наверное можно не писать.
Насчет remote_host не уверен что на линуксе можно писать localhost, где-то слышал (кажется когда мы тут разбирали подключение сфинкса) что это может вызвать неприятности, правда не помню какие. Кажется, если линукс увидит localhost, он проигнорирует порт что ли.
Возможно из-за этого у меня не работало. От греха подальше прописал 127.0.0.1

В шторме мне нравится возможность переходить к классу или его полю по ctrl+клик. В саблайме такой фичи не знаю, если
есть подскажите.
Также замена по всему проекту. В саблайме насколько я знаю только поиск по проекту, и оттуда уже прыгать по файлам и
поправлять.
Аналог множественных курсоров в шторме имеется, alt+j, хотя лучше наверное поправлю клавиши под саблайм.
Еще есть инструменты для гита и композера, хотя наверное это скорее вредные вещи, потому что так можно забыть нативные
команды.

Темы только не получается установить. Везде пишут 'скачай и кинь в папку /config/colors', но у меня
почему-то ломается, то есть тема устанавливается, но поломанная, например весь текст красного цвета.
Причем говорят про xml и jar форматы, а я вижу в icls https://github.com/daylerees/colour-schemes/tree/master/jetbrains
Аноним 01/12/15 Втр 04:25:03 #287 №593039 
14489331035550.jpg
14489331035571.png
14489331035612.png
14489331035633.png
>>592999
>Вещи, которые ты описал, лучше получатся с использованием хотя бы микрофреймвока Slim, шаблонизатора Twig, то есть лучше бы это прикручивать ко второй задаче про файлообменник. Либо прикрутить микрофрейморк и шаблонизатор к первой задаче
Хорошо, будет прикручивать ко второй задаче.
Кстати, по первой задаче, мы уже с тобой делали подобную задачу на простую регистрацию https://github.com/someApprentice/simpleRegistration
Осталось перенести её на ООП. Задам вопросы об этом позже.
Пока читают пасты про БД и уязвимости. Сложна. Понимаю лишь только потому что уже делал такое. Чувствую будет сложно потому что я хочу все побыстрей узнать.

>Домашнее задание
>Зайди на свои любимые сайты (где есть авторизация), открой инструменты разработчика в браузере (Ctrl + Shift + I), изучи формы и ссылки на сайте, свои куки, и попробуй понять, есть на них защита от XSRF или нет.
А я не нашел на гитхабе токен в куках. Они его шифруют?


>>592999
>Переходи в новый тред и вбрось туда ссылку на свой пост в этом треде. Код кошек-мышек я внимательно посмотрю позже.
Не понял. На этот пост? >>588058


С П А С И Б О
Аноним 01/12/15 Втр 04:48:23 #288 №593040 
>>593038

Тебе надо понять общий принцип работы xdebug.

А принцип такой: если включен режим отладки и все условия выполнены, PHP перед выполнением первой строчки скрипта останавливается и пытается установить соединение с указанным в конфиге IP и портом. Там должен ждать соединения отладчик, и после его установки PHP принимает и выполняет команды отладчика. Отладчик может ставить точки останова, просматривать значения переменных, пошагово выполнять скрипт и так далее.

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


Проверить есть ли соединение с IDE можно из командной строки (на сервере где работает PHP) командой

telnet 1.2.3.4 5678

Где указаны IP-адрес и порт отладчика. Если IDE ждет соединения то оно будет успешно установлено, если нет то будет ошибка.

> Что такое клиент отладки (debug client)?
Отладчик в IDE.

> Так почему все-таки remote? Что значит удаленный?
Потому что он может находиться на любом узле в сети интернет. Потому и удаленный.

> Если настройка remote_enable отвечает просто за включение дебаггера, то это странно, потому что дебаггер у меня явно работал до того как я это прописал в php.ini.
Если у тебя линукс то эта настройка могла быть включена в другом конфиге, например xdebug.ini. Проверить настройки можно через phpinfo()

> Есть еще подозрение, что в убунту несколько этих php.ini файлов
Да, у каждого расширения свой файл. Причем тебе наверно лучше свои настройки не совать в их файлы, а сделать свой файл username.ini и в него все писать, чтобы видно было где твои настройки а где дефолтные.

> не уверен что на линуксе можно писать localhost, где-то слышал (кажется когда мы тут разбирали подключение сфинкса) что это может вызвать неприятности,
Это относится только к mysql и тут не при чем. Тут можно писать.

> В шторме мне нравится возможность переходить к классу или его полю по ctrl+клик. В саблайме такой фичи не знаю, если есть подскажите.
F12 в Sublime 3

> Также замена по всему проекту. В саблайме насколько я знаю только поиск по проекту, и оттуда уже прыгать по файлам ипоправлять.
замена есть в поиске по проекту (Ctrl + Shift + F) но убогонькая.

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

> Темы только не получается установить.
не знаю.


Аноним 01/12/15 Втр 04:49:01 #289 №593041 
>>593038

Пасты по сетевым технологиям:

---------

## Интернет

Интернет - это всемирная сеть, объединяющая множество компьютеров и устройств. Устройство и принцип работы этой сети описаны в протоколе (протокол это стандарт, описывающий взаимодействие систем) IP.

У каждого узла сети есть свой уникальный идентификатор (он называется IP адрес), и указав его, узлы могут передавать друг другу по этой сети пакеты данных. Сейчас все еще используются IPv4-адреса, которые имеют вид вроде `102.34.23.20` (4 числа от 1 до 254), но так как эти адреса заканчиваются, в будущем мы перейдем на [IPv6](https://ru.wikipedia.org/wiki/IPv6), где адреса состоят из большего числа цифр.

Также, некоторые IP адреса имеют специальный смысл. IP-адреса вида `127.x.x.x`(например `127.0.0.1`) соответствуют так называемому loopback-интерфейсу и если попытаться отправить пакет на такой адрес, то он не уйдет в сеть, а останется на компьютере. Эта особенность используется программами, которые запущены на одном и том же узле и хотят обмениваться друг с другом данными.

Каждый IP-пакет содержит IP-адрес отправителя, получателя, а также примерно до 1600 байтов данных (байт это целое число от 0 до 255). IP адрес либо задается администратором узла, либо узел получает его автоматически через DHCP.

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

## Локальная сеть

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

В переделах локальной сети узлы могут пересылать пакеты без IP адресов, по MAC-адресам (MAC адрес это серийный номер сетевой карты, вшитый в нее. В отличие от него IP адрес задается системой программно). В переделах локальной сети пакеты пересылаются напрямую. А вот чтобы отправить пакет в другую сеть, узел передает пакет машрутизатору-шлюзу, который передает его в соседнюю сеть, там его передают дальше, и т.д. IP-адрес шлюза задается в настройках сети на узле либо администратором либо получается автоматически по DHCP.

Маршрутизатор немного меняет пакеты. Так как он принимает пакет на одной сетевой карте и передает с другой, то в пакете MAC-адрес отправителя заменяется на адрес маршрутизатора, а MAC-адрес получателя - на адрес шлюза во второй сети. IP-адреса и другая информация в пакете не меняется.

Ты можешь увидеть путь пакета через цепочку маршрутизаторов командой traceroute (на Windows она называется tracert):

(linux) /usr/sbin/traceroute google.com
(win) tracert google.com
(онлайн на сайте) http://ping.eu/

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

Компьютеры в локальной сети имеют общий префикс IP-адреса. Например если у нас маска сети 255.255.255.0 и адрес шлюза 10.10.10.1 то все другие узлы этой сети должны иметь IP адреса вида 10.10.10.x. Именно по этому признаку узел определяет находится он в одной сети с получателем (и может слать ему пакет напрямую по MAC адресу) или в разных (и пакет надо передать шлюзу). Сеть обычно называют по префиксу, то есть говорят «узел находится в сети 10.10.10.0».

## NAT

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

Но еще сети можно соединить с помощью NAT. В случае если мы включаем на маршрутизаторе между 2 сетями режим NAT, ситуация меняется. NAT принимает пакеты из внутренней сети и отправляет их во внешнюю от своего имени, заменяя IP адрес отправителя (допустим a.b.c.d) на свой. А когда извне приходит ответ, он передает этот пакет во внутреннюю сеть, меняя адрес получателя со своего IP адреса на a.b.c.d, то есть того, кто послал исходный пакет наружу.

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

Также, так как внутренние узлы не видны снаружи, мы не обязаны выдавать им белые уникальные IP адреса (которых мало и которые стоят денег). Мы можем выдать им «серые» адреса из диапазона 192.168.x.x или 10.x.x.x. В одной локальной сети IP адреса не могут повторяться, но в разных сетях (например у разных провайдеров), отделенных NAT, могут. Серые адреса уникальны только в пределах своей сети, а не во всем мире. Из-за неуникальности снаружи нельзя установить соединение с узлом у которого серый IP адрес. Именно потому NAT переписывает адрес отправителья на свой, «белый».

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

## Проброс порта

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

Давай повторим, чтобы не забыть:

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

----------

Аноним 01/12/15 Втр 04:49:30 #290 №593042 
>>593038

Еще паста

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

## TCP

Допустим, у нас есть 2 программы, A и B, запущенные на разных компьютерах (допустим, A на узле `1.1.1.1`, а B на `2.2.2.2`). Они могут использовать описанный выше протокол IP для передачи друг другу каких-то данных, но это не очень удобно:

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

Все эти проблемы решает более высокоуровневый протокол TCP (еще его называют TCP/IP, так как он в своей работе использует IP). Он добавляет к IP-адресам номер порта - число от 1 до 65535, которое идентифицирует программу-получателя или отправителя. Разные программы используют разные номера портов, и потому можно понять какой из них предназначены данные. Также, он обеспечивает повторную отправку пакетов при потере, и позовляет пересылать сколь угодно большой объем данных, разбивая их на пакеты при передаче и собирая обратно при получении.

Протокол TCP/IP в примере выше работает так:

- программа A на узле `1.1.1.1` хочет получать данные от программы B. Потому она открывает на компьютере порт с заранее обговоренным номером, например `2000`, и начинает ждать входящих соединений («слушать порт»). Если этот порт уже используется другой программой, повторно открыть его не удастся, и произойдет ошибка, если нет, то операционная система выделяет порт номер 2000 программе.
- программа B, которая хочет послать какие-то данные программе A, устанавливает TCP-соединение с узлом `1.1.1.1`, порт `2000`
- программа на узле A получает уведомление, что кто-то пытается установить соединение с ней с IP-адреса `2.2.2.2`. Она может принять это соединение, или отказаться, допустим она принимает его.
- с этого момента соединение установлено, и программы могут посылать друг другу в обе стороны данные любого объема
- когда передача закончена (или когда программа не хочет больше получать данные), любая из программ может закрыть соединение на прием данных. Вторая программа получает уведомление об этом, и если она тоже закрывает соединение со своей стороны, то соединение завершается (а если нет, то передача данных продолжается, но только в одну сторону, пока вторая программа не закроет соединение на прием со своей стороны).

Если программы запущены на одном и том же компьютере, то они могут использовать упомянутый выше IP-адрес `127.0.0.1`.

Если ты используешь Windows/linux/mac, ты можешь установить TCP-соединение с любым узлом и портом командой `telnet IP-адрес порт`, например:

```shell
telnet 8.8.8.8 80
```

Если порт и адрес указаны правильно (то есть есть узел с таким IP-адресом, на нем запущена программа, слушающая этот порт и она принимает твое соединение), то все, что ты печатаешь, кодируется в виде байт и посылается на удаленный узел, а все, что он пришлет, отображается на экране. Если нет, то подождав минуту-две, ты получишь сообщение об ошибке. Завершить сеанс связи можно, нажав Ctrl + C.
Аноним 01/12/15 Втр 04:56:49 #291 №593043 
>>593039

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

Залогинившись на гитхаб, открой какой-нибудь гист, например https://gist.github.com/codedokode/7054af4a03865c4cc863 и инструменты разработчика (Ctrl + Shift + i) или исходный код (Ctrl + U)

Найти форму добавления комментария (по тегу <form>) и просмотри ее код:

<form accept-charset="UTF-8" action="/codedokode/7054af4a03865c4cc863/comments" class="js-new-comment-form" data-form-nonce="038de663......7190" data-remote="true" data-type="json" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓"><input name="authenticity_token" type="hidden" value="0rmnd......A=="></div>
....

Обрати внимание на 2 вещи:

data-form-nonce="038de663......7190" - nonce это специальный одноразовый код, который видимо защищает от повторной отправки формы (сервер не принимает код nonce второй раз)

<input name="authenticity_token" type="hidden" value="0rmnd......A=="> - это и есть CSRF токен. Я не знаю, где хранится вторая копия токена - она может храниться в сессии, или она может получаться из идентификатора сессии каким-то преобразованием, или она может получаться из IP адреса или чего-то еще.

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

Аноним 01/12/15 Втр 05:01:59 #292 №593044 
>>593039

Кстати обрати еще внимание на это имя класса:

class="js-new-comment-form"

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

Также, обрати внимание что Sign Out сделан не ссылкой, а кнопкой в форме. Потому что в HTTP принято что метод GET не должен менять данные на сервере. Потому переход по ссылке не должен ничего удалять, или разлогинивать. Это делается методом POST, в данном случае отправкой формы.

Аноним 01/12/15 Втр 05:02:57 #293 №593045 
>>593039

В общем, старайся изучать как те или иные вещи сделаны на других сайтах. Часто можно что-то интересное увидеть.
Аноним 01/12/15 Втр 05:07:29 #294 №593047 
>>592892
Автоопределение работает правильно, просто не у всех есть выделенный айпишник, а айпи провайдера может быть совсем из другого города.
Олег 01/12/15 Втр 05:11:04 #295 №593050 
https://ideone.com/xDRbLj
Ананимасы. У меня косяк в коде (если выпадает последнй элемент массива - вылетает ошибка), или таки что-то неправильно с настройками моей сборочки? Можете проверить? Или я действительно неправильно массив обрабатываю? (У меня на компе если выпал последний элемент массива - выскакивает ошибка)
Аноним 01/12/15 Втр 06:07:57 #296 №593054 
>>593050
Нумерация массива начинается с НУЛЯ.
Аноним 01/12/15 Втр 06:34:32 #297 №593058 
14489408725520.jpg
>>593039
Аноним 01/12/15 Втр 06:44:02 #298 №593060 
https://github.com/codedokode/pasta/blob/master/interview-tasks.md
как еще можно решить первую задачу?
https://ideone.com/8GCLEJ
Олег 01/12/15 Втр 07:12:16 #299 №593064 
>>593054
Тоесть count берёт количество элементов начиная с 1?
Ну блин теперь всё понятно.
Олег 01/12/15 Втр 07:21:57 #300 №593071 
>>593064
https://ideone.com/xDRbLj
Вот. Теперь всё работает.
Аноним 01/12/15 Втр 07:38:01 #301 №593075 
>>593071
Молодец.
И лишние скобки не ставь. Это не лисп все-таки.
Аноним 01/12/15 Втр 07:41:27 #302 №593076 
>>593060
Без использования функций из коробки.
Аноним 01/12/15 Втр 07:47:20 #303 №593079 
Бля, меня уже чета подташнивает от нубов с их версткой, кусками говнокода на идеоне с прикрепленными анимекартинками, которые даже не знают, с какого числа начинается нумерация массива и что такое перцептрон.
джва года в пхп треде
Олег 01/12/15 Втр 07:51:05 #304 №593080 
>>593075
А вот без них не работает как раз.
Аноним 01/12/15 Втр 07:52:00 #305 №593081 
>>593032
Кстати, мне уже лень копать этот баг, но при регистрации у меня анонимный юзер теряет доступ к редактирвоанию ранних данных. Я просто ключ куки в бд сохраняю и ставлю куки пользователю те же что и куки в бд того юзера при залогинивании.
Аноним 01/12/15 Втр 08:02:16 #306 №593082 
>>593080
Все прекрасно работает.
$Rwrdone=mt_rand(1, count($word1)-1);
Аноним 01/12/15 Втр 08:03:59 #307 №593083 
>>593079
Вы накопили слишком много усталости. Отправляйтесь в ближайшую таверну.
Олег 01/12/15 Втр 08:05:56 #308 №593084 
>>593082
у меня почему-то выдаёт ошибку.
Олег 01/12/15 Втр 08:07:07 #309 №593085 
>>593079
Извини. Я знаю что я туповат. Я начал только 27 октября изучать. Я должен был догадаться что нумерация неправильная(
Аноним 01/12/15 Втр 08:13:38 #310 №593086 
>>593085
Просто это типичные ошибки, которых очень много, от которых очень устают.
Да, ошибки в гугле хорошо переводятся.
>>593084
И покажи, что у тебя выдает.
Аноним 01/12/15 Втр 10:24:25 #311 №593125 
Я упоролся кавычками.
Кто-то говорит, что везде, где можно - надо хуячить двойные.
Кто-то говорит, что везде, где можно - одинарные, а где нельзя - двойные.
Кто-то говорит, что переменные надо выносить из-под кавычек.
Как правильно с точки зрения стилистики?
Аноним 01/12/15 Втр 10:40:45 #312 №593132 
>>593125
хуярю все подряд, т.к. похуй на эти микрооптимизации + IDE всё равно строки одинаково подсвечивает

а вот переменные выношу за строки конкатенацией
Аноним 01/12/15 Втр 12:29:32 #313 №593176 
>>593060

Лучше сделать не кодом с echo, а функцией которая возвращает результат. Ты смешал алгоритм и вывод данных в кучу, а лучше сделать это отдельно.

Ошибки:

- как выводит числа без разделителей, напимер не 1, 2 а 12
- ты думаешь если в массиве 2 и более чисел то будет 2 ответа. но это не так
- код не находит 2 наибольших числа, а просто берет 2 первых не повторяющихся числа из массива

То есть пока он вообще не работает.
Аноним 01/12/15 Втр 12:31:52 #314 №593177 
Чувствую что вопросы платиновые, но спрошу:
1) Стоит ли вообще сейчас окунаться в php и связываться с backend? Ведь это самая легкодоступная ниша из всех и все норовят в неё залезть. Работа в моём регионе есть, но только с мидла (либо джуна, но со своим проектом). До джуна надо будет как-то выживать, возможно вообще хоть где-то найти подработку и не наткнуться на индуса работающего за фишки с покемонами/крышками от фанты с кодовым номером/новые тапки?
2) Что надо учить для того, чтобы достичь уровня джуна (не беря в расчёт сам php, html, css, http)?
3) С чего начинать (точнее какую лит-ру)? Ссылка с введением для совсем нью фагов мне не нужна, год назад пытался перл учить, так что как создать переменную, массив, что такое функция - я знаю. Не знаю всего остального, ООП и т.д.
Всем заранее спасибо за ответы.
Аноним 01/12/15 Втр 13:01:42 #315 №593195 
>>593177
1)
> Ведь это самая легкодоступная ниша
Не заставляй людей шутить про твою маму.
> где-то найти подработку
Фриланс.
2)
> Что надо учить для того, чтобы достичь уровня джуна (не беря в расчёт сам php, html, css, http)?
Английский


3)
> Ссылка с введением для совсем нью фагов мне не нужна
Спустись на землю.

А когда начнешь подтираться без помощи мамы.

По мне так хорошая книга для начала(есть они хотя бы естьгодные примеры приложений на которых можно поучиться)http://www.ozon.ru/context/detail/id/31351020/.
Купи (НЕ СКАЧАЙ, А КУПИ) и читай. И не просто как книгу, а пока не поймешь дальше не двигайся.http://www.ozon.ru/context/detail/id/33506422/

И смотри какое издание берешь.
Аноним 01/12/15 Втр 13:08:56 #316 №593200 
>>593195
>http://www.ozon.ru/context/detail/id/31351020/
> Купи (НЕ СКАЧАЙ, А КУПИ)
Ох уж эти маркетологи издательства "БХВ-Петербург"...
Аноним 01/12/15 Втр 13:18:10 #317 №593207 
>>593200
Ох, уж эти обосрамссы с цитированием.
Аноним 01/12/15 Втр 13:18:55 #318 №593209 
Начинаю с максимального нуля. Ну то есть вообще с нуля.
Как правильно двигаться? Учить html, css параллельно с php?
Или сначала одно, потом другое?
Аноним 01/12/15 Втр 13:21:04 #319 №593210 
>>593209
Сначала почитай оп-пост.
Yii2 arhitecrure Аноним 01/12/15 Втр 14:05:28 #320 №593228 
14489679281800.png
Я просто оставлю это здесь.
Аноним 01/12/15 Втр 14:32:29 #321 №593243 
>>593228
И что? Просто замечательно, что все так подробно расписано, в первом yii была краткая байда вида http://yiiframework.ru/guide/source/images/flow.png с бессвязными комментариями, криво переведенными китайцем на английский, а потом макаровым на русский.
После первого мне хочется плакать от счастья, глядя на доки второго.
Аноним 01/12/15 Втр 15:59:13 #322 №593268 
>>593243
> И что?
Прост.

Тащемто что в первом, что во втором, русскоязычная документация более полная, чем английская (внезапно, да). Об этом и samdark говорил. Хотя сейчас, может, и исправили ситуацию.
Аноним 01/12/15 Втр 16:53:25 #323 №593294 
>>588512 (OP)
ОП,поделись пожалуйста решением задачи про айпад.
Аноним 01/12/15 Втр 17:58:17 #324 №593333 
>>593294
Обломайся, он не дает решения. Если вбросишь свои потуги, распишет ошибки и замечания. Исправишь их - будет тебе правильное решение.
Аноним 01/12/15 Втр 18:13:19 #325 №593346 
Какая же бутстрап клёвая вещь для пхп макаки, не умеющей в жс.
Аноним 01/12/15 Втр 18:19:09 #326 №593350 
Раз оп опять заработался и пока не принимает квесты, буду считать оптимальным решением задачи про хранение диапазонов ip от товарища garex
http://habrahabr.ru/post/138536/
Он даже скрипт написал для перегонки базы geoIP https://github.com/garex/geoip-flat-range
Мне понравилась еще Sypex Geo, там походу базы только в бинарном виде, но наверное их и не нужно оптимизировать.
Аноним 01/12/15 Втр 18:26:35 #327 №593357 
В чем суть статических методов кроме того, что их моно использовать без создания экземпляра класса? Допустим у меня есть класс, в нем 5 методов, только один из них используется внутри самого класса, значит логично остальные четыре делать статическими? Получается, что большинство методов нужно делать статическими? Или здесь есть какие-то подводные камни?
Аноним 01/12/15 Втр 18:27:32 #328 №593359 
>>593357
>В чем суть статических методов кроме того, что их моно использовать без создания экземпляра класса?
Какие еще причины тебе нужны, кроме этой?
Аноним 01/12/15 Втр 18:35:03 #329 №593364 
>>593359
То есть все методы, которые я не буду использовать внутри самого класса - делать статическими?
Аноним 01/12/15 Втр 18:55:25 #330 №593377 
>>593364
Вот пример использования http://habrahabr.ru/post/31375/
Аноним 01/12/15 Втр 23:05:06 #331 №593533 
Фух, наконец я вас нашел.
Начал пилить свою борду на Кусабе (Х). Как починить выход на нулевую после создания треда/ответа в тред?
Аноним 01/12/15 Втр 23:15:36 #332 №593553 
>>593533
Не понял, что значит "починить"?

А какая у тебя структура бд?
На бордах по-моему просто делается запрос вида "выбрать оп-пост + 3 его последних поста из каждого из верхних 10 тредов".
Так что последние N тредов в которых был постинг, окажутся на главной благодаря order by post_time desc limit N
Аноним 02/12/15 Срд 00:03:21 #333 №593632 
>>593364
более тупого вопроса я еще не видел. нахуй тебе класс, если в коде ты будешь создавать только ОДИН его экземпляр?
Аноним 02/12/15 Срд 00:08:51 #334 №593634 
>>593632
Синглтон же.
Аноним 02/12/15 Срд 00:30:18 #335 №593653 
>>593634
натыкал везде синглетоны - заябись старое значение везде пишется))).
Аноним 02/12/15 Срд 00:31:31 #336 №593654 
>>593653
>натыкал везде синглетоны
>везде
>синглетоны
/0
Аноним 02/12/15 Срд 00:38:00 #337 №593662 
>>593632

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

>>593357

Статические методы это методы которые работают с классом, а не его экземпляром (объектом) и не используют $this. То есть методы результат вызова которых не зависит от полей какого-то объекта. Методы, которые по логике относятся ко всему классу, а не к конкретному объекту этого класса.

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

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

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

>>593364

Откуда вызвается метод не имеет значения.

>>593377

Синглтон это антипаттерн и пример как делать не стоит. Объяснение в моем уроке по DI: https://gist.github.com/codedokode/e1d31a31b37d5f635057

Аноним 02/12/15 Срд 02:38:53 #338 №593718 
>>593654
Не в состоиянии читать нить дискуссии шкальник? Он спросил, можна ли визде тыкать статичные метады)))
Аноним 02/12/15 Срд 02:40:50 #339 №593720 
>>593662
о, еще один не смог читнуть диалог, тоже везде статичные методы тыкаешь, мань?

Я везде, где не прайвет - тыкаю публик и не пароюсь, а вы лахи.
Аноним 02/12/15 Срд 02:48:00 #340 №593721 
Ребята, как мне спарсить при помощи php страничку на фейсбуке, например https://www.facebook.com/einsdelrosario.

Нужно-то всего лишь получить аватарку и имя. С curl трахаюсь уже час - не выходит.

API у них не работает для моей задачи, так что было решено брать штурмом через парсинг.
Аноним 02/12/15 Срд 02:53:46 #341 №593722 
$_FILES['img']['tmp_name'];
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["img"]["name"]);
$filename = trim($_FILES['img']['name']);
move_uploaded_file($_FILES["img"]["tmp_name"], $target_file);

Меня уже запарила эта проблема, почему имя файла на кириллице сохраняется в папку с кракозябрами в имени? При том имя файла сохраняется в бд нормально.
Аноним 02/12/15 Срд 03:34:55 #342 №593727 
>>593722

Под Windows в функции работы с файлами надо передавать имя в кодировке windows-1251 (а в программе оно скорее всего в utf-8 так что используй iconv).

Соответственно функции возврвращающие список файлов тоже возвращают их имена в этой кодировке и требуют обратной перекодировки.

Под линукс и мак имена обычно передаются в utf-8 и преобразований не требуется.

Обрати внимание что кодировка windows-1251 - 8-битная и в ней всего 256 символов, так что экзотические символы будут потеряны.

Лучше всего написать какую-то универсальную функцию перекодирования имени файла которая определяет текущую ОС и выбирает нужный метод перекодировки.
Аноним 02/12/15 Срд 03:35:11 #343 №593728 
>>591185
>>591209
Исправил замечания к счетчику. Так как ты потребовал убрать конструкторы и поля для зависимостей, то нужда в абстрактных классах отпала, заменил на интерфейсы.
Насчет времени жизни ключа, то мне нужно отслеживать именно уникальные посещения, для сайта объявлений ну как минимум месяц. А то одни и те же чуваки (например от агенства недвижимости) накликают сотни посещений, а звонков от реальных покупателей ноль (личный опыт).
Вообще для высоконагруженных приложений такая схема как у нас не очень подойдет, потому что придется закупать дополнительную память именно ради несчастного счетчика. Самым оптимальным решением наверное все-таки является схема мейлру с таблицей memory в качестве очереди.
Но у нас же учебный проект. Кстати он довольно разросся, так что я наверное буду считать это отдельной работой, которую можно показать работодателю.

Добавил пример использования.
https://github.com/nsdvw/visit-counter/tree/master/example
Только пожалуйста не придирайся к процедурному стилю. Ну не буду я ради одностраничного хелловорлда неделю писать mvc приложение по всем правилам.

Сейчас почитаю твои пасты по поводу тестирования, и может замучу еще простые тесты. Но тоже без фанатизма. Хочу до нг успеть подтянуть js и устроиться хоть куда-то, а там буду уже в свободное от работы время прокачивать скиллы.
Аноним 02/12/15 Срд 03:36:04 #344 №593729 
>>593720

Я плохо понимаю сленг и не понял что именно ты хотел сказать.
Аноним 02/12/15 Срд 03:44:27 #345 №593732 
>>593728

> Только пожалуйста не придирайся к процедурному стилю. Ну не буду я ради одностраничного хелловорлда неделю писать mvc приложение по всем правилам.
На мой взгляд ты даже переусложнил приложение. Куча файлов, папок, длинный сложный код. Нельзя ли сделать проще, например 2-3 файла:

page1.php - засчитывает визит на страницу 1
page2.php - засчитывает визит на страницу 2
index.php - показывает общее число визитов и содержит ссылки на page1.php, page2.php

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

> Самым оптимальным решением наверное все-таки является схема мейлру с таблицей memory в качестве очереди.
так она тоже в памяти хранится, какая разница тратить память на редис или на mysql? Или я что-то не понял?

> потому что придется закупать дополнительную память именно ради несчастного счетчика.
Ну 128 Гб на сервере увидеть не редкость, а хеш на миллион элементов будет весить порядка мегабайт 20, так что я бы не беспокоился особо.
Аноним 02/12/15 Срд 03:45:26 #346 №593733 
>>593728

Хотя не знаю, есть ли смысл делать пример без базы данных.
Аноним 02/12/15 Срд 04:00:25 #347 №593735 
>>593728

Здесь нет комментариев что должны возвращать функции и в каком виде: https://github.com/nsdvw/visit-counter/blob/master/Redis/RedisAdapterInterface.php

Аноним 02/12/15 Срд 04:03:06 #348 №593737 
>>593728

Код тут https://github.com/nsdvw/visit-counter#how-to-use-and-implementation-details странный

> $recentVisits = $vc->getDeltaVisits( [$model->id] );
> $visits = $savedVisits + $recentVisits;
мы передаем массив id, а получаем просто число? Я бы для удобства сделал 2 метода, один для массового получения чисел, а другой для получения одного значения для одной страницы.
Аноним 02/12/15 Срд 04:03:49 #349 №593738 
>>593721
Так, страничку выдернуть удалось спасибо

Подскажите, где косяк в этой регулярке:

$image = preg_match("(?<=<img\ class="profilePic\ img"\ src=").*?(?=")",$result);


Нужно взять url картинки из этого кода:

<img class="profilePic img" src="https://scontent.xx.fbcdn.net/hprofile-xap1/v/t1.0-1/c0.0.160.160/p160x160/1375969_639208176100021_1626101127_n.jpg?oh=b18046677dea1ea2f4e979e3b177dcb4&oe=56F01FF2" alt="Eins Miguel del Rosario">

Экранирую, экранирую: все равно unespected t_string

Мозг, уже не варит. Спасибо




Аноним 02/12/15 Срд 04:07:46 #350 №593739 
>>593732
>>593733
Нет, без базы никак, это же чуть ли не главный функционал - перенос из редиса в базу.
Ну и счетчик на странице состоит из суммы того значения, что хранится в базе + дельта в редисе.

Можно еще рассмотреть вариант вообще без хранения счетчика в базе, редис сам почти полноценная база. А почему я так сразу не сделал? Что-то я ночью уже не соображаю.

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

>>593737
Не, там массив возрващается, это я ридми не обновил. Два метода? Зачем? Пусть будет один, он всегда принимает массив айдишников, и всегда возвращает в ответ массив вида [id => visitCount].
Лучше пойду посплю.

>>593738
Я не в курсе api фейсбука, но мне кажется там должны быть фичи для получения имени и альбомов пользователя. Ну и парсить DOM нужно не регулярками, а библиотеками типа http://habrahabr.ru/post/176635/
Аноним 02/12/15 Срд 04:20:21 #351 №593744 
>>593727
>windows-1251
Если такую ставить, то имя в вопросиках, бд не распознают эту кодировку, бд в utf-8
Аноним 02/12/15 Срд 04:27:53 #352 №593752 
>>593744

Нет. Я написал что перекодировать в 1251 надо только имена которые передаются в функции работы с файлами, только их. А не то что ты вставляешь в базу или выводишь на странице.
Аноним 02/12/15 Срд 04:29:59 #353 №593754 
>>593728
>Click on button
the button и артиклей нет.
Аноним 02/12/15 Срд 04:53:25 #354 №593768 
>>593752

Не получается вот это перекодировать - вылетает ошибка. $target_file = $target_dir . basename($_FILES["img"]["name"]);
Аноним 02/12/15 Срд 05:08:02 #355 №593770 
>>593768
И где тут перекодирование, норкоман?
Аноним 02/12/15 Срд 06:21:00 #356 №593786 
>>593768

Текст ошибки почему не написал? Также, в коде который ты написал, нет перекодирования. Оно делается функцией iconv().
Аноним 02/12/15 Срд 08:00:21 #357 №593793 
14490324215860.png
>>593786
Аноним 02/12/15 Срд 08:59:41 #358 №593800 
САП, пхпач, установил опен сервер на шиндошс, там есть планировщик заданий. Делаю по мануалу, но что-то не хочет работать. Поясни, зачем нужно после php-win.exe указывать файл php.ini? Он не пытается его искать в своей же директории по умолчанию?

Вот неправильный не поправленный пример с оф сайта:

[CODE]Выполнить: %progdir%\modules\php\%phpdriver%\php-win.exe -c %progdir%\userdata\temp\config\php.ini -q -f %sitedir%\xxx.ru\cron.php[/CODE]

на их сайте неправильно указана директория php.ini, нужно вот так:
[CODE]%progdir%\modules\php\%phpdriver%\php-win.exe -c %progdir%\modules\php\%phpdriver%\php.ini -q -f %sitedir%\localhost\test\index.php[/CODE]
после запуска этого, пишет в логах Start result:0, но запись в базу не добавляется

если убрать ini-файл, то выходит ошибка в месседжбоске "syntax err0r, unexpected '$' in C:\OpenServer\domains\localhost\test\index.php on line 2"
%progdir%\modules\php\%phpdriver%\php-win.exe -c %sitedir%\localhost\test\index.php

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

в пхп файле содержится это:

[CODE]<?php
$db = mysqli_connect('localhost', 'root', '', 'test');
$query = 'INSERT INTO test (date) VALUES (NOW())';
mysqli_query($db,$query);
?>[/CODE]

если просто обновить страницу, то запись добавляется. пути проверял, все верно. поясни, что за параметры -q -f после ини файла? как заставить планировщик запускать этот скрипт?
Аноним 02/12/15 Срд 09:14:03 #359 №593806 
>>593800

Про параметры написано в мануале: http://php.net/manual/ru/features.commandline.options.php

-q там правда нету.

Олег 02/12/15 Срд 09:16:50 #360 №593808 
14490370106670.png
>>593086
День 4.
Адово заболел зуб и ещё простудился, но таки сделал ещё одно задание.
https://ideone.com/8YMlrb
Бустрее бы добраться до баз данных.

Скриншот ошибки. Я разбираться особо не хочу. В скобках работает всё отлично, без нареканий. А мне и норм. Грешу на сборочку. ибо на Ideone всё работает и так и так на отличненько.
Аноним 02/12/15 Срд 09:19:37 #361 №593811 
>>593800

Я думаю -q просто скопипастили из примера с wget выше: http://open-server.ru/docs/#planirovshhik

Также там написано что некоторые команды надо запускать, указав в начале %COMSPEC% /c - может в этом дело?

Аноним 02/12/15 Срд 09:21:07 #362 №593812 
>>593800
ЛОЛ скопировал отсюда и все заработало, видимо ошибся первый раз, когда писал, хотя проверял все

>>593806
Ну, я понял, что есть параметры для самого php.exe, но не понял, что это за параметры после php.ini, это скорее всего опен сервера какие-то параметры, но я не нашел на их сайте что-то что это за параметры
Аноним 02/12/15 Срд 09:47:28 #363 №593822 
Редиска - это бд такая? По документации вообще не понятно, что это и для чего.
Аноним 02/12/15 Срд 09:53:55 #364 №593823 
>>593822
Нет, это in-memory storage. Как мемкеш, только лучше.
Аноним 02/12/15 Срд 10:25:05 #365 №593836 
>>593811
>Я думаю -q просто скопипастили из примера с wget выше
Скорее всего. Я убрал эти два ключа и все также работает
Аноним 02/12/15 Срд 10:55:43 #366 №593843 
Что написать для души, просто для поддержания мозга в нормальном состоянии пока не работаю?
Аноним 02/12/15 Срд 11:20:06 #367 №593846 
>>593843
Если ты сам не знаешь, что написать, пиздуй работать в макдак. Один хуй, ничего полезного и законченного ты не напишешь.
Аноним 02/12/15 Срд 11:21:06 #368 №593847 
>>593823
Зачем редис, когда есть тарантул?
Аноним 02/12/15 Срд 11:34:30 #369 №593857 
Бериллиевая, покрытая позолотой и инструктированная бриллиантами платина, но... Есть шанс выучить PHP без знаний английского?

Просто учусь на вышке, гумунитарской, для галочки. Понял что не мое - хочу кодить. Математика - по нулям, английский - по нулям. А хочу. Выйдет что путное? Сейчас на народе читая первый урок, вроде бы все интересно, понятно.
Аноним 02/12/15 Срд 11:47:43 #370 №593864 
>>593857
>Есть шанс выучить PHP без знаний английского?
Будешь лендинги верстать за жратву
Аноним 02/12/15 Срд 11:49:28 #371 №593865 
>>593847
Тарантул, я вроде видел тут ссылку на гитхаб, он же на крестах?
Может кто-то объяснит концепцию эту "мемкеша только лучше"?
Аноним 02/12/15 Срд 11:49:46 #372 №593866 
>>593864
Я и не мечтал о тысячи долларов в день четыре часа фриланс, и тому подобное. Если уже из этого буду копейку получать - будет наращиваться опыт.

Правильно мысли идут?
Аноним 02/12/15 Срд 11:50:27 #373 №593867 
>>593864
Верстал щас итак как говна и без жиес и жикверь они не вывозят.
Аноним 02/12/15 Срд 11:55:16 #374 №593869 
>>593867
Что такое жиес и жикверь?
Аноним 02/12/15 Срд 12:04:03 #375 №593873 
Заебался уже.
Надо подключить расширение, а если конкретнее, то amqp.so.
В cli сука настроилось сразу же, но мне там нахуй не надо.
В fpm уже 3 дня ебусь оно не загружается и ошибок никаких не выдается. Что за хуйня блядь?
Аноним 02/12/15 Срд 12:11:48 #376 №593879 
>>593846
Дохуя чего написал, оно теперь меня кормит. Но я похоже написал всё что я хотел и теперь незнаю что писать. Может у анона есть идеи?
Аноним 02/12/15 Срд 12:12:47 #377 №593880 
>>593879
Пирамиду создай, раскрути.
Аноним 02/12/15 Срд 12:13:54 #378 №593881 
>>593880
Это не программирование. Если бы мне был интересен социум я бы пошел работать в макдак.
Аноним 02/12/15 Срд 12:14:23 #379 №593883 
>>593881
Балбес, причем тут социум? А, ладно.
Аноним 02/12/15 Срд 12:21:34 #380 №593886 
>>593873

может быть у php-fpm отдельный php.ini?
Аноним 02/12/15 Срд 12:30:08 #381 №593889 
>>593886
php_fpm.conf
Geekbrains vs Специалист Аноним 02/12/15 Срд 12:32:30 #382 №593890 
Собсссно вопрос.... Кто что смотрел\проходил и какие реальные отзывы. ИМХО гики не нравятся, до Борисова еще не дошел...
Аноним 02/12/15 Срд 12:34:33 #383 №593892 
>>593890
>Борисова
Гоповатый голос напрягал немного, но в целом хорошо зашел. Я нежный хикки-омежка, мб тебе и норм будет. Гиков не смотрел
Аноним 02/12/15 Срд 12:37:23 #384 №593895 
Анон в некротреде >>593878 задал интересный вопрос: чт оя думаю по поводу курсов geekbrains

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

Вот промо-страницы:

geekbrains.ru/professions/3 (когда я смотрел там было 100 000 написано)
geekbrains.ru/professions/13

и такие

geekbrains.ru/professions/1
geekbrains.ru/professions/2

Ну и сама страница geekbrains.ru/courses

Что вы аноны, скажете? Выглядит как выгодное вложение средств, не правда ли?
Аноним 02/12/15 Срд 13:06:25 #385 №593914 
>>593886
Да, отдельный. В нем и работаю.
>>593889
И что в нем?
extension=amqp.so прописать? Не канает.
Аноним 02/12/15 Срд 13:28:09 #386 №593930 
>>593914
Все, заработало.
Как всегда такие ошибки - самые дурацкие.
php5-fpm оказался отдельным демоном и ресать его надо было отдельно.
Аноним 02/12/15 Срд 13:30:57 #387 №593933 
14490522577970.png
А где результат?
Аноним 02/12/15 Срд 13:31:57 #388 №593934 
>>593933
Погодите. Это - stdout? Что то в учебнике совсем другой сайт.
Аноним 02/12/15 Срд 13:50:13 #389 №593946 
>>593857
Верстать на уровне "за копеечку" в канторе типа ПроВебИнфармэйшнТехнологисЛаб, плюющей говноклоны кривых сайтов, может любая обезьяна. И это будет сват/кум/брат/соска дирехтора.
Аноним 02/12/15 Срд 13:51:26 #390 №593947 
>>593946
Ты так говоришь, как будто я не собираюсь повышать скилл.

Я спрашиваю, за самое начало начал. Ведь когда старт есть, то уже легче пойдет. Но как старт задать? Всмысле, получится ли что?
Аноним 02/12/15 Срд 14:01:29 #391 №593954 
>>593857
А что сложного в том чтобы выучить английский?
Тем более что тебе не потребуется читать Шекспира в оригинале, нужно выучить несколько тысяч общеупотребительных слов.

Есть такая дрочильня под названием memrise.com, выучил там 4000 слов за два месяца, занимаясь по полчаса в день.
Фильмы в оригинале еще тяжело смотреть, но тексты документации уже идут сносно
Аноним 02/12/15 Срд 14:03:17 #392 №593956 
>>593954
Фильмы в оригинале ( с субтитрами естественно) намного легче смотреть, чем читать большие тексты.
Аноним 02/12/15 Срд 14:18:25 #393 №593972 
>>593865
Персистентность (возможность сбрасывать данные на диск), сложные структуры данных типа хешей, списков, сетов; транзакции, репликации, pipeline, мониторинг, инструменты мониторинга.
Много букв про редис http://habrahabr.ru/post/64917/
Много букв про тарантул http://habrahabr.ru/post/133435/
Аноним 02/12/15 Срд 14:22:54 #394 №593975 
>>593947
>Ты так говоришь, как будто я не собираюсь повышать скилл.
На говноработе + универ + еще повышать скилл могут очень быстро сесть батарейки. Возненавидишь отрасль раньше чем научишься чему-нибудь на хорошем уровне.
На лоускилл вакансии сейчас бешеный конкурс. На нормальные вакансии конкурс тоже большой. 20-30 человек на место, но реально там конкурируют 2-4 человека, остальные "посмотрел курсы/прочитал книгу" просто массовка. Естественно тебе нужно быть одному из этих 2-4. Это пол года дисциплинированной работы над собой при адекватных способностях. За это время английский выучится по 30 мин в день для достаточного уровня очень легко. Без него очень тяжко. Чтение документации довольно большая часть работы, а она переводится с опозданием если переводится вообще.
Можно пробовать фриланс для старта, но там свои подводные камни.
Вывод тут простой, если холодильник не душит пиздец с какой силой, то лучше все доступное время трать на обучение, а не на однообразную лоускилл работу.
Аноним 02/12/15 Срд 14:25:06 #395 №593982 
>>593975
Короче все шансы есть, было бы желание, терпение и труд. Спасибо.
Аноним 02/12/15 Срд 14:34:11 #396 №593999 
>>593975
Ты про проекты забыл. Один сайт занимает месяца три-четыре и таких штук 7 надо сделать, доделанных и больших, чтобы типа партфалио. И не просто лендинг а норм сайт с функционалом и на фреймворках.
Аноним 02/12/15 Срд 14:48:22 #397 №594015 
>>593999

Не надо.
Аноним 02/12/15 Срд 15:20:43 #398 №594041 
Посоны, а в пхп вообще есть функции для работы с видео? Чтобы там камеры пользователей писались, граффити сделать. Хочу аналог чатрулетки запилить.. Или такое на шарпе делается?
Аноним 02/12/15 Срд 15:23:58 #399 №594044 
>>594015
надо, уася, надо.
Аноним 02/12/15 Срд 15:44:43 #400 №594054 
Я смотрю, многие добавляют композер в описание. Можно добавить свой сайт в композер и загружать через него что ли?
Аноним 02/12/15 Срд 15:45:56 #401 №594056 
>>594041
Такое во флэше делается.
Аноним 02/12/15 Срд 15:51:38 #402 №594060 
>>594054
Любой проект с гитхаба можно подключать через композер.
https://getcomposer.org/doc/02-libraries.md#publishing-to-a-vcs
Аноним 02/12/15 Срд 16:51:32 #403 №594092 
>>588512 (OP)
Объясните нубу, для чего используется php в реальном мире? Почему работодатели требуют знать php от фронтенд разработчиков? Почему работодатели требуют знать php от бэкенд разработчков на python+django?
Аноним 02/12/15 Срд 17:00:24 #404 №594098 
>>593890
> Geekbrains
Просмотрел за пару дней курс, спиздженный с торрентов. Для дауна, типа меня, вполне неплохо как дополнение к книжкам, оповскому гайдику и прочему (дополнительные задачки, пояснения для тупых).
Аноним 02/12/15 Срд 17:03:46 #405 №594100 
Это джаваскриптом так выстраиваются блоки?
https://sebastian-bergmann.de/
По каким словам можно загуглить?
Аноним 02/12/15 Срд 17:03:50 #406 №594101 
http://pastebin.com/xDM1Yihw

Налабал на шкрептах за 7 минут.

Я не умею в коденг?
Аноним 02/12/15 Срд 17:19:11 #407 №594111 
Иногда в требованиях вакансий пишут "знание отличий версий php". Для чего это? Такие конторы работают с древними cms, или может есть настолько поехавшие ретрограды, что до сих пор сидят на четверке?
Аноним 02/12/15 Срд 17:28:15 #408 №594116 
Сап как замутить постраничный вывод из базы данных
Аноним 02/12/15 Срд 17:34:25 #409 №594118 
>>594111
Например, если придётся рефакторить проект с 5.5 на 5.7 или хипстхоп.
Аноним 02/12/15 Срд 17:39:05 #410 №594120 
>>594111
>>594118
Или есть какой-то крупный легаси проект, который сидит на 5.3, и менять версию никто не будет так как рефакторинг дорог, долог и не нужен.
Аноним 02/12/15 Срд 17:39:28 #411 №594121 
>>594111
>>594118
Или есть какой-то крупный легаси проект, который сидит на 5.3, и менять версию никто не будет так как рефакторинг дорог, долог и не нужен.
Аноним 02/12/15 Срд 18:03:13 #412 №594140 
Что такое зависимость в юнит-тестах? Это значит, что один тестовый метод вызывается из другого?
Вот пример 4.2 на хабре
http://habrahabr.ru/post/89175/

Зависимость вроде бы объявляется через phpdoc, но я просто не вижу разницы в результате работы теста, что есть зависимость, что ее нет.
Вывод для класса с двумя тестовыми методами и там и там одинаковый
Time: 519 ms, Memory: 7.75Mb
OK (2 tests, 2 assertions)

Запускаю phpunit.phar через командную строку, еще не дошел до продвинутых опций, может быть там есть опции для подробного отчета.
Аноним 02/12/15 Срд 18:04:58 #413 №594143 
Что скажете о php7? Стоит уже сейчас по нему заморачиваться (дошел до ООП, потихоньку разбираюсь) или можно забить, пока полностью не освою основы?
Аноним 02/12/15 Срд 18:18:30 #414 №594165 
>>594143
Твой уровень знаний не при чем, семерка просто новая версия, она не сложнее предыдущих, просто добавляются некоторые удобные фичи типа строгой типизации плюс прирост скорости
http://habrahabr.ru/post/260351/

Свои проекты можно уже делать на семерке, но большинство сайтов сделаны на 5.3-5.5, естественно заказчики не кинутся платить деньги за перевод на новую версию, если "оно и так работает".
Аноним 02/12/15 Срд 18:52:28 #415 №594188 
Посоны, не бейте, лучше обоссыте сразу. В общем нужно создать некое подобие вот такой
http://www.polagristrade.by/calc/ вот хуйни. Суть такова, чтобы заходящий на сайт хуй, выбирал себе какой-нибудь металл из категорий, указывал количество тонн, нужных ему, а калькулятор считал и выдавал ему конечную сумму с ндс. Формулы-хуермулы, это все я сделаю сам, вопрос в том, как сделать саму базу данных с ценами и категориями. MySql, да? Я создаю БД с ценами-хуенами, а калькулятору просто указываю на нее ссыль, или нет?
Аноним 02/12/15 Срд 19:35:33 #416 №594244 
>>594165
Спасибо. Ну, я реалист, пока дойду до уровня, на котором смогу без стыда устроиться на работу, пройдет еще полгода, так что, пожалуй, начну сразу новые фичи осваивать.
Аноним 02/12/15 Срд 20:08:28 #417 №594282 
Внимание, вопрос. Не ради холивара. Стоит вообще сейчас соваться в php или нет? То есть идей своих проектов нет, скилла в программировании нет? Я буду типичный индусом-мусором-помойкой или есть возможность пробиться в люди?
Аноним 02/12/15 Срд 20:08:29 #418 №594283 
Посоны, подскажите в чем может быть проблема.
Есть php календарь https://github.com/jamierumbelow/julian
Собственно установил все как в ридми, но объект создается пустой! В чем может быть проблема?
Как я понял данный класс написан под CodeIgniter, но там же указано что это стэндэлон класс все должно работать, но почему то не работет.
Аноним 02/12/15 Срд 20:10:32 #419 №594287 
Или может есть похожий класс для создания календаря?
Перерыл весь гитхаб, но этот самый подходящий по функционалу, нет ничего лишнего, но блин, не работает.
Аноним 02/12/15 Срд 20:10:33 #420 №594288 
>>594282
не ради холивара тебе никто физически не сможет ответить на этот вопрос.
Аноним 02/12/15 Срд 20:17:52 #421 №594298 
>>594283
Контроллер и вью как создавал?
Как я понял, его предлагается использовать как -
>Copying the contents of libraries into your application/libraries folder will allow you to load Julian like any other CodeIgniter library.
Попробуй просто объедини код контроллера и вью в один файл.
Аноним 02/12/15 Срд 20:20:32 #422 №594300 
>>594298
require_once 'libraries/julian.php';

$year = @$_GET['year'] ?: date('Y');
$month = @$_GET['month'] ?: date('m');

$calendar = new Julian(array(
'url' => site_url('/absence_requests?year=%y&month=%m'),
'current_month' => $month,
'current_year' => $year
));

Собственно сделал как в ридми.
В итоге $calendar - пустой объект? В чем трабл?

Аноним 02/12/15 Срд 20:21:44 #423 №594301 
>>594300
Объект создается, но пустой.
Может я чего-то не понимаю?
Аноним 02/12/15 Срд 20:25:40 #424 №594309 
В смысле пустой, скинь вардамп
Аноним 02/12/15 Срд 20:27:21 #425 №594311 
>>594309
Смотри
$calendar = new Julian(array(
'url' => site_url('/absence_requests?year=%y&month=%m'),
'current_month' => 12,
'current_year' => 2015
));

На выходе

object(Julian)#1 (5) { ["current_month"]=> NULL ["current_year"]=> NULL ["weeks"]=> array(0) { } ["events"]=> array(0) { } ["url"]=> string(0) "" }
Аноним 02/12/15 Срд 20:30:05 #426 №594319 
в классе нет метода конструктора, непонятно куда и зачем передаются параметры при создании объекта
Аноним 02/12/15 Срд 20:31:54 #427 №594322 
>>594311
Этот класс мне идеально подходит, То есть на вход месяц, год, на выходе возможность перебора элементов календаря, чтобы сгенерировать свой календарь. Но почему не работает?
<?php foreach ($calendar->weeks() as $week): ?>
<tr>
<?php foreach ($week->days() as $day): ?>
<td class="calendar-day <?= $day->today_class() ?>">
<?php if(!$day->blank()): ?>
<span class="day-number"><?= $day->day() ?></span>
<?php endif; ?>
</td>
<?php endforeach; ?>
</tr>
<?php endforeach; ?>
Аноним 02/12/15 Срд 20:37:37 #428 №594327 
попробуй так
$calendar = new Julian();

$calendar->initialize(array(
'url' => site_url('/absence_requests?year=%y&month=%m'),
'current_month' => 12,
'current_year' => 2015
));
Аноним 02/12/15 Срд 20:42:06 #429 №594330 
>>594327
Спасибо! Все заработало.
Аноним 02/12/15 Срд 20:46:30 #430 №594335 
>>594327
А еще можешь вкратце объяснить зачем в примере у него в контроллере написано это
$calendar = new Julian(array(
'url' => site_url('/absence_requests?year=%y&month=%m'),
'current_month' => $month,
'current_year' => $year
));
Аноним 02/12/15 Срд 20:49:24 #431 №594338 
Возможно раньше вместо метода initialize использовался конструктор __construct, который выполняется при создании объекта, потом он был заменен на initialize, а пример не поправили.
Аноним 02/12/15 Срд 20:51:34 #432 №594341 
Поясните за автозагрузку. Создал библиотеку, там все расписал, заинклюдил в index.php, а как его инициализировать?
Аноним 02/12/15 Срд 20:51:37 #433 №594342 
>>594338
Благодарю.
Аноним 02/12/15 Срд 20:56:09 #434 №594349 
>>594341
В смысле инициализировать, как создать объект? Если ты его заинклудил вручную, зачем тебе автозагрузка? Или ты хочешь избавиться от ручного инклуда?
Аноним 02/12/15 Срд 21:04:08 #435 №594357 
>>594341
Заинклюдил и все, дальше можешь работать.
Аноним 02/12/15 Срд 21:06:12 #436 №594359 
>>594188
Или нет.
Аноним 02/12/15 Срд 21:44:37 #437 №594386 
Вкатываюсь в пхп. В шапке нет гайда по тому, что именно надо учить дабы вкатиться в бэкэнд. Что начал сейчас - сам php, html по видео из youtube. Что надо ещё (кроме ксс, мускула, джаваскрипта (который можно фремворком от твиттера заменить))?
Аноним 02/12/15 Срд 21:48:47 #438 №594389 
>>594386
Ну если ты считаешь что можно заменить js и верстку бутстрапом, то бери уже тогда друпал с вордпрессом вместо php.
Аноним 02/12/15 Срд 21:55:49 #439 №594394 
>>594389
Так я не собираюсь в фулстак заделываться, просто если хтмл и цсс надо будет в любом случае (вдруг отвалиться форма регистрации, а фронтендщик-индус пьяный с коровой спит), то я смогу сделать. А задрачивать я в бекенд хочу, чтобы по хардкору.
Аноним 02/12/15 Срд 21:56:47 #440 №594396 
>>594389
Вот только в вордресс говном кидаться не нужно. Вп по сути тот же фреймворк, созданный под вполне определенные задачи, как и любой другой. И без адекватных знаний php хуй ты чего там путного сделаешь, кроме как нахячить ебанутого лапшекода в шаблоны. Наверно из-за этого вп и приобрел такую бешенную популярность быдло платформы.
Аноним 02/12/15 Срд 22:08:14 #441 №594406 
>>594394
Хтмл-джс за пару дней недельподтягиваются до адекватного уровня, а цсс нахуй не нужен. В чем проблема вообще?
Аноним 02/12/15 Срд 22:13:08 #442 №594409 
>>594406
css вообще можно не подключать? Может сразу на юкозе сайты начать ебашить?
Аноним 02/12/15 Срд 22:14:54 #443 №594412 
>>594409
Нет, я к тому, что знать его на уровне версталомакаки не обязательно.
Аноним 02/12/15 Срд 22:25:33 #444 №594423 
ОП, сколько примерно делается задачка на файлообменник? По времени.

И за какой промежуток времени реально сделать анонимный форум, не копия двача, но анонимный форум.
Аноним 02/12/15 Срд 22:45:58 #445 №594434 
>>594423
Задача на сферический в вакууме фейлообменник (за основу копипиздинга был взят рыгост) лично у меня заняла 3 часа. Включая настройку nginx с aio, mod_upload и secure link (для приватных фейлов).
Это при том что всё делалось на сифоне2, под который документации на русском нет в принципе.
Аноним 02/12/15 Срд 22:46:15 #446 №594435 
>>594434
Ах, да, не ОП, но хуй.
Аноним 02/12/15 Срд 22:51:26 #447 №594445 
>>594434
ну блин, ты опытный, я новичек, никогда подобного не делал, просто по учебе нужно что-то реализовать и я подумал файлообменник сделать, для учебы норм и для себя php подучить.

Интересует, сколько его будет делать человек который делает впервые.
Аноним 02/12/15 Срд 22:53:53 #448 №594449 
>>594445
Если без забивания себе головы ООП-шлаком, аналог рыгоста можно сделать за час, даже нихуя не зная. Только для раздачи приватных фейлов с приемлемой скоростью, нжинкс всё-таки понадобиться.
Аноним 02/12/15 Срд 22:57:10 #449 №594452 
>>594449
Даже ни зная ни одного фреймворка? Наврятли, можешь оставить фейко почту или скайп, шоб я позадавал тебе вопросов когда начну делать?
Аноним 02/12/15 Срд 23:06:45 #450 №594468 
>>594452
Фреймворки (если ты пишешь аналог рыгоста, а не йобы с платными скачками за смс уровня depositfiles) - нахуй не нужны. Там на всё про всё хватит 2-3 шкрептов.
Фейкопочту можешь оставить свою, но я сегодня один хер буду отсыпаться после двух ночей чехарды с миграцией продакшена по 3 разным датацентрам. С побочными эффектами "ёпта, поцоны - у нас новая корзина с товарами, мы не ту ветку на %datacentername% развернули. Налетай на логи, пока юзеры багов не заметили!"
Аноним 02/12/15 Срд 23:09:15 #451 №594470 
Ребята, есть вопрос по заданию на тему регулярочек. Какого вида она должна быть? Одна здоровая? Если бы я принимал данные через $_POST, то просто убрал бы лишнее через preg_replace.
Пишу и пока что получается убожетсво что-то вроде:
/^8[^a-zA-Z0-9]([0-9]{3})[^a-zA-Z0-9]([0-9]{2})[^a-zA-Z0-9]([0-9]{3})[^a-zA-Z0-9]([0-9]{2})[^a-zA-Z0-9]*$/ .

Само задание:
Дан текст, который по идее должен быть номером телефона в виде 8-(911)-506 56 56 (т.е. человек может ввести не только цифры, но и скобки, минусы, может что-то еще). Но в реальности, пользователь может вместо номера написать что угодно. Напиши скрипт для проверки правильности введенного номера («8(911)-506 56 56» — правильный номер, «8-911-50-656-56» — правильный, «89115065656» — праивльный, «02» — неправильный, «89115065656 позвать Люду» — неправильный).

Заранее благодарю.
Аноним 02/12/15 Срд 23:15:59 #452 №594473 
Донный вопрос про уместность "die" в контексте начинающего быдлокодера.
Вот, к примеру, примитивнейшая задачка (если это вообще можно назвать "задачей"), которую я накатал за минуту.
Насколько вообще уместно стопать скрипт таким образом?
http://ideone.com/mMH3Id
Аноним 02/12/15 Срд 23:17:34 #453 №594476 
>>594470
Бог разметки, каюсь.
Облегченный вариант регулярного выражения: /^8[^a-z0-9][0-9]{3}[^a-z0-9][0-9]{3}[^a-z0-9][0-9]{2}[^a-z0-9][0-9]{2}/ui
Аноним 02/12/15 Срд 23:18:55 #454 №594479 
>>594468
так мне не прям не сегодня делать надо, я хочу его до нг сделать

добавь в скайпе lupti_du , фейкомыла нет, но если че могу сделать
Аноним 02/12/15 Срд 23:21:39 #455 №594482 
>>594473
Ты точно захочешь такой код, который постоянно выдает фатальную ошибку (не эксепшн), после которой скрипт полностью будет закрываться?

Не думаю. Смотри в сторону эксепшенов, если хочешь правильную обработку ошибок.

не-гуру-но-здравый-смысл-подсказывает
Аноним 02/12/15 Срд 23:29:13 #456 №594500 
>>594482
В некоторых случаях проще закрыться с "нимагу коннект к БД", чем городить огород эксепшенов для достижения того же результата.
Что не отменяет того, что он уебан, а die замечательно используется с аргументом.
Аноним 02/12/15 Срд 23:31:21 #457 №594502 
>>594482
Понятно, спасибо. В мануале уже прочитал об этом, да.
Я сейчас только-только в ооп смотрю, написал быдлофотогалерею с соблюдением mvc, так что все эти тонкости мне пока не знакомы.
Но когда-нибудь мне захочется приказать скрипту УМЕРЕТЬ.
Аноним 02/12/15 Срд 23:50:15 #458 №594520 
Ребята, поможет кто-нибудь с рег. экспами?
Аноним 03/12/15 Чтв 00:02:19 #459 №594530 
>>594520
Кидай.
Аноним 03/12/15 Чтв 00:08:28 #460 №594535 
>>594530
Мои регэкспы:
[code]
$spaceAfterMark = "/[,;!?:][\s]/ui";
$spellingBasics = "/жы|шы/ui";
$thirdOne = "/(координально|здесь|зделал|зделаю|зделан)/ui";
$spacesAfterConjunctions = "/[^,\s][\s](а|но)/ui";
[/code]

Тестирую здесь: https://regex101.com/
Само задание:
«Grammar Nazi». Напиши скрипт, проверяющий текст на наличие злостных ошибок:
нет пробела после запятой, точки с запятой, восклицательного знака, вопросительного знака, двоеточия
«жи» или «ши» написано с буквой ы
в тексте есть слово «координально» или «сдесь», «зделал», «зделаю», «зделан»
в тексте есть слова «а» или «но» без запятой перед ними.
(можешь добавить еще несколько правил, если хорошо знаешь русский язык)
В случае обнаружения ошибки скрипт должен писать сообщение об этом и выводить кусок текста с ошибкой (чтобы было понятно, что не так).*

Сами вопросы: вот я тестирую в регэксп тестере и это нормально, что у меня, например, в thirdOne всего одно совпадение?
Аноним 03/12/15 Чтв 00:09:38 #461 №594537 
>>594535
Я опять в проебе с разметкой. Косяк, исправлюсь в будущем.
Аноним 03/12/15 Чтв 00:20:42 #462 №594545 
>>594535
>у меня, например, в thirdOne всего одно совпадение?
можно использовать модификатор "g"
Аноним 03/12/15 Чтв 00:22:06 #463 №594548 
>>594545
Он ищет не первый, а все по всему документу, так? Спасибо тебе большое.
Аноним 03/12/15 Чтв 00:23:18 #464 №594549 
Слушайте, прекратите флудить тупыми вопросами, что да за какое время вам нужно учить. Откуда мы блять знаем? Все это индивидуально. Кто-то знает по 10 языков, написал второй гугл и не может работу найти, кто-то сверстал один макет и устроился в гугл, реально все индивидуально, хватит бесите. Учите то что учится и смотрите по ситуации блять.
Аноним 03/12/15 Чтв 00:25:39 #465 №594551 
Где найти тред на тему кардинга
Аноним 03/12/15 Чтв 00:25:51 #466 №594552 
>>594548
>Он ищет не первый, а все по всему документу, так?
да, наведи на знак вопроса в поле с модификаторами на сайте, там есть описание модификаторов.
Аноним 03/12/15 Чтв 00:28:04 #467 №594554 
>>594551
Ты что-то спрашиваешь.
Аноним 03/12/15 Чтв 00:30:01 #468 №594555 
>>594554
Да
Аноним 03/12/15 Чтв 00:38:01 #469 №594557 
>>594551
https://goo.gl/lhtBza
Только будь очень осторожен. Я предупредил.
Аноним 03/12/15 Чтв 00:41:32 #470 №594558 
>>594434
да хуле ты пиздишь. выложи на хостинг и гитхаб, посмотрим, какой там функционал и дизин у твоего "аналога ргхоста".
Аноним 03/12/15 Чтв 00:43:28 #471 №594559 
>>594449
ахаха, ясно, написал лапшу из функций и вьюх на одной страничке. ну тогда да, тут и за час можно сделать.
Аноним 03/12/15 Чтв 03:49:52 #472 №594598 
[CODE]test test test test test[/CODE]

[CODE]test
test
test
test[/CODE]
Аноним 03/12/15 Чтв 05:40:36 #473 №594608 
http://ideone.com/oMl5pc

Опять от нефиг делать ковыряю книги для бухов.
Немного усовершенствовал свою недофункцию.
Аноним 03/12/15 Чтв 05:49:32 #474 №594609 
>>594608
Вдогон - ещё надо будет написать алгоритмы подобной же проверки банковского счёта и СНИЛС, дабы утырки, любящие порегаться с Иванов И.И. и 12345678 вместо всех номеров - соснулей далеко и надолго.
Благо, нехуй там писать.
Аноним 03/12/15 Чтв 09:55:33 #475 №594654 
Мля, посерфил апворк. Везде вордпрессы, жумолы, друпалы, лаварелы, боже упаси ангуляры. Это ведь на каждом из этих говен делать по сайту с уникальным макетом-темой for free для партфалио. Как же это уныло. Наверное сделаю на каждом по простенькому бложику с простейшим макетом, ибо заебало уже пиздец как.
СРОЧНОЕ СПАСЕНИЕ АНОНА Аноним 03/12/15 Чтв 11:42:11 #476 №594689 
Двач, спасай, препод обезумел, сможешь ли ты совладать с ним?

Определить интерфейс student_interface с методами: show_info, set_debts, show_debts, show_students
В файле index.php описать класс students, который реализует интерфейс student_interface и содержит следующие свойства и методы:
Свойства:
$name - имя студента. Значение свойства должно быть доступно только в контексте класса;
$group - группа. Значение свойства должно быть доступно только в контексте класса;
$n_assignments - количество выполненных заданий;
$n_absents - количество пропущенных лекций;
$debts - boolean, false - нет долгов, true - есть долги;
$n_questions - количество вопросов на зачете.
Константы:
N_LECT - число прочитанных лекций;
N_LAB - число лабораторных заданий.
Методы:
show_info - выводит информацию: имя студента, группу, количество выполненных заданий, количество пропущенных лекций, количество посещенных лекций;
set_debts - устанавливает значение переменной $debts, true - если есть пропущенные лекции и остались невыполненные задания, false - иначе; устанавливает значение $n_questions = числу пропущенных лекций;
show_debts - выводит "нет долгов" если $debts=false, иначе выводит "есть долги" и информацию: количество вопросов на зачете, количество невыполненных лабораторных.
Добавить в класс конструктор, принимающий 4 аргумента: имя студента, номер группы, количество выполненных заданий, количество пропущенных лекций и устанавливающий значение свойств $name, $group, $n_assignments и $n_absents соответственно
Определить метод __clone() так, чтобы при создании копии объекта класса students сбрасывались значения свойств $n_assignments, $n_absents, $debts, $n_questions
Добавить в класс статическое свойство $n_students - счетчик объектов и метод show_students для вывода текущего количества объектов класса students. Добавить деструктор класса и модифицировать конструктор для учета числа объектов
Создать несколько объектов класса, передав в конструктор различные значения параметров. Вывести информацию о студенте (show_info) для произвольного объекта
Создать копию $copy произвольного объекта. Вывести информацию show_info для $copy
Вызвать метод set_debts, а затем вывести долги конкретного студента с помощью show_debts
Создать класс child_students, наследующий класс students. Переопределить метод show_debts таким образом, чтобы при выводе $n_questions учитывались пропуски лекций по-болезни (пропущенная по-болезни лекция считается посещенной). Для этого добавьте в класс child_students свойство $n_reports и переопределите конструктор
С помощью final запретить перегрузку метода show_debts в классе students. Объяснить возникновение ошибки.
Аноним 03/12/15 Чтв 11:49:41 #477 №594692 
>>594689
YESWECAN
Аноним 03/12/15 Чтв 11:57:52 #478 №594696 
>>594689
Ты запостил задание, хорошо. Было бы неплохо написать еще что из этого ты можешь сделать или сделал, а что не смог
Аноним 03/12/15 Чтв 12:00:37 #479 №594699 
>>594696
Сделать я могу первое-второе задание. Не факт, что правильно. Всё остальное вызывает сильное чувство дискомфорта ниже пояса.
Аноним 03/12/15 Чтв 12:08:12 #480 №594704 
>>594696
Пока что такая вот хуйня.

<?php
error_reporting(-1);

interface students_interface {
public function show_info();
public function set_debts();
public function show_debts();
public function show_students();
}

class students implements students_interface; {
define ("N_LECT", "");
define ("N_LAB", "");
$name;
$group;
$n_assignments;
$n_adsents;
$n_absents;
$debts;
$n_questions;
private function show_info($name, $group, $n_assignments, $n_absents,$n_adsents);
private function set_debts($n_questions) {
if ($debts = false) {
echo "нет долгов";
else echo "есть долги,"."количество вопросов на зачете = $n_questions".""
}
}
public function show_depts();
public function show_students();
}
}

public function __construct($name, $group, $n_assigments, $n_absents) {
$this->name = $name;
$this->group = $group;
$this->n_assignments = $n_assignments;
$this->n_absents = $n_absents;
https://github.com/toppestkek/TwigBlog Аноним 03/12/15 Чтв 15:12:20 #481 №594784 
>>589381

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

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

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

Я в 2 словах про композер написал в комментариях к задаче: https://gist.github.com/codedokode/9424217#composer

Чтобы пользоваться композером, надо освоить командную строку, есть краткий гайд для начинающих: https://gist.github.com/codedokode/10539568

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

> Переименовать тоже не могу, ибо в сборке ИДЕ он уже как твигблог записался
Ну это несерьезно. Что ты за программист если с IDE справиться не можешь? В крайнем случае сотри конфиги своей IDE и создай новый проект в той же папке.

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

Освой такой файл как .gitignore: https://git-scm.com/book/ru/v1/%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D1%8B-Git-%D0%97%D0%B0%D0%BF%D0%B8%D1%81%D1%8C-%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9-%D0%B2-%D1%80%D0%B5%D0%BF%D0%BE%D0%B7%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D0%B9#Игнорирование-файлов

Тебе надо:

1) перенести папку nbproject в другое место
2) закоммитить это изменение
3) добавить ее в gitignore и вернуть на место
4) закоммитить (папка не должна теперь закоммититься)

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

Пройдемся по коду.

https://github.com/toppestkek/TwigBlog/blob/master/app/start.php#L18
> $app->error(function (\Exception $e) use ($app) {

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

Далее, у тебя много закомментированного кода - удаляй его, он мешается и если что его всегда можно найти в истории гита.

> $app->render('Header.php', compact('app'));
> $app->run();
> $app->render('Footer.php', compact('app'));
Это неправильно. Ты закладываешь идею что любые действия всегда будут выводить одну и ту же HTML страницу с одной и той же шапкой и подвалом. Но в реальности нам может понадобиться отдавать другие виды контента, например картинку или JSON или еще что-то. Более того, после вывода шапки мы не можем выводить заголовки, ставить куки и делать редиректы (домашнее задание: объясни почему так, для этого тебе понадобится почитать про протокол HTTP, можешь глянуть мой не очень хороший урок https://github.com/codedokode/pasta/blob/master/network/http.md или нагуглить сам)

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

> $log = $login->getLogin($user_id, $db);
Не надо сокращать «логин» как «лог» так как «лог» значит «файл журнала» и это сбивает с толку при чтении кода.

> https://github.com/toppestkek/TwigBlog/blob/master/app/classes.php
Этот ужас надо заменить автозагрузкой. Я понимаю, если бы у тебя было 2-3 инклуда, но там их десятки. Для начала погугли и сделай автозагрузчик через spl_autoload_register, после того как это сделаешь и покажешь, переделай на автозагрузку через композер. Если что-то непонятно, задавай вопросы.

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

Однако, функция-автозагрузчик получает на вход имя класса, который нужен PHP. Как определить в каком именно файле он описан? Для этого надо соблюдать некоторую договоренность, например стандарт PSR-4 который задает сосответствие между именем класса и файла. В PSR-4 сказано что класс с именем

\A\B\C\D

должен хранится в файле с именем вроде

/some/folder/A/B/C/D.php

Теперь по ООП и MVC. Я не вижу в твоем коде ни особого следования MVC ни правильного ООП. Ты просто раскидал код по классам и функциям, но это еще не делает код объектно-ориентированным. То же самое с MVC - я не вижу четкого разделения контроллеров и моделей: например тут огромная простыня кода вписана в контроллер: https://github.com/toppestkek/TwigBlog/blob/master/app/routes/fileEdit.php

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

Во-первых, названия переменных, методов, классов должны быть осмысленными. Что это такое? https://github.com/toppestkek/TwigBlog/blob/master/app/classes/Mapper/FooMapper.php

Что такое Foo? Освой функцию поиска\замены в своем редакторе кода и переименуй класс в что-то осмысленное.

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

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

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

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

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

Это упрощает понимание кода: тебе не надо читать и разбирать код класса, достаточно прочитать название метода (и может быть комментарий к нему). Также, это упрощает изменение кода: если какое-то свойство имеет уровень private то доступ к нему возможен только из того же класса и тебе не надо бегать по всему коду и смотреть что там с этим свойством делается, тебе достаточно просмотреть один файл с этим классом.

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

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

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

https://github.com/toppestkek/TwigBlog Аноним 03/12/15 Чтв 15:12:57 #482 №594787 
>>589381


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

Также, есть такая вещь как зависимости. Функции или классу для своей работы могут быть нужны какие-то данные, объекты других класссов. Но не стоит делать эти зависимости слишком широкими. Практически по всем случаям где у тебя передается объект $app, придется разбираться и смотреть: а нужен ли нам там весь объект фреймворка? Может быть достаточно передать только часть, например только объект хранящий запрос (request) или только объект формирующий ответ (response)?

Далее, тебе надо разобраться с тем что такое исключения и как с ними работать. У меня есть урок: https://gist.github.com/codedokode/65d43ca5ac95c762bc1a

Почитай его и попробуй сам разобраться праивльный ли тут код: https://github.com/toppestkek/TwigBlog/blob/master/app/classes/Mapper/FooMapper.php#L44

> try ...
> catch(PDOException $e) {
> echo "Eror";


https://github.com/toppestkek/TwigBlog/blob/master/app/classes/Mapper/FooMapper.php#L11
> public function save(Foo &$foo)
Зачем тут &? Объясни. Вот тебе страница мануала, может поможет: http://php.net/manual/ru/language.oop5.references.php

> https://github.com/toppestkek/TwigBlog/blob/master/app/classes/Mapper/FooMapper.php#L14
Длинный SQL-запрос надо разбить переносами на несколько строк. Ограничь длину строки 75-80 символами.

https://github.com/toppestkek/TwigBlog/tree/master/app/classes/Model
В этих 3 классах надо добавить комментарии к неочевидным полям. Ну например поле $password - оно хранит пароль или хеш от него? Что значит $cookie? Что и в каком формате хранится в $tags?

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

Также, у тебя подозрительно много классов-хелперов: https://github.com/toppestkek/TwigBlog/tree/master/app/classes/Helper

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

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

https://github.com/toppestkek/TwigBlog/blob/master/app/classes/Helper/Cookie.php - тут название не соответствует тому чем занимается класс. Название говорит что это класс, объект которого хранит информацию о куке. Но в коде мы видим, это не так. Скорее этот класс можно назвать UserIdentifierGenerator (генератор идентификатора пользователя) так как он именно эти занимается. Или UniqueTokenGenerator - генератор уникального токена.

https://github.com/toppestkek/TwigBlog/blob/master/app/classes/Helper/RegExp.php - можно подумать что класс хранит информацию о регулярном выражении. Опять же видно что это не так, это какая-то самодельная защита. Давай я поясню тебе как легко ее обойти. Ты фильтруешь строку document.write. Но что если я запишу ее в виде document['write'] ? С точки зрения JS это то же самое. И кстати непонятно чем эта строка так опасна.

У меня сложилось ощущение что ты не разбираешься в узявимостях. Поэтому твой фильтр оказался бесполезен и легко обходится. Бороться с уязвимостями таким фильтром это то же самое что прыгать с бубном и вызывать дождь. Давай попробуем в них разобраться - почитай например мой урок про XSS с которой ты скорее всего и боролся: https://github.com/codedokode/pasta/blob/master/security/xss.md

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

https://github.com/toppestkek/TwigBlog/blob/master/app/classes/Helper/Token.php - то же самое, это правльнее назвать TokenGenerator так как это генератор токенов а не класс с информацией о токене.

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

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

Если что, задавай вопросы. Я сейчас довольно занят, код быстро наверно проверить не могу но кинуть пасту или дать совет наверно смогу. Тем более в твоем случае у нас есть конкретный код и мы можем разбирать примеры на нем, что тут плохо и что можно поменять.
Аноним 03/12/15 Чтв 15:16:11 #483 №594789 
>>589381

И вообще, я советую тебе перед тем как делать класс, ответить хотя бы мысленно на такие вопросы:

— для какой сущности мы сделаем классы? Что представляют собой объекты этих классов? ну например CommentMapper это класс который сохраняет и загружает из базы объекты Comment.
— какие у них есть свойства?
— что мы хотим от них получить, что они должны уметь делать (какие у них должны быть методы)?
— как сущности связаны? Ну например CommentMapper имеет зависимость от PDO - он ему нужен чтобы делать запросы к базе.
Аноним 03/12/15 Чтв 15:58:48 #484 №594819 
>>589622

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

>>589911

img это просто имя поля выбора файла в HTML форме.

>>590239

> джойны - это плохой тон в SQL. Как goto. Об этом ещё Бобук говорил
Потому что Бобук менеджер, а не специалист по базам данных. Хотя я не знаю, говорил ли он на самом деле это, в каком контексте или ты все это сам сочинил.

>>590259

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

>>591257

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

>>591281

Конечно.
Аноним 03/12/15 Чтв 15:59:07 #485 №594821 
>>591440

О цене надо договариваться до начала работы. Иначе он скажет: молодец, хорошо потрудился, держи 100 копеек (100 копеек это около 1.5 цента США).

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

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

>>591442

Напиши что работал в шараге. Почему нет?

>>591527

REST и Slim не связаны напрямую. REST это набор договоренностей о том как построить API на основе протокола HTTP, Slim это микрофреймворк. Что именно тебе непонятно?

Про REST для начала изучи протокол HTTP, без его знания статьи про REST читать нет смысла.

>>591558

Пути лучше наверно писать в конфиге через прямой слеш: c:/Server/bin - а то вдруг он их как экранирующие последовательности понимает.

Тебе надо проверить, какой именно php.ini используется и какие настройки применились, для этого сделай файл с единственной командой <?php phpinfo(); и посмотри что она выведет. Возможно ты правишь не тот php.ini.

А, вспомнил! «Unable to load» значит что у библиотеки вроде php_interbase.dll есть какая-то зависимость (другая dll) и она у тебя не установлена (либо не находится в списке каталогов в PATH). Ты можешь взять программу https://ru.wikipedia.org/wiki/Dependency_Walker (или аналог), она покажет какие файлы нужны.

В твоем случае, для php_interbase.dll скорее всего нужна какая-то библиотека от interbase, и проще всего отключить этот модуль в php.ini.
Аноним 03/12/15 Чтв 15:59:28 #486 №594822 
>>591563

Код лучше выравнивать (читай второй пост в треде), а то тяжело читать.

> function printHint($questions){
Тут стоит questions (вопросы) во множественном числе, можно подумать это массив вопросов, но реально это один объект. Не стоит так запутывать читателя.

Также, функция называется printHint (напечатать подсказку) но она ничего не печатает. Опять же, нехорошо.

Ну и она тут не очент нужна, я думаю, проще было сделать echo "Подсказка : .... "; и тут же вписать вывод поля hint из объекта $question через стрелочку.

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

>>591783

> ([!]+)\\S?([,]+)\\S?
Странное выражение: почему оно ищет восклицательный знак? Ну и давай попробуем выкинуть это и рассмотреть такое выражение: \\S?([,]+)\\S?

- сначала может идти (а может не идти) не-пробел
- за ним 1 или более запятых
- за ней может идти, а может не идти, не-пробел

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

- запятая
- за ней буква (или цифра)

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

>>591802

Это задача на регулярки. Ими решить проще.

>>591807

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

>>592027

Нет. Preg_match ищет только первое совпадение с регуляркой. Чтобы найти все совпадения, используй preg_match_all (она есть в уроке и в мануале).
Аноним 03/12/15 Чтв 15:59:45 #487 №594824 
>>592249

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

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

>>592270

> $LastTransact=( $creditBalance x $percent ) + $servicePayment;
> $paymentTotal = $paymentTotal + $monthlyPayment;
Это повторяется несколько раз, убери копипасту.

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

Также, ответ должен быть около 61270 а не 80 000. Попробуй поставить сумму поменьше, например долг 1000 или долг 4000 и поссмотри что твоя программа насчитает.

> echo "<br>";

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

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

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

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

--------
Аноним 03/12/15 Чтв 16:01:02 #488 №594826 
Аноны, не ждите меня, решайте задачки, я потом найду время проверить ваши решения.

Пока предлагаю подумать над этим постом: есть ли подвохи в рекламе курсов? >>593895
Аноним 03/12/15 Чтв 16:11:11 #489 №594837 
>>594826
>Так может выглядеть Ваше резюме после прохождения обучения и стажировки
>Должность: Senior Web Developer
>Желаемая зарплата 90 000 руб.
>Опыт работы < 1 года
Даже не знаю.... Но в рекламе же врать не будут...... И все комментарии одобрительные......
Пойду еще оплачу курс по джаве, буду через полгода работать на двух работах и получать 4000$ ))))
Аноним 03/12/15 Чтв 16:12:07 #490 №594838 
Почоны, http://codepen.io/anon/pen/YwKMwb как сделать чтобы элементы прижимались снизу к верхним? Независимо от высоты других элементов в ряду?
Аноним 03/12/15 Чтв 16:12:36 #491 №594842 
>>594548

Модификатор g работает только в яваскрипте. В PHP надо использовать preg_match_all чтобы найти все совпадения, а не первое.

проверь какой диалект регулярок ты включил на regex101: pcre (из PHP) или яваскриптовые.

>>594473

В случае функции уместно использовать return, зачем die?

>>594500

Городить огород не надо. Одна строчка throw по умолчанию завершит скрипт и сохранит информацию об ошибке в лог. А вот die не сохранит и ты об ошибке не узнаешь.

Изучи исключения а не изобретай велосипеды.

>>594502

Если это неожиданная ошибка то надо использовать исключения.

>>594468

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

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

> С побочными эффектами "ёпта, поцоны - у нас новая корзина с товарами, мы не ту ветку на %datacentername% развернули. Налетай на логи, пока юзеры багов не заметили!"
да, у гениев свои проблемы которые обычным людям не знакомы.

>>594449

задача на rghоst придумана не для того чтобы сделать файлообменник (кому он нужен?) а чтобы научиться пользоваться фреймфовком и закрепить ООП.

>>594445

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

>>594423

2-3 месяца файлообменник.

>>594412

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

>>594406

В вакансиях пишут CSS.

Аноним 03/12/15 Чтв 16:15:34 #492 №594845 
>>594838
Удваиваю, где-то выше задавал подобный вопрос. У Бергмана на сайте что-то мутится с transition для выстраивания блоков, не понимаю как это работает.
>>594100
Аноним 03/12/15 Чтв 16:18:15 #493 №594847 
>>594845
На том сайте он абсолютами их ебашит, скриптом задает позицию видимо.
Аноним 03/12/15 Чтв 16:18:26 #494 №594848 
>>594386

Надо MVC и ООП.

> джаваскрипта (который можно фремворком от твиттера заменить)
нельзя

>>594341

Ты spl_autoload_register использовал?

>>594300

Не используй @. В Codeignite есть get() и post() а @ для быдлокодеров.

>>594143

Можно почитать про него.

>>594140

зависимость A от B значит что методу A нужен результат выполнения метода B, то что он вернет (посмотри там передается массив в примере). Лучше наверно их избегать так как с ними сложнее читать тесты. Лучше когда тесты независимы.

> Это значит, что один тестовый метод вызывается из другого?
Нет значит что вызвается B и то что он вернет передается потом методу A.

> Зависимость вроде бы объявляется через phpdoc, но я просто не вижу разницы в результате работы теста, что есть зависимость, что ее нет.
А как ты проверял? Ты наверно ошибку допустил потому что код в примере, если убрать depends, будет выдавать ошибку.



Аноним 03/12/15 Чтв 16:23:48 #495 №594853 
Кстати, за джойны: чем они отличаются от обычной выборки из двух таблиц с помощью SELECT WHERE?
Аноним 03/12/15 Чтв 16:24:09 #496 №594854 
>>594842
Чисто по секрету, рыгост нужнее очередного быдломагазина на битриксе/опенкарте.
Аноним 03/12/15 Чтв 16:25:02 #497 №594857 
>>594116

Почитай комментарии к задаче https://github.com/codedokode/pasta/blob/master/student-list.md#Постраничная-навигация


>>594101


Код плохо оформлен и тяжело читается. Отформатируй его роботом как написано во втором посте треда.

Копипасту надо убрать, незачем делать 2 однотипных функции.

В цикле надо использовать {}

Надо дать нормальные читаемые понятные имена переменным а не таинственные сокращения.

> return ((int)$chr[9] === (int)$cksum) ? true : false;
Тут не нужен тернарный оператор.

> (int)$cksum
Зачем int?

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

> check_inn(7743013902)
ИНН это строка а не число.

> unset($wieghts);
Не надо переиспользовать переменную.

> do_10_digits
название должно соответствовать тому что делает функция например тут название должно быть «проверить 10 значный ИНН»

Почитай статью http://learn.javascript.ru/write-unmain-code

Этот код требует улучшения, так писать нельзя.
Аноним 03/12/15 Чтв 16:27:45 #498 №594859 
>>594100

Я знаю такие скрипты но тебе будет интереснее открыть исходники, инспектор (Ctrl + SHift + I) и найти самому.

>>594092

Для разработки сайтов и веб-приложений.

>>594054

Композер это инструмент для установки сторонних библиотек и управлениями ими.

>>594041

Нету

Аноним 03/12/15 Чтв 16:28:50 #499 №594860 
>>594838

Если число колонок фиксированное то можно просто сверстать колонками.
Аноним 03/12/15 Чтв 16:29:03 #500 №594861 
>>594857
Тернарник вхерачен, на случай если захотим возвращать вместо true/false что угодно другое. Например инты или текст.
Аноним 03/12/15 Чтв 16:30:21 #501 №594863 
>>594857
http://ideone.com/oMl5pc
Алсо, да, вторая версия.
Хотя я ни разу не кодер, лол. Кодеров у нас и так 5 рыл (3 be и 2 fe).
Аноним 03/12/15 Чтв 16:32:12 #502 №594865 
>>594857
>{} в цикле на одну строку
Ты что там делаешь, ты что, ебанутый?
>добавить проверку что на вход функции подается строка нужной длины
is_numeric, в дальнейшем длина проверяется собссно на длину
Аноним 03/12/15 Чтв 16:32:16 #503 №594866 
>>594837

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

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

Также, на другой странице написано:

> средняя зарплата программиста в Москве - XXX

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

У меня такое ощущение что это рассчитано на далеких от нашей области людей, менеджеров каких-нибудь, эконоимстов, чтобы они увидели цифры и не раздумывая купили курсы.
Аноним 03/12/15 Чтв 16:34:34 #504 №594867 
>>594860
>Если число колонок фиксированное то можно просто сверстать колонками.
У меня вывод идет неограниченного количества статей в рубрике, и суть в том, что блоки тогда придется наполнять через js уже после загрузки страницы, либо в шаблоне фигачить кучу ифов для того чтобы открыть и закрыть 4 блока. Но с 4 блоками тоже неудобно при адаптивности, ведь когда один из блоков выпадет вниз - его либо через медиа придется переписывать, либо он будет слева под тремя торчать как палка.
Аноним 03/12/15 Чтв 16:37:13 #505 №594870 
>>594853

Наверно тем что сделать 1 запрос часто проще и быстрее.

>>594861

Когда захотим тогда и добавим.

>>594865

Почитай PSR-1/2. У нас тред для обычных людей, пишущих по стандартам, а не для гениев которые придумывают свои стандарты.

> is_numeric, в дальнейшем длина проверяется собссно на длину
В общем неправильно, надо использовать регулярку.

Вторая версия такая же нечитаемая как и первая. Так как ее тяжело читать, я не могу ее проверить и понять правильно она работает или нет.

Аноним 03/12/15 Чтв 16:38:17 #506 №594871 
>>594867

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

Аноним 03/12/15 Чтв 16:38:46 #507 №594872 
>>594870
А разве SELECT t1.something, t2.somethingelse FROM table1 as t1, table2 as t2 WHERE t1.id=t2.id это не один запрос?
Аноним 03/12/15 Чтв 16:40:19 #508 №594873 
>>594871
Ну на время загрузки можно спрятать всё и показать прелоадер. Но всё равно как-то не взлюбил использовать жиэс не для анимаций, а для обычной верстки.
Аноним 03/12/15 Чтв 16:41:17 #509 №594874 
>>594872

Это и есть джойн.

SELECT FROM a, b делает то же самое что и SELECT FROM a JOIN b

Я думал ты имел в виду сделать 2 запроса и джойнить данные на стороне PHP.
Аноним 03/12/15 Чтв 16:42:04 #510 №594875 
>>594873

А что увидят пользователи без JS?
Аноним 03/12/15 Чтв 16:44:17 #511 №594878 
>>594875
Вот в этом и беда, можно как на том сайте, без js будет показывать в том виде как по кодпен ссылке выше, а с js будет абсолютами вешать их попутно изменяя их позицию
Аноним 03/12/15 Чтв 16:45:59 #512 №594879 
Посаны, подскажите. Товарищ в скайпе спрашивает, а я в пхп не бумбум совсем.

https://ideone.com/PYYgOi

Я так понимаю, ему надо сделать:
SELECT * FROM employees WHERE seting >= 3 да, английский уровень ФЛУЕНТ видать
правильно?
И как вывести это в списке ниже на странице, такой же цикл вроде работать не будет?
Аноним 03/12/15 Чтв 16:46:06 #513 №594880 
>>594870
Ты ещ про PEP8 напомни, с лестницами из пачек пробелов.
for(;;) foo_bar(); - совершенно нормальное сишное написание.
вариант for() { foo_bar(); } пошёл от перла, в котором тоже можно сделать в одну строчку, но на сишку уже будет не похоже.
>регулярку
Нахуя, учитывая крайнюю "скорость" pcre в похапе? Есть is_int()/is_numeric(). Последний как раз и рекомендуется для стринга.
Аноним 03/12/15 Чтв 16:54:25 #514 №594885 
>>594880

> сишное написание.
Это не си-тред

> учитывая крайнюю "скорость" pcre в похапе?
Ара? Может у тебя и цифры или тесты есть подтверждающие твои слова?
Аноним 03/12/15 Чтв 17:09:40 #515 №594892 
>>594885
То, что сишные strXXX() быстрее pcre? Ну, гуглить за тебя я не намерен, сделай это сам.
Аноним 03/12/15 Чтв 17:30:03 #516 №594901 
Ребята, подскажите, допустим у меня в бд есть строки вида "Улица Каштановая дом 2".
"Улица Новая дом 2".
Когда я делаю поиск типа LIKE 'новая'
то не находит ни одной строки.
Когда я делаю поиск типа LIKE '%новая%'
Находит и ту строку и ту.
Как сделать поиск таким образом, чтобы не было такого как во втором случае? чтобы искало по словам целиком, а не их частям?
Аноним 03/12/15 Чтв 17:38:09 #517 №594906 
Антош выручай. После смены версии пыха перестало работать

Parse error: syntax error, unexpected '[' in

if (in_array($mmmm,["a","b"])) {}
Аноним 03/12/15 Чтв 17:38:33 #518 №594907 
>>594906
ты на более старую перешел что ли?
Аноним 03/12/15 Чтв 17:39:54 #519 №594908 
>>594906
пробуй так
if (in_array($mmmm,array("a","b"))) {}
Аноним 03/12/15 Чтв 17:48:38 #520 №594915 
Кто-то выше писал про курсы.
НЛПдаун, писавший этот рекламный скам, прокололся в двух местах. Во-певых, в том, что Хуйнов Хуян, успешный погромист 10 компаний-лидеров-митол-групп, владеет методами НЛП (уже ржём), а ещё решил всем рассказать как стать охуенным программистом и зарабатывать дохуя бабла.

Короче, "продам книгу как заработать миллион - потому что очень ЖРАТЬ ХОЧЕТСЯ".
Аноним 03/12/15 Чтв 18:03:07 #521 №594930 
14491549875690.jpg
Не сочтите за троллинг, такой вопрос. Программисты ребята обычно умные (как-никак аналитическое мышление), а следственно могут в логику инвестирования и реинвестирования, сложные проценты, все дела. Так почему же программисты не развивают свой маленький бизнес, дающий 100% годовых при минимальных усилиях ?
Аноним 03/12/15 Чтв 18:04:07 #522 №594932 
>>594930
>Не сочтите за троллинг, такой вопрос. Программисты ребята обычно умные
Хуйню написал.
Аноним 03/12/15 Чтв 18:06:37 #523 №594937 
анон, имеется проблема с yii framework:
описаны два класса в двух файлах (Event.php и Video.php)
http://pastebin.com/k1rmY1NZ

Event.php был описан ранее и вполне рабочий, Video.php описан по его подобию.

в контроллере описываю экшн для добавления записи в БД http://pastebin.com/bXJaeyQ5 (addvideoreport по аналогии с addevent). Но, экшн addEvent работает, а addVideoReport выбрасывает ошибку Property "Video.src" is not defined при попытке вызова save()
Аноним 03/12/15 Чтв 18:08:24 #524 №594939 
>>594930
ПАЦАНЫ, А УЧОНЫЕ ОНИЖ УМНЫЕ, НАХУЯ ИМ ФИНАНСИРОВАНИЕ ПОЧ ОНИ НЕ СОЗДАТУТ ЁБА БИЗНЕС ТИП ЧТОБ БАБЛО НА ИССЛЕДОВАНИЯ МУТИТЬ?)))
блядь как же ты меня выбесил своей тупостью
Аноним 03/12/15 Чтв 18:08:39 #525 №594940 
>>594937
очевидно, что ты в модели video не описал свойство src
Аноним 03/12/15 Чтв 18:11:40 #526 №594944 
>>594940
эм, а где его описывать, и каким образом, ибо в самом классе нет конструктора, который бы описывал. Свойство это вроде как нестатическое, и экземпляр класса я создаю непосредственно в функции
Аноним 03/12/15 Чтв 18:12:37 #527 №594946 
>>594944
вбрось Event.php и Video.php
Аноним 03/12/15 Чтв 18:13:57 #528 №594947 
>>594946
>http://pastebin.com/k1rmY1NZ
Аноним 03/12/15 Чтв 18:17:02 #529 №594952 
>>594947
проверь таблицу videos
есть ли там столбец 'src'?
Аноним 03/12/15 Чтв 18:23:07 #530 №594954 
>>594952
нет, в videos столбцы id, source, name столбец src там не нужен
Аноним 03/12/15 Чтв 18:29:47 #531 №594962 
>>594930

Что программист может инвестировать?
Аноним 03/12/15 Чтв 18:31:08 #532 №594963 
>>594930

А вообще, некоторые программисты развивают бизнес. Погугли например про инди-разработчиков или стартапы.

Ну а насчет 100% годовых - это маловероятно. Ты у нас я вижу хорошо разбираешься в экономике, подумай сам, почему.
Аноним 03/12/15 Чтв 18:54:50 #533 №594991 
14491580902000.jpg
>>594963
> Ну а насчет 100% годовых - это маловероятно. Ты у нас я вижу хорошо разбираешься в экономике, подумай сам, почему.
Делал порносайты 1000% годовых

>>594962
> Что программист может инвестировать?
Накопить тысячу долларов и за 11 лет стать миллионером

>>594932
> Хуйню написал
С этим у меня проблемы. Всегда переоцениваю интеллект людей, из-за чего принимаю кучу мер, дабы этим не смогли тактически воспользоваться ушлые персоны

>>594939
> ПАЦАНЫ, А УЧОНЫЕ ОНИЖ УМНЫЕ, НАХУЯ ИМ ФИНАНСИРОВАНИЕ ПОЧ ОНИ НЕ СОЗДАТУТ ЁБА БИЗНЕС ТИП ЧТОБ БАБЛО НА ИССЛЕДОВАНИЯ МУТИТЬ?)))
> блядь как же ты меня выбесил своей тупостью

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

Я вот как вспоминаю кодин. Все эти циклы, сверка имен переменных, пиздец. Простая примитивная работа, вся суть котрой сводится к тому, чтобы копировать в нужные места названия переменных, постоянно переключаясь между вкладками и ища эти самые названия переменных. На сам кодинг уходит процентов 10 времени
Аноним 03/12/15 Чтв 18:57:33 #534 №594996 
>>594991

> Простая примитивная работа, вся суть котрой сводится к тому, чтобы копировать в нужные места названия переменных, постоянно переключаясь между вкладками и ища эти самые названия переменных.
Ты IDE установить не пробовал? Ну или писать более качественный код как вариант?
Аноним 03/12/15 Чтв 18:59:42 #535 №595001 
>>594991
>Ну анончик, как бы у ученых цель - развивать науку, а у погроммистов - зарабатывать.
Ой блджад. Ладно, пусть будут не ученые, а инженеры. Умные люди, цель - зарабатывать деньги. Почему же они не становятся финансовыми воротилами?
Аноним 03/12/15 Чтв 18:59:43 #536 №595002 
>>594996
Названия переменных все равно придется копировать. А код у меня на нормальном уровне качества, всё устраивает
Аноним 03/12/15 Чтв 19:00:22 #537 №595005 
>>595001
> инженеры
Почти то же самое
Аноним 03/12/15 Чтв 19:01:12 #538 №595007 
>>595005
Что тоже самое?
Аноним 03/12/15 Чтв 19:03:44 #539 №595011 
>>595007
Чертежи и напильники, там инвестициями не пахнет. Это подвид ученого
Аноним 03/12/15 Чтв 19:04:32 #540 №595012 
>>595011
Программист тоже подвид ученого.
Аноним 03/12/15 Чтв 19:08:14 #541 №595015 
>>595012
Который пилит стартапы и видит всю бизнес-модель? Не смеши мои истлевшие трусы
Аноним 03/12/15 Чтв 19:09:34 #542 №595018 
>>595015
Что ты несёшь? Еще раз повторю: из инженера такой же ученый, как из программиста.
Аноним 03/12/15 Чтв 19:13:05 #543 №595022 
>>595001

Ты мой пост читал? Чтобы стать финансовым воротилой нужен капитал. Откуда он у инженера или программиста?

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

>>595002

Наркоман? В ИДЕ автодополнение есть.

Аноним 03/12/15 Чтв 19:41:06 #544 №595046 
14491608664780.png
>>594859
Вот ты пудель, что нельзя было сразу сказать что за этот эффект отвечает библиотека isotope?

Кстати в мануале есть демо-пример
http://codepen.io/desandro/pen/mEinp
Что интересно, там все ломается, если не прописать box-sizing: border-box. Если запускать не на codepen а локально, все вообще жестоко (пик).
В третьем бутстрапе по-моему тоже какие-то манипуляции с box-sizing. Это сейчас такая общая тенденция, w3.org случайно не планируют выставить значение по умолчанию border-box?
Аноним 03/12/15 Чтв 19:47:38 #545 №595052 
>>595046

Это довольно нездоровая тенденция. Думаю что не выставит так как это сломает верстку всех существующих сайтов.

При использовании border-box ели у картинки указан размер в HTML и добавлен паддинг/бордер, она масштабируется.
Аноним 03/12/15 Чтв 20:02:44 #546 №595065 
>>594954
тогда в videos.php убери src из массива в rules
Аноним 03/12/15 Чтв 20:03:09 #547 №595066 
>>595065
спасибо, уже разобрался
Аноним 03/12/15 Чтв 20:15:48 #548 №595079 
>>595022
> Наркоман? В ИДЕ автодополнение есть.
Может он еще код сам пишет? Переменные все равно нужно сверять

> Ты мой пост читал? Чтобы стать финансовым воротилой нужен капитал. Откуда он у инженера или программиста?


Тысячу долларов сложно заработать?

> Алсо посмеялся с чувака который выше всерьез считает тысячу долларов инвестицией.
Чем не инвестиция?

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

Аноним 03/12/15 Чтв 20:37:42 #549 №595098 
Поясните, аноны. Доделываю кое-какой сервис в роли первого проекта для портфолио. Интересуют правовые вопросы:
1) Обязательно ли писать правила использования?
2) Что если мне нужна, например, иконка из гугла. Я ее чутка отредактирую даже. Не будет ли это нарушением прав?
Аноним 03/12/15 Чтв 20:38:29 #550 №595099 
>>595098

2) будет
Аноним 03/12/15 Чтв 20:45:38 #551 №595105 
>>595098
Вряд ли твой говно-код кто-то захочет украсть, а если какой-то вован и спиздит, то разве жалко? Мои проекты на гитхабе, которые вбрасывал в тред, пара васянов форкнули, ну и на здоровье, на то он и оупен-сорс.

По поводу вещей из гугла, так там же пишут, можно использовать или нет. Бесплатных ресурсов уйма. Ну и даже если ты возьмешь что-то платное, я не думаю что ты попадешь в контору, где за такое убивают, как у меня во дворе.
Аноним 03/12/15 Чтв 21:14:29 #552 №595137 
>>595105
Я совсем не про свой код.
Правила использования - ToS. На крупных сайтах выложены почти везде, огромной простыней, мол, что они делают с данными.
Аноним 03/12/15 Чтв 21:44:00 #553 №595161 
>>595137

не обязательно его делать. В любом случае если ты не юрист ты его не сможешь составить.
Аноним 03/12/15 Чтв 22:16:56 #554 №595187 
>>594699
А я всё могу сделать.
Аноним 03/12/15 Чтв 22:19:09 #555 №595188 
>>595187
Пруф?
Аноним 03/12/15 Чтв 22:52:18 #556 №595216 
>>595188
Зачем?
Ну может быть и сделаю. Но не надейся.
Сколько лет преподу?
Аноним 03/12/15 Чтв 23:07:08 #557 №595228 
А есть где подробно расписано, как натягивать вёрстку на вордпресс. Только не на стандартный шаблон, там где обычный блог и можно обойтись стандартным циклом и функциями вида get_header() и т.д. А такой шаблон как например ОП дал для вёрстки? Как например сделать так чтобы заголовок в шапке можно было изменять из админки? Создавать запись с таким заголовком а потом выводить её по определённому ID из базы данных и без ссылки?
Аноним 03/12/15 Чтв 23:29:10 #558 №595245 
>>595228

Ты документацию вордпресса по темам и API читал? Там может быть эта информация. Разумеется надо понимать устройство и архитектуру вордпресса чтобы это сделать.
Аноним 03/12/15 Чтв 23:38:53 #559 №595253 
>>595245
Я читал, некоторые моменты. Вот например натянуть тему обычного на вордпресс вполне просто, там всё очевидно.
А если это сайт какой-то компании например, где нет стандартной блоговой вёрстки, то здесь я уже не очень понимаю.
Единственное что мне приходит в голову это создавать запси и вытаскивать их из базы по ID, для каждого блока текста например. Но не думаю что это правильно. Мне бы хоть полуслово услышать от тех кто таким занимается, тогда бы я быстрее
всё понял, а так не получается.
Аноним 04/12/15 Птн 01:16:00 #560 №595296 
14491809603060.png
Воу, воу, посоны, смотрите-ка, оставил ответы на две заявки на апворке и мне даже пришел ответ. Это успех ящитаю.
Аноним 04/12/15 Птн 01:36:12 #561 №595299 
>>595228
Я даже скачал макет ОПа, чтобы посмотреть. Макет прекрасно просто устанавливается на вордпресс. для этого есть мануалы на ютубе и в сети, гугли. когда я устанавливал свой макет на вп, у меня возникла проблема только с менюхой, ибо она в вп рендерилась в хедере, а по макету она шла уже в контейнере. ну я и оставил в хедере.
Аноним 04/12/15 Птн 03:16:31 #562 №595304 
>>594821
Так я и сохраняю модули. Сайдбары, хедеры, футеры, карточка товара - все это можно использовать повторно. Но сам факт, что у категорий, есть суб-категории (это еще надо подумать, как привязать или поискать суб-категории к опенкарту, ведь там есть контроллеры только для категорий). Т.е. структура сайта очень даже разветвленная, а еще эти категории и подкатегории должна быть возможность добавлять, удалять и редактировать. Потом он просил добавить комменты с премодерацией, такой функции в опенкарте не вижу, значит нужно свой велосипед городить с возможностью добавлять, удалять комменты и добавлять их только после одобрения админом, и рендерить их для модерации либо в админке (фикс и дописывание админки), либо отправлять на ящик. А это еще месяц-два. А потом еще думать, как это прихерачить к контроллерам и бд опенкарта, о которых мне доподлинно ничего не известно (ибо не я же писал), а значит нужно сидеть и разбираться, что и куда и откуда там идет, как это все работает с базой и как рендерятся айди, поскольку зависимость у таблиц там сложная, по айдишкам добавляются и рендерятся контроллеры и категории, имя таблиц и сущностей для фикса генерируется динамически, т.е. ты даже не знаешь, что именно у тебя произошло в контроллере или модели и какой запрос был к бд при выводе той или иной страницы и где вообще там работа с дб, поскольку паттерн Data Mapper они там, судя по всему, не юзают и в работают с бд прямо из контроллеров.

Фикс незнакомой цмс - это как ходить по канату на ощупь с завязанными глазами.

Время для работы на таким вот инет-магазином я бы оценил - месяца три минимум, максимум пол-года. Ну а стоимость, по 1 000 у.е. в месяц - 3 000 у.е. минимум. Да, это с учетом использования готовой цмс для фикса. Если взять фреймворк и с нуля еще и админку херачить (допустим очень простую и примитивную админку) - даже не знаю, сколько по времени и сложности выйдет, ибо не пробовал еще, но наверное все же выйдет быстрее и проще, чем работа с плохо фиксируемой готовой цмс, имеющей большой спектр возможностей для управления сайтом (плюс для пользователя). Но он именно так c издевкой и горой скобочек сказал "можно же готовое взять))" и сроки поджимают, нужно сделать "за 5 дней", а потом он нашел кого-то, кто согласился "взять готовое и сделать еще быстрее". Еще быстрее, чем 5 дней, Карл и прям "взять готовое". Не, я просто в ахуе с такого ТЗ.
Аноним 04/12/15 Птн 05:45:40 #563 №595315 
>>594784
Я разбираюсь в композере. Но я уже написал сайт со слимом, подключенным прямо в папке, я повторяю, что при удалении этой папки и подключении слима композером - структура сайта ломается и все перестает работать. Не знаю, почему. Видимо, некоторые вещи не поддаются "рефакторингу" и нужно с самого начала делать их определенным образом, ибо позднее они становятся неизменными.
Твиг я планирую подключить к юи2 в следующем прожекте. Неоднократно читал на стаке да и здесь, что у слима проблемы с подключением твига. Видать, особенности фреймворков. Также читал на стаке, что автозагрузка в слиме работает только, если слим подключен композером. Опять же "особенности" этого кривого фреймворка, автозагрузка классов в другом проекте у меня работает без перебоев и ее принцип я понимаю.

>можем выводить заголовки, ставить куки и делать редиректы

Все у меня ставится и редиректится на локалке, переменные в хедер передаю через append data.

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

>document['write']
Я решил реплейсить вообще все спецсимволы, потмоу что мне уже один раз так стерли сайт через document.write.
______________________________
Вот смотрите, шкальники, мой прожект тянет только на 3 с минусом. А вебом я занимаюсь уже почти 2 года. Теперь вы понимаете, что изучать один только маленький узенький похапе можно всю оставшуюся жизнь, а делать какой-то жалкий файлообменник десятилетиями? Я вас предупредил.
Аноним 04/12/15 Птн 09:22:15 #564 №595337 
Поясните за фриланс. Допустим есть заказ на правки в верстке и допиливание функционала. Как это выполняется? Мне доступ к админке что ли дадут? А если я там снесу всё к хуям и редирект на лошадей с хуями поставлю?
Аноним 04/12/15 Птн 09:34:54 #565 №595343 
Обновил win7 до win10 теперь апачь не запускается. Ну капец блин. Глевное не пишет ничего. Тупо не запускается и всё.
Аноним 04/12/15 Птн 09:51:10 #566 №595346 
14492118707750.png
>>595343
Ну капец теперь. Трекера нет, скайп работает на другом порту. Смотрю кто занял 80?
System!
Кто сталкивался с таким?
Аноним 04/12/15 Птн 10:22:12 #567 №595358 
>>595315
> А вебом я занимаюсь уже почти 2 года.
Расскажи поподробнее чем ты занимался два года. ЦМСками? Или ты писал на чистом пэхапэ? Просто странно что ты ни до композера не дошел, ни до фреймворков

А по поводу слима и твига там все элементарно работает, правда если ставить через композер. Просто дополнительно нужно подключить slim\views для интеграции smarty или твига.
Аноним 04/12/15 Птн 10:48:32 #568 №595376 
>>595346
Я сталкивался. Гугли, надо отключить пару системных служб.
Аноним 04/12/15 Птн 11:21:05 #569 №595403 
14492172652730.png
>>595376
Замечательно. Только я не знаю каких!
Аноним 04/12/15 Птн 12:07:54 #570 №595429 
14492200748140.png
>>595403
Короче я совсем не понял что произошло, уже процесс эксплорером вырубил 99% софта. Всё-равно кто-то 80 порт занимает. по ID написано System. Никаких других идентификаторов нет. Вообще какой-то бред.
Аноним 04/12/15 Птн 12:27:27 #571 №595440 
>>595403
>>595429
Мне вот это помогло.
http://habrahabr.ru/post/145189/
Аноним 04/12/15 Птн 12:51:33 #572 №595449 
14492226936170.jpg
>>595440
Спасибо тебе анон, но не помогло всё что было в статье. Походу вирус серьёзный.
Аноним 04/12/15 Птн 12:52:45 #573 №595450 
>>595315

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

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

> я повторяю, что при удалении этой папки и подключении слима композером - структура сайта ломается и все перестает работать.
Ты программист или шаман с бубном? Если не работает надо разобраться почему и исправить причину проблемы. А не говорить «почему-то не работает».

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

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

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

> Опять же "особенности" этого кривого фреймворка
Это неправда. Как минимум потому что автозагрузка в Слиме работает только для классов Слима и не отвечает за другие библиотеки.

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

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

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

Более того, в продвинутых IDE вроде PhpStorm по моему есть опция для переименовывания функций и классов. IDE все за тебя сделает, надо только разобраться.

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

Аноним 04/12/15 Птн 12:55:48 #574 №595452 
>>595315

> Protected как и статик используются, только если на протяжении всего проекта объект создается только один раз и его содержание должно оставаться неизменным.
Неверно. Модификатор доступа protected определяет что доступ к полю имеет только класс и его наследники. Модификатор static используется для полей и методов, не относящихся к конкретному объекту, которым не нужен $this.

Сколько раз создается объект тут никакого значения не имеет.

> Я решил реплейсить вообще все спецсимволы, потмоу что мне уже один раз так стерли сайт через document.write.
Это потому что ты не хочешь разбираться с причинами уязвимостей а хочешь стучать в бубен. С таким подходом сотрут еще не раз.

Аноним 04/12/15 Птн 12:58:18 #575 №595453 
>>595403
>>595429

Команду netstat -ab надо выполять с правами администратора. У тебя прав не хватает чтобы определить программу занявшую порт.

Вот первая статья по теме http://www.outsidethebox.ms/10629/

Аноним 04/12/15 Птн 13:00:34 #576 №595455 
>>595429

Если System занимает 80 порт то это может быть вирус либо какая-то майкрософтовская служба.

Погугли по windows port 80 system и найдешь например такую статью: http://berezovskiy.org.ua/2012/03/esli-port-80-zanyat-sistemoy-protsess-system-pid-4/

Аноним 04/12/15 Птн 13:00:47 #577 №595456 
>>595453
>Команду netstat -ab надо выполять с правами администратора.
Смотри скриншот же. Она так и выполняется.
Аноним 04/12/15 Птн 13:03:04 #578 №595457 
>>595455
>Для решения проблемы и освобождения занятого системой 80-го порта достаточно остановить сервис «Web Deployment Agent Service».
Сам грешил на него, но в службах его и в помине нет, что странно, поскольку я что-то подобное ставил пару месяцев назад. По моему webmatrix.
Аноним 04/12/15 Птн 13:10:05 #579 №595463 
14492238052670.jpg
>>595457
>>595456
>>595455
>>595453
Парни, спасибо всем.
>Рассмотрим детальнее четверый случай, т.е. Web Deployment Agent Service/MsDepSvc
Майкрософт в win10 просто русифицировал названия. Методом отключения всего и вся я установил что теперь это Служба веб публикаций!
Так и остался вопрос, зачем ей заслонять 80 порт, и зачем она не пишет свои ID при скане.
Спасибо за помощь! Вы няшки!
Аноним 04/12/15 Птн 13:19:25 #580 №595468 
>>595216
В районе тридцати. Я и не надеюсь особо, но буду признателен, если хотя бы чем-то поможешь.
Аноним 04/12/15 Птн 14:49:32 #581 №595528 
>>595358
композер я знаю и фреймворк целый один знаю. занимался версткой, макетами, мамку твою поебывал, читал доки, задачки, куда ж без них, целую одну решил, файлообменник год писал.
Аноним 04/12/15 Птн 14:50:59 #582 №595532 
>>595358
ебать, как у тебя все просто, ну подключай хуле, у меня и еще у кучи народа со стака вот не подключается, а у тебя подключается, прикинь.
Аноним 04/12/15 Птн 14:53:07 #583 №595537 
>>595532
Ну значит не судьба, браток. Попробуй себя в другом ремесле.
Аноним 04/12/15 Птн 14:53:28 #584 №595538 
>>594689
>С помощью final запретить перегрузку метода show_debts в классе students. Объяснить возникновение ошибки.
Это уже вообще шизотребование. Через эксепшн запретить перезагрузку и объяснить, почему вылетает ошибка, у меня просто рекурсия от этого требования, какие же конченные все эти рашкопреподы, поссал бы ему в ебло и кинул эту шарагу.
Аноним 04/12/15 Птн 14:55:35 #585 №595541 
>>595537
в ебле твоей мамашки я себя уже попробовал, не понравилась, больно страшная и жирная и пизда гонореей воняет, своди ее к гинекологу штоли)
а так я же не нищеброд, как вы, чтобы кодингом еще и зарабатывать, ахаха ну вы и лахи, пиздец. кодингом зарабатывать, хаха, циклами и скобочками какие-то там копейки зарабывать, вы че мужики после этого, да говно вы женоподобное с толстой жопой.
Аноним 04/12/15 Птн 14:57:33 #586 №595545 
>>595541
Завидую тебе. Тоже давно мечтаю стать кассиром в магните.
Аноним 04/12/15 Птн 15:35:37 #587 №595587 
>>595541
>отчаянье
Может лучше попробовать разобраться в теме?
Про подключение композера к слиму могу тебе пошагово (как вы любите) расписать, что куда копировать и где прописывать. Нужно только один раз внимательно разобраться, а не засирать этот тред (и как я подозреваю алкотреды и "мы вам перезвоним").

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

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

----------------------------------
Только что за три минуты поставил twig на слим.
1. composer require slim/slim twig/twig slim/views
2. Как обычно .htaccess с подменой запроса на index.php.
3. В index.php
$app = new Slim\Slim(
array(
'view' => new Slim\Views\Slim(),
'templates.path' => '../views',
));
4. Пишем тестовый маршрут и запускаем приложение (кстати было пару раз забывал $app->run() и психовал, что не работает)
$app->get('/hello/:name', function ($name) use ($app) {
$app->render('template.twig', array('name'=>$name));
});
$app->run();
5. Содержимое body файла template.twig
<h1>Hello, {{name}}!</h1>
6. Запускаем site.name/hello/вован и все прекрасно работает.

Структура директорий
- d vendor
- d web
-- f index.php
-- f .htaccess
f composer.json
Где папка web должна быть доступна для доступа из веб. Как настроить виртуальные хосты расписывать не буду, но там тоже 3-4 шага.
Аноним 04/12/15 Птн 15:36:28 #588 №595588 
>>595538
Там не про эксепшены, а про финальные классы и методы.
Аноним 04/12/15 Птн 15:48:38 #589 №595597 
Обновил композер, он теперь протестует против xdebug.
Причем даже против отключенного.
https://getcomposer.org/doc/articles/troubleshooting.md#xdebug-impact-on-composer
Вроде пишут, что это сообщение можно отключить при помощи установки переменной окружения среды, но я плохо в этом разбираюсь.
https://getcomposer.org/doc/03-cli.md#composer-disable-xdebug-warn
Это нужно прописать в каком-то конфиге, или запустить что-то из командной строки?
Аноним 04/12/15 Птн 15:49:15 #590 №595598 
>>595587
Я просто поражаюсь твоей выдержке ОП.
Алсо, если есть время, посмотри мой файлообменник тоже
Аноним 04/12/15 Птн 16:05:23 #591 №595609 
>>595587

Ну вот, человек тут развел 3 страницы стенаний, а оказывается это за 10 минут подключается (если разобраться конечно в композере).

>>595541

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


Аноним 04/12/15 Птн 16:08:58 #592 №595610 
>>595597

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

Переменную окружения можно выставить так:

- временно, только в текущей консоли:

linux/mac: export VAR=value
windows: set VAR=value

Просмотреть список переменных окружения:

linux: printenv
windows: set

- постоянно, навсегда:

linux: дописать команду export ... в конец файла ~/.bashrc (~ значит твоя домашняя директория вроде /home/ivan)
windows: правой кнопкой на мой компьютер - свойства - найти кнопку переменные окружения и добавить. Понадобится перезагрузка или перезайти в аккаунт.
Аноним 04/12/15 Птн 16:11:41 #593 №595612 
Есть ли возможность отслеживать процент загрузки страницы до события $(document).ready() ?
Хочу сделать прогресс бар загрузки но гугл нихуя толком не выдает
Аноним 04/12/15 Птн 16:16:15 #594 №595615 
>>595587
>Slim\Views\Slim
Slim\Views\Twig
fix
Аноним 04/12/15 Птн 16:21:36 #595 №595619 
>>595612

Есть, в HTML натыкать скриптов:

... html код ....
<скрипт>setProgress(10);</скрипт>
.... html код ...
<скрипт>setProgress(20);</скрипт>
....

Но я сильно сомневаюсь что это нужно. Обычно HTML файл загружается за долю секунды и какой смысл показывать прогресс бар на такое короткое время?

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

Более того, мне не нравится идея вообще делать прогресс-бар на вебстранице. Ты дублируешь функционал браузера - например в Сафари прогресс бар рисуется в адресной строке.

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

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

Потому мое мнение такое: тебе надо сконцентрироваться на других вещах, а именно:

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

Также, напомню тебе что по исследованиям каждая лишняя секунда ожидания загрузки повышает шанс того что пользователь просто закроет вкладку и откроет другой сайт.
Аноним 04/12/15 Птн 16:57:43 #596 №595632 
Будет лучше, за место эмулятора, просто установить Дебиан на флешке?
Аноним 04/12/15 Птн 17:30:25 #597 №595661 
>>595619
Заказчик хочет прелоадер как здесь http://javastartup.com.ua/ , я не представляю к чему привязать движение, прелоадер нужен так как много фоновых фото с большим разрешением. и загрузка составляет ~5 секунд
Аноним 04/12/15 Птн 17:41:25 #598 №595674 
>>595661

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

Отловить загрузку фото можно используя объект Img в яваскрипте и событие load. Или же используя событие load на тегах img.

Если ты не найдешь готовый плагин то придется писать и отлаживать код самому, для начинающего это довольно сложная задача.
Аноним 04/12/15 Птн 17:49:07 #599 №595683 
>>595674
ОП, а какой самый красивый сайт видел ты?
Аноним 04/12/15 Птн 17:55:58 #600 №595694 
>>595661
Кстати часто вижу такой дизайн последнее время, какие-то видосы на заднем плане, при скроллинге страницы выскакивают огромные блоки, в некоторых из них скроллинг работает горизонтально, то есть ты крутишь колесико то прыгают элементы в галерее например, потом когда они закончатся, тогда снова идет скроллинг сверху вниз.
Уебищно конечно, но модно.
По каким тегам гуглить это говно? А то вдруг от меня тоже потребуют хренотень в таком стиле.

>>595683
Он скорее всего любит дизайн 90-х с белым фоном, черным текстом и синими ссылками с подчеркиванием.
Другая крайность надо сказать.
Аноним 04/12/15 Птн 18:12:20 #601 №595708 
>>595674
Лендинг пейдж, я охуеваю с этих анимаций уже, ненавижу верстку всей душой
Аноним 04/12/15 Птн 18:36:27 #602 №595730 
>>595708
Кем работаешь, сколько опыта, сколько получаешь?
Аноним 04/12/15 Птн 18:44:34 #603 №595736 
>>595683

Наверно конкретный сайт я не назову, но мой любимый дизайн это черный текст на белом фоне с соблюдением всех правил типографики, полей, межстрочных расстояний. В medium например статьи достаточно хорошо оформлены: https://medium.com/@markinhifi/an-american-in-cuba-56e604c12b4b#.wvpe7kcuh

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

Ководство мне нравится: http://www.artlebedev.ru/kovodstvo/sections/

И вот такие страницы: http://tema.ru/travel/spb.2012.02/

Вообще в сайтах Лебедева есть что-то свое, эти параграфы, выноски на поля, это интересно смотрится.

Кстати и сайт с учебником сделан в любимом стиле ОПа если вы заметили.
Аноним 04/12/15 Птн 18:47:52 #604 №595742 
>>595694

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

хотел еще похвалить Слон, но зашел - а там какой-то ад, бесконечная прокрутка, хочет иметь право слать мне нотификации, какие-то адские карточки из картинок, процессор грузится - я этим пользоваться не могу.
Аноним 04/12/15 Птн 18:50:49 #605 №595746 
>>595694

Также, это не дизайн из 90-х. Это дизайн из 15 века, когда стало распространенным книгопечатание.
Аноним 04/12/15 Птн 19:11:22 #606 №595753 
14492454827740.png
>>595746
Ты бы еще про клинопись вспомнил.
Веб дизайн вдохновлялся не работами гуттенберга, а журналами двадцатого века.
Лично мне ближе плоский дизайн, то есть такая середина, когда страница не перегружена дурацкими картинками, но при этом достаточно насыщенная и контрастная.
Как макет из задания по верстке например, или пикрелейтед.

Ну ладно, пошла уже вкусовщина, но тем не менее важно учитывать вкусы целевой аудитории.
Аноним 04/12/15 Птн 20:41:14 #607 №595830 
>>595632
Для тебя может и лучше, а вот для флешки вряд ли.
Аноним 05/12/15 Суб 00:21:05 #608 №596079 
Насчет ООП вопрос.
Нормально ли размещать геттеры и сеттеры свойств класса в классе самой сущности?
По идее это нарушает логику, и нам нужен какой-то воркер с этими сущностями. Например ножик не может сам сказать, из какого металла был сделан. Для этого нужен некий обозреватель.
Аноним 05/12/15 Суб 00:54:07 #609 №596104 
>>596079

Можешь сделать короткий абстрактный пример класса? Что-то не очень понятно.
Аноним 05/12/15 Суб 01:26:38 #610 №596125 
>У нас конечно нет мануалов и примеров использования ООП и MVC, но ты просто возьми php и научись на практике их использовать.
?У нас конечно нет руководства и примеров по пересадке печени, но ты просто возьми скальпель научись на практике ее пересаживать.
Пиздец, просто пиздец, хоть бы так и сказали до своего ебучего задания на файлообменник - иди-ка деточка и просто поковыряй какую-нибудь цмску, посмотри что там да как.
Аноним 05/12/15 Суб 01:32:51 #611 №596127 
>>596104
Допустим, есть класс "Мясо". У него свойства: цвет, запах, тип. Мясо не может их осознать, они имеют смысл только для наблюдателя.
Например паттерн Active Record нарушает этот принцип. В нем объект сохраняет сам себя.

Но в моем случае просто надо не использовать геттеры, а сделать свойства public и напрямую к ним обращаться.
Аноним 05/12/15 Суб 01:56:24 #612 №596142 
Перечитываю learn.javascript для закрепления, нашел там интересный трюк, который соответствует "духу" этого треда о задачах-головоломках.
Нужно не прибегая к циклу и рекурсии написать функцию, которая возвращает склеенную N раз с самой собой строку.
Например sringMultiplier('АЗ', 3) должна вернуть 'АЗАЗАЗ'
Аноним 05/12/15 Суб 02:14:56 #613 №596151 
>>596127

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

И то что ты написал, неверно, в общем объект может делать какие-то операции со своими свойствами.

> Например паттерн Active Record нарушает этот принцип. В нем объект сохраняет сам себя.
Это немного другая вещь.

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


Аноним 05/12/15 Суб 03:38:52 #614 №596179 
>>588512 (OP)
>Чтобы делать эти задания, тебе надо установить Апач + PHP (можно заодно сразу и MySQL) на компьютер

Чтобы делать эти задания, тебе надо установить PHP и использовать его встроенный веб-сервер. И когда будешь готов к разработке полноценных приложений, нужно будет поставить LAMP стек.

ОП, не думаешь, что так будет правильней и удобней (может быть не сразу, но в долгосрочной перспективе точно) для обучающегося? Зачем тратить время на возню с виндой, когда линукс в любом случае осваивать придется?
Аноним 05/12/15 Суб 07:35:57 #615 №596201 
>>595661
>ПРЕПОДАВАТЕЛИ SENIOR УРОВНЯ
Преподаватели являются тренерами курсов в компании ЕPAM, стаж преподавания больше 6 лет, в IT сфере - от 10 лет
просто лол, тот, кто что-то хорошо делает, не пойдет учить этому за деньги.
Аноним 05/12/15 Суб 07:43:51 #616 №596202 
>>595694
А мне этот макет нравится, все модно-молодежно-адаптивно, с претензией на вкус к дизину и новомодные влияния, хипстерство, эти чашки с кофе, макбуки, графики, типа такой вестерн сириус бизнес. Особенно приятно становится, когда я думаю, сколько на этим макетом ебалась верстко-жиес макака.
Аноним 05/12/15 Суб 07:45:38 #617 №596203 
14492907381160.jpg
Почаны, объясните доходчиво, нахуя выдумали в HTTP-серверах такую хуйню, как виртуальные хосты, если дело все решалось через хостс, а права на каталоги можно настраивать и так было?
Аноним 05/12/15 Суб 09:49:30 #618 №596265 
Ребята, хотел в пхп и бекенд пойти, а iOS (благо есть весь инвентарь) соблазнил меня и я пошёл туда. Вы ведь простите меня?
Аноним 05/12/15 Суб 10:51:32 #619 №596287 
Есть картинка. Нужно из неё сделать 200 картинок с мельчайшими изменениями, незаметными глазу. Т.е. взять пиксель, рандомно изменить значение цвета в пределах, вставить обратно. Либо же просто взять картинку и пересохранить её в таком-то проценте качества, чтобы md5 изменилось. Как это лучше осуществить?
Аноним 05/12/15 Суб 12:44:35 #620 №596368 
14493086758160.png
>>596265
Нахуй иди деградант.
>>596287
http://stackoverflow.com/a/17541462

Рребят поясните за редирект назад по истории в Slim PHP. Мне писать название последнего роута в сессии, или есть лучшее решение?
Аноним 05/12/15 Суб 13:20:00 #621 №596384 
>>596368
Чего ты так? Нормально же общались!
Аноним 05/12/15 Суб 14:11:02 #622 №596412 
14493138622320.gif
Что за хуйня с пхп и апачем
Не получается запустить все вместе, делаю все по инструкции из оп-поста

Апач работает, выдает "It works". ПХП работает, через консоль код выполняется.

Но с включенным апачем при запуске пхп файлов просто выдает сам текст кода

А при выключенном апаче и запущенном встроенном в пхп сервере просто выдает ошибку браузер

Веб-страница недоступна

ERR_CONNECTION_REFUSED

Попытка Google Chrome подключиться к localhost была отклонена. Сайт недоступен или ваша сеть настроена неправильно.
В командной строке надпись Invalid request <Unexpected EOF>

eof это end of file, но там все в порядке

Document root стоит C:\Scripts, там и находится пхп файл

Как это лечить? Я все проверял уже.
Аноним 05/12/15 Суб 14:15:06 #623 №596413 
>>596412
В логе ошибок что-нибудь есть?
Аноним 05/12/15 Суб 14:30:28 #624 №596421 
>>596412

> А при выключенном апаче и запущенном встроенном в пхп сервере просто выдает ошибку браузер

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

> Но с включенным апачем при запуске пхп файлов просто выдает сам текст кода
Покажи конфиг Апача. Больше всего меня интересует какими командами ты указываешь Апачу что php-файлы должен обрабатывать интерпретатор PHP.

Аноним 05/12/15 Суб 14:38:35 #625 №596423 
>>596368

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

Также, вопрос, а зачем вдруг это тебе понадобилось?

>>596203

Без виртуальных хостов любые запросы к серверу идут в одну папку, то есть ты не можешь поднять у себя больше одного сайта. Виртуальные хосты позволяют проверять имя хоста на который идет запрос (заголовок Host в HTTP запросе) и задавать индивидуально настройки для этого случая, например отдельный DocumentRoot.

>>596202

У меня он не плавно прокручивается и дергается. Я хорошо вижу когда анимация не плавная и это раздражает.

>>596179

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

> Зачем тратить время на возню с виндой,
Если это основная ОС то почему нет? Под апачом скрипт удобнее запускать чем поднимать ради этого виртуальную машину. Он как минимум памяти меньше ест.

Аноним 05/12/15 Суб 14:45:24 #626 №596427 
>>596421
Встроенный в пхп сервер починился, осталось только разобраться с апачем

>Покажи конфиг Апача. Больше всего меня интересует какими командами ты указываешь Апачу что php-файлы должен обрабатывать интерпретатор PHP.


#LoadModule php7_module c:/php/php7apache2_4.dll
#AddType application/x-httpd-php phtml php
#PHPIniDir "c:/php/"


Аноним 05/12/15 Суб 14:48:55 #627 №596430 
https://github.com/MindiMakridi/filehosting Файлообменник. Пока с минимумом функций, все равно большинство придется переделывать, ибо я пока плохо разбираюсь в MVC структуре, а так же не очень понимаю, что должно быть в lib, а что в models.
Аноним 05/12/15 Суб 15:04:25 #628 №596435 
>>596142

Через Array#map? только это и есть по сути замаскированный цикл.

>>596125

Перед заданием на файлообменник надо сделать задание про студентов (помогает изучить MVC) и Вектор + Кошки-Мышки (помогают разобраться в ООП).

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

>>595632

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

>>595598

Это был не ОП а добрый анон.

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

>>595463

> Так и остался вопрос, зачем ей заслонять 80 порт, и зачем она не пишет свои ID при скане.
В винде есть пара особенностей.

1) некоторые службы запускаются не как самостоятельный процесс, а как отдельный поток-гость внутри общего процесса-хозяина вроде svchost.exe (svchost = Service Host). У тебя в системе их как минимум 2, один с правами системы, другой с правами пользователя. Я подозреваю, что засовыванием служб в один процесс майкрософт пыталась сэкономить память, во времена Windows 95-98 ее очень не хватало, или время запуска.

https://en.wikipedia.org/wiki/Svchost.exe
http://blogs.msdn.com/b/larryosterman/archive/2005/09/09/463018.aspx

Тут есть такое объяснение:

> Well, unlike *nix, on Windows, a process is a relatively expensive entity. It takes a non trivial amount of time to launch a process, and each process consumes a fair amount of system resources (something like 1M of virtual memory, just for the various process structures (virtual address map, handle table, etc), IIRC). Each process running drains the system of resources that could be used for your application, so it's important to reduce the number of system processes running.

Программа вроде process explorer показывает список служб внутри svchost.

Минус в том что если одна из служб например начинает потреблять 100% процессора, то сложнее понять какая именно (надо смотреть какой это поток и какая служба в нем запущена). Ну и это в теории менее надежно, проблемная служба при падении может уронить весь процесс svchost со всеми другими службами (хотя я с таким не сталкивался - видимо у майкрософт все отлажено и протестировано).

2) некоторые службы могут быть (ради производительности?) реализованы как драйвер ядра, тогда они работают из процесса System (id = 4). Может это конечно и позволяет немного повысить производительность, но зато в случае уязвимости в такой службе взломщик получает доступ в систему с максимальным уровнем привилегий.

В Линуксе обычно так не делают и службы (демоны) каждая запускаются как отдельный процесс.

> зачем ей заслонять 80 порт
эта служба видимо тоже работает как веб-сервер. Ты можешь при включенной службе и отключенном Апаче зайти браузером на http://localhost/ (или http://localhost/MsDeployAgentService ) и посмотреть что именно за страницу она отдает.

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

Судя по статье http://habrahabr.ru/post/192150/ из которой я ничего не понял, эта служба как-то связана с IIS, если ты используешь Апач то не надо было устанавливать IIS.

Тут https://technet.microsoft.com/ru-ru/library/dd569087(v=ws.10).aspx написано что это служба для того чтобы удаленно, с другого компьютера, делать какие-то операции. Не знаю зачем ты ее установил себе.
Аноним 05/12/15 Суб 15:05:00 #629 №596436 
>>595463

ID она не пишет так как ты запускать netstat из консоли с пониженными привилегиями. Надо запускать консоль с правами администратора.
Аноним 05/12/15 Суб 15:06:53 #630 №596438 
>>596430

Это https://github.com/MindiMakridi/filehosting/blob/master/models/download.php не модель а контроллер. И по задумке ты этот код должен писать прямо в index.php, не вынося в отдельный файл.

Также, вопрос, делал ли задачу про студентов?
Аноним 05/12/15 Суб 15:07:12 #631 №596439 
>>596427

# значит что строка закомментирована и игнорируется.
Аноним 05/12/15 Суб 15:21:46 #632 №596444 
>>596438
Делал, на гитхабе есть репозиторий. Я сначала всё это писал в index.php, но потом подумал, что неплохо было бы выносить всё в отдельные файлы, чтобы Index был компактнее.
Аноним 05/12/15 Суб 15:24:03 #633 №596445 
>>596438
И вообще, я думал, что контроллер это функции app->get и app->post в индексе, а то, что внутри них это соответственно модель.
Аноним 05/12/15 Суб 15:27:52 #634 №596447 
>>596423
>Также, вопрос, а зачем вдруг это тебе понадобилось?
Скажем пользователь может добавить к себе в друзья другого пользователя кликнув на кнопку либо у себя на страничке /user/me либо на страничке этого пользователся /user/123.

При клике переходим на /add_friend.php, который делает что надо, и встает вопрос куда вернуться, /user/me или /user/123
Аноним 05/12/15 Суб 15:30:05 #635 №596448 
>>596447
И не надо про AJAX. Я хочу минимума JS.
Аноним 05/12/15 Суб 15:35:29 #636 №596456 
>>596445

В задаче про студентов кратко написано про MVC:

https://github.com/codedokode/pasta/blob/master/student-list.md#mvc

То что работает с заголовками, GET/ POST переменными - это контроллер.

>>596447

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

Аноним 05/12/15 Суб 15:36:08 #637 №596457 
>>596447

только не забудь проверять что этот параметр from принимает разрешенные значения а не что угодно. не редиректь на неизвестные адреса предоставленные пользователем.
Аноним 05/12/15 Суб 15:50:00 #638 №596472 
>>596445
Это не совсем контроллеры, скорее по аналогии похоже на действия контроллеров.

Чтобы посмотреть на модели и контроллеры в деле, попробуй поковырять YII например.
Модель это класс, представляющий сущность. Например у тебя в случае файлообменника есть пользователи и файлы, может еще комментарии. Значит нужны во-первых таблицы в бд, во-вторых классы User, File, Comment и т.д.
Дальше нужны классы для работы с базой, такие классы описываются паттерном DataMapper.
Класс UserMapper будет содержать методы для работы с базой типа save или getFileByID, в которых будут выполняться соответствующие sql-запросы.

А контроллеры это классы для работы с определенной группой маршрутов.
Когда идет запрос на example.com/user/view/123 вызывается метод actionView($id) класса UserController
public function actionView($id) {
$um = new UserMapper; // у слима есть контейнеры для синглтонов, так что на самом деле каждый раз создавать маппер нерационально, но здесь для простоты
$user = $um->findByID($id); // вытаскиваем из базы пользователя по id, полученному из адресной строки типа /user/view/123
$this->render('userProfile.twig', ['user'=>$user]); // вызывается метод render либо контроллера, либо приложения, который берет шаблон профиля пользователя и заменяет в нем плейсхолдеры значениями переменных и выводит полученный html на экран

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

Короче, контроллер это штука, у которой есть методы, которые вызываются под нужный запрос из адресной строки /user/123, /file/456 или /site/search?word=слово
Модель это класс для работы с сущностью, контроллер для группировки методов обработки запросов грубо говоря.
Аноним 05/12/15 Суб 15:50:00 #639 №596473 
>>596457
Спасибо.
Аноним 05/12/15 Суб 16:41:01 #640 №596509 
>>596435
Хоть и замаскированный, но неявный же.
return new Array(4).join('abc');

indexOf тоже осуществляется перебором, зато это всего семь букв вместо цикла с ифом и кучей фигурных скобок.
Аноним 05/12/15 Суб 16:47:00 #641 №596511 
>>596472

Я тут немного дополню.

«действия контроллеров» (на самом деле контроллер действия) и контроллер это фактически одно и то же. Просто в одних фреймворках действия объединяют в классы, а в других каждое действие может быть отдельным классом - это самой сути не меняет.

Более того, если погуглить слово «действие» по английски пишется как Action Controller (гугл: https://www.google.ru/search?q=controller+action&newwindow=1&gbv=1&sei=K-piVovLLOegyAPqz6uABw ) то есть полностью это переводится как «контроллер действия». «Действие» значит какое-то действие пользователя, например загрузка страницы, отправка формы, а контроллер действия - это компонент который отвечает за его обработку.

Надеюсь я не запутал.

> Модель это класс, представляющий сущность.
Я вижу, что слово «модель» используется в 2 смыслах:

«модель» как класс, который соответствует какой-то реальной сущности из предметной области. Ну например класс User является моделью реального пользователя, а Comment - моделью комментария.

«модель» как буква M из MVC. В MVC моделью называют часть приложени, отвечающую за хранение и обработку данных. в MVC в модель входят и классы работы с базой данных, и вспомогательные классы-сервисы.

Соответственно из-за этого путаница.

> такие классы описываются паттерном DataMapper.
ОП решил немного пересмотреть урок и называть то, что мы делаем, TableDataGateway, так как часто мы добавляем в такой класс методы которые не занимаются маппингом сущностей на таблицы, а например считают число комментариев к посту. Вот обновленный урок: https://github.com/codedokode/pasta/blob/master/db/patterns-oop.md


Аноним 05/12/15 Суб 17:05:33 #642 №596523 
14493243336470.png
Бллядь, что за магия? Все работало нормально, сегоня апач шлет меня нахуй. Что за хуйня? индекс.хтмл открывается нормально.
Аноним 05/12/15 Суб 17:15:53 #643 №596533 
А что такое View? Например в Студентах и Файлообменнике что будет во View?
Аноним 05/12/15 Суб 17:17:19 #644 №596535 
>>596511
Я нихуя не понял.
Ты можешь коротко и ясно объяснить разницу между TableDataGateway и AR?

Я понимаю, в DataMapper могут быть только методы для работы с базой, в AR есть еще свойства по колонкам в таблице и методы несложных преобразований.
А TDG? По определению вроде вообще не отличается от AR.

Гуглить пробовал, но ничего внятного не нашел.
Везде пидорасы только цитируют заумные куски из Фаулера, как будто это что-то понятное.
> Table Data Gateway: An object that acts as a Gateway (466) to a database table. One instance handles all the rows in the table.
> Active Record: An object that wraps a row in a database table or view, encapsulates the database access, and adds domain logic on that data.
TDG вроде как взаимодействует "со всей таблицей", со всеми ее строками. И как это понять?
AR не может что ли иметь метода, работающего с несколькими строками? Метод findAll я могу использовать в классе AR?

Или TDG в отличие от AR не может иметь табличных свойств, как DM?

>>596533
html-шаблон с плейсхолдерами
Аноним 05/12/15 Суб 17:27:55 #645 №596542 
Кажется, главная разница в том, что ActiveRecord может работать только с одной строкой таблицы, плюс имеет свойства сущности.
TDG может работать с группой записей, и подобно DM не имеет свойств сущности, нужно передавать отдельный объект с этими свойствами.

Получается, разработчики YII нарушили паттерн ActiveRecord, напихав туда методов для работы с группой записей типа findAll или deleteAllByAttributes?
Это уже какая-то комбинация AR + TDG.
Аноним 05/12/15 Суб 17:32:38 #646 №596545 
>>596523
Ого, понятно, в пхпшторме надо вручную путь для нового проекта прописать.

Я так админить раньше научусь, чем быдлокодить.
Аноним 05/12/15 Суб 17:36:56 #647 №596550 
14493262165070.png
14493262165081.png
>>596545
Да блядь.

Помогите дебилу, у меня уже нервов не хватает. Что ему от меня нужно?
Аноним 05/12/15 Суб 17:38:39 #648 №596552 
>>596523

Ты перезагрузил компьютер и применились новые настройки из конфига.

>>596533

Только HTML шаблоны. Это компонент который отвечает за вывод (предствление) информации. То есть ему контроллер дает данные, и он их выводит.

>>596535

> Ты можешь коротко и ясно объяснить разницу между TableDataGateway и AR?
AR это когда модель (да, она представляет одну запись из таблицы) сохраняет сама себя в базу:

$user->rating = 100;
$user->save();

То есть у нас модель и код для работы с базой объединены в одном классе.

TDG это отдельный класс содержащий методы для работы с таблицей:

$user = $userGateway->findById(100); // получить пользователя из базы по id
$count = $userGateway->getTotalUserCount(); // получить общее число пользователей в базе

По моему так они сильно отличаются.

И есть еще один паттерн. Data Mapper это класс который занимается загрузкой и сохранением моделей в таблицу БД. Ты можешь заметить что по определению он может подходить под TDG, но обычно Data Mapper устроены более сложно. Например в случае с TDG если ты хочешь изменить что-то в таблице, ты делаешь это явно:

$userGateway->updateRating($userId, 100); // ставит рейтинг пользователя равный 100

или так:

$user->setRating(100);
$userGateway->updateUser($user); // обновляет данные в таблице из объекта $user

А DM в отличие от TDG обычно умеет обнаруживать изменения сам. Например:

$user1->setRating(100);// меняем рейтинг в модели 1 пользователя
$user2->setRating(50); // и второго
$entityManager->flush(); // просим Data Mapper сбросить сделанные нами изменения в базу. Что именно мы меняли мы не указываем - он сам найдет

Посмотри еще описание от Фаулера и попробуй поискать различия:

http://design-pattern.ru/patterns/data-mapper.html
http://design-pattern.ru/patterns/table-data-gateway.html
http://design-pattern.ru/patterns/active-record.html
Аноним 05/12/15 Суб 17:39:44 #649 №596554 
14493263845950.png
>>596550
А если прописать вручную, то все работает.
Я бы не парился, но вчера все было нормально.
Аноним 05/12/15 Суб 17:41:27 #650 №596556 
>>596552
Но я-то ничего не менял, аптайм компа уже недели две. Если вручную путь до файлика в браузере прописывать, то все работает. Чувствую себя блондинкой.
Аноним 05/12/15 Суб 17:44:46 #651 №596558 
>>596550
У тебя разные адреса на скриншотах.
Аноним 05/12/15 Суб 17:45:11 #652 №596559 
>>596535

> TDG вроде как взаимодействует "со всей таблицей", со всеми ее строками. И как это понять?

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

В общем TDG это просто класс где собраны все запросы к одной таблице. Ну например в UserGateway мы собираем все методы работающий с таблицей пользователей.

> AR не может что ли иметь метода, работающего с несколькими строками?
Один объект AR соответствует одной записи в таблице так что да, не может.

> Метод findAll я могу использовать в классе AR?
Обычно этот метод там прикручивают сбоку, либо как статический метод либо в отдельном классе. Вот в Юи:

$customer = Customer::find()->where(['id' => 1])->one();

Заметь что метод для поиска данных в таблице where() находится не в классе Customer а в другом классе.

Либо же это делают через статические методы:

$users = User::findAll();

Но метода $user->findAll() конечно не может быть, так как это абсурдно. $user это одна запись в таблице и она никак не отвечает за поиск других записей.

> Или TDG в отличие от AR не может иметь табличных свойств, как DM?
По моему у тебя все запутано. Внимательно перечитай урок, а потом еще мой пост и посмотри картинки на сайте с описанием паттернов.
Аноним 05/12/15 Суб 17:49:15 #653 №596562 
>>596542

> Получается, разработчики YII нарушили паттерн ActiveRecord, напихав туда методов для работы с группой записей типа findAll или deleteAllByAttributes?
Эти методы не в классе модели. Ты код смотрел?

$posts=Post::model()->findAll($condition,$params);

Там ведь не написано

$posts = $post->findAll();

Если открыть документацию: http://www.yiiframework.com/doc/api/1.1/CActiveRecord то мы видим что метод findAll() статический, то есть относится ко всему классу Post а не к одному объекту этого класса $post.

И объясни где тут нарушение? В AR класс-модель содержит и методы работы с базой. Это не нарушение, а наоборот точное следование приницпам AR.

Аноним 05/12/15 Суб 17:51:14 #654 №596564 
>>596554

Вчера у тебя был либо другой конфиг Апача, либо ты сохранял файл в другое место. Алсо, жалобы на PhpStorm тут не принимаются, если ты не можешь осилить профессионльную IDE (то есть ленишься прочесть мануал или погуглить), скачай Notepad++ и редактируй им.


Аноним 05/12/15 Суб 17:51:36 #655 №596565 
>>596556

поменялся конфиг Апача.
Аноним 05/12/15 Суб 17:54:14 #656 №596567 
14493272550100.png
>>596558
Да это я промазал просто, нервов не хватает уже.
Ткните меня рожей, куда гуглить или что жать.
Аноним 05/12/15 Суб 17:56:07 #657 №596571 
>>596565
Окей, допустим. Но что там могло поменяться?
Аноним 05/12/15 Суб 17:56:37 #658 №596572 
>>596567
Увидел свитч кейсы в коде.
@
В заголовке закладки "Клуб изучающих PHP".
@
Начал понимать откуда такой о PHP стереотип.
Аноним 05/12/15 Суб 17:59:58 #659 №596573 
>>596567

Конфиг Апача показывай.

>>596572

Что плохого в свитче? Ты вообще с какого треда?
Аноним 05/12/15 Суб 18:03:15 #660 №596581 
>>596572
Лол, а ты всё через if ебошишь? Индусский прогер.
Аноним 05/12/15 Суб 18:05:33 #661 №596583 
>>596572
Я неделю пхп учу, извини, что разочаровал. Олсо, это примитивная задачка на калькулятор, чего ты от меня хотел, реализацию через ООП с MVC?
>>596573
Ну, вот
http://pastebin.com/WBVjNhQt
Собственно, все так и осталось.
Я просто даже не знаю, как гуглить.
Аноним 05/12/15 Суб 18:06:34 #662 №596584 
>>596567
Ещё раз, ты пишешь testPro ссылка у тебя должна быть localhost\testpro\calc.php
а у тебя тупо локалхост.
Аноним 05/12/15 Суб 18:07:08 #663 №596585 
>>581862
http://ideone.com/SMLKQE
Переделал по твоим советам, посмотри. Вопрос такой: создал метод getWidth чтобы обращаться к приватным полям из других классов, нужно ли теперь в родном классе их использовать вместо $this?
> abstract protected function tryToMove($field, $game);
Неудобно везде передавать $field, лучше сделать его свойством класса. автоматически проставлять при добавлении животного на карту и убирать (ставить null) при снятии.
Ну я вроде сделал это, но не уверен правильно ли тебя понял.
Аноним 05/12/15 Суб 18:08:30 #664 №596587 
>>596585
>>в родном классе его использовать
быстрофикс
Аноним 05/12/15 Суб 18:11:53 #665 №596591 
>>596584
Да вручную через адресную строку работает, просто пхпшторм шлет меня на три буквы, долбаный нетбинс тоже, а вчера все работало.

Ладно, не буду засорять тред, непрофильная проблема, все-таки, спасибо за терпение.
Аноним 05/12/15 Суб 18:14:05 #666 №596593 
>>596585
http://arhivach.org/thread/127521/ ссылка на тот тред с твоим ответом, надеюсь он не утонет. Как же я медленно решаю.
Аноним 05/12/15 Суб 18:15:17 #667 №596594 
>>596583

Перезапусти апач. Если он у тебя как служба установлен то это команды net stop apache2.4 и net start apache2.4 в командной строке.

>>596585

> Вопрос такой: создал метод getWidth чтобы обращаться к приватным полям из других классов, нужно ли теперь в родном классе их использовать вместо $this?
Можно и так и так (обращаться напрямую к свойству или через геттер).

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


Аноним 05/12/15 Суб 18:16:31 #668 №596595 
>>596591

Наверняка в PhpStorm есть настройка которая указывает где находится корневая папка сервера. И если ее задать, то он начнет правильный URL писать в адресной строке.

Аноним 05/12/15 Суб 18:25:43 #669 №596597 
>>594901
бамп вопросу
Аноним 05/12/15 Суб 18:34:02 #670 №596601 
>>594901

Использовать регулярные выражения.

Также надо понимать что этот поиск быстро работает только пока записей мало. Если их мало, или если поиск где-то в админке, недоступной посетителям, то ок. Но если это поиск на публичной части сайта, и записей много то нужны другие подходы - например использовать полнотекстовые индексы либо внешний поисковый движок вроде Sphinx.
Аноним 05/12/15 Суб 18:39:59 #671 №596603 
14493299993600.png
Скочал mysql зип архив с официального сайта

Как запустить ёбаный mysql сервер? Я отредактировал path

Ввожу net start mysql и "не удалось запустить службу mysql служба не сообщает об ошибке"
Ессли ввести "C:\mysql\bin\mysqld", то вообще ничего не происходит
Аноним 05/12/15 Суб 18:40:18 #672 №596604 
Ребзя, посоветуйте лит-ры/статей по работе с библиотекой cURL (желательно где подводные камни). А то столкнулся с проблемой, что практически два идентичных файла с кодом запроса и авторизации вк дают совершенно разный эффект.

inb4 php.net
Аноним 05/12/15 Суб 18:54:35 #673 №596619 
14493308758220.png
>>596594
>>596595
Бесполезно, все равно шторм пытается открыть файл в корневой директории (а его там нет, естественно, он в другой папке). Помогло только в апаче директорию напрямую прописать, но это костыль.
С другой стороны, это лучше, чем адрес вручную в браузере прописывать, а все, что мне нужно сейчас - открывать задачки в браузере, так что похуй.
Но осадочек остался.
Аноним 05/12/15 Суб 18:59:34 #674 №596624 
>>596603

Сначала надо установить mysql. Скачать мало.
Аноним 05/12/15 Суб 19:01:52 #675 №596625 
>>596624
Я скачал тот, который no-install
Аноним 05/12/15 Суб 19:06:05 #676 №596629 
14493315652210.png
>>596619
Ох, чувствую я, что на линуксах-серверах-конфигах я буду сидеть дольше, чем на самом изучении пхп.
Аноним 05/12/15 Суб 19:07:52 #677 №596630 
>>596625

то что тут описано делал? http://dev.mysql.com/doc/refman/5.7/en/windows-install-archive.html
Аноним 05/12/15 Суб 19:08:03 #678 №596631 
>>596562
А, то есть объект класса AR не может работать более чем с одной записью, но сам класс своими статическими методами может вытворять что угодно? Логика мне не понятна.

И __CLASS__::model() вообще-то возвращает экземпляр данного класса, так что методы findAll вызываются именно у него
Разве $posts = Post::model()->findAll() нельзя разложить на две строки
$weirdFuckingStaticModel = Post::model();
$posts = $weirdFuckingStaticModel->findAll();

Я не понимаю, что такое
>Returns the static model of the specified AR class. The model returned is a static instance of the AR class.
Что еще за static model?
http://www.yiiframework.com/doc/api/1.1/CActiveRecord#model-detail
Аноним 05/12/15 Суб 19:21:28 #679 №596638 
>>596631

Открой в документации код функции. Действительно, он создает отдельный экземпляр модели (который называет static model) и передает ему null в конструктор.

> А, то есть объект класса AR не может работать более чем с одной записью, но сам класс своими статическими методами может вытворять что угодно? Логика мне не понятна.
Логика в том что вся работа с таблицей должна быть в этом же классе. Потому да, иногда используют статические методы. Так как им не нужен объект.

В Юи решили извернуться по-своему. AR это вообще не лучший паттерн из-за того что в одном классе смешаны функции модели и работы с базой.

Аноним 05/12/15 Суб 19:38:58 #680 №596643 
>>596562
>И объясни где тут нарушение?
>>596638
>Действительно, он создает отдельный экземпляр модели
Вот и я о том же. Создается экземпляр модели AR, причем какой-то странный, фактически пустышка с незаполненными полями, и у него вызываются методы типа findAll. Это противоречит заявлению о том, что экземпляр модели AR может работать только с одной записью.

Ну ладно, это видимо такая извращенная реализация в первом yii. Во втором сделали уже прямые статические методы без создания странных промежуточных объектов.

Что в Симфони используется из этих паттернов? Или там наверное доктрина с датамаппером?

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

Аноним 05/12/15 Суб 19:44:39 #681 №596647 
Аноны, что скажите по поводу моего решения задачи про палиндромы с фака?
Аноним 05/12/15 Суб 19:45:03 #682 №596648 
>>596647
http://ideone.com/wDf4Gw
ссылочку потерял
Аноним 05/12/15 Суб 19:46:37 #683 №596651 
>>596647
Не работает, вот что я тебе скажу.
Аноним 05/12/15 Суб 19:50:39 #684 №596652 
>>596651
Ага, уже понял, сейчас попробую допилить.
Аноним 05/12/15 Суб 19:53:24 #685 №596654 
Не перестаю удивляться, как ебанутые гики умудряются сделать простые вещи сложными для понимания.
Думаю, что если бы нужно было написать о различиях между ложкой и вилкой, это выглядело бы приблизительно так:
"Ложка есть экземпляр сущности из электропроводящего материала либо диэлектрика, имеющей выпукло-вогнутую форму и продолговатым держателем для захвата передней конечностью тела прямоходящего млекопитающего. Применяется для переноса жидкой питательной среды из негерметичного контейнера в полость головной части тела вышеупомянутого организма.
Вилка в отличие от ложки имеет вместо выпукло-вогнутой части три-четыре заостренных на конце зубца, предназначена для пронзания твердых сгустков органической субстанции и перемещения оных в пространственно-временном континууме в направлении полости головы человекообразного организма".
Аноним 05/12/15 Суб 20:00:32 #686 №596656 
>>596647
> echo "{$result}";
А зачем переменную выводить в двойных кавычках, да еще и экранировать? В этом есть смысл?
Аноним 05/12/15 Суб 20:09:05 #687 №596662 
14493353456970.gif
>>596638
>Логика в том что вся работа с таблицей должна быть в этом же классе.
Но ведь мы только что пришли к выводу что AR не работает со всей таблицей, только с определенной записью.
Еще раз:
> Active Record: An object that wraps a row in a database table or view, encapsulates the database access, and adds domain logic on that data.
AR по определению должен работать только с одной записью. Да, работа с таблицей должна быть в том же классе, но не со всей таблицей, а с конкретной записью же, adds domain logic on that data

Мне просто важно понять различия между этими паттернами, потому что если понадобится расширить класс той же AR, а я добавлю туда что-то некошерное, это же будет непорядок.

Пик из Фаулера по data mapper. Я вижу только методы вставки/обновления/удаления. Для полного crud'а не хватает read, то есть select. Допустимы тут методы выборки или нет? Если да, то только по одной записи, или по многим? (find или findAll?)
Аноним 05/12/15 Суб 20:41:25 #688 №596686 
Доделал. http://ideone.com/qhEHhf
Я совсем зеленый, нихуя не знаю, только тот фак читал с сайта на народе.
>>596656
Что такое экранирование?
Аноним 05/12/15 Суб 20:51:13 #689 №596688 
Что значит такая запись в js-коде
(function(){})()? По каким тегам это гуглить?
Аноним 05/12/15 Суб 20:52:55 #690 №596690 
>>596686
Ну ты переменную в {} засунул. Я это еще в первый день изучения пхп прочитал. Зачем вообще одну-единственную переменную через эхо выводить в кавычках, да еще и с экранированием?
Если что - я примерно на том же уровне, что и ты, так что это не издевка.
Аноним 05/12/15 Суб 21:08:09 #691 №596697 
>>596690
Спасибо, я почитаю.
Аноним 05/12/15 Суб 22:28:45 #692 №596743 
Как делается выборка промежутков? Вот есть например у товаров цены, нужно выбрать от n до m цены. Как это вообще делается? Это же явно в SQL есть что-то, но я никак не соображу, и нагуглить не могу. Подскажите хоть что искать.
Аноним 05/12/15 Суб 22:31:39 #693 №596745 
>>596743
WHERE price>n AND price<m ?
Аноним 05/12/15 Суб 22:34:34 #694 №596746 
>>596743
>что гуглить
sql для чайников

>>596745
Или between.
Не надо отвечать на такие вопросы. Сейчас он радостно скажет "спасибо!)))))", а завтра задаст следующий вопрос типа "а как выбрать не все записи из таблицы, а только первые 5? а как выбрать кол-во записей или максимальное значение?".
Аноним 05/12/15 Суб 22:35:45 #695 №596747 
>>596746
> а завтра задаст следующий вопрос
Пускай задает. От нас не убудет. Лишь бы за него код писать не просил.
Аноним 05/12/15 Суб 22:38:26 #696 №596748 
>>596745
Слушай, а мне бы еще сделать чтоб выбиралось только первые 20 записей, и вообще, может напишешь за меня код?
спасибо!)))))
Аноним 05/12/15 Суб 22:44:59 #697 №596751 
>>596697
Я просто тут недавно упоролся кавычками, в общем, теперь почти все пишу в одинарных, переменные выношу за кавычки. Не знаю, правда, насколько это оправдано с т.з. стилистики/оптимизации/читабельности (думаю ни на сколько, лол).
Аноним 05/12/15 Суб 22:56:18 #698 №596759 
14493453790000.png
14493453790231.jpg
Целый день ебался с запуском всей этой адской машины.

В итоге за минуту запустил вамп и искаробки все заработало.
хех
Аноним 05/12/15 Суб 23:06:25 #699 №596762 
>>596688

self invoked function expression

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

var fn = function () { ... };
fn();

>>596743

BETWEEN

>>596746

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

>>596759

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

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

Правда я тогда уже был знаком с линуксом, может в этом дело.
Аноним 05/12/15 Суб 23:13:24 #700 №596765 
>>596762
Я установил, но не работало! Я перепробовал все, но так и не смог mysql заставить работать вместе с пхп
Аноним 05/12/15 Суб 23:14:41 #701 №596766 
>>596765
> не смог mysql заставить работать вместе с пхп
Помню на старой винде такое было, после долгих танцев с бубном нашел на стаковерфлоу совет закинуть php.ini в папку windows и всё заработало.
Аноним 06/12/15 Вск 00:03:49 #702 №596780 
>>596662

Тем не менее, в AR в том же классе делают и методы для поиска данных.

Я видел разные реализации AR и могу сказать как делают на практике. А делают так:

- статические методы (ruby on rails)
- внешний класс вроде UserFinder который умеет искать и выбирать записи в таблице
- методы в том же самом объекте

Также, я решил обратиться к первоисточнику - книге PoEAA (пиратская версия легко гуглится, а при желании наверно можно найти и перевод. Или можно купить эту книгу.). В ней написано:

> The data structure of the Active Record should exactly match that of the database: one field in the class for each
column in the table.
...
> The Active Record class typically has methods that do the following:
> - Construct an instance of the Active Record from a SQL result set row
> - Construct a new instance for later insertion into the table
> - Static finder methods to wrap commonly used SQL queries and return Active Record objects
> - Update the database and insert into it the data in the Active Record
> - Get and set the fields
> - Implement some pieces of business logic

Как видишь Фаулер сам пишет что допустимо использовать статические методы для поиска записей в таблице. А дальше он добавляет:

> Because of the close coupling between the Active Record and the database, I more often see static find methods in this pattern. However, there's no reason that you can't separate out the find methods into a separate class, as I discussed with Row Data Gateway (152), and that is better for testing.

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

Главная идея паттерна AR это то что в объекте одного класса находится и бизнес-логика обработки этих данных, и логика загрузки/записи их в БД.

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

> Пик из Фаулера по data mapper. Я вижу только методы вставки/обновления/удаления. Для полного crud'а не хватает read, то есть select. Допустимы тут методы выборки или нет? Если да, то только по одной записи, или по многим? (find или findAll?)
Да, допустимы любые. На всякий случай я заглянул в книгу Фаулера.

> 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. With Data Mapper the in-memory objects needn't know even that there's a database present; they need no SQL interface code, and certainly no
knowledge of the database schema

...
> A simple case would have a Person and Person Mapper class. To load a person from the database, a client would call a find method on the mapper

То есть да, методы поиска тоже есть в классе-маппере.

В общем, советую почитать книгу. Заодно можешь попробовать разобраться в чем разница между TDG и Data Mapper.
Аноним 06/12/15 Вск 00:04:27 #703 №596781 
>>596765

mysql никак не связан с PHP. Он вообще-то сам по себе.
Аноним 06/12/15 Вск 00:05:29 #704 №596782 
Сейчас еще на вордпресс, жумолу и друпал натяну макет, бля, как же это скучно, эти однотипные цмски, эта адаптивно-резиновая верстка мать ее за ногу.
Даже на перцептрон времени нет, а ведь он интереснее.
Аноним 06/12/15 Вск 00:09:20 #705 №596784 
>>596643

В Симфони доктрина, и она очень крутая и вся по Фаулеру сделана, паттерн на паттерне.
Аноним 06/12/15 Вск 00:10:31 #706 №596785 
view-source:javastartup.com.ua
Кстати, что это еще за теги? <d1><sup>
Аноним 06/12/15 Вск 00:13:17 #707 №596787 
>>596785

А погуглить?
Аноним 06/12/15 Вск 00:17:32 #708 №596792 
http://javastartup.com.ua
Там график в свг отрисован и анимирован, я бы так не смог, пытался один раз свг анимировать по готовому мануалу - такая ересь вышла, отрисовать бы точно не смог, только с картинки конвертировать в низком качестве. А остальные плагины есть в сети вроде, со скроллбарами и менюхой.
Аноним 06/12/15 Вск 00:25:57 #709 №596798 
<div class="borders">
<div class="border-top"></div>
<div class="border-left"></div>
<div class="border-right"></div>
<div class="border-bottom"></div>
</div>

Оп бы на такое уже слюной изошел.
Аноним 06/12/15 Вск 00:36:30 #710 №596800 
>кококо у тебя слишком длинные контроллеры, выноси все в модель.
>вынес все в классы
>кококо что-то у меня такое ощущение, что ты просто функции в классы засунул и все, это не ООП и не MVC
пиздец оп ну ты и выродок
Аноним 06/12/15 Вск 00:43:36 #711 №596805 
>>596800
Ну так логикой же нужно руководствоваться при создании классов, а не рандомно раскидать все по файлам.
Алсо, чем болеешь?
Аноним 06/12/15 Вск 00:55:12 #712 №596811 
>>596805
Да этот болезный кассир макдональдса недавно активизировался. Очень забавный тип.
Аноним 06/12/15 Вск 00:58:36 #713 №596814 
Есть примеры хуков для MVC ? Сам чето не могу дойти
& !VoCKK8HFmc 06/12/15 Вск 01:55:12 #714 №596832 
Я и не подозревал, что юникодом можно ломать разметку.
 Аноним 06/12/15 Вск 01:55:36 #715 №596833 
Еще разок
Аноним 06/12/15 Вск 02:29:11 #716 №596856 
Парни, где-нибудь хотя бы на английском описано как работает движок php в паре с OpCache? Что движок отдаёт opcache'у, что конкретно пытается изобразить opcache при кешировании? Во что кешируется код - в jit / в нативку / в LLVM?
[ƒ] Аноним 06/12/15 Вск 03:05:43 #717 №596892 
14493603431980.png
Господа, это нормальный вид резиновой страницы? или лучше сделать меню и поиск в столбик?
Аноним 06/12/15 Вск 03:33:07 #718 №596911 
>>596892
Хочется процитировать тему лебедева.
Выглядит убого, если честно.
В столбик выводи.
Или просто убери вот это вот "о нас", всю нужную инфу о компании можно засунуть в контакты, а про историю очередного ООО "Рога и копыта" никому читать не интересно.
Аноним 06/12/15 Вск 04:11:26 #719 №596923 
>>596911
Но по макету должно быть именно так же. Сделаем вид, что это заказчик попросил сделать. Я же не могу ему ответить: давайте вот это уберем и все переделаем, никому не интересна история ваших рогов и копыт.
Аноним 06/12/15 Вск 04:41:40 #720 №596927 
http://www.paktraveler.com/

Пиздец, вот у пакистанца с апворка куча статичных сайтов в портфолио. И хуле я мучаюсь с этой резиново-адаптивной-бутстрап-кроссбраузерной хуеверсткой?
Аноним 06/12/15 Вск 10:02:44 #721 №596952 
>>596856
http://jpauli.github.io/2015/03/05/opcache.html сам нашёл
олег 06/12/15 Вск 11:25:55 #722 №596966 
ОП, в Задаче про айпад - невероятно сильное упущение.

Сама задача.
кредит за 4% и (мелким шрифтом) 500 р комиссии в месяц от HomoCredit
кредит за 3% и 1000 р комиссии в месяц от того же банка (Softbank), что и в первой задаче
нереально вкусное предложение от StrawberryBank за 2% в месяц, без комиссии, но с платой в размере 7777 р за открытие счета (эту сумма прибавляется к сумме долга)

Но школьник может заплатить только 5000 рублей. Я имею ввиду StrawberryBank требует 7777 единоразово, так что школьник просто не сможет взять у них кредит. Или я что-то неправильно понял?


Алсо думал что только у меня не работает /n. Но теперь на 3 компах настроил апачи и /n не переводит строку на новую. Что я делаю не так?
И ещё ньюфажный вопрос. Правильно ли я понял, что функция не может брать переменные которые не переданы в функцию?

Исходники.
https://ideone.com/A9G1hW
олег 06/12/15 Вск 11:34:56 #723 №596967 
>>596572
Серьёзно, мне кто-нибудь обьяснит о чём он? Чем плох Switch case?
 Аноним 06/12/15 Вск 12:17:11 #724 №596981 
14493934315460.png
>>596894
>>596895
Аноним 06/12/15 Вск 13:18:02 #725 №597039 
>>596966
Про \n:
Для того что бы работал перенос строки, нужно сообщить броузеру, что содержимое которое мы ему присылаем нужно рассматривать как обычный текст, а не как html. Для этого нужно ДО какого либо вывода из нашего скрипта послать http-заголовок. Про все это ты узнаешь подробно в процессе изучения технологий, а пока добавь в начало:
header("Content-Type: text/plain");
не ОП -кун
 Аноним 06/12/15 Вск 13:39:19 #726 №597054 
Это потому что в базе хранится уже заэкранированный текст, видимо по ошибке еще раз пропустили через htmlspecialchars в шаблоне, потому ломается.
Аноним 06/12/15 Вск 13:42:23 #727 №597056 
Натянул вёрстку, сделанную из задания ОПа по ксс, на вордпресс. Поступил следующим образом. Там где картиночки и надписи вроде- estibulum id ligula porta euismod semper... Создал четыре записи в админке определённой категории и вывел их через WP_Query, выводил с условием выводить только из этой категории. Там где заголовок в шапке, создал одну запись определённой категории и вывел её в этом месте. С другом заголовком поступил точно также. Там где ссылки на работы из портфолио, создал три записи определённой категории, в каждой из которых 4 картинки и вывел их в том месте где надо, опять же по категории. Создал страницы, те что есть в меню, также создал меню и вывел его динамически. В итоге, почти весь контент можно менять, но возможности тем не менее ограничены, например нельзя вставить 5 картинок в ряд, можно только поменять сами картинки. Так нормально или это неправильно?
Аноним 06/12/15 Вск 13:44:45 #728 №597059 
>>597054
Каким образом двойной прогон через htmlspecialchars вернёт хтмл-сущности? Если бы это так работало, то на харкаче была бы полная xss уязвимость и в поля можно было бы вставлять какой угодно код
http://ideone.com/erMHGH
Аноним 06/12/15 Вск 13:58:51 #729 №597068 
>>597059
Да, скорее что-то вроде html_entity_decode.
Аноним 06/12/15 Вск 14:25:32 #730 №597091 
>>597056

Ты бы выложил свое расширение к ВП для проверки (если конечно это у тебя сделано в виде расширения которое ставится на стандартный вордпресс; если не так то конечно не очень хорошо).

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

Что касается портфолио, вот что я подумал. У нас ведь для работ портфолио будут отдельные страницы для каждой, где описана эта работа. Значит нужно просто сделать специальный тип поста «Работа для портфолио», и у нее сделать свойства:

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

Соответственно на главной выводятся картинки от тех работ у которых стоит галочка. А теги определяют к каким категориям они относятся. Переключатель видов работ можно строить автоматически из имеющихся тегов.
Аноним 06/12/15 Вск 15:44:46 #731 №597159 
>>596954

Проблема в том что ты не следуешь соглашениям протокола HTTP. Изменения на сервере должны делаться POST запросом а не просто открытием странички. переделай свой скрипт добавив форму с кнопкой.
Аноним 06/12/15 Вск 15:45:59 #732 №597161 
>>597074

ucfirst нельзя использовать, читай урок https://gist.github.com/codedokode/ff99e357e9860ea169b8

Аноним 06/12/15 Вск 16:14:41 #733 №597200 
>>597091
А как делается расширения? Ты имеешь ввиду плагин? Я просто взял пустую тему, и в индексном файле изменил всё на динамический вывод.
Аноним 06/12/15 Вск 16:17:11 #734 №597204 
>>597200
Перед этим закинув туда своё вёрстку
Аноним 06/12/15 Вск 16:21:00 #735 №597211 
>>597200

Вордпресс расширяется 2 способами:

- своя тема позволяет поменять внешний вид страниц не меняя логику работы CMS
- плагин (расширение?) позволяет менять логику работы CMS, добавлять новые функции, страницы в админке, менять конфигурацию системы

Соответственно ты делаешь либо тему либо расширение которое устанавливается на вордпресс.

А то что ты сделал это глупость. Объясни как в твоем случае понять где твой код а где не твой? Как увидеть что ты изменил? как обновить версию вордпресса?
Аноним 06/12/15 Вск 16:29:32 #736 №597227 
>>597211
А как делать по правильному? Нигде ничего не могу найти по этому поводу. Например здесь https://codex.wordpress.org/Создание_тем по сути описан такой же процесс, или нет?
Аноним 06/12/15 Вск 16:31:45 #737 №597230 
Алсо я погуглил по словам Wordpress Development workflow и понял что с процессом разработки под WP все очень плохо: http://wordpress.stackexchange.com/questions/119/how-to-easily-move-a-wordpress-install-from-development-to-production/182#182

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

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

В общем эти CMS это дрянь, они рассчитаны на низкоквалицифированных натягивателей верстки которым не нужна автоматизация и которые не ценят свое время.
Аноним 06/12/15 Вск 16:41:44 #738 №597238 
>>597227

Да. Если ты меняешь только внешний вид, то делаешь свою тему. Если не только, то пишешь расширение.

То что ты дал, да, это как раз документация по созданию тем.

Вообще, «процесс разработки под wordpress» по английски переводится как wordpress development flow и если гуглить по этим словам, там есть статьи и обсуждения, кто как организует все это. Также можно попробовать гуглить на русском языке:

https://www.google.ru/search?q=%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81+%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B8+%D0%BF%D0%BE%D0%B4+wordpress&newwindow=1&gbv=1&sei=KjpkVsj4MaL4ygOx8pOABQ

Вот например какая-то статья по теме: http://habrahabr.ru/post/252393/

sage& !7gV/86/N56 06/12/15 Вск 16:43:12 #739 №597240 
>>597230
Какой в жопу локальный сервер, через ftp правят прямо на рабочем сайте. Я один раз пришел на собеседование в такую дно-контору и немного опешил: про линукс никто не слышал, верстают в блокноте (илитные планктонины в дримвивере и фронтпейдже, ибо визивиг).
Нет систем контроля версий, нет никакого планирования и командного взаимодействия в помине, нихуя нет.
Аноним 06/12/15 Вск 16:45:40 #740 №597243 
>>597240
Что за контора? Пятерочка?
Аноним 06/12/15 Вск 16:57:57 #741 №597250 
>>597240

Это их право.

>>597200

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

https://codex.wordpress.org/%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86_%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B8

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

Еще наверно можно добавить настройки каким-нибудь сторонним плагином, но мне вариант с расширением кажется более простым. Если бы такие вещи нужно было делать часто, я бы пошел дальше и сделал расширение-генератор форм настроек, чтобы достаточно было дать только конфиг со списком полей, а он бы генерировал форму.
олег 06/12/15 Вск 17:35:58 #742 №597295 
обьясните тупому.
Почему регулярка
$regexp='/^8-([(]{1})([0-9]{3})([)]{1})-([0-9]{3})-(0-9]{2})-(0-9]{2})$/';
работает на
"8(123)123"
а
"8(911)-506 11 11" - для неё уже проблема? Ведь
-(0-9]{2})-*(0-9]{2}) - как раз направлены на обработку 2 пар последних цифр

Что-то я совсем не соображу никак.
олег 06/12/15 Вск 17:38:57 #743 №597298 
>>597295
Со скобками напутал.
Вот регулярка.
$regexp='/^8-([(]{1})([0-9]{3})([)]{1})-([0-9]{3})([0-9]{2})([0-9]{2})$/';
И она не работает если к "8(123)123" написать 4 цифры в конец.
Аноним 06/12/15 Вск 17:41:00 #744 №597300 
>>597295
>[(]{1}
Проиграл как умалишенный. С таким же успехом ты мог после каждого символа единичку писать.
олег 06/12/15 Вск 17:42:59 #745 №597302 
>>597300
Чего ты от ньюфага ждал, спецсимвол же. Только так заработал спустя 2 часа страданий.
Аноним 06/12/15 Вск 17:43:53 #746 №597305 
>>597302
Спецсимолы экранировать надо двойным обратным слешом \\
олег 06/12/15 Вск 17:45:34 #747 №597307 
>>597305
>Спецсимолы экранировать надо двойным обратным слешом \\
Ну как-то не работает для номера телефона
$regexp='/^8-\\(([0-9]{3})-\\)([0-9]{2})-([0-9]{3})-([0-9]{2})-*$/';
почему-то не проходит проверку.
Аноним 06/12/15 Вск 17:48:51 #748 №597313 
>>597307
Проверку на что? Ты бы код на айдеоне кидал, трудновато гадать по постам.
Аноним 06/12/15 Вск 17:49:01 #749 №597314 
>>597300
А вообще и вправду, как встроить это?
Можно
$regexp='/^8(//(*[0-9]{3})
но тогда стоит ли писать {3} ? Или всё-равно?
Обьясните мне пожалуйста?
Аноним 06/12/15 Вск 17:49:30 #750 №597315 
>>597302

Он имел в виду что

[(]{1}

это то же самое что

[(]

Аноним 06/12/15 Вск 17:50:24 #751 №597317 
>>597295

Ты написал регулярку под конкретный шаблон номера. Так не пойдет.

Задачу про номера телефонов надо проверить на большом числе телефонов, чтобы убедиться что твой код правильный. Но руками подставлять номера — долго и скучно. Пусть работает робот, а не человек!

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

Вот список номеров:

Правильные: array('84951234567', '+74951234567', '8-495-1-234-567', ' 8 (8122) 56-56-56', '8-911-1234567', '8 (911) 12 345 67', '8-911 12 345 67', '8 (911) - 123 - 45 - 67', '+ 7 999 123 4567', '8 ( 999 ) 1234567', '8 999 123 4567');

Неправильные: array('02', '84951234567 позвать люсю', '849512345', '849512345678',
'8 (409) 123-123-123', '7900123467', '5005005001', '8888-8888-88',
'84951a234567', '8495123456a',
'+1 234 5678901', // неверный код страны
'+8 234 5678901', // либо 8 либо +7
'7 234 5678901' // нет +
);
Олег 06/12/15 Вск 17:55:47 #752 №597320 
>>597317
Спасибо, я знаю. Сложно написать шаблон сразу подо всё, поэтому пишу по 1 шаблону для каждого. Потом выясняю где косяк и добавляю исправления в главную регулярку.
>>597313
Щас, погодьте. Кстати разобрался с первым вопросом, надо было пробелы посчитать.
https://ideone.com/IULz7d
Аноним 06/12/15 Вск 17:56:35 #753 №597322 
>>597317
Кстати на этой задаче можно начать пробовать юнит-тесты. Хотя наверное это слишком простой пример, тестировать одну функцию, но все же.
Олег 06/12/15 Вск 17:57:02 #754 №597323 
>>597317
>Сделай 2 списка номеров (правильные и нет), добавь их в программу и напиши цикл, который их по очереди прогоняет через регулярку и проверяет что они определяются как надо (если нет — надо вывести какой именно номер не распознается правильно).

Эй, в задаче этого небыло!
Олег 06/12/15 Вск 17:58:28 #755 №597324 
>>597322
Ну уж нет и так задача довольно сложная. Лучше отдельные задачи придумать под юнит тесты или уже потом к этому добавить.
Аноним 06/12/15 Вск 18:01:07 #756 №597325 
>>597323

В задаче было - принимать любые правильные номера. Это всего лишь список правильных и неправильных номеров для проверки.
Олег 06/12/15 Вск 18:02:14 #757 №597327 
>>597325
Про циклы ничего небыло!
Аноним 06/12/15 Вск 18:03:28 #758 №597328 
>>597327
Ты их уже прошел, значит было.
Аноним 06/12/15 Вск 18:08:40 #759 №597332 
>>597327

Хорошо. Ну не хочешь циклы - можешь подставлять номера руками по одному, твое дело. Не забудь после любой правки кода заново перепроверять все номера.
Аноним 06/12/15 Вск 18:13:10 #760 №597336 
Оп-половой орган, ну ты все-таки прокомментируй эту уязвимость сосача.
Я сейчас пилю небольшое приложение используя 2ч-апи, не хочется обосраться на ровном месте.
Как мне экранировать данные, которые возвращает сосач? Если пропускать через htmlspecialchars, выводятся html-entities, а если через html_entity_decode, вроде выглядит красиво, но безопасно ли это?
Аноним 06/12/15 Вск 18:18:16 #761 №597338 
>>597336

В чем суть уязвимости?

В идеале правильно хранить в базе оригинальные данные, а при выводе экранировать. Если данные представлены в виде HTML разметки (например если данные пришли из WYSIWYG редактора) то экранирование конечно не сработает, в этом случае их обрабатывают фильтром который оставляет только разрешенные теги и разрешенные атрибуты. Атрибуты, содержащие ссылки (например href и src у картинок) надо фильтровать дополнительно: проверять что ссылка использует разрешенный протокол, иначе тебе всунут data: или Ja va script: ссылку с возможностью выполнения кода.

Есть готовые фильтры которые все это умеют делать.
Аноним 06/12/15 Вск 18:21:00 #762 №597344 
>>597336

Алсо не вздумай обрабатывать HTMLкод регулярками: это 100% уязвимость. Фильтр должен парсить код в дерево DOM, обрабатывать и потом собирать обратно. Это гарантирует что злоумышленник не сможет внедрить некорректный код (например где не совпадает число закрывающих тегов или где теги написаны с ошибками).

Слабость фильтра на регулярках, кроме прочего, это то, что теги могут быть записаны с ошибками. Браузер исправит ошибку и тег сработает, а твоя регулярка ее пропустит.

Примеры таких векторов атаки есть тут: https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet

Потому фильтр должен использовать преобразование в дерево DOM.
Олег 06/12/15 Вск 18:21:46 #763 №597345 
>>597328
>>597325
В условиях задачи не написано "решай только с применением циклов"
>>597332
>Не забудь после любой правки кода заново перепроверять все номера.
Нажать F5

Алсо вот
https://ideone.com/293Kqe
Аноны, насоветуйте ньюфагу как можно эту регулярку сократить?
Аноним 06/12/15 Вск 18:22:52 #764 №597346 
>>597338
>>597344
К чему такие заморочки, обычный хтмлэнтитис уже не канает?
 [x] & !7gV/86/N56 06/12/15 Вск 18:26:37 #765 №597349 
>>597338
>В чем суть уязвимости?
Ты с какого устройства сидишь? Не видишь что за байда получается при использовании юникода в полях "тема", "опции" и "имя" поста?

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

>>597346
Не катит, в базу сосача сохраняются уже через жопу закодированный html.
Олег 06/12/15 Вск 18:28:18 #766 №597350 
>>597349
Лол, я думал куклоскрипт глючит.
Олег 06/12/15 Вск 18:31:49 #767 №597355 
>>597345
Не игнорьте меня пожалуйста. Регулярки для меня - весьма сложная тема. Всё равно что ^&^&$%^&#$&!@&#)(!@&# читать и понимать что эта фиговина делает.
Аноним 06/12/15 Вск 18:34:45 #768 №597357 
14494160857170.jpg
Оп-кун, подгрузил я все свои файлы с локалки, кроме .git папки и файлов composer.lock, composer.json по фтп на хостинг, только вот случился трабл. autoload не работает на ftp на каждый класс мне пишет, что не найден и все.Что делать?
Аноним 06/12/15 Вск 18:44:04 #769 №597369 
>>597346

Я написал про те случаи когда на вход поступает HTML, а не текст. Например если в форме комментария на сайте стоит редактор и можно вставлять смайлики, менять шрифт, и тд. Очевидно что htmlspecialchars тут не поможет.

>>597349

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

https://www.google.ru/search?q=habr+%D1%82%D0%B5%D0%BA%D1%81%D1%82+%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%B0+%D0%BD%D0%B0%D0%BB%D0%B5%D0%B2%D0%BE&newwindow=1&gbv=1&sei=p1dkVoWkCYOxygOQori4Bw

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

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

Аноним 06/12/15 Вск 18:45:01 #770 №597372 
>>597349

> Да не буду я тянуть сторонний фильтр
То есть лучше потратишь пару недель на написание своего велосипеда? С тобой все в порядке?
Аноним 06/12/15 Вск 18:46:09 #771 №597376 
>>597357

А как у тебя сделан автолоадинг? Через композер? Свой автолоадер?

Если через композер то проверь есть ли на хостинге файл autoload.php в папке vendor, подключается ли он.
Аноним 06/12/15 Вск 18:47:00 #772 №597377 
>>597369
>Например если в форме комментария на сайте стоит редактор и можно вставлять смайлики, менять шриф
Так это де BB коды, почему бы регуляркой не искать их? То есть я хочу, например, сделать у себя в форме BB-код для жирного шрифта [FAT] [/FAT] и регуляркой заменять их на хтмл теги <b>
Олег 06/12/15 Вск 18:48:35 #773 №597378 
14494169152610.png
Меня проигнорили с регулярками.
Вот так, сначала я прошу совета и все молчат.
Потом только поржут когда код пойдёт в продакшн.
Аноним 06/12/15 Вск 18:48:36 #774 №597379 
>>597355

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

По твоей регулярке:

она написана под конкретный шаблон, например она предполагает что в коде города ровно 3 цифры. Но это не так, бывают код из 4 или 5 цифр.

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

- в начале идет +7 или 8, за ними ровно 10 цифр, между которыми идет любое число пробелов, минусов, скобок

далее:
Олег 06/12/15 Вск 18:51:21 #775 №597383 
>>597379
Так и сделаю.
>И потом попросить еще одну-две задачки повышенной сложности для закрепления.
Давай.
>она написана под конкретный шаблон, например она предполагает что в коде города ровно 3 цифры. Но это не так, бывают код из 4 или 5 цифр.
Разьве не в этом весь смысл регулярок? Отслеживать только конкретный шаблон.
>- в начале идет +7 или 8, за ними ровно 10 цифр, между которыми идет любое число пробелов, минусов, скобок

Хорошо. Завтра переделаю по новой. А пока у меня 2 часа ночи (
В любом случае спасибо тебе няшка!
Аноним 06/12/15 Вск 18:54:07 #776 №597385 
14494172479220.png
>>597378

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

>>597377

А почему ты хочешь писать велосипед а не взять готовый парсер BB кода?

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

Правильный BB пасер должен парсить текст в дерево и из него генерировать HTML как нарисовано на моей картинке.



[&] & !7gV/86/N56 06/12/15 Вск 18:55:25 #777 №597386 
>>597369
Ну мало ли, вдруг кроме этого символа вывода текста есть и другие опасные моменты, которые могут сломать верстку. Например трипкода у меня вообще-то нет.

>>597372
Нет, я надеялся что ты как обычно подкинешь решение одной строчкой.
Сидеть и учить фильтры bb-кодов в мои планы на данный момент не входит.

Скажи просто, если я буду выводить как есть данные полученные с сосача http://2ch.hk/pr/res/588512.json , может ли это привести к худшим последствиям кроме похеренной верстки?
Аноним 06/12/15 Вск 18:57:13 #778 №597390 
>>597377

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

Ну и есть еще много других ситуаций, вот анон выше получает из API HTML код и хочет обезопасить себя.
Аноним 06/12/15 Вск 18:57:56 #779 №597393 
>>597386

Если на дваче уязвимость то злоумышленник может запостить любой код к тебе на сайт.
Аноним 06/12/15 Вск 18:58:51 #780 №597395 
>>597386

Я не понимаю, вообще что тут обсуждать. Я 10 постов назад привел правильное решение, если тебя беспокоит бещопасность - использовать фильтр. Аргументов против фильтра кроме «я тупой не могу осилить» у тебя нету, значит и обсуждать больше нечего.
Аноним 06/12/15 Вск 18:59:02 #781 №597396 
>>597385
Я ничего писать не собираюсь, ты меня с кем-то путаешь. Просто интереса ради спрашиваю.
>>597386
Ничего ты не похеришь, этот юникод действует только на элементы с одним родителем, до первого блочного или блочно-строчного элемента. Так уж получилось, что на харкаче идет строка из span(то-бишь inline элементов) с общим родителем, поэтому юникод меняет их все. Если сделать хотя-бы один из спанов инлайн-блоковым, то юникод на нем и остановится.
Аноним 06/12/15 Вск 19:03:59 #782 №597402 
>>597396
О, нормально объяснил, респект.
>>597395
Иди в пизду со своим фильтром. Мне важно как это работает, а не подключать 10 мегабайт непонятно чего к библиотеке весом 10кб.
Аноним 06/12/15 Вск 19:31:24 #783 №597417 
>>597402

Какой агрессивный школьник. Тем не менее, мои посты все же я думаю, не пропали зря, другие аноны благодаря им узнали как обрабатывать и фильтровать HTML и BB код.
Аноним 06/12/15 Вск 19:37:31 #784 №597420 
С вами снова я, тот даун, что вчера весь вечер ебался с апачем. Но сегодня у меня вопрос по существу. Допилил тот "калькулятор через свитч", от которого так у кого-то сильно припекло, теперь циферки сохраняются в форме и все такое. Может кто покидать в меня говном - типа, так нельзя, а вот так было бы лучше и т.п.? Если кому не лень, конечно. В частности, интересует, можно ли как-нибудь обойтись без объявления двух пустых переменных (цель - чтобы в хтмл форме сохранялись введенные значения)
Cам говнокод http://ideone.com/D6YrkC
Аноним 06/12/15 Вск 19:52:11 #785 №597430 
>>597417
Да мало полезного было в твоих постах на сей раз, поэтому и был справедливо послан.
Тебе нужно было не ткнуть в готовую библиотеку, которую человек должен бездумно использовать, а объяснить принцип кодирования спецсимволов, какие есть функции для этого, к каким последствиям может привести неправильная обработка спецсимволов.
И проблемы создает не только &#8238; на котором все почему-то зациклились, но и другие символы юникода.
Аноним 06/12/15 Вск 20:02:05 #786 №597434 
14494213250430.png
Вопрос не по теме, но что здесь не так?!
Почему <p> виден, а </p> уже не виден?
Как это пофиксить?
Аноним 06/12/15 Вск 20:04:45 #787 №597436 
>>597434
html тег где?
Аноним 06/12/15 Вск 20:11:10 #788 №597444 
14494218701680.jpg
>>597376
Composer-овский autload, на локалеке работает, подключен

require_once __DIR__.'/../vendor/autoload.php';
Аноним 06/12/15 Вск 20:13:52 #789 №597446 
>>597444
Причем silex грузится, а вот мои src нет
Аноним 06/12/15 Вск 20:44:31 #790 №597471 
>>597430

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

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

Что касается юникодного символа поворота текста то это не узявимость и кодирование сиецисмволов на него не влияет.

По моему кто-то из нас что-то тут не понимает.

>>597434

Там p не русская случайно?


>>597444

А файл autoload на хостинге и файлы которые он подключает, актуальные, такие же как у тебя локально? Что в composer.json?
Аноним 06/12/15 Вск 20:54:07 #791 №597488 
>>597471
Почему нельзя записать хтмл-код в базу как есть? А при выводе экранировать.
Аноним 06/12/15 Вск 20:59:25 #792 №597497 
>>597488

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

Чтобы например пользователь в редакторе сделал текст красненьким и он так же и вывелся. А хакер, подсунувший скрипт в HTML код, остался бы ни с чем.
Аноним 06/12/15 Вск 21:00:54 #793 №597500 
>>597488

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

А фильтр HTML нужен когда у нас на входе HTML код и надо вывести его без риска для сайта. Это более сложная задача.
Аноним 06/12/15 Вск 21:13:02 #794 №597521 
Аноны, вопрос такой: только начал работать с композером. Столкнулся с таким случаем, когда точно не знаешь, поможет ли тебе хуёвина из репозитория или нет, пока не попробуешь. Попробовал, не помогла - как её выпилить без потерь особенных?
Аноним 06/12/15 Вск 21:14:39 #795 №597523 
>>597521
https://getcomposer.org/doc/03-cli.md#remove
Аноним 06/12/15 Вск 21:23:33 #796 №597538 
>>597521
Можешь руками из файла composer.json выпилить, а потом сделать вот это: https://getcomposer.org/doc/03-cli.md#update
Аноним 07/12/15 Пнд 00:06:29 #797 №597679 
14494359897130.jpg
>>597161
спасибо, анон. Теперь я понял что ucfirst нельзя использовать, но как тогда быть?
Аноним 07/12/15 Пнд 00:14:57 #798 №597690 
14494364970680.png
>>597679
лол, понял
Аноним 07/12/15 Пнд 00:19:25 #799 №597693 
>>597471
Да, идентичные щас сделал composer update и закинул на сервер.

Вот composer json
Аноним 07/12/15 Пнд 00:19:57 #800 №597694 
>>597693
{
"require": {
"silex/silex": "~1.3",
"jasongrimes/silex-simpleuser": "^2.0",
"twig/twig": "^1.23",
"symfony/form": "^2.7",
"symfony/security-csrf": "^2.7",
"symfony/twig-bridge": "^2.7",
"symfony/translation": "^2.7",
"symfony/validator": "^2.7",
"symfony/config": "^2.7"
},
"autoload": {
"psr-0": {
"Controllers": "src/",
"Mapper": "src/",
"Models": "src/"
}
}
}
И что мне говорит сервер, на локалке все работет
Fatal error: Class 'Mapper\DataBaseMapper' not found in /home/u901582110/public_html/web/index.php on line 80
Аноним 07/12/15 Пнд 00:25:43 #801 №597696 
>>597694
Я все понял, файлы были с маленькой буквы названны.
Аноним 07/12/15 Пнд 00:56:40 #802 №597712 
Переделал, свою натяжку на вордпресс, теперь большая часть информации выводится при помощи настроек, очень удобно получается, не знал про такое раньше. Вот правда не понимаю, стоит делать некоторый вывод через посты? Вроде бы и неправильно, так как посты создаются отдельно от темы, но с другой стороны, мне один знакомый который работает с вордпресс говорит, что чаще всего именно постами и делает, если делает какой-нибудь сайт визитку. Дайте ещё каких-нибудь PSD-шаблонов, постараюсь сверстать и натянуть на вордпресс.
Аноним 07/12/15 Пнд 01:02:05 #803 №597715 
>>597696

Да, на линуксе регистр букв имеет значение.
Аноним 07/12/15 Пнд 01:03:18 #804 №597716 
>>597712

Выложил бы код на гитхаб, может тебе бы еще какие советы дали .
Аноним 07/12/15 Пнд 01:04:05 #805 №597717 
>>597712

Можешь еще сделать клон m.roem.ru (мобильная версия там проще).
Аноним 07/12/15 Пнд 01:08:15 #806 №597719 
Что будет, если дважды объявить локальную переменную функции через var в javascript?
Будет ошибка, это я уже понял, но почему?
http://jsfiddle.net/q3L8raun/3/
Вроде бы перед выполнением скрипта интерпретатор проводит какой-то анализ и собирает объявления всех функций и переменных, казалось бы он должен просто проигнорировать второе объявление одной и той же переменной, ан нет.

У jsfiddle новый дизайн, ошибки он теперь не выводит (хотя может и раньше не выводил), просто молча не выполняется.
Аноним 07/12/15 Пнд 02:40:54 #807 №597742 
Еще одна задача с learn.javascript
https://learn.javascript.ru/global-object#window-и-переменная-2
Почему alert(x) выдаст ошибку ReferenceError: x is not defined, а alert(window.x) спокойно выведет undefined?
Я что-то недопонял, разве это не одно и то же?
Аноним 07/12/15 Пнд 05:20:51 #808 №597764 
>>597742

Первое обращение к несуществующей переменной - ошибка.
Второе - обращение к несуществующему свойству объекта - возвращает undefined

Сравни:

var obj = {};
console.log(obj.lalala); // никакой ошибки

Аноним 07/12/15 Пнд 06:04:40 #809 №597769 
https://github.com/codedokode/pasta/blob/master/db/patterns-oop.md

>@return News[]
>@return News|null
Не понимаю для чего тут операторы @, [], |, и почему мы передаем не переменную?

Аноним 07/12/15 Пнд 07:09:28 #810 №597785 
>>597240
>>597230
Какой нахуй продакшн? На оф. сервере вп его вообще нельзя править ни устанавливать свои темы (фтп забанено). Нужно скачать себе на локалку, править, а потом заливать уже на свой отдельный хостинг. А плагины добавляются и одобряются в каком-то специально разделе вп, я еще этот момент не до конца разобрал.
& !mioDR071Ww 07/12/15 Пнд 07:58:10 #811 №597789 
&#1;
какой ты юникод используешь, почему у меня не получается?
& !mioDR071Ww 07/12/15 Пнд 07:58:57 #812 №597790 
lel
 [‮] & !HU.rCDH8oU 07/12/15 Пнд 08:10:27 #813 №597798 
ayyyyyyyyyy
Аноним 07/12/15 Пнд 11:51:47 #814 №597916 
Тред уже не на первой, и даже не на второй и потихоньку тонет.
Новый тред и перекаты
http://2ch.hk/pr/res/597909.html
Аноним 07/12/15 Пнд 11:52:40 #815 №597919 
14494783600950.jpg
Перекатываемся!
>>597909 (OP)
>>597909 (OP)
>>597909 (OP)
Аноним 07/12/15 Пнд 12:20:00 #816 №597945 
>>597769

Это phpdoc-комменты.Они игнроируются PHP и прежназначены для читателя кода, IDE, генераторов документации.

@return News[] значит что функция вернет массив объектов News (или их наследников, но в данном случае этого не будет)

@return News|null значит функция вернет объект класса News или null

http://www.slideshare.net/roadhump/phpdocumentor
http://omurashov.ru/docblock-in-php-documentation/
https://ru.wikipedia.org/wiki/PhpDocumentor

официальный сайт на англ http://www.phpdoc.org/docs/latest/index.html

Советую освоить их и ставить везде.
Аноним 07/12/15 Пнд 14:04:54 #817 №598013 
>>597764
Так разве x и window.x не одно и то же? А, все, до меня дошло: если x не объявлен, то интерпретатор просто не знает, что это свойство глобального объекта.
Аноним 07/12/15 Пнд 14:21:13 #818 №598026 
>>598013

Нет.

x - несуществующая переменная
window.x - несуществующий элемент в существующем объекте window

> если x не объявлен, то интерпретатор просто не знает, что это свойство глобального объекта.
В общем да.
Аноним 07/12/15 Пнд 22:15:55 #819 №598518 
Ребята, извините, я немного даун. Мне нужно разбить число на составляющие, десятки, сотни и так далее.
Пример: 356 = 300 + 50 + 6.
Использую 356 % 1000 / 100 / 10 и остается некое количество знаков, ну сколько указано.
Что мне использовать?
Спасибо.
Аноним 07/12/15 Пнд 22:21:22 #820 №598526 
>>598518

Привести к строке. Сделать explode. Пройтись циклом по полученному массиву, в зависимости от позиции умножить элемент на десять в N степени.
Аноним 07/12/15 Пнд 22:27:28 #821 №598537 
>>598526
Богоподобен. Спасибо.
Аноним 07/12/15 Пнд 23:40:11 #822 №598587 
Антоши, нужна срочная помощь, вы тут живые?
Я к вам залётный, имею слабое отношение к программированию на проф. уровне, но иногда пишу говнокод, за который платят.
Так вот, суть токова: есть сайт с iframe (http://books.e-heritage.ru/book/10075598 ), на котором лежит нужная книжка, которую хер найдёшь для скачивания.
Я вот уже полчаса ломаю голову, как написать парсер для скачивания этой книжки.
Пока писал, пополнил инфу, лол, и перешёл из js-треда к вам, няши.
Пост-запросом можно переходить со страницы на страницу, у каждого изображения есть индекс, не последовательный, отправив который гетом, получаем желаемое изображение.
Проблема в том, что этот индекс надо на каждой странице выцепить из урла изображения, которое во фрейме.
В общем, очень сумбурно получилось, анон, посмотри сам, будь ласка, на это говно, и скажи, вообще возможно что-то написать, чтобы спарсить эту книгу?
Аноним 08/12/15 Втр 00:04:45 #823 №598605 
>>598587
В общем, ответом на пост приходит что-то типа <img alt="page" src="/Book/book/Image/1071399?i=625388678" /> , из которого важная часть - i=625388678
Эту поеботу нужно отправить гет-запросом, тогда получим ответом картинку.
Вот только я не умею в пост-гет запросы, помоги, антоша
Аноним 08/12/15 Втр 00:06:57 #824 №598606 
>>598605
Долго объяснять, просто бери готовую библиотеку http://habrahabr.ru/post/176635/
Аноним 08/12/15 Втр 02:02:15 #825 №598695 
>>598518

С числами надо лучше бы работать математическими методами. Вариант с % вполне хорош. Если цифр много можно еще попробовать сделать это циклом.
Ответы на старые посты 30 ноя и далее Аноним 08/12/15 Втр 04:52:56 #826 №598732 
Ответы на старые посты.

>>592096

> Но если я правильно понял, between равнозначен where a > x and a < y, так что оба индекса по прежнему не удается использовать.
Да, верно. Используется только один индекс, и смотри какая ситуация получается:

- допустим мы используем индекс для условия start_ip < :ip
- mysql в индексе быстро находит максимальное значение start_ip, которое меньше :ip
- mysql проходит по индексу от этого места до начала, выбирая строки из таблицы и проверяя для каждой условие end_ip

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

>>592155

Какая-то программа учета времени.

>>592267

Не знаю, давай по номеру поста решать.

>>592298

Молодец, все правильно решено.
Ответы на старые посты 30 ноя и далее Аноним 08/12/15 Втр 04:53:22 #827 №598733 
>>592306

> =($creditBalance x $percent) + $servicePayment
> $paymentTotal = $paymentTotal + $monthlyPayment;}
> ($month) месяц спустя: долг ={$creditBalance} руб, выплачено всего {$paymentTotal} руб
Это повторяется, избавься от повторов

Правильный ответ дожен получаться 61270, а не 60260, если поставить долг = 40 000: https://ideone.com/WNGrE1

Ты куда-то потерял 1000 комиссии.

Если долг = 4000 то ответ должен быть 6123, а у тебя 5120: https://ideone.com/m6mqE1

>>592324

Да, свою рулеточку, чтобы в ней было хотя бы 2 варианта ответа.

>>592328

phpQuery

>>592341

Хорошо, все правильно.


https://github.com/V3N0m21/Uppu3 Аноним 08/12/15 Втр 04:53:44 #828 №598734 
>>592361

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

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

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

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

> Я сделал через DQL
> $filesCount = $app->em->createQuery('SELECT IDENTITY(u.uploadedBy), count(u.uploadedBy) FROM Uppu3\Entity\File u GROUP BY u.uploadedBy');
> но этот запрос возвращает мне многомерный массив с которым неудобно работать. Правильно будет преобразовать его в такой как нужен мне? Ну то есть наверно так будет эффективней, но выглядеть это будет очень некрасиво, и неочевидно.
Ты выбираешь не слишком много данных? Тебе точно нужна вся таблица пользователей, или может только чатсь из них?

Насчет неудобного формата, надо его преобразовать в удобный, например вида [id пользователя => число файлов]. Также, ты можешь использовать тут SQL запрос если хочешь. Можно и DQL как у тебя.

> Так и не придумал как это сделать в слиме. На страницу авторизации у меня редиректит проверка в middleware, как там можно сделать чтоб функция определяла с какой страницы нас заредиректило?
Берешь текущий URL из $app->request и добавляешь в ссылку. Для формирования ссылки возможно стоит сделать отдельную функцию. Не забудь правильно все заэкранировать.

> https://github.com/V3N0m21/Uppu3/blob/master/files.sql
Не вижу внешние ключи. Также, во всех таблицах, те колонки или группы колонок где значения уникальны, надо пометить уникальным индексом чтобы нельзя было нарушить это правило.

> https://github.com/V3N0m21/Uppu3/blob/master/public/index.php#L21
> $helper = new LoginHelper($app->em);
Не надо создавать вторую копию LoginHelper. Также, неправильно делать currentUser синглтоном в Слиме. Ведь синглтоны СЛима для объектов которые не меняются, а текущий пользователь может залогиниться, разлогиниться, то есть он меняется. И потому неправильно писать

$app->currentUser

Так писать можно только если пользователь всегда один и никогда не меняется. А в твоем случае надо псиать так:

$app->loginHelper->getCurrentUser()

Такая запись показывает нам что текущий пользователь может быть изменчивым значением.

> https://github.com/V3N0m21/Uppu3/blob/master/public/index.php#L48
> if (!$cookie) {
> $cookie = HashGenerator::generateSalt();
> $app->setCookie('salt', $cookie, '1 month');
> }
> $user = $app->em->getRepository('Uppu3\Entity\User')->findOneBy(array('salt' => $cookie));
> if (!$user) {
> $user = \Uppu3\Helper\UserHelper::saveAnonymousUser($cookie, $app->em);
> }
Этот кусок кода явно стоит того чтобы вынести в отдельную функцию. Например в loginHelper. Ведь он может понадобиться и при добавлении комментария.

> new \Uppu3\Helper\FileHelper
В этом класс есть метод сохранения файла: fileSave, хорошо. А где метод валидации (проверки что файл передан, что ошибки нет, что размер имеет допустимое значение)? Обычно всегда есть 2 метода, метод валидации и метод для сохранения значения.

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

$app->render('login_form.html',... )

Причем еще и с разным набором параметров:

array('page' => $page, 'flash' => $flash)
array('message' => $error, 'data' => $_POST)
array('message' => $error, 'data' => $_POST)

Как писать надежный код в этом шаблоне если мы не знаем, придет нам переменная или нет? Мне кажется, вызов render в обработчике должен быть только 1 раз.

Пожалуйста перечитай алгоритм обработки форм в моем уроке: https://github.com/codedokode/pasta/blob/master/forms.md

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

Давай пока с этими вопросами разберемся, а потом еще посмотрим твой код - я вижу еще несколько мест которые можно улучшить.
Аноним 08/12/15 Втр 04:59:12 #829 №598736 
>>592575

делать роутинг на уровне нгинкса плохо:

- не переносится на Апач или другой сервер
- нельзя генерировать URL по имени маршрута

>>592582

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

>>592726

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

> WHERE start_ip <= inet_aton('1.0.0.30') ORDER BY start_ip DESC LIMIT 1;
Это неплохой запрос в плане использования индекса - он берет всего лишь одну запись. Но я не вижу тут проверки что искомый IP входит в диапазон. К примеру если start_ip = 4, end_ip = 6, а искомый IP адрес равен 100 твой запрос вернет что все ок? Вот например я подставил 5.5.5.5: http://sqlfiddle.com/#!9/5b673/4

Кстати я бы еще индексы заменил на уникальные для защиты от ошибок.

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

> С накладывающимися диапазонами только не знаю что делать. Может подзапросом их отсеивать по разнице между концом и началом?
Попробуй. Скорее всего тут нужно нестандартное решение, на первом месте для нас производительность, ведь может быть такой запрос будет делаться для каждого посетителя сайта. Кстати, один из вариантов решения состоит в том чтобы решать эту проблему не в момент поиска города по IP, а в момент загрузки дампа базы.

>>592760

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

>>592836

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

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

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

> Вот у меня например провайдер выдает ip без привязки к региону. Когда захожу на сайты с автоопределением приходится каждый раз руками менять поисковый запрос на свое реальное положение
Базы несовершенны. Меня например обычно определяет правильно. Более того, гугл чуть ли не мой дом мне показывает в результатах, мне аж страшно.
Аноним 08/12/15 Втр 04:59:28 #830 №598737 
>>592909

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

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

Что такое нейросеть? Это сеть, у которой есть N входов, несколько слоев связанных элементов-нейронов и M выходов. Входы можно подсоединять к чему угодно - если мы хотим распознавать картинки, мы можем связать входы с отдельными пикселями картинки, если мы распознаем звук, то можем связать входы со значениями спектра звука. Нейросеть анализирует сигнал на входе, сопоставляет с заложенными в ней при обучении образцами и выдает сигнал на выходе, указывающий на какие образцы похож входной сигнал.

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

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

Кстати, нейросети могут еще и генерировать картинки, ты наверно видел в интернете эти адские картинки с собачьими мордами, сгенерированные нейросетью от гугла.

>>592930

Да не, перцептрон не очень сложная вещь, а с объяснениями ОПа я думаю любой поймет.

>>592934

В Оп посте есть задачи на HTML/CSS.Реши их и исправь все замечания Опа. Вполне возможно что планка будет в итоге выше чем в верстка треде.

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

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

>>592935

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

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

То есть надо искать признаки, устойчивые (не изменяющиеся сильно) при преобразованиях вроде поворота, масштабирвания.
ООО Вектор Аноним 08/12/15 Втр 04:59:49 #831 №598738 
>>592979

У тебя гигантская функция public function getSalary($post,$rang). Это неправильно, большие функции это зло, их тяжело читать и легко что-то сломать - ее надо разбивать на более маленькие функции, более того там эти функции почти одинаковы и незачем копипастить это 4 раза.

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

Не надо смешивать разные стили переменных:

> $summaryPages
> $me_base_salary

> if($this->post=='Менеджер'){
В таких случаях надо использовать не строки, а константы. Они делают код читабельнее, понятнее, защишают от опечаток (PHP сразу заметит ее и будет ругаться). Читай: http://php.net/manual/ru/language.oop5.constants.php

Например:

const JOB_MANAGER = 'manager';

> public function getEmployeeStatsByDep($counter){
> public function salarySummary($summary){
> public function coffeeSummary($coffee){
Эти функции не имеют никакого отношения к работникам (они относятся к департаменту) и не должны быть в этом классе

> public function average($first,$second,$third,$fourth){
Название функции начинается с глагола: сделайЧтоТо()

Также, ставь в коде тайп-хинты.

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

Мануал: http://php.net/manual/ru/language.oop5.typehinting.php

Также, вот подсказка по задаче:

-----------

Когда ты решаешь задачу на ООП, ты должен ответить на вопросы:

— какие есть сущности, для которых мы сделаем классы? (Сотрудник и Департамент, может быть еще Компания?)
— какие у них есть свойства (у Сотрудника есть ранг, базовая ставка, профессия, является ли боссом). Потребление кофе или зарплата не являются свойствами так как они вычисляются из других свойств и хранить их не надо.
— что мы хотим от них получить (какие у них должны быть методы). Например мы хотим узнать сколько сотрудник заработал или сколько он пьет кофе. От департамента мы наверно хотим получить сколько всего выпито кофе и заплачено денег.
— как сущности связаны? Очевидно, Сотрудник работает в каком-то Департаменте.

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

Наследование позволяет создавать класс не с нуля. а расширяя сущетсвующий класс: http://php.net/manual/ru/language.oop5.inheritance.php

«Абстрактный» — это класс, объект которого нельзя создать. Он предназначен для наследования от него других классов: http://php.net/manual/ru/language.oop5.abstract.php

----------

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

-----------


### Антикризисные меры

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

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

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

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

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

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

---------------
Аноним 08/12/15 Втр 05:00:16 #832 №598739 
>>593071

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

> $Rwrdone
С большой буквы пишутся только классы и константы, переменные - с маленькой

> $Rwrdtwo
Не надо цифры писать прописью (причем еще и в разном стиле), и не надо непонятно сокращать слова, пиши лучше $word2 или $w2

>>593085

Все нормально. Наш тред для того и сделан чтобы понять свои ощибки и исправить их.

>>593081

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

>>593125

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

>>593132

Лучше sprintf так как строка не рвется на части.

>>593177

Начни с чтения ОП поста.

>>593209

Как тебе удобнее. Я думаю, лучше параллельно.
Аноним 08/12/15 Втр 05:00:52 #833 №598740 
>>593350

Ответил выше. По статье с хабра:

> В простом случае: needle between start and end limit 1.
Если записи нет в базе то мы попадаем на обход таблицы по индексу, в худшем случае всей. Или они заполняют пустые промежутки? Тогда вообще достаточно оставить WHERE :ip >= start ORDER By start DESC LIMIT 1. Но тогда в базе получается в 2 раза больше записей, добавляются пустые блоки. Нельзя ли без них?

>>593739

> Можно еще рассмотреть вариант вообще без хранения счетчика в базе, редис сам почти полноценная база. А почему я так сразу не сделал? Что-то я ночью уже не соображаю.
Нельзя записи в таблице будет сортировать по просмотрам. Но если твой класс счетчика сделан правильно, он позволит заменить базу на редис, написав адаптер.

> Про мейлру дело даже не в таблице-очереди memory, которая у них кстати очень быстро очищается, а в хранении самих уникальных посещений на диске.
Я подозреваю что информацию вида Юзер A посмотрел страницу B выгоднее не помещать в базу так как она временная. Ее можно даже в мемкеше хранить если не жалко потерять. То есть делаем ключ с ограниченным временем жизни в мемкеше/редисе. Я такое видел не в одном проекте и сам делал так.

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

https://www.insight-it.ru/highload/
http://ruhighload.com/

> Не, там массив возрващается, это я ридми не обновил. Два метода? Зачем? Пусть будет один, он всегда принимает массив айдишников, и всегда возвращает в ответ массив вида [id => visitCount].
Потмоу что для одного посещения неудобно использовать метод с массивом. Приходится писать лишний код. Некрасиво как-то. почему бы его не написать тебе?

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

Алсо, информация по теме парсинга DOM:

http://ivan.begtin.name/2008/07/16/%D0%B8%D0%B7%D0%B2%D0%BB%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B5-%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D1%85-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85/
https://events.yandex.ru/lib/talks/54/ (не нашел PDF, только видео, но идеи там очень годные)
https://events.yandex.ru/lib/talks/2992/

>>593793

Под Windows не работает параметр //TRANSLIT по моему. У меня не рабоатет. //IGNORE работает.

Можно найти другое решение, например http://htmlweb.ru/php/example/translit.php

>>593808

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

> $WithoutSpace = str_replace(" ","",$text);
> $SmallText=mb_strtolower($WithoutSpace);
Тут можно было использовать $text

Решено верно.

>>593843

Это ты лучше нас знаешь.

>>593857

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

>>593934

Когда писался урок, ideone выглядел по-другому.

>>593947

Получится.

>>593956

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

>>594044

Я не делал

>>594188

Нужно знать MySQL и PHP чтобы использовать базу.

>>594282

Стоит

>>594470

Там не надо закладывать точное расположение минусов. Просто ищи 10 цифр между которыми есть любые минусы, пробелы, скобки и 8 или +7 в начале.

>>594551

На fsb.ru
Аноним 08/12/15 Втр 05:01:11 #834 №598741 
>>594608

У тебя код в ветках для 10 и 12 символов - копипаста, это плохо. Почитай про принцип DRY, don't repeat yourself. Также, в PHP исплоьзуется camelCase а не snake_case для переменных.

Также, зачем ты сокращаешь слова? cksum - надо писать полностью.

Не надо писать числа прописью $xOne - надо писать $x1.

> return (((int)$chr[10] === (int)$cksum_one) && ((int)$chr[11] === (int)$cksum_two)) ? true : false;
Слишком длинная и сложная строка. Лишние преобразования типов.

>>594654

Портфолио делать не обязательно. Его можно сделать на реальных заказах.

>>594704

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

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

> class students implements students_interface; {
> define ("N_LECT", "");
> define ("N_LAB", "");
Это неправильно, читай мануал http://php.net/manual/ru/language.oop5.constants.php (читай весь раздел про ООП в нем)

> Добавить в класс конструктор,
Есть в мануале PHP

> Создать копию $copy произвольного объекта.
Читай про оператор clone

> Создать несколько объектов класса
Читай про new

> Создать класс child_students, наследующий класс students.
extends


>>594879

> Я так понимаю, ему надо сделать:
Наверно

> И как вывести это в списке ниже на странице,
Можно в массив сохранить
Аноним 08/12/15 Втр 09:02:50 #835 №598765 
Не получается записать созданное изображение в файл. В браузер же выводится отлично через imagepng

Warning: file_put_contents(): supplied resource is not a valid stream resource in

// Загрузка штампа и фото, для которого применяется водяной знак (называется штамп или печать)
$randstamp = rand(1,10);
$randstamp .= ".jpg";
$stamp = imagecreatefromjpeg("stamp1/$randstamp");
$im = imagecreatefromjpeg('1.jpg');

// Установка полей для штампа и получение высоты/ширины штампа
$marge_right = rand(1,30);
$marge_bottom = rand(1,30);
$sx = imagesx($stamp);
$sy = imagesy($stamp);
// Копирование изображения штампа на фотографию с помощью смещения края
// и ширины фотографии для расчета позиционирования штампа.
imagecopy($im, $stamp, imagesx($im) - $sx - $marge_right,
imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp),
imagesy($stamp));



file_put_contents("image.jpg",$im);
Аноним 08/12/15 Втр 12:34:28 #836 №598953 
>>598765

Вторым параметром для file_put_contents должна быть строка, а не указатель на ресурс ($im).

Также, почитай мануал по imagepng. Там есть опции сохранения в файл.

Ответы на старые посты Аноним 09/12/15 Срд 05:33:56 #837 №599710 
>>595253

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

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

>>595304

> Но сам факт, что у категорий, есть суб-категории (это еще надо подумать, как привязать или поискать суб-категории к опенкарту, ведь там есть контроллеры только для категорий)
Я погуглил и нашел такую страницу где написано как создавать подкатегории: https://sites.google.com/a/kevronent.com/opencart-documentation-user-guide/user-guide/categories/create-sub

Также, какие расширения для них: http://www.opencart.com/index.php?route=extension/extension&filter_search=subcategories

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

> предмодерация комментов
А это http://www.inmotionhosting.com/support/edu/opencart/313-approving-a-review-of-a-product-in-opencart не то что требуется? Правда там речь о reviews, обзорах.

> А это еще месяц-два
Да ну, это надо быть мегаслоупоком чтобы модерацию комментариев делать месяц. 3-4 дня если с нуля надо написать админку для модерации.

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

> поскольку зависимость у таблиц там сложная
Гугление выдает схему БД опенкарта со связями. На ней не изображено то, что нужно? http://wiki.opencarthelp.com/doku.php?id=databse_schema

> Фикс незнакомой цмс
Вообще-то по идее надо не трогать чужой код а писать расширение и тему к CMS. Иначе как потом эту CMS обновить?

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

> а потом он нашел кого-то, кто согласился "взять готовое и сделать еще быстрее"
Вообще может и не нашел, просто он так тебя мотивирует.
Аноним 09/12/15 Срд 05:34:17 #838 №599712 
>>595337

Может быть тебе дадут код в архиве и попросят сделать правки, может доступ к систему управления версиями.

>>596201

Почему? Мне вот программировать поднадоело, а учить этому - пока нет.

>>596604

Советую почитать про протокол HTTP: методы, заголовки, коды ответа. Потом почитать мануал по опциям curl: http://php.net/manual/ru/function.curl-setopt.php

А потом взять нормальный HTTP клиент вроде Guzzle.

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

>>596648

> $symbol2 = mb_substr ($cleanCapital,-$i, -$i+1);
Третий параметр должен быть 1 чтобы всегда брать ровно 1 букву.

> if ($s=1) {
= это не сравнение а присваивание переменной числа 1 и это условие всегда срабатывает незаивисимо от того что в $s. Используй ==

> if ($i == 0) {
Не нужно отдельное условие для i ==0.

>>596686

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

> а а
> б ж
Ты на первом шаге сравниваешь букву саму с собой, вот код: http://ideone.com/TlOowv

Почему? Потому что -$i при $i == 0 это тот же самый ноль.

То же самое:

> $symbol2 = mb_substr ($cleanCapital,-$i, -$i+1);
Почему третий параметр -$i + 1? Это число символов которое мы хотим взять, должно быть 1

>>596814

Хуки обычно в CMS. Возьми вордпресс и посмотри.

>>596856

Там есть байткод и есть даже какая-то команда для его вывода. Нативный код в динамическом языке генерировть бесполезно если неизвестен тип переменных, такое делают только в JIT (когда типы переменных известны) в HHVM например.

Статья по ссылке интересная.
Аноним 09/12/15 Срд 05:34:38 #839 №599713 
>>596892

Это отвратительно сделанная страница. Вот почему:

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

Посмотри как сделаны мобильные версии маазинов, например http://lamoda.ru

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

>>596966

> Но школьник может заплатить только 5000 рублей. Я имею ввиду StrawberryBank требует 7777 единоразово, так что школьник просто не сможет взять у них кредит. Или я что-то неправильно понял?
Банк не требует платить 7777 сразу, они просто добавляются к сумме долга, то есть в первый же день школьник должен 47776 (39999 + 7777) р.

По коду:

> $creditsum x $per ) + $komission;
> $paymentTotal = $paymentTotal + $LastTransact;
избавься от повтора кода

Число 39999 повторяется 3 раза - избавься.

> PHP Notice: Undefined variable: paymentTotal in /home/Xd2SZt/prog.php on line 14
Это надо исправить, ты обращаешься к переменной ктоторой в тот момент еще не существует.

> softBank: 60260.891466803
А должно быть 61270.

Вот еще пример, я подставил сумму долга 4000, должно получиться 6123 во втором банке, у тебя 5120: https://ideone.com/S93B6o

>>596967

По моему ничем не плох.

>>597320

У тебя как я понимаю, задача пока не дорешена (не все виды номеров поддерживаются), потому пока проверять особо нечего.
Аноним 09/12/15 Срд 05:35:18 #840 №599714 
>>597420

Вообще, HTML лучше бы вынести в отдельный файл-шаблон

> <?php echo
<?= короче будет

> if ($op2 == 0) {
> echo 'На ноль делить нельзя!';
неправильно выводить текст до <html>. Лучше сделать чтобы ошибка выводилась в специально отведенном месте страницы.

> <br>
Неправильно верстать с помощью br. Гораздо правильнее поместить 2 блока в 2 отдльных дива:

<div>input, select, input</div>
<div>Result: .... </div>

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

> <input type="submit" value="calc!" />
Слеш в конце одиночного тега в HTML не нужен. Это не XML.

> <?php if(isset($res)): ?>
Неправильно когда переменная может существовать, а может и нет. как писать надежный код если непонятно есть ли такая переменная?


>>597719

Если открыть консоль (Ctrl + Shift + J) то причина ошибки видна ясно:

> Uncaught SyntaxError: Unexpected token +=
Нельзя писать var x += 1, можно только var x = 1;

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

Еще чуть-чуть про объявление переменных ты можешь прочесть у меня: https://gist.github.com/codedokode/ce30e7a036f18f416ae0#Порядок-создания-переменных

> Вроде бы перед выполнением скрипта интерпретатор проводит какой-то анализ и собирает объявления всех функций и переменных, казалось бы он должен просто проигнорировать второе объявление одной и той же переменной, ан нет.
он так и делает

> ошибки он теперь не выводит
Используй консоль в отладчике: http://learn.javascript.ru/debugging-chrome
Тред закрыт Аноним 09/12/15 Срд 05:35:48 #841 №599715 
Этот тред закрыт. Переходите в новый, 65-й >>597909 (OP)

comments powered by Disqus

Отзывы и предложения