«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Клуб изучающих PHP 64 Аноним 2015/11/25 08:47:55  №588512 1
14484304752150.jpg (275, 1658x851)
851x1658
14484304752161.png (134, 1245x756)
756x1245
14484304752192.png (331, 800x436)
436x800
14484304752203.png (1657, 1920x1200)
1200x1920
Добро пожаловать в наш уютный тредик. Тут мы изучаем язык 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) когда тебе не надо тратить время на поиск заказов и переговоры с неадекватными заказчиками.
Аноним 2015/11/25 08:48:23  №588513 2
>>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, то рассказать об этом стоит в каком-нибудь другом треде.

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

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

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

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

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

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

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

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

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

Аноним 2015/11/25 19:15:39  №588973 19
>>588970
Да препод придрался к тому, что я сделал сортировку через asort и зставил делать ПУЗЫРЧАТУЮ СОРТИРОВКУ алгоритмом, я вот и не понял, как эта фигня работает.
Аноним 2015/11/25 19:21:18  №588984 20
>>588970
Алсо, почему нельзя сразу присвоить
array[0]=array[1]? Я что-то нихрена логику не понимаю, да я тупой.
Аноним 2015/11/25 19:22:22  №588985 21
>>588984
И как ты потом присвоишь значению $array[0] значению array[1]?
Аноним 2015/11/25 19:22:59  №588986 22
>>588984
Ты потеряешь значение array[0]. array[0] станет равен array[1].
Аноним 2015/11/25 19:25:44  №588989 23
>>588985
>>588986
разобрался, спасибо вам. вообще, приятно, что вы отвечаете даже на тупые вопросы. в них порой сложнее разобраться, чем в сложных
Аноним 2015/11/25 19:57:14  №589004 24
14484706341220.jpg (46, 604x604)
604x604
Анон, как функцией file_get_contents получить строкой содержимое веб-страницы по URL? Почему в Ideone это не работает? https://ideone.com/rHdAje
Аноним 2015/11/25 20:00:22  №589009 25
14484708221530.png (44, 737x481)
481x737
Аноним 2015/11/25 20:14:00  №589015 26
>>588887
Чего она тогда в шапке делает? Объясняйтесь, быстро.
Аноним 2015/11/25 20:27:50  №589035 27
Снова дебил с пузырьковым сортированием.
Анон, почему мы берем кол-во значений в массиве 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;
}
Аноним 2015/11/25 20:47:56  №589057 28
>>589015
Ну когда то она была очень даже ничего.
Хороших книг по PHP для начинающих нет. Или старое говнецо или вариация офф. мануала.
>>589035
Потому что первый индекс массива это 0 а не 1. Соответсвенно последний индекс массива равен количеству элементов - 1.
Аноним 2015/11/25 21:45:12  №589121 29
>>588627
проиграл с пикчи, потому что в руби это правда. (интерполяция строк)
Аноним 2015/11/26 00:14:20  №589316 30
>>589057
А как тогда пхп учить-то?
Аноним 2015/11/26 00:20:50  №589320 31
>>589316
Мануал + учебник ОПа.
Аноним 2015/11/26 01:22:52  №589364 32
ананасы, выручайте, впал в ступор, прошел курс по пхп на кодакадемии и почитал мануальчик от Опа, но теперь не знаю, что делать дальше. Многие советуют начать писать что-нибудь свое, но я даже не знаю, с чего начать. Нужен дельный совет,с меня как всегда
Аноним 2015/11/26 01:48:16  №589374 33
>>589364
Пиши борду/бложик/форум/магаз - самые ходовые варианты.
Аноним 2015/11/26 02:43:47  №589380 34
>>588613
>>588624
>>588627
Вы бы хоть учебники почитали для начала, прежде чем бугуртить.
Аноним 2015/11/26 02:44:00  №589381 35
Практически доделанный файлообменник. Осталось только соль добавить и инфу о картинках в порядок привести. Все, что не смог сделать (слим композером, чтобы автолоад был, твиг добавить) - сделать не получилось. $app прямо в классы передаются, потому что написали, что надо было контроллеры подсократить, ну и это единственный способ был. Переименовать тоже не могу, ибо в сборке ИДЕ он уже как твигблог записался. В конечном итоге, переименовать могу только устанавливая на хостинг. Если есть какие-то уязвимости - напишите плиз.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

>>590240

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

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

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

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

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

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

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

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

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

>>590262

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

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

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

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

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

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

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

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

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

И это кстати объясняет почему стоит использовать готовую библиотеку-data mapper вроде doctrine 2: там эти проблемы уже решены.
Аноним 2015/11/27 06:06:00  №590292 107
Анон, как научиться использовать гамильтонов граф? Я-то прочитал, но нихуя не понял. Помогите!
Аноним 2015/11/27 06:33:14  №590295 108
>>590235
>Считай первое же задание рабочее ты провалил.
Нахуй кому-то решать задачи бесплатно для макаки, которая называет join'ы излишеством? Это что уровня "Памагите сделать за меня лабу, мне через час сдавать".
Аноним 2015/11/27 06:45:19  №590297 109
>>590295
>Это что уровня "Памагите сделать за меня лабу, мне через час сдавать".
Ну простите что тут вам не дают задач по написанию фэйсбуков. Такова жизнь. И большая часть программирования состоит из решения вот таких задач.
Аноним 2015/11/27 06:55:04  №590299 110
14485965042680.png (5, 288x175)
175x288
>>590295
>двачь, у меня нет опыта, хочу какую-нибудь рабочую задачку решить. Чувствую что готов.
>Вот тебе реальная задача.
>Чёт мне твоя задача не нравится. И решать её как-то мне не хочется. Да и условия по решению какие-то стрёмные.
>Ну не решай.
>И вообще ты хрен какой-то и денег мне платить не хочешь. Да и задачу стрёмную предложил чёт, на уровне лабы.
Вот как я вижу всю эту переписку.
Аноним 2015/11/27 07:51:11  №590303 111
ОП, в задачи про доллары действительно не нужно ставить ?> или это опечатка? (в 2 копипастах и скрине, лол).
Аноним 2015/11/27 09:20:23  №590325 112
>>590299
>Вот как я вижу всю эту переписку.
Читай внимательнее
>на фриланс сайтах,
а не двощах. Этот опездал вместо того, чтобы ответить на вопрос решил повыебываться, подсунув мне задание с которым он сам не смог справиться, с надеждой на то, что я её решу, а он просто спокойненько отправит её на тест.
Аноним 2015/11/27 09:43:40  №590329 113
Аноним 2015/11/27 12:17:50  №590400 114
Аноним 2015/11/27 12:26:36  №590409 115
>>590400
>на решай
Ну решу, дальше что будет?
Аноним 2015/11/27 13:04:34  №590429 116
>>590409
Будешь знать - готов ты или нет. Ну и немного кода для портфолио. Можешь также попробовать устроиться в эту компанию, они вроде до сих пор ищут.
Аноним 2015/11/27 13:33:13  №590439 117
Аноним 2015/11/27 14:11:14  №590447 118
>>590429
Я же уже сказал, что готов. Я такие задачи каждый день на работе решаю.
Аноним 2015/11/27 17:04:54  №590550 119
>>590447
>Я такие задачи каждый день на работе решаю.
>нет портфолио и опыта.
Кто-то тут нагло врёт.
Это взаимоисключающие параграфы.
Аноним 2015/11/27 17:08:07  №590551 120
Аноним 2015/11/27 17:11:01  №590554 121
>>590551
Тоесть ты скрываешь что у тебя есть опыт из-за NDA?
Ты не врёшь, ты уже нагло запизделся просто.
К тому-же я и сам так работаю, что однако не помешало мне создать мало мальское портфолио в свободное от работы время.
Аноним 2015/11/27 17:13:46  №590555 122
>>590439
Нет, на сеньора блять. Джунам достаточно уметь делать хелловорлды.
Олег 2015/11/27 17:18:58  №590557 123
>>590555
>Джунам достаточно уметь делать хелловорлды.
Нет.
Алсо
4. Хранение в БД MySQL.
Я конечно понимаю с какой целью... но всё-таки уточню. Как это может применяться?

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

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

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

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

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

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

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

все разобрался, пасиб
Аноним 2015/11/28 17:19:50  №591140 142
Анон, вопрос по регулярным выражениям. Как проверить то, что в тексте отсутствует запятая. Допустим во фразе "я был а она нет", запятая перед "а" отсутствует. Как это проверить?
Аноним 2015/11/28 17:24:49  №591143 143
>>591140
Например /[a-zа-яё]\\s(а)\\s/ui
Аноним 2015/11/28 17:28:55  №591147 144
>>591143
Так мне пробел нужен, а запятая, лил.
Аноним 2015/11/28 17:31:43  №591148 145
>>591147
>не пробел, а запятая
быстрофикс
Аноним 2015/11/28 18:04:37  №591171 146
>>591148
А я тебе что скинул?
Аноним 2015/11/28 18:06:46  №591173 147
Напомню что у нас есть крутое задание на 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

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




Аноним 2015/11/28 18:09:42  №591176 148
>>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
Аноним 2015/11/28 18:12:16  №591178 149
>>588733

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

>>588788

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

>>588910

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

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

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

>>588915

Не уверен.

>>588921

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

>>589004

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

>>589035

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

>>589364

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



Аноним 2015/11/28 18:38:05  №591185 150
>>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 Их не обязательно задавать?



Аноним 2015/11/28 18:49:19  №591194 151
Аноним 2015/11/28 19:03:21  №591199 152
>>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)
Возможно стоит еще сделать метод массового получения дельт?



Аноним 2015/11/28 19:24:15  №591209 153
>>591194

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

Как закомментированная строка может случайно уйти в продакш? Такое вообще возможно?
Аноним 2015/11/29 00:08:01  №591440 156
Когда-то давно одна маня в воркаче попросила сделать инет-магаз .. за 5 дней. Чтобы разделы и товары можно было добавлять, удалять и редактировать, в общем натянуть макет на готовую цмс. В общем, сверстал макет, по-моему, дня за 3, но прям с утра до ночи верстал, чтобы все резиновое было и не наезжало друг на друга пиксель в пиксель. И сейчас натягиваю этот макет на опенкарт (а там еще ру. яз. подключать надо). И я просто ахуеваю, насколько тут много работы и какое вообще говно можно сделать быстро-быстро всего за 5 дней одному человеку, и это он еще цену не называл.
Аноним 2015/11/29 00:08:32  №591442 157
Как указывать в резюме или в анкетах опыт работы, если я год работал в черную я микроконторе, у которой даже названия нету, в которой помимо меня было 2 человека. И это по сути мой первый опыт. То есть я хочу написать в том же резюме, что занимался вот такими то вещами. Но не писать же, что работал в шараге за еду.
Аноним 2015/11/29 02:47:59  №591527 158
Может мне кто пояснить за REST? Поизучал Slime нихуище непонятно, нахуй микрофреймворки вообще нужны?
Аноним 2015/11/29 05:06:47  №591558 159
14487628072030.png (46, 1164x592)
592x1164
14487628072041.png (84, 906x619)
619x906
Аноны, поставил себе 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

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

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

>>591869

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

Аноним 2015/11/29 18:12:35  №591882 169
>>591880
причем с первого раза, как код исправил.
Аноним 2015/11/29 18:16:49  №591884 170
Аноны, а хотите задачку на 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/
Аноним 2015/11/29 18:26:02  №591894 171
Аноним 2015/11/29 18:26:36  №591895 172
>>591894
Сборки для быдла.
Аноним 2015/11/29 18:31:20  №591898 173
14488110804290.jpg (9, 200x246)
246x200
>>591895
Ну что ты, братишка, всеж мы быдло.
Аноним 2015/11/29 18:34:39  №591903 174
>>591884
Я занят, остальные тупые или ленивые.

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

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

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

Алсо

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

Нужна связь 1-М от страны к городу.
Аноним 2015/11/29 19:32:10  №591949 179
>>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)
Аноним 2015/11/29 19:33:17  №591950 180
>>591949
Хотя наверное это тоже фейл :< с проверкой диапазона из-за точек в адресе.
Аноним 2015/11/29 19:33:17  №591951 181
>>591949

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

IP адрес можно преобразовать в UNSIGNED INT с помощью INET_ATON/INET_NTOA. Ip адрес это и есть одно число, просто записывается обычно в виде 4 чисел.
Аноним 2015/11/29 19:40:11  №591955 183
Аноним 2015/11/29 20:13:58  №591977 184
Видишь какая польза от троллинга? Стоило назвать тупыми и ленивыми, как сразу зашевелились.

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

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

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

>>591977

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

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

x ... x + 9

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

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

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

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

Не знаю, правда, это сильно по быдлокодерски?
Аноним 2015/11/30 00:01:26  №592096 198
>>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, так что оба индекса по прежнему не удается использовать.
Аноним 2015/11/30 00:02:36  №592099 199
>>592081

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

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

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

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

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

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

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

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

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

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

$creditBalance = ($creditBalance*$percent)+$servicePayment
$monthlyPayment = $creditBalance;
$paymentTotal = $paymentTotal + $monthlyPayment;
$creditBalance = 0;
Аноним 2015/11/30 07:50:52  №592307 221
>>592306
Блин, я тупой, не то сделал. Ну и хрен с ним
Оле 2015/11/30 08:54:39  №592324 222
14488628798810.jpg (25, 640x380)
380x640
>>592298
>5.5 Выполни код с картинки, чуть-чуть его переделав на свой лад.
ОП, у меня мозг немного не работает. Можно свою рулеточку написать? или в чём задача?
Аноним 2015/11/30 09:29:02  №592328 223
>>592324
На php есть аналог jQuery? Пропарсить кое-чё надобно.
Олег 2015/11/30 09:36:04  №592329 224
>>592328
>На php
> аналог jQuery?
Например jQuery.
Олег 2015/11/30 11:00:07  №592341 225
Аноним 2015/11/30 11:38:28  №592361 226
>>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, как там можно сделать чтоб функция определяла с какой страницы нас заредиректило?
Аноним 2015/11/30 12:02:08  №592368 227
>>592329
То есть няшных селекторов в php не завезли? Парсинг на клиенте городить чтоле? - это же отстой.
Аноним 2015/11/30 12:19:04  №592371 228
Что если весь роутинг производить на сервере? И вызывать уже соответствующий скрипт. Какие подводные камни?
Аноним 2015/11/30 15:23:59  №592481 229
>>592371
Обычно делается через mod_rewrite что-то типа
RewriteRule . index.php
То есть одна точка входа, в самом приложении уже разбирается маршрут.
Можно конечно понаписывать десятки правил в .htaccess, но зачем?
Аноним 2015/11/30 15:25:49  №592483 230
>>592328
Если ты имеешь ввиду парсинг dom, то есть, смотри в гугле. Причем с jquery-подобным синтаксисом.
Аноним 2015/11/30 16:54:20  №592575 231
>>592481
Прописываем в location пути к разным сервисам, тем самым уменьшая оверхед. Например, есть у нас апи для авторизации, апи для комментирования. Лучше же разделить логику.
Аноним 2015/11/30 17:09:35  №592582 232
Решил продвинуть свои знания парсинга и спарсил с одной страницы курсы 54 валют. Потом, решил написать на основе всего этого калькулятор валют, сформировал многомерный массив, такого формата:

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

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

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

Аноним 2015/11/30 17:37:32  №592613 238
Аноним 2015/11/30 17:37:54  №592615 239
>>592599
Недавно сверстал из псд то что у ОПа в заданиях, хочу попробовать натянуть это на Вордпресс, но, не могу понять что там должно динамически изменяться.
Аноним 2015/11/30 17:41:25  №592618 240
>>592615

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

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

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

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

>>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
Аноним 2015/11/30 20:17:52  №592762 258
> натянуть
> сверстать
> адаптивный макет
Так это вы серьезно, кроме собственно пхп и сопутсвующего, еще и по цсс придется упороться?
Аноним 2015/11/30 20:19:17  №592765 259
>>592762
Ага, а еще по SQL, Java Script, системе контроля версий и еще бог знает чему.
Аноним 2015/11/30 20:21:12  №592769 260
>>592748
Зато у нас есть анонимные интернет друзья с борд.
Аноним 2015/11/30 20:24:22  №592773 261
14489042622440.jpg (8, 228x221)
221x228
>>592765
Командная строка, curl, XML, линукс, сети, локалка, яндекс метрика, поисковики, продвижение, сое, роботы, красно-черные и ЛФЛ деревья, алгоритмы Хоффмана и Дейкстера, графы и т.п.
Аноним 2015/11/30 20:26:46  №592776 262
14489044066050.png (50, 570x302)
302x570
Аноним 2015/11/30 20:46:31  №592799 263
>>592765
К этому то я готов, но ВЕРСТАТЬ и НАТЯГИВАТЬ мне не очень хочется, иначе я бы во фронтенд пошел, там и проще, и быстрее.
Аноним 2015/11/30 21:14:52  №592826 264
>>592799
А что ты собрался на пхп делать, если ты даже с цмской не в состоянии работать и кое-как адаптивный макет сварганить, маня?
Аноним 2015/11/30 21:27:48  №592836 265
Продолжая тему определения города по ip.
Оптимальное решение задачи по хранению диапазонов может быть оп позже соблаговолит подсказать (я например нервничаю что не могу решить, это ставит под сомнение компетенцию), но в принципе здесь тоже не нужно писать свои велосипеды, потому что есть хорошие бесплатные сервисы и свободные базы. GeoIP вроде бы полубесплатный, там урезанная версия в light пакете. Мне понравился SypexGeo, он вроде бы вообще бесплатный, без ограничений, и по словам автора "самый быстрый".

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

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

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

Давайте перцептрон разберем. Что-то я не понимаю, как он устроен и как его использовать. Вроде установил композером, но вылетают ошибки. Класс\PHPUnit_Framework_TestCase не найен
Аноним 2015/11/30 23:10:06  №592914 272
Аноним 2015/11/30 23:12:38  №592917 273
Аноним 2015/11/30 23:17:57  №592926 274
14489146778670.png (121, 350x234)
234x350
14489146778671.png (255, 387x429)
429x387
>>592917
Открой википедию и посмотри.

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

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

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


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

Повторял по дурацким урокам с хабрахабра, но не хочется быть обезьяной, хочется понимать за что отвечает каждая настройка.
Поэтому несколько вопросов. Для начала, являются ли обязательными некоторые настройки в 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
Аноним 2015/12/01 04:25:03  №593039 287
14489331035550.jpg (1146, 1400x860)
860x1400
14489331035571.png (563, 1280x923)
923x1280
14489331035612.png (241, 1280x923)
923x1280
14489331035633.png (219, 1280x923)
923x1280
>>592999
>Вещи, которые ты описал, лучше получатся с использованием хотя бы микрофреймвока Slim, шаблонизатора Twig, то есть лучше бы это прикручивать ко второй задаче про файлообменник. Либо прикрутить микрофрейморк и шаблонизатор к первой задаче
Хорошо, будет прикручивать ко второй задаче.
Кстати, по первой задаче, мы уже с тобой делали подобную задачу на простую регистрацию https://github.com/someApprentice/simpleRegistration
Осталось перенести её на ООП. Задам вопросы об этом позже.
Пока читают пасты про БД и уязвимости. Сложна. Понимаю лишь только потому что уже делал такое. Чувствую будет сложно потому что я хочу все побыстрей узнать.

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


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


С П А С И Б О
Аноним 2015/12/01 04:48:23  №593040 288
>>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) но убогонькая.

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

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


Аноним 2015/12/01 04:49:01  №593041 289
>>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 нельзя.

----------

Аноним 2015/12/01 04:49:30  №593042 290
>>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.
Аноним 2015/12/01 04:56:49  №593043 291
>>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 адреса или чего-то еще.

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

Аноним 2015/12/01 05:01:59  №593044 292
>>593039

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

class="js-new-comment-form"

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

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

Аноним 2015/12/01 05:02:57  №593045 293
>>593039

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

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

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

Ошибки:

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

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


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

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

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

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

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

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

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

>>593357

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

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

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

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

>>593364

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

>>593377

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

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

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

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

API у них не работает для моей задачи, так что было решено брать штурмом через парсинг.
Аноним 2015/12/02 02:53:46  №593722 341
$_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);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

> $recentVisits = $vc->getDeltaVisits( [$model->id] );
> $visits = $savedVisits + $recentVisits;
мы передаем массив id, а получаем просто число? Я бы для удобства сделал 2 метода, один для массового получения чисел, а другой для получения одного значения для одной страницы.
Аноним 2015/12/02 04:03:49  №593738 349
>>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

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




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

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

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

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

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

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

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

Текст ошибки почему не написал? Также, в коде который ты написал, нет перекодирования. Оно делается функцией iconv().
Аноним 2015/12/02 08:00:21  №593793 357
14490324215860.png (69, 1661x731)
731x1661
Аноним 2015/12/02 08:59:41  №593800 358
САП, пхпач, установил опен сервер на шиндошс, там есть планировщик заданий. Делаю по мануалу, но что-то не хочет работать. Поясни, зачем нужно после 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 после ини файла? как заставить планировщик запускать этот скрипт?
Аноним 2015/12/02 09:14:03  №593806 359
Олег 2015/12/02 09:16:50  №593808 360
14490370106670.png (49, 1109x59)
59x1109
>>593086
День 4.
Адово заболел зуб и ещё простудился, но таки сделал ещё одно задание.
https://ideone.com/8YMlrb
Бустрее бы добраться до баз данных.

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

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

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

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

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

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

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

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

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

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

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

и такие

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

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

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

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

Есть такая дрочильня под названием memrise.com, выучил там 4000 слов за два месяца, занимаясь по полчаса в день.
Фильмы в оригинале еще тяжело смотреть, но тексты документации уже идут сносно
Аноним 2015/12/02 14:03:17  №593956 392
>>593954
Фильмы в оригинале ( с субтитрами естественно) намного легче смотреть, чем читать большие тексты.
Аноним 2015/12/02 14:18:25  №593972 393
>>593865
Персистентность (возможность сбрасывать данные на диск), сложные структуры данных типа хешей, списков, сетов; транзакции, репликации, pipeline, мониторинг, инструменты мониторинга.
Много букв про редис http://habrahabr.ru/post/64917/
Много букв про тарантул http://habrahabr.ru/post/133435/
Аноним 2015/12/02 14:22:54  №593975 394
>>593947
>Ты так говоришь, как будто я не собираюсь повышать скилл.
На говноработе + универ + еще повышать скилл могут очень быстро сесть батарейки. Возненавидишь отрасль раньше чем научишься чему-нибудь на хорошем уровне.
На лоускилл вакансии сейчас бешеный конкурс. На нормальные вакансии конкурс тоже большой. 20-30 человек на место, но реально там конкурируют 2-4 человека, остальные "посмотрел курсы/прочитал книгу" просто массовка. Естественно тебе нужно быть одному из этих 2-4. Это пол года дисциплинированной работы над собой при адекватных способностях. За это время английский выучится по 30 мин в день для достаточного уровня очень легко. Без него очень тяжко. Чтение документации довольно большая часть работы, а она переводится с опозданием если переводится вообще.
Можно пробовать фриланс для старта, но там свои подводные камни.
Вывод тут простой, если холодильник не душит пиздец с какой силой, то лучше все доступное время трать на обучение, а не на однообразную лоускилл работу.
Аноним 2015/12/02 14:25:06  №593982 395
>>593975
Короче все шансы есть, было бы желание, терпение и труд. Спасибо.
Аноним 2015/12/02 14:34:11  №593999 396
>>593975
Ты про проекты забыл. Один сайт занимает месяца три-четыре и таких штук 7 надо сделать, доделанных и больших, чтобы типа партфалио. И не просто лендинг а норм сайт с функционалом и на фреймворках.
Аноним 2015/12/02 14:48:22  №594015 397
Аноним 2015/12/02 15:20:43  №594041 398
Посоны, а в пхп вообще есть функции для работы с видео? Чтобы там камеры пользователей писались, граффити сделать. Хочу аналог чатрулетки запилить.. Или такое на шарпе делается?
Аноним 2015/12/02 15:23:58  №594044 399
Аноним 2015/12/02 15:44:43  №594054 400
Я смотрю, многие добавляют композер в описание. Можно добавить свой сайт в композер и загружать через него что ли?
Аноним 2015/12/02 15:45:56  №594056 401
>>594041
Такое во флэше делается.
Аноним 2015/12/02 15:51:38  №594060 402
Аноним 2015/12/02 16:51:32  №594092 403
>>588512 (OP)
Объясните нубу, для чего используется php в реальном мире? Почему работодатели требуют знать php от фронтенд разработчиков? Почему работодатели требуют знать php от бэкенд разработчков на python+django?
Аноним 2015/12/02 17:00:24  №594098 404
>>593890
> Geekbrains
Просмотрел за пару дней курс, спиздженный с торрентов. Для дауна, типа меня, вполне неплохо как дополнение к книжкам, оповскому гайдику и прочему (дополнительные задачки, пояснения для тупых).
Аноним 2015/12/02 17:03:46  №594100 405
Это джаваскриптом так выстраиваются блоки?
https://sebastian-bergmann.de/
По каким словам можно загуглить?
Аноним 2015/12/02 17:03:50  №594101 406
Аноним 2015/12/02 17:19:11  №594111 407
Иногда в требованиях вакансий пишут "знание отличий версий php". Для чего это? Такие конторы работают с древними cms, или может есть настолько поехавшие ретрограды, что до сих пор сидят на четверке?
Аноним 2015/12/02 17:28:15  №594116 408
Сап как замутить постраничный вывод из базы данных
Аноним 2015/12/02 17:34:25  №594118 409
>>594111
Например, если придётся рефакторить проект с 5.5 на 5.7 или хипстхоп.
Аноним 2015/12/02 17:39:05  №594120 410
>>594111
>>594118
Или есть какой-то крупный легаси проект, который сидит на 5.3, и менять версию никто не будет так как рефакторинг дорог, долог и не нужен.
Аноним 2015/12/02 17:39:28  №594121 411
>>594111
>>594118
Или есть какой-то крупный легаси проект, который сидит на 5.3, и менять версию никто не будет так как рефакторинг дорог, долог и не нужен.
Аноним 2015/12/02 18:03:13  №594140 412
Что такое зависимость в юнит-тестах? Это значит, что один тестовый метод вызывается из другого?
Вот пример 4.2 на хабре
http://habrahabr.ru/post/89175/

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

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

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

Аноним 2015/12/02 20:21:44  №594301 423
>>594300
Объект создается, но пустой.
Может я чего-то не понимаю?
Аноним 2015/12/02 20:25:40  №594309 424
В смысле пустой, скинь вардамп
Аноним 2015/12/02 20:27:21  №594311 425
>>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) "" }
Аноним 2015/12/02 20:30:05  №594319 426
в классе нет метода конструктора, непонятно куда и зачем передаются параметры при создании объекта
Аноним 2015/12/02 20:31:54  №594322 427
>>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; ?>
Аноним 2015/12/02 20:37:37  №594327 428
попробуй так
$calendar = new Julian();

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

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

Интересует, сколько его будет делать человек который делает впервые.
Аноним 2015/12/02 22:53:53  №594449 448
>>594445
Если без забивания себе головы ООП-шлаком, аналог рыгоста можно сделать за час, даже нихуя не зная. Только для раздачи приватных фейлов с приемлемой скоростью, нжинкс всё-таки понадобиться.
Аноним 2015/12/02 22:57:10  №594452 449
>>594449
Даже ни зная ни одного фреймворка? Наврятли, можешь оставить фейко почту или скайп, шоб я позадавал тебе вопросов когда начну делать?
Аноним 2015/12/02 23:06:45  №594468 450
>>594452
Фреймворки (если ты пишешь аналог рыгоста, а не йобы с платными скачками за смс уровня depositfiles) - нахуй не нужны. Там на всё про всё хватит 2-3 шкрептов.
Фейкопочту можешь оставить свою, но я сегодня один хер буду отсыпаться после двух ночей чехарды с миграцией продакшена по 3 разным датацентрам. С побочными эффектами "ёпта, поцоны - у нас новая корзина с товарами, мы не ту ветку на %datacentername% развернули. Налетай на логи, пока юзеры багов не заметили!"
Аноним 2015/12/02 23:09:15  №594470 451
Ребята, есть вопрос по заданию на тему регулярочек. Какого вида она должна быть? Одна здоровая? Если бы я принимал данные через $_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 позвать Люду» — неправильный).

Заранее благодарю.
Аноним 2015/12/02 23:15:59  №594473 452
Донный вопрос про уместность "die" в контексте начинающего быдлокодера.
Вот, к примеру, примитивнейшая задачка (если это вообще можно назвать "задачей"), которую я накатал за минуту.
Насколько вообще уместно стопать скрипт таким образом?
http://ideone.com/mMH3Id
Аноним 2015/12/02 23:17:34  №594476 453
>>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
Аноним 2015/12/02 23:18:55  №594479 454
>>594468
так мне не прям не сегодня делать надо, я хочу его до нг сделать

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

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

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

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

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

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

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

Определить интерфейс 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. Объяснить возникновение ошибки.
Аноним 2015/12/03 11:49:41  №594692 477
Аноним 2015/12/03 11:57:52  №594696 478
>>594689
Ты запостил задание, хорошо. Было бы неплохо написать еще что из этого ты можешь сделать или сделал, а что не смог
Аноним 2015/12/03 12:00:37  №594699 479
>>594696
Сделать я могу первое-второе задание. Не факт, что правильно. Всё остальное вызывает сильное чувство дискомфорта ниже пояса.
Аноним 2015/12/03 12:08:12  №594704 480
>>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 Аноним 2015/12/03 15:12:20  №594784 481
>>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 Аноним 2015/12/03 15:12:57  №594787 482
>>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 - как-то так. Продумай, какие методы должны быть у такого класса, что они делают или возвращают.

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

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

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

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

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

>>589911

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

>>590239

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

>>590259

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

>>591257

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

>>591281

Конечно.
Аноним 2015/12/03 15:59:07  №594821 485
>>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.
Аноним 2015/12/03 15:59:28  №594822 486
>>591563

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

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

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

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

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

>>591783

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

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

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

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

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

>>591802

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

>>591807

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

>>592027

Нет. Preg_match ищет только первое совпадение с регуляркой. Чтобы найти все совпадения, используй preg_match_all (она есть в уроке и в мануале).
Аноним 2015/12/03 15:59:45  №594824 487
>>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), но на самой странице его не будет.

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

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

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

Надо MVC и ООП.

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

>>594341

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

>>594300

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

>>594143

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

>>594140

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

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

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



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

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

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

>>594092

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

>>594054

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

>>594041

Нету

Аноним 2015/12/03 16:28:50  №594860 499
>>594838

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

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

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

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

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

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

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

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

>>594861

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

>>594865

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

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

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

Аноним 2015/12/03 16:38:17  №594871 506
>>594867

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

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

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

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

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

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

https://ideone.com/PYYgOi

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

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

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

Parse error: syntax error, unexpected '[' in

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

Короче, "продам книгу как заработать миллион - потому что очень ЖРАТЬ ХОЧЕТСЯ".
Аноним 2015/12/03 18:03:07  №594930 521
14491549875690.jpg (403, 1280x853)
853x1280
Не сочтите за троллинг, такой вопрос. Программисты ребята обычно умные (как-никак аналитическое мышление), а следственно могут в логику инвестирования и реинвестирования, сложные проценты, все дела. Так почему же программисты не развивают свой маленький бизнес, дающий 100% годовых при минимальных усилиях ?
Аноним 2015/12/03 18:04:07  №594932 522
>>594930
>Не сочтите за троллинг, такой вопрос. Программисты ребята обычно умные
Хуйню написал.
Аноним 2015/12/03 18:06:37  №594937 523
анон, имеется проблема с 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()
Аноним 2015/12/03 18:08:24  №594939 524
>>594930
ПАЦАНЫ, А УЧОНЫЕ ОНИЖ УМНЫЕ, НАХУЯ ИМ ФИНАНСИРОВАНИЕ ПОЧ ОНИ НЕ СОЗДАТУТ ЁБА БИЗНЕС ТИП ЧТОБ БАБЛО НА ИССЛЕДОВАНИЯ МУТИТЬ?)))
блядь как же ты меня выбесил своей тупостью
Аноним 2015/12/03 18:08:39  №594940 525
>>594937
очевидно, что ты в модели video не описал свойство src
Аноним 2015/12/03 18:11:40  №594944 526
>>594940
эм, а где его описывать, и каким образом, ибо в самом классе нет конструктора, который бы описывал. Свойство это вроде как нестатическое, и экземпляр класса я создаю непосредственно в функции
Аноним 2015/12/03 18:12:37  №594946 527
>>594944
вбрось Event.php и Video.php
Аноним 2015/12/03 18:13:57  №594947 528
Аноним 2015/12/03 18:17:02  №594952 529
>>594947
проверь таблицу videos
есть ли там столбец 'src'?
Аноним 2015/12/03 18:23:07  №594954 530
>>594952
нет, в videos столбцы id, source, name столбец src там не нужен
Аноним 2015/12/03 18:29:47  №594962 531
>>594930

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

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

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

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

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

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

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

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

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

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

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

>>595002

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

Аноним 2015/12/03 19:41:06  №595046 544
14491608664780.png (8, 1214x485)
485x1214
>>594859
Вот ты пудель, что нельзя было сразу сказать что за этот эффект отвечает библиотека isotope?

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Аноним 2015/12/04 12:55:48  №595452 574
>>595315

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

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

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

Аноним 2015/12/04 12:58:18  №595453 575
>>595403
>>595429

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

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

Аноним 2015/12/04 13:00:34  №595455 576
Аноним 2015/12/04 13:00:47  №595456 577
>>595453
>Команду netstat -ab надо выполять с правами администратора.
Смотри скриншот же. Она так и выполняется.
Аноним 2015/12/04 13:03:04  №595457 578
>>595455
>Для решения проблемы и освобождения занятого системой 80-го порта достаточно остановить сервис «Web Deployment Agent Service».
Сам грешил на него, но в службах его и в помине нет, что странно, поскольку я что-то подобное ставил пару месяцев назад. По моему webmatrix.
Аноним 2015/12/04 13:10:05  №595463 579
14492238052670.jpg (212, 1600x732)
732x1600
>>595457
>>595456
>>595455
>>595453
Парни, спасибо всем.
>Рассмотрим детальнее четверый случай, т.е. Web Deployment Agent Service/MsDepSvc
Майкрософт в win10 просто русифицировал названия. Методом отключения всего и вся я установил что теперь это Служба веб публикаций!
Так и остался вопрос, зачем ей заслонять 80 порт, и зачем она не пишет свои ID при скане.
Спасибо за помощь! Вы няшки!
Аноним 2015/12/04 13:19:25  №595468 580
>>595216
В районе тридцати. Я и не надеюсь особо, но буду признателен, если хотя бы чем-то поможешь.
Аноним 2015/12/04 14:49:32  №595528 581
>>595358
композер я знаю и фреймворк целый один знаю. занимался версткой, макетами, мамку твою поебывал, читал доки, задачки, куда ж без них, целую одну решил, файлообменник год писал.
Аноним 2015/12/04 14:50:59  №595532 582
>>595358
ебать, как у тебя все просто, ну подключай хуле, у меня и еще у кучи народа со стака вот не подключается, а у тебя подключается, прикинь.
Аноним 2015/12/04 14:53:07  №595537 583
>>595532
Ну значит не судьба, браток. Попробуй себя в другом ремесле.
Аноним 2015/12/04 14:53:28  №595538 584
>>594689
>С помощью final запретить перегрузку метода show_debts в классе students. Объяснить возникновение ошибки.
Это уже вообще шизотребование. Через эксепшн запретить перезагрузку и объяснить, почему вылетает ошибка, у меня просто рекурсия от этого требования, какие же конченные все эти рашкопреподы, поссал бы ему в ебло и кинул эту шарагу.
Аноним 2015/12/04 14:55:35  №595541 585
>>595537
в ебле твоей мамашки я себя уже попробовал, не понравилась, больно страшная и жирная и пизда гонореей воняет, своди ее к гинекологу штоли)
а так я же не нищеброд, как вы, чтобы кодингом еще и зарабатывать, ахаха ну вы и лахи, пиздец. кодингом зарабатывать, хаха, циклами и скобочками какие-то там копейки зарабывать, вы че мужики после этого, да говно вы женоподобное с толстой жопой.
Аноним 2015/12/04 14:57:33  №595545 586
>>595541
Завидую тебе. Тоже давно мечтаю стать кассиром в магните.
Аноним 2015/12/04 15:35:37  №595587 587
>>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 шага.
Аноним 2015/12/04 15:36:28  №595588 588
>>595538
Там не про эксепшены, а про финальные классы и методы.
Аноним 2015/12/04 15:48:38  №595597 589
Обновил композер, он теперь протестует против xdebug.
Причем даже против отключенного.
https://getcomposer.org/doc/articles/troubleshooting.md#xdebug-impact-on-composer
Вроде пишут, что это сообщение можно отключить при помощи установки переменной окружения среды, но я плохо в этом разбираюсь.
https://getcomposer.org/doc/03-cli.md#composer-disable-xdebug-warn
Это нужно прописать в каком-то конфиге, или запустить что-то из командной строки?
Аноним 2015/12/04 15:49:15  №595598 590
>>595587
Я просто поражаюсь твоей выдержке ОП.
Алсо, если есть время, посмотри мой файлообменник тоже
Аноним 2015/12/04 16:05:23  №595609 591
>>595587

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

>>595541

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


Аноним 2015/12/04 16:08:58  №595610 592
>>595597

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

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

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

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

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

linux: printenv
windows: set

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

ERR_CONNECTION_REFUSED

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

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

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

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

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

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

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

Аноним 2015/12/05 14:38:35  №596423 625
>>596368

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

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

>>596203

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

>>596202

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

>>596179

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

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

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

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


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


Аноним 2015/12/05 14:48:55  №596430 627
https://github.com/MindiMakridi/filehosting Файлообменник. Пока с минимумом функций, все равно большинство придется переделывать, ибо я пока плохо разбираюсь в MVC структуре, а так же не очень понимаю, что должно быть в lib, а что в models.
Аноним 2015/12/05 15:04:25  №596435 628
>>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 написано что это служба для того чтобы удаленно, с другого компьютера, делать какие-то операции. Не знаю зачем ты ее установил себе.
Аноним 2015/12/05 15:05:00  №596436 629
>>595463

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

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

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

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

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

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

>>596447

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

Аноним 2015/12/05 15:36:08  №596457 637
>>596447

только не забудь проверять что этот параметр from принимает разрешенные значения а не что угодно. не редиректь на неизвестные адреса предоставленные пользователем.
Аноним 2015/12/05 15:50:00  №596472 638
>>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=слово
Модель это класс для работы с сущностью, контроллер для группировки методов обработки запросов грубо говоря.
Аноним 2015/12/05 15:50:00  №596473 639
Аноним 2015/12/05 16:41:01  №596509 640
>>596435
Хоть и замаскированный, но неявный же.
return new Array(4).join('abc');

indexOf тоже осуществляется перебором, зато это всего семь букв вместо цикла с ифом и кучей фигурных скобок.
Аноним 2015/12/05 16:47:00  №596511 641
>>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


Аноним 2015/12/05 17:05:33  №596523 642
14493243336470.png (77, 909x331)
331x909
Бллядь, что за магия? Все работало нормально, сегоня апач шлет меня нахуй. Что за хуйня? индекс.хтмл открывается нормально.
Аноним 2015/12/05 17:15:53  №596533 643
А что такое View? Например в Студентах и Файлообменнике что будет во View?
Аноним 2015/12/05 17:17:19  №596535 644
>>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-шаблон с плейсхолдерами
Аноним 2015/12/05 17:27:55  №596542 645
Кажется, главная разница в том, что ActiveRecord может работать только с одной строкой таблицы, плюс имеет свойства сущности.
TDG может работать с группой записей, и подобно DM не имеет свойств сущности, нужно передавать отдельный объект с этими свойствами.

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

Я так админить раньше научусь, чем быдлокодить.
Аноним 2015/12/05 17:36:56  №596550 647
14493262165070.png (88, 1107x404)
404x1107
14493262165081.png (74, 1428x802)
802x1428
>>596545
Да блядь.

Помогите дебилу, у меня уже нервов не хватает. Что ему от меня нужно?
Аноним 2015/12/05 17:38:39  №596552 648
>>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
Аноним 2015/12/05 17:39:44  №596554 649
14493263845950.png (4, 354x107)
107x354
>>596550
А если прописать вручную, то все работает.
Я бы не парился, но вчера все было нормально.
Аноним 2015/12/05 17:41:27  №596556 650
>>596552
Но я-то ничего не менял, аптайм компа уже недели две. Если вручную путь до файлика в браузере прописывать, то все работает. Чувствую себя блондинкой.
Аноним 2015/12/05 17:44:46  №596558 651
>>596550
У тебя разные адреса на скриншотах.
Аноним 2015/12/05 17:45:11  №596559 652
>>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?
По моему у тебя все запутано. Внимательно перечитай урок, а потом еще мой пост и посмотри картинки на сайте с описанием паттернов.
Аноним 2015/12/05 17:49:15  №596562 653
>>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.

Аноним 2015/12/05 17:51:14  №596564 654
>>596554

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


Аноним 2015/12/05 17:51:36  №596565 655
>>596556

поменялся конфиг Апача.
Аноним 2015/12/05 17:54:14  №596567 656
14493272550100.png (156, 1194x860)
860x1194
>>596558
Да это я промазал просто, нервов не хватает уже.
Ткните меня рожей, куда гуглить или что жать.
Аноним 2015/12/05 17:56:07  №596571 657
>>596565
Окей, допустим. Но что там могло поменяться?
Аноним 2015/12/05 17:56:37  №596572 658
>>596567
Увидел свитч кейсы в коде.
@
В заголовке закладки "Клуб изучающих PHP".
@
Начал понимать откуда такой о PHP стереотип.
Аноним 2015/12/05 17:59:58  №596573 659
>>596567

Конфиг Апача показывай.

>>596572

Что плохого в свитче? Ты вообще с какого треда?
Аноним 2015/12/05 18:03:15  №596581 660
>>596572
Лол, а ты всё через if ебошишь? Индусский прогер.
Аноним 2015/12/05 18:05:33  №596583 661
>>596572
Я неделю пхп учу, извини, что разочаровал. Олсо, это примитивная задачка на калькулятор, чего ты от меня хотел, реализацию через ООП с MVC?
>>596573
Ну, вот
http://pastebin.com/WBVjNhQt
Собственно, все так и осталось.
Я просто даже не знаю, как гуглить.
Аноним 2015/12/05 18:06:34  №596584 662
>>596567
Ещё раз, ты пишешь testPro ссылка у тебя должна быть localhost\testpro\calc.php
а у тебя тупо локалхост.
Аноним 2015/12/05 18:07:08  №596585 663
>>581862
http://ideone.com/SMLKQE
Переделал по твоим советам, посмотри. Вопрос такой: создал метод getWidth чтобы обращаться к приватным полям из других классов, нужно ли теперь в родном классе их использовать вместо $this?
> abstract protected function tryToMove($field, $game);
Неудобно везде передавать $field, лучше сделать его свойством класса. автоматически проставлять при добавлении животного на карту и убирать (ставить null) при снятии.
Ну я вроде сделал это, но не уверен правильно ли тебя понял.
Аноним 2015/12/05 18:08:30  №596587 664
>>596585
>>в родном классе его использовать
быстрофикс
Аноним 2015/12/05 18:11:53  №596591 665
>>596584
Да вручную через адресную строку работает, просто пхпшторм шлет меня на три буквы, долбаный нетбинс тоже, а вчера все работало.

Ладно, не буду засорять тред, непрофильная проблема, все-таки, спасибо за терпение.
Аноним 2015/12/05 18:14:05  №596593 666
Аноним 2015/12/05 18:15:17  №596594 667
>>596583

Перезапусти апач. Если он у тебя как служба установлен то это команды net stop apache2.4 и net start apache2.4 в командной строке.

>>596585

> Вопрос такой: создал метод getWidth чтобы обращаться к приватным полям из других классов, нужно ли теперь в родном классе их использовать вместо $this?
Можно и так и так (обращаться напрямую к свойству или через геттер).

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


Аноним 2015/12/05 18:16:31  №596595 668
>>596591

Наверняка в PhpStorm есть настройка которая указывает где находится корневая папка сервера. И если ее задать, то он начнет правильный URL писать в адресной строке.

Аноним 2015/12/05 18:25:43  №596597 669
Аноним 2015/12/05 18:34:02  №596601 670
>>594901

Использовать регулярные выражения.

Также надо понимать что этот поиск быстро работает только пока записей мало. Если их мало, или если поиск где-то в админке, недоступной посетителям, то ок. Но если это поиск на публичной части сайта, и записей много то нужны другие подходы - например использовать полнотекстовые индексы либо внешний поисковый движок вроде Sphinx.
Аноним 2015/12/05 18:39:59  №596603 671
14493299993600.png (1669, 1507x1845)
1845x1507
Скочал mysql зип архив с официального сайта

Как запустить ёбаный mysql сервер? Я отредактировал path

Ввожу net start mysql и "не удалось запустить службу mysql служба не сообщает об ошибке"
Ессли ввести "C:\mysql\bin\mysqld", то вообще ничего не происходит
Аноним 2015/12/05 18:40:18  №596604 672
Ребзя, посоветуйте лит-ры/статей по работе с библиотекой cURL (желательно где подводные камни). А то столкнулся с проблемой, что практически два идентичных файла с кодом запроса и авторизации вк дают совершенно разный эффект.

inb4 php.net
Аноним 2015/12/05 18:54:35  №596619 673
14493308758220.png (182, 1674x711)
711x1674
>>596594
>>596595
Бесполезно, все равно шторм пытается открыть файл в корневой директории (а его там нет, естественно, он в другой папке). Помогло только в апаче директорию напрямую прописать, но это костыль.
С другой стороны, это лучше, чем адрес вручную в браузере прописывать, а все, что мне нужно сейчас - открывать задачки в браузере, так что похуй.
Но осадочек остался.
Аноним 2015/12/05 18:59:34  №596624 674
>>596603

Сначала надо установить mysql. Скачать мало.
Аноним 2015/12/05 19:01:52  №596625 675
>>596624
Я скачал тот, который no-install
Аноним 2015/12/05 19:06:05  №596629 676
14493315652210.png (10, 346x136)
136x346
>>596619
Ох, чувствую я, что на линуксах-серверах-конфигах я буду сидеть дольше, чем на самом изучении пхп.
Аноним 2015/12/05 19:07:52  №596630 677
Аноним 2015/12/05 19:08:03  №596631 678
>>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
Аноним 2015/12/05 19:21:28  №596638 679
>>596631

Открой в документации код функции. Действительно, он создает отдельный экземпляр модели (который называет static model) и передает ему null в конструктор.

> А, то есть объект класса AR не может работать более чем с одной записью, но сам класс своими статическими методами может вытворять что угодно? Логика мне не понятна.
Логика в том что вся работа с таблицей должна быть в этом же классе. Потому да, иногда используют статические методы. Так как им не нужен объект.

В Юи решили извернуться по-своему. AR это вообще не лучший паттерн из-за того что в одном классе смешаны функции модели и работы с базой.

Аноним 2015/12/05 19:38:58  №596643 680
>>596562
>И объясни где тут нарушение?
>>596638
>Действительно, он создает отдельный экземпляр модели
Вот и я о том же. Создается экземпляр модели AR, причем какой-то странный, фактически пустышка с незаполненными полями, и у него вызываются методы типа findAll. Это противоречит заявлению о том, что экземпляр модели AR может работать только с одной записью.

Ну ладно, это видимо такая извращенная реализация в первом yii. Во втором сделали уже прямые статические методы без создания странных промежуточных объектов.

Что в Симфони используется из этих паттернов? Или там наверное доктрина с датамаппером?

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

Аноним 2015/12/05 19:44:39  №596647 681
Аноны, что скажите по поводу моего решения задачи про палиндромы с фака?
Аноним 2015/12/05 19:45:03  №596648 682
Аноним 2015/12/05 19:46:37  №596651 683
>>596647
Не работает, вот что я тебе скажу.
Аноним 2015/12/05 19:50:39  №596652 684
>>596651
Ага, уже понял, сейчас попробую допилить.
Аноним 2015/12/05 19:53:24  №596654 685
Не перестаю удивляться, как ебанутые гики умудряются сделать простые вещи сложными для понимания.
Думаю, что если бы нужно было написать о различиях между ложкой и вилкой, это выглядело бы приблизительно так:
"Ложка есть экземпляр сущности из электропроводящего материала либо диэлектрика, имеющей выпукло-вогнутую форму и продолговатым держателем для захвата передней конечностью тела прямоходящего млекопитающего. Применяется для переноса жидкой питательной среды из негерметичного контейнера в полость головной части тела вышеупомянутого организма.
Вилка в отличие от ложки имеет вместо выпукло-вогнутой части три-четыре заостренных на конце зубца, предназначена для пронзания твердых сгустков органической субстанции и перемещения оных в пространственно-временном континууме в направлении полости головы человекообразного организма".
Аноним 2015/12/05 20:00:32  №596656 686
>>596647
> echo "{$result}";
А зачем переменную выводить в двойных кавычках, да еще и экранировать? В этом есть смысл?
Аноним 2015/12/05 20:09:05  №596662 687
14493353456970.gif (8, 465x131)
131x465
>>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?)
Аноним 2015/12/05 20:41:25  №596686 688
Доделал. http://ideone.com/qhEHhf
Я совсем зеленый, нихуя не знаю, только тот фак читал с сайта на народе.
>>596656
Что такое экранирование?
Аноним 2015/12/05 20:51:13  №596688 689
Что значит такая запись в js-коде
(function(){})()? По каким тегам это гуглить?
Аноним 2015/12/05 20:52:55  №596690 690
>>596686
Ну ты переменную в {} засунул. Я это еще в первый день изучения пхп прочитал. Зачем вообще одну-единственную переменную через эхо выводить в кавычках, да еще и с экранированием?
Если что - я примерно на том же уровне, что и ты, так что это не издевка.
Аноним 2015/12/05 21:08:09  №596697 691
>>596690
Спасибо, я почитаю.
Аноним 2015/12/05 22:28:45  №596743 692
Как делается выборка промежутков? Вот есть например у товаров цены, нужно выбрать от n до m цены. Как это вообще делается? Это же явно в SQL есть что-то, но я никак не соображу, и нагуглить не могу. Подскажите хоть что искать.
Аноним 2015/12/05 22:31:39  №596745 693
Аноним 2015/12/05 22:34:34  №596746 694
>>596743
>что гуглить
sql для чайников

>>596745
Или between.
Не надо отвечать на такие вопросы. Сейчас он радостно скажет "спасибо!)))))", а завтра задаст следующий вопрос типа "а как выбрать не все записи из таблицы, а только первые 5? а как выбрать кол-во записей или максимальное значение?".
Аноним 2015/12/05 22:35:45  №596747 695
>>596746
> а завтра задаст следующий вопрос
Пускай задает. От нас не убудет. Лишь бы за него код писать не просил.
Аноним 2015/12/05 22:38:26  №596748 696
>>596745
Слушай, а мне бы еще сделать чтоб выбиралось только первые 20 записей, и вообще, может напишешь за меня код?
спасибо!)))))
Аноним 2015/12/05 22:44:59  №596751 697
>>596697
Я просто тут недавно упоролся кавычками, в общем, теперь почти все пишу в одинарных, переменные выношу за кавычки. Не знаю, правда, насколько это оправдано с т.з. стилистики/оптимизации/читабельности (думаю ни на сколько, лол).
Аноним 2015/12/05 22:56:18  №596759 698
14493453790000.png (1365, 1271x879)
879x1271
14493453790231.jpg (2443, 3000x1875)
1875x3000
Целый день ебался с запуском всей этой адской машины.

В итоге за минуту запустил вамп и искаробки все заработало.
хех
Аноним 2015/12/05 23:06:25  №596762 699
>>596688

self invoked function expression

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

var fn = function () { ... };
fn();

>>596743

BETWEEN

>>596746

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

>>596759

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

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

Правда я тогда уже был знаком с линуксом, может в этом дело.
Аноним 2015/12/05 23:13:24  №596765 700
>>596762
Я установил, но не работало! Я перепробовал все, но так и не смог mysql заставить работать вместе с пхп
Аноним 2015/12/05 23:14:41  №596766 701
>>596765
> не смог mysql заставить работать вместе с пхп
Помню на старой винде такое было, после долгих танцев с бубном нашел на стаковерфлоу совет закинуть php.ini в папку windows и всё заработало.
Аноним 2015/12/06 00:03:49  №596780 702
>>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.
Аноним 2015/12/06 00:04:27  №596781 703
>>596765

mysql никак не связан с PHP. Он вообще-то сам по себе.
Аноним 2015/12/06 00:05:29  №596782 704
Сейчас еще на вордпресс, жумолу и друпал натяну макет, бля, как же это скучно, эти однотипные цмски, эта адаптивно-резиновая верстка мать ее за ногу.
Даже на перцептрон времени нет, а ведь он интереснее.
Аноним 2015/12/06 00:09:20  №596784 705
>>596643

В Симфони доктрина, и она очень крутая и вся по Фаулеру сделана, паттерн на паттерне.
Аноним 2015/12/06 00:10:31  №596785 706
view-source:javastartup.com.ua
Кстати, что это еще за теги? <d1><sup>
Аноним 2015/12/06 00:13:17  №596787 707
Аноним 2015/12/06 00:17:32  №596792 708
http://javastartup.com.ua
Там график в свг отрисован и анимирован, я бы так не смог, пытался один раз свг анимировать по готовому мануалу - такая ересь вышла, отрисовать бы точно не смог, только с картинки конвертировать в низком качестве. А остальные плагины есть в сети вроде, со скроллбарами и менюхой.
Аноним 2015/12/06 00:25:57  №596798 709
<div class="borders">
<div class="border-top"></div>
<div class="border-left"></div>
<div class="border-right"></div>
<div class="border-bottom"></div>
</div>

Оп бы на такое уже слюной изошел.
Аноним 2015/12/06 00:36:30  №596800 710
>кококо у тебя слишком длинные контроллеры, выноси все в модель.
>вынес все в классы
>кококо что-то у меня такое ощущение, что ты просто функции в классы засунул и все, это не ООП и не MVC
пиздец оп ну ты и выродок
Аноним 2015/12/06 00:43:36  №596805 711
>>596800
Ну так логикой же нужно руководствоваться при создании классов, а не рандомно раскидать все по файлам.
Алсо, чем болеешь?
Аноним 2015/12/06 00:55:12  №596811 712
>>596805
Да этот болезный кассир макдональдса недавно активизировался. Очень забавный тип.
Аноним 2015/12/06 00:58:36  №596814 713
Есть примеры хуков для MVC ? Сам чето не могу дойти
& 2015/12/06 01:55:12  №596832 714
Я и не подозревал, что юникодом можно ломать разметку.
Аноним 2015/12/06 01:55:36  №596833 715
Еще разок
Аноним 2015/12/06 02:29:11  №596856 716
Парни, где-нибудь хотя бы на английском описано как работает движок php в паре с OpCache? Что движок отдаёт opcache'у, что конкретно пытается изобразить opcache при кешировании? Во что кешируется код - в jit / в нативку / в LLVM?
Аноним 2015/12/06 03:05:43  №596892 717
14493603431980.png (72, 489x717)
717x489
Господа, это нормальный вид резиновой страницы? или лучше сделать меню и поиск в столбик?
Аноним 2015/12/06 03:33:07  №596911 718
>>596892
Хочется процитировать тему лебедева.
Выглядит убого, если честно.
В столбик выводи.
Или просто убери вот это вот "о нас", всю нужную инфу о компании можно засунуть в контакты, а про историю очередного ООО "Рога и копыта" никому читать не интересно.
Аноним 2015/12/06 04:11:26  №596923 719
>>596911
Но по макету должно быть именно так же. Сделаем вид, что это заказчик попросил сделать. Я же не могу ему ответить: давайте вот это уберем и все переделаем, никому не интересна история ваших рогов и копыт.
Аноним 2015/12/06 04:41:40  №596927 720
http://www.paktraveler.com/

Пиздец, вот у пакистанца с апворка куча статичных сайтов в портфолио. И хуле я мучаюсь с этой резиново-адаптивной-бутстрап-кроссбраузерной хуеверсткой?
Аноним 2015/12/06 10:02:44  №596952 721
олег 2015/12/06 11:25:55  №596966 722
ОП, в Задаче про айпад - невероятно сильное упущение.

Сама задача.
кредит за 4% и (мелким шрифтом) 500 р комиссии в месяц от HomoCredit
кредит за 3% и 1000 р комиссии в месяц от того же банка (Softbank), что и в первой задаче
нереально вкусное предложение от StrawberryBank за 2% в месяц, без комиссии, но с платой в размере 7777 р за открытие счета (эту сумма прибавляется к сумме долга)

Но школьник может заплатить только 5000 рублей. Я имею ввиду StrawberryBank требует 7777 единоразово, так что школьник просто не сможет взять у них кредит. Или я что-то неправильно понял?


Алсо думал что только у меня не работает /n. Но теперь на 3 компах настроил апачи и /n не переводит строку на новую. Что я делаю не так?
И ещё ньюфажный вопрос. Правильно ли я понял, что функция не может брать переменные которые не переданы в функцию?

Исходники.
https://ideone.com/A9G1hW
олег 2015/12/06 11:34:56  №596967 723
>>596572
Серьёзно, мне кто-нибудь обьяснит о чём он? Чем плох Switch case?
Аноним 2015/12/06 12:17:11  №596981 724
14493934315460.png (9, 231x176)
176x231
Аноним 2015/12/06 13:18:02  №597039 725
>>596966
Про \n:
Для того что бы работал перенос строки, нужно сообщить броузеру, что содержимое которое мы ему присылаем нужно рассматривать как обычный текст, а не как html. Для этого нужно ДО какого либо вывода из нашего скрипта послать http-заголовок. Про все это ты узнаешь подробно в процессе изучения технологий, а пока добавь в начало:
header("Content-Type: text/plain");
не ОП -кун
Аноним 2015/12/06 13:39:19  №597054 726
Это потому что в базе хранится уже заэкранированный текст, видимо по ошибке еще раз пропустили через htmlspecialchars в шаблоне, потому ломается.
Аноним 2015/12/06 13:42:23  №597056 727
Натянул вёрстку, сделанную из задания ОПа по ксс, на вордпресс. Поступил следующим образом. Там где картиночки и надписи вроде- estibulum id ligula porta euismod semper... Создал четыре записи в админке определённой категории и вывел их через WP_Query, выводил с условием выводить только из этой категории. Там где заголовок в шапке, создал одну запись определённой категории и вывел её в этом месте. С другом заголовком поступил точно также. Там где ссылки на работы из портфолио, создал три записи определённой категории, в каждой из которых 4 картинки и вывел их в том месте где надо, опять же по категории. Создал страницы, те что есть в меню, также создал меню и вывел его динамически. В итоге, почти весь контент можно менять, но возможности тем не менее ограничены, например нельзя вставить 5 картинок в ряд, можно только поменять сами картинки. Так нормально или это неправильно?
Аноним 2015/12/06 13:44:45  №597059 728
>>597054
Каким образом двойной прогон через htmlspecialchars вернёт хтмл-сущности? Если бы это так работало, то на харкаче была бы полная xss уязвимость и в поля можно было бы вставлять какой угодно код
http://ideone.com/erMHGH
Аноним 2015/12/06 13:58:51  №597068 729
>>597059
Да, скорее что-то вроде html_entity_decode.
Аноним 2015/12/06 14:25:32  №597091 730
>>597056

Ты бы выложил свое расширение к ВП для проверки (если конечно это у тебя сделано в виде расширения которое ставится на стандартный вордпресс; если не так то конечно не очень хорошо).

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

Что касается портфолио, вот что я подумал. У нас ведь для работ портфолио будут отдельные страницы для каждой, где описана эта работа. Значит нужно просто сделать специальный тип поста «Работа для портфолио», и у нее сделать свойства:

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

Соответственно на главной выводятся картинки от тех работ у которых стоит галочка. А теги определяют к каким категориям они относятся. Переключатель видов работ можно строить автоматически из имеющихся тегов.
Аноним 2015/12/06 15:44:46  №597159 731
>>596954

Проблема в том что ты не следуешь соглашениям протокола HTTP. Изменения на сервере должны делаться POST запросом а не просто открытием странички. переделай свой скрипт добавив форму с кнопкой.
Аноним 2015/12/06 15:45:59  №597161 732
Аноним 2015/12/06 16:14:41  №597200 733
>>597091
А как делается расширения? Ты имеешь ввиду плагин? Я просто взял пустую тему, и в индексном файле изменил всё на динамический вывод.
Аноним 2015/12/06 16:17:11  №597204 734
>>597200
Перед этим закинув туда своё вёрстку
Аноним 2015/12/06 16:21:00  №597211 735
>>597200

Вордпресс расширяется 2 способами:

- своя тема позволяет поменять внешний вид страниц не меняя логику работы CMS
- плагин (расширение?) позволяет менять логику работы CMS, добавлять новые функции, страницы в админке, менять конфигурацию системы

Соответственно ты делаешь либо тему либо расширение которое устанавливается на вордпресс.

А то что ты сделал это глупость. Объясни как в твоем случае понять где твой код а где не твой? Как увидеть что ты изменил? как обновить версию вордпресса?
Аноним 2015/12/06 16:29:32  №597227 736
Аноним 2015/12/06 16:31:45  №597230 737
Алсо я погуглил по словам Wordpress Development workflow и понял что с процессом разработки под WP все очень плохо: http://wordpress.stackexchange.com/questions/119/how-to-easily-move-a-wordpress-install-from-development-to-production/182#182

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

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

В общем эти CMS это дрянь, они рассчитаны на низкоквалицифированных натягивателей верстки которым не нужна автоматизация и которые не ценят свое время.
Аноним 2015/12/06 16:41:44  №597238 738
>>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/

& 2015/12/06 16:43:12  №597240 739
>>597230
Какой в жопу локальный сервер, через ftp правят прямо на рабочем сайте. Я один раз пришел на собеседование в такую дно-контору и немного опешил: про линукс никто не слышал, верстают в блокноте (илитные планктонины в дримвивере и фронтпейдже, ибо визивиг).
Нет систем контроля версий, нет никакого планирования и командного взаимодействия в помине, нихуя нет.
Аноним 2015/12/06 16:45:40  №597243 740
>>597240
Что за контора? Пятерочка?
Аноним 2015/12/06 16:57:57  №597250 741
>>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 уже есть нужный функционал. Ты можешь из своего расширения добавить в админку отдельную страницу настроек для сайта.

Еще наверно можно добавить настройки каким-нибудь сторонним плагином, но мне вариант с расширением кажется более простым. Если бы такие вещи нужно было делать часто, я бы пошел дальше и сделал расширение-генератор форм настроек, чтобы достаточно было дать только конфиг со списком полей, а он бы генерировал форму.
олег 2015/12/06 17:35:58  №597295 742
обьясните тупому.
Почему регулярка
$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 пар последних цифр

Что-то я совсем не соображу никак.
олег 2015/12/06 17:38:57  №597298 743
>>597295
Со скобками напутал.
Вот регулярка.
$regexp='/^8-([(]{1})([0-9]{3})([)]{1})-([0-9]{3})([0-9]{2})([0-9]{2})$/';
И она не работает если к "8(123)123" написать 4 цифры в конец.
Аноним 2015/12/06 17:41:00  №597300 744
>>597295
>[(]{1}
Проиграл как умалишенный. С таким же успехом ты мог после каждого символа единичку писать.
олег 2015/12/06 17:42:59  №597302 745
>>597300
Чего ты от ньюфага ждал, спецсимвол же. Только так заработал спустя 2 часа страданий.
Аноним 2015/12/06 17:43:53  №597305 746
>>597302
Спецсимолы экранировать надо двойным обратным слешом \\
олег 2015/12/06 17:45:34  №597307 747
>>597305
>Спецсимолы экранировать надо двойным обратным слешом \\
Ну как-то не работает для номера телефона
$regexp='/^8-\\(([0-9]{3})-\\)([0-9]{2})-([0-9]{3})-([0-9]{2})-*$/';
почему-то не проходит проверку.
Аноним 2015/12/06 17:48:51  №597313 748
>>597307
Проверку на что? Ты бы код на айдеоне кидал, трудновато гадать по постам.
Аноним 2015/12/06 17:49:01  №597314 749
>>597300
А вообще и вправду, как встроить это?
Можно
$regexp='/^8(//(*[0-9]{3})
но тогда стоит ли писать {3} ? Или всё-равно?
Обьясните мне пожалуйста?
Аноним 2015/12/06 17:49:30  №597315 750
>>597302

Он имел в виду что

[(]{1}

это то же самое что

[(]

Аноним 2015/12/06 17:50:24  №597317 751
>>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' // нет +
);
Олег 2015/12/06 17:55:47  №597320 752
>>597317
Спасибо, я знаю. Сложно написать шаблон сразу подо всё, поэтому пишу по 1 шаблону для каждого. Потом выясняю где косяк и добавляю исправления в главную регулярку.
>>597313
Щас, погодьте. Кстати разобрался с первым вопросом, надо было пробелы посчитать.
https://ideone.com/IULz7d
Аноним 2015/12/06 17:56:35  №597322 753
>>597317
Кстати на этой задаче можно начать пробовать юнит-тесты. Хотя наверное это слишком простой пример, тестировать одну функцию, но все же.
Олег 2015/12/06 17:57:02  №597323 754
>>597317
>Сделай 2 списка номеров (правильные и нет), добавь их в программу и напиши цикл, который их по очереди прогоняет через регулярку и проверяет что они определяются как надо (если нет — надо вывести какой именно номер не распознается правильно).

Эй, в задаче этого небыло!
Олег 2015/12/06 17:58:28  №597324 755
>>597322
Ну уж нет и так задача довольно сложная. Лучше отдельные задачи придумать под юнит тесты или уже потом к этому добавить.
Аноним 2015/12/06 18:01:07  №597325 756
>>597323

В задаче было - принимать любые правильные номера. Это всего лишь список правильных и неправильных номеров для проверки.
Олег 2015/12/06 18:02:14  №597327 757
>>597325
Про циклы ничего небыло!
Аноним 2015/12/06 18:03:28  №597328 758
>>597327
Ты их уже прошел, значит было.
Аноним 2015/12/06 18:08:40  №597332 759
>>597327

Хорошо. Ну не хочешь циклы - можешь подставлять номера руками по одному, твое дело. Не забудь после любой правки кода заново перепроверять все номера.
Аноним 2015/12/06 18:13:10  №597336 760
Оп-половой орган, ну ты все-таки прокомментируй эту уязвимость сосача.
Я сейчас пилю небольшое приложение используя 2ч-апи, не хочется обосраться на ровном месте.
Как мне экранировать данные, которые возвращает сосач? Если пропускать через htmlspecialchars, выводятся html-entities, а если через html_entity_decode, вроде выглядит красиво, но безопасно ли это?
Аноним 2015/12/06 18:18:16  №597338 761
>>597336

В чем суть уязвимости?

В идеале правильно хранить в базе оригинальные данные, а при выводе экранировать. Если данные представлены в виде HTML разметки (например если данные пришли из WYSIWYG редактора) то экранирование конечно не сработает, в этом случае их обрабатывают фильтром который оставляет только разрешенные теги и разрешенные атрибуты. Атрибуты, содержащие ссылки (например href и src у картинок) надо фильтровать дополнительно: проверять что ссылка использует разрешенный протокол, иначе тебе всунут data: или Ja va script: ссылку с возможностью выполнения кода.

Есть готовые фильтры которые все это умеют делать.
Аноним 2015/12/06 18:21:00  №597344 762
>>597336

Алсо не вздумай обрабатывать HTMLкод регулярками: это 100% уязвимость. Фильтр должен парсить код в дерево DOM, обрабатывать и потом собирать обратно. Это гарантирует что злоумышленник не сможет внедрить некорректный код (например где не совпадает число закрывающих тегов или где теги написаны с ошибками).

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

Примеры таких векторов атаки есть тут: https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet

Потому фильтр должен использовать преобразование в дерево DOM.
Олег 2015/12/06 18:21:46  №597345 763
>>597328
>>597325
В условиях задачи не написано "решай только с применением циклов"
>>597332
>Не забудь после любой правки кода заново перепроверять все номера.
Нажать F5

Алсо вот
https://ideone.com/293Kqe
Аноны, насоветуйте ньюфагу как можно эту регулярку сократить?
Аноним 2015/12/06 18:22:52  №597346 764
>>597338
>>597344
К чему такие заморочки, обычный хтмлэнтитис уже не канает?
& 2015/12/06 18:26:37  №597349 765
>>597338
>В чем суть уязвимости?
Ты с какого устройства сидишь? Не видишь что за байда получается при использовании юникода в полях "тема", "опции" и "имя" поста?

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

>>597346
Не катит, в базу сосача сохраняются уже через жопу закодированный html.
Олег 2015/12/06 18:28:18  №597350 766
>>597349
Лол, я думал куклоскрипт глючит.
Олег 2015/12/06 18:31:49  №597355 767
>>597345
Не игнорьте меня пожалуйста. Регулярки для меня - весьма сложная тема. Всё равно что ^&^&$%^&#$&!@&#)(!@&# читать и понимать что эта фиговина делает.
Аноним 2015/12/06 18:34:45  №597357 768
14494160857170.jpg (143, 1200x900)
900x1200
Оп-кун, подгрузил я все свои файлы с локалки, кроме .git папки и файлов composer.lock, composer.json по фтп на хостинг, только вот случился трабл. autoload не работает на ftp на каждый класс мне пишет, что не найден и все.Что делать?
Аноним 2015/12/06 18:44:04  №597369 769
>>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

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

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

Аноним 2015/12/06 18:45:01  №597372 770
>>597349

> Да не буду я тянуть сторонний фильтр
То есть лучше потратишь пару недель на написание своего велосипеда? С тобой все в порядке?
Аноним 2015/12/06 18:46:09  №597376 771
>>597357

А как у тебя сделан автолоадинг? Через композер? Свой автолоадер?

Если через композер то проверь есть ли на хостинге файл autoload.php в папке vendor, подключается ли он.
Аноним 2015/12/06 18:47:00  №597377 772
>>597369
>Например если в форме комментария на сайте стоит редактор и можно вставлять смайлики, менять шриф
Так это де BB коды, почему бы регуляркой не искать их? То есть я хочу, например, сделать у себя в форме BB-код для жирного шрифта [FAT] [/FAT] и регуляркой заменять их на хтмл теги <b>
Олег 2015/12/06 18:48:35  №597378 773
14494169152610.png (379, 760x472)
472x760
Меня проигнорили с регулярками.
Вот так, сначала я прошу совета и все молчат.
Потом только поржут когда код пойдёт в продакшн.
Аноним 2015/12/06 18:48:36  №597379 774
>>597355

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

По твоей регулярке:

она написана под конкретный шаблон, например она предполагает что в коде города ровно 3 цифры. Но это не так, бывают код из 4 или 5 цифр.

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

- в начале идет +7 или 8, за ними ровно 10 цифр, между которыми идет любое число пробелов, минусов, скобок

далее:
Олег 2015/12/06 18:51:21  №597383 775
>>597379
Так и сделаю.
>И потом попросить еще одну-две задачки повышенной сложности для закрепления.
Давай.
>она написана под конкретный шаблон, например она предполагает что в коде города ровно 3 цифры. Но это не так, бывают код из 4 или 5 цифр.
Разьве не в этом весь смысл регулярок? Отслеживать только конкретный шаблон.
>- в начале идет +7 или 8, за ними ровно 10 цифр, между которыми идет любое число пробелов, минусов, скобок

Хорошо. Завтра переделаю по новой. А пока у меня 2 часа ночи (
В любом случае спасибо тебе няшка!
Аноним 2015/12/06 18:54:07  №597385 776
14494172479220.png (139, 954x896)
896x954
>>597378

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

>>597377

А почему ты хочешь писать велосипед а не взять готовый парсер BB кода?

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

Правильный BB пасер должен парсить текст в дерево и из него генерировать HTML как нарисовано на моей картинке.



& 2015/12/06 18:55:25  №597386 777
>>597369
Ну мало ли, вдруг кроме этого символа вывода текста есть и другие опасные моменты, которые могут сломать верстку. Например трипкода у меня вообще-то нет.

>>597372
Нет, я надеялся что ты как обычно подкинешь решение одной строчкой.
Сидеть и учить фильтры bb-кодов в мои планы на данный момент не входит.

Скажи просто, если я буду выводить как есть данные полученные с сосача http://2ch.hk/pr/res/588512.json , может ли это привести к худшим последствиям кроме похеренной верстки?
Аноним 2015/12/06 18:57:13  №597390 778
>>597377

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

Ну и есть еще много других ситуаций, вот анон выше получает из API HTML код и хочет обезопасить себя.
Аноним 2015/12/06 18:57:56  №597393 779
>>597386

Если на дваче уязвимость то злоумышленник может запостить любой код к тебе на сайт.
Аноним 2015/12/06 18:58:51  №597395 780
>>597386

Я не понимаю, вообще что тут обсуждать. Я 10 постов назад привел правильное решение, если тебя беспокоит бещопасность - использовать фильтр. Аргументов против фильтра кроме «я тупой не могу осилить» у тебя нету, значит и обсуждать больше нечего.
Аноним 2015/12/06 18:59:02  №597396 781
>>597385
Я ничего писать не собираюсь, ты меня с кем-то путаешь. Просто интереса ради спрашиваю.
>>597386
Ничего ты не похеришь, этот юникод действует только на элементы с одним родителем, до первого блочного или блочно-строчного элемента. Так уж получилось, что на харкаче идет строка из span(то-бишь inline элементов) с общим родителем, поэтому юникод меняет их все. Если сделать хотя-бы один из спанов инлайн-блоковым, то юникод на нем и остановится.
Аноним 2015/12/06 19:03:59  №597402 782
>>597396
О, нормально объяснил, респект.
>>597395
Иди в пизду со своим фильтром. Мне важно как это работает, а не подключать 10 мегабайт непонятно чего к библиотеке весом 10кб.
Аноним 2015/12/06 19:31:24  №597417 783
>>597402

Какой агрессивный школьник. Тем не менее, мои посты все же я думаю, не пропали зря, другие аноны благодаря им узнали как обрабатывать и фильтровать HTML и BB код.
Аноним 2015/12/06 19:37:31  №597420 784
С вами снова я, тот даун, что вчера весь вечер ебался с апачем. Но сегодня у меня вопрос по существу. Допилил тот "калькулятор через свитч", от которого так у кого-то сильно припекло, теперь циферки сохраняются в форме и все такое. Может кто покидать в меня говном - типа, так нельзя, а вот так было бы лучше и т.п.? Если кому не лень, конечно. В частности, интересует, можно ли как-нибудь обойтись без объявления двух пустых переменных (цель - чтобы в хтмл форме сохранялись введенные значения)
Cам говнокод http://ideone.com/D6YrkC
Аноним 2015/12/06 19:52:11  №597430 785
>>597417
Да мало полезного было в твоих постах на сей раз, поэтому и был справедливо послан.
Тебе нужно было не ткнуть в готовую библиотеку, которую человек должен бездумно использовать, а объяснить принцип кодирования спецсимволов, какие есть функции для этого, к каким последствиям может привести неправильная обработка спецсимволов.
И проблемы создает не только &#8238; на котором все почему-то зациклились, но и другие символы юникода.
Аноним 2015/12/06 20:02:05  №597434 786
14494213250430.png (506, 703x942)
942x703
Вопрос не по теме, но что здесь не так?!
Почему <p> виден, а </p> уже не виден?
Как это пофиксить?
Аноним 2015/12/06 20:04:45  №597436 787
Аноним 2015/12/06 20:11:10  №597444 788
14494218701680.jpg (425, 1476x2048)
2048x1476
>>597376
Composer-овский autload, на локалеке работает, подключен

require_once __DIR__.'/../vendor/autoload.php';
Аноним 2015/12/06 20:13:52  №597446 789
>>597444
Причем silex грузится, а вот мои src нет
Аноним 2015/12/06 20:44:31  №597471 790
>>597430

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

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

Что касается юникодного символа поворота текста то это не узявимость и кодирование сиецисмволов на него не влияет.

По моему кто-то из нас что-то тут не понимает.

>>597434

Там p не русская случайно?


>>597444

А файл autoload на хостинге и файлы которые он подключает, актуальные, такие же как у тебя локально? Что в composer.json?
Аноним 2015/12/06 20:54:07  №597488 791
>>597471
Почему нельзя записать хтмл-код в базу как есть? А при выводе экранировать.
Аноним 2015/12/06 20:59:25  №597497 792
>>597488

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

Чтобы например пользователь в редакторе сделал текст красненьким и он так же и вывелся. А хакер, подсунувший скрипт в HTML код, остался бы ни с чем.
Аноним 2015/12/06 21:00:54  №597500 793
>>597488

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

А фильтр HTML нужен когда у нас на входе HTML код и надо вывести его без риска для сайта. Это более сложная задача.
Аноним 2015/12/06 21:13:02  №597521 794
Аноны, вопрос такой: только начал работать с композером. Столкнулся с таким случаем, когда точно не знаешь, поможет ли тебе хуёвина из репозитория или нет, пока не попробуешь. Попробовал, не помогла - как её выпилить без потерь особенных?
Аноним 2015/12/06 21:14:39  №597523 795
Аноним 2015/12/06 21:23:33  №597538 796
Аноним 2015/12/07 00:06:29  №597679 797
14494359897130.jpg (137, 1920x1200)
1200x1920
>>597161
спасибо, анон. Теперь я понял что ucfirst нельзя использовать, но как тогда быть?
Аноним 2015/12/07 00:14:57  №597690 798
14494364970680.png (159, 528x498)