«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Клуб любителей изучать PHP 68 Аноним 2016/01/20 06:43:59  №629822 1
14532614398610.png (33, 500x500)
500x500
14532614398621.jpg (157, 1024x683)
683x1024
14532614398652.png (364, 1920x1080)
1080x1920
14532614398733.jpg (135, 1280x720)
720x1280
Добро пожаловать в наш уютный тредик. Тут мы изучаем язык PHP (а также JS/CSS/HTML/SQL), решаем задачки и даже делаем простые сайты! Зачем? Кто-то хочет научиться программировать, кто-то - делать сайты, кто-то - просто размять мозги и заняться чем-то полезным.

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

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

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

Предыдущий тред был тут: >>619873 (OP) (почти 1000 постов!)

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

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

У нас есть уроки по основам 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
- SPA (сложно): https://github.com/codedokode/pasta/blob/master/js/spa.md
- Проверялка решений на 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) когда тебе не надо тратить время на поиск заказов и переговоры с неадекватными заказчиками.

Важно Аноним 2016/01/20 06:45:33  №629824 2
14532615334490.png (46, 500x644)
644x500
14532615334501.png (184, 853x480)
480x853
14532615334542.jpg (87, 561x800)
800x561
Код нужно писать не как попало, а аккуратно и по правилам. Почему? Потому, что на неакуратно написанный код не хочется даже смотреть.

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

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

Ах да. Если тебе кажется, что что-то в учебнике или задачах можно сделать лучше — пиши, обратная связь всегда очень полезна.
Аноним 2016/01/20 06:46:50  №629825 3
Ответы на посты и решения по 17 января - в старом треде >>619873 (OP) в конце. Если вас пропустили, не ответили, не проверили, не дали совет - напомните о себе в этом треде.

Ответы на посты с 18 по 20 января наверно будут запощены в старом треде завтра или послезавтра.
Аноним 2016/01/20 06:48:17  №629826 4
14532616980590.png (23, 1903x949)
949x1903
https://github.com/foobar1643/student-list
Сделал вот задачу из ОП-поста на список студентов, реализовал все что нужно было, код все равно получился говном (но работает). Подскажите что переделать, что сделано не так.

Поддержки mysql нет потому что мне лень было её ставить на сервер. Взял вместо неё postgresql, хотя в теории если поменять одну строчку в конфиге, то всё должно заработать и с mysql (дамп базы очевидно не подойдет).
Аноним 2016/01/20 06:55:56  №629829 5
14532621561640.jpg (50, 502x370)
370x502
Аноним 2016/01/20 08:42:06  №629857 6
14532685264420.jpg (8, 274x184)
184x274
>>629822 (OP)
реквестирую урок по сессиям.
Аноним 2016/01/20 08:53:43  №629862 7
Аноним 2016/01/20 09:20:43  №629883 8
14532708437060.jpg (68, 800x518)
518x800
Аноним 2016/01/20 11:39:34  №629939 9
Блядь, я забыл, на какой хоткей в PHPStorm я форматировал код, просто взял и за секунду забыл часть патерна который всегда делаю перед переходом в другое окно

ctrl+a
ТУТ ЕБУЧИЕ ФОРМАТРОВАНИЕ
ctrl+s
alt+shift+q

Что я нажимал подскажите, всегда это одной левой рукой делал точно

Аноним 2016/01/20 11:44:57  №629941 10
>>629939
Вот у меня тоже такие провалы в памяти бывают, иногда хочу что-то сделать, начинаю делать, а потом на половине пути уже забываю зачем я это делаю.

Это первый знак того что я ОБДВАЧЕВАЛСЯ?
Аноним 2016/01/20 11:45:56  №629942 11
>>629941
Блять последнее время все чаще такое
И депрессия ебаная хз, как жить
Аноним 2016/01/20 11:47:18  №629943 12
Есть возможность кодить и решать задачи и из под андройд?
Аноним 2016/01/20 11:49:51  №629946 13
>>629943
Есть, подключай клавиатуру и ставь какой-нибудь веб-сервер (из бесплатных kWS, Palapa Web Server).
Аноним 2016/01/20 11:52:05  №629949 14
Насколько оправданно учить регулярки, если есть такие сайты, как http://regexp-online.com/ и в принципе, они легко гуглятся?
Аноним 2016/01/20 11:53:37  №629951 15
>>629949
Там и учить нечего, за день можно все осилить.
Аноним 2016/01/20 11:55:34  №629954 16

>>629946

Круто. Спасибо. Какой нибудь IDE посоветуешь?
Аноним 2016/01/20 12:08:25  №629962 17
>>629954
Про IDE не знаю, все что я делал это запускал на андроиде скрипты написанные на компьютере. Может быть кто-нибудь другой подскажет.
Аноним 2016/01/20 12:19:20  №629968 18
>>629939
а я напиздел

руки вспомнили ctrl +alt+ i это было
и тут нужно 2 руки
Аноним 2016/01/20 12:46:27  №629989 19
Аноним 2016/01/20 15:02:30  №630081 20
Кстати. на том же хабре есть статья о том, что никакая соль тебя от взлома не защитит, ибо она ломается так же легко теми, кто знает про соль, а про нее все знают.
Аноним 2016/01/20 15:19:02  №630090 21
http://pastebin.ru/YE0nSJpt
https://github.com/toppestkek/Test/blob/master/index.php#L5
> substr($_SERVER['REQUEST_URI'], 5)
что за магическое число 5?

>Почему имя класса с маленькой буквы? Почему оно не совпадает с именем файла? Во втором посте треда написана ссылка на рекомендации PSR, почитай-ка их.

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


>Инициализацию всяких объектов лучше вынести из контроллера.
Куда это их вынести? В новый объект?
>Ты файл почему-то загружаешь до валидации данных. Более того, тут как я понимаю можно загрузить php или htaccess файл и захватить твой сервер?

В аплоадс у меня стоит хтаксесс с таким кодом, поэтому нельзя.
php_flag engine 0
php_value upload_max_filesize 1G
php_value post_max_size 1G

>Непарвильное использование иключений
А какое правильное?

>Это правило применяется только к php скриптам расположенным внутри uploads
Так у меня же файлы только туда и грузятся


>формы все введенные значения теряются
лень писать было. эта валидация жиесом итак меня выбесила.
Аноним 2016/01/20 15:42:10  №630102 22
1) Задача про миллион в банке

http://ideone.com/2CZC21

2) Генератор стихов:

http://ideone.com/Wqtqet

Иногда пропадают некоторые слова, как это пофиксить?
(Про array_rand из предыдущего поста не особо понял)

3) Про палиндром

http://ideone.com/7n6pqZ
Аноним 2016/01/20 15:42:35  №630103 23
>>630081
Статью можно посмотреть?
А чому тогда не всё на свете ломается, как-то же защищаются?
Аноним 2016/01/20 16:00:17  №630116 24
Я в 2016 году НЕ ЗНАЮ как валидировать данные, вы представляете?? Надо срочно регулярки для школьников порешать, авось узнаю. да и в твоем говно урок про XSS инъекции вообще нихуя не написано, как на практике от них защищаться, написано только как их внедрять И ПРО htmlchars который у меня стоит, скотина ты тупая. так и будешь сидеть училкой информатики в своей шаражке, мерзкий пидор с анальной фиксацией.
Аноним 2016/01/20 16:01:51  №630117 25
>>630103
в гугле забанили? ну вот так не ломается, потому что нахуй не всралось никому ломать шаражку рога и копыта.
да и автоматический ввод - дело дорогое и времязатратное для ломания всякого говна.

http://habrahabr.ru/post/145667/
Аноним 2016/01/20 16:01:53  №630118 26
>>630102
>1) Задача про миллион в банке
Так интереснее с кредитом жи есть: http://ideone.com/TU9s96
echo просто внутрь цикла поставить, чтобы пронаблюдать за работой.
Считает верно всё.
>2) Генератор стихов:
Неправильно рассчитывается конечное число для функции mt_rand.
Чтобы понять ошибку, вспомни, начиная с какой цифры нумеруются ключи у значений в массивах.
Вот так можно исправить - переходи только после нахождения ошибки в своём коде! - : http://ideone.com/Ybpcko
Громоздко и неизящно, с array_rand всё проще выходит.
>3) Про палиндром
Нормально, всё работает и на слове "поп".
Аноним 2016/01/20 17:29:13  №630213 27
Сейчас прохожу задание про циклы. Друзья, для чего переменная заключена в фигурные скобки echo " {$} "? Пробовал их убрать - ошибка. Чёт не помню по этому поводу разъяснений в предыдущих заданиях.
Аноним 2016/01/20 18:04:43  №630249 28
ОП, вот ты мне очень много тут писал - http://pastebin.ru/mzp3Ex5d

Я практически все с нуля переписал - https://github.com/lexdss/shop

ps: опять же интересует только код, на верстку можешь не смотреть, чисто для вида на скорую руку сделал.

И некоторые мелочи в функционал пока не допилил (типа проверки статуса заказа пользователем), но это позже, вдруг опять придется заново переписывать все
Аноним 2016/01/20 18:08:58  №630254 29
>>630213
Обработка переменных ¶

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

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

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

http://php.net/manual/ru/language.types.string.php
Аноним 2016/01/20 18:11:06  №630257 30
Ах да, я вспомнил, почему не вывел данные формы при валидации через пхп, потому что при клиентской валидации они сохраняются в полях, быдло ты тупое. И таких берут в преподы, пиздец, неудивительно, что рашкообразование сосет.
Аноним 2016/01/20 18:22:59  №630270 31
Аноним 2016/01/20 18:33:44  №630287 32
>>630102
Про палиндром не работает, сравнивает только 1 и последний символы в строке, а в середину хоть хуй напиши он всё равно палиндромом сочтёт.
Аноним 2016/01/20 19:10:59  №630330 33
>>630287
Ох лол, действительно.
А я проверил только на "попе", код посмотрел - вроде всё логичным показалось.
Цикл не выдерживается до конца. Первые совпадающие буквы его сразу обрывают.
Аноним 2016/01/20 19:23:13  №630338 34
>>630102
Короче, обрати внимание на то, как ты отсчитываешь буквы с конца строки.
Не читай подсказки, пробуй решить самостоятельно.
Подсказка: там должен быть знак минус, ты же должен с конца идти, а ты идёшь с начала строки. Там должна быть переменная опять же, потому что идёт это всё в цикле, переменная изменяется и буквы передвигаются в этом сравнении
Ещё одна подсказка: не существует такого выражения, как "минус ноль". Поэтому подумай, как там можно обойтись с отниманиями и прибавлениями единиц от переменной $i
Исправленный вариант (не открывать без попыток решить самостоятельно!): http://ideone.com/9wZnM9
Аноним 2016/01/20 20:23:55  №630376 35
>>630338
А если я сделал через strrev но поправил кодировку в новой функции, меня всё равно пидорнут за такое?
http://ideone.com/htP10c
someApprentice 2016/01/20 21:29:36  №630433 36
>>625339
>>629817
Замечаний по коду никаких нету? Мне продолжать выполнять задание?
Аноним 2016/01/20 21:29:36  №630434 37
>>630376
Забавное решение.
Но так-то задача на разбор циклов всё-таки, ОП вряд ли одобрит именно в плане подхода.
Аноним 2016/01/20 21:44:58  №630469 38
На странице которую я собираюсь парсить, есть много table в которых в одних и тех же тегах, хранится большое количество разной информации, у тегов нет классов и ID. Как мне указать то что я например хочу спарсить информацию с третьей таблицы по счёту на странице, то есть если парсить так:

$search = $html->find('table tr td font');

То я получаю всю информацию, которая соответствует этому пути, из всех таблиц, как указать что инфа нужна только с третьей по счёту таблицы.
Аноним 2016/01/20 21:46:33  №630471 39
>>630469
Парсинг делаю при помощи simple_html_dom.php
Аноним 2016/01/20 22:44:52  №630547 40
>>629817
>Не понял о чем ты. В аргументе нелзя писать PDO Init::$pdo.
В смысле просто __construct(PDO $pdo), а потом просто передавал бы статически new DataGateway(Init::$pdo)
Аноним 2016/01/20 23:18:55  №630602 41
Аноним 2016/01/20 23:20:52  №630610 42
>>630433
Кстати, мне тут мысль пришла. Создать вторую ветку в проекте. Выслал решение ОПу, и во второй ветке продолжаешь пилить. Потом мержишь дорабатываешь. Годно?
Аноним 2016/01/20 23:31:01  №630629 43
Сделал задачку на проверку телефона, реализовано по моему несколько убого, если я правильно понял то должны только цифры учитываться,а возможные пробелы и символы кроме букв и лишних цифр игнорироваться.Решение чужое не смотрел, проверьте кто-нибудь сначала.
http://ideone.com/GnrR0S
Аноним 2016/01/20 23:35:16  №630637 44
погромисты, а что лучше сначала учить: хтмл, а после пхп, либо же наоборот?
или разницы нет?
Аноним 2016/01/20 23:45:05  №630650 45
Аноним 2016/01/20 23:49:28  №630655 46
>>630602
Неправильный второй ориентир для функции mt_rand. В массиве нумерация начинается с нуля.
Аноним 2016/01/20 23:58:51  №630664 47
>>630629
http://ideone.com/hdiflZ - внутри телефонного номера можно траллить телефонисток, я проверял.
Подумай, как можно улучшить это:
>\\W*([0-9]{1})
Номер в фигурных скобках не имеет смысла, потому что в квадратных скобках "один любой указанный символ". После кода все цифры должны быть в одной регулярке, а также возможность ставить пробелы, минусы в любом порядке.
Также у ОПа есть паста для проверки тучи номеров. В предыдущем треде была тоже.
Аноним 2016/01/21 00:40:45  №630715 48
>>630655
А можно прям лицом в строчку, а то я не очень умный?
Аноним 2016/01/21 00:42:35  №630719 49
>>630715
>$random1 = mt_rand(1, count($word1));
Что считает функция count($word1)?
С какого числа начинается нумерация в массиве?
Аноним 2016/01/21 00:49:21  №630726 50
14533265612070.jpg (13, 200x179)
179x200
>>630719
Кол-во элементов в эрэе, а нумерация с 0.
Аноним 2016/01/21 00:54:03  №630734 51
>>630726
Лучше через array_rand делать, кстати.
Аноним 2016/01/21 00:56:57  №630737 52
>>630734
О! Прям то, что нужно, а то как-то громоздко код выглядит. Спасибо.
Аноним 2016/01/21 01:58:55  №630765 53
Почему в большинстве вакансий 1сбитрикс\друпл и другое цмс говно?
Аноним 2016/01/21 02:31:05  №630780 54
>>630765
пхп-алхимия - сродство говна к говну.
Аноним 2016/01/21 02:40:18  №630784 55
Если мне надо запускать скрипт автоматически, например каждый час, для этого надо использовать cron? Это можно сделать если у меня Windows?
Аноним 2016/01/21 02:48:06  №630786 56
>>630784
Можно в Windows. Win+R > taskschd.msc
Внимание: может понадобится пердолинг.
Аноним 2016/01/21 07:55:41  №630825 57
Аноним 2016/01/21 10:28:36  №630865 58
Можно ли как-нибудь элемент view передать в callback функцию в слиме?
Аноним 2016/01/21 11:01:14  №630879 59
Кто-то делал задачи по SQL ОПовские? Пиздец даж первая задача что-то совсем не идет, хотя вроде все знаю, что может понадобится для ее решения.
Аноним 2016/01/21 12:53:14  №630921 60
Я окончательно заебался.

Смотрите: задача про айфон в кредит W5.1 (надо сделать костыль, чтоб в минус не уходил банк). Решил с помощью такой конструкции:

if ($creditBalance <= $monthlyPayment) { / типа если кредита осталось меньше, чем ОП на завтраках экономит /

$monthlyPayment = $monthlyPayment - ($monthlyPayment - $creditBalance); / высчитали, какой будет месячный платёж в данном случае /

echo "последний платёж - $monthlyPayment"; / это чтоб программа показала, что всё сработало и платёж высчитался /
break; } /* закрыли конструкцию


Вот как сделать, чтоб после этого вышла надпись "всё заебок, долг $creditBalance" (ноль)? Час сижу, отложил работу, нибуя не получается. Пробовал решить через конструкцию elseif ($creditBalance = 0) - нихуя. Пробовал писать новый if - тоже не катит. break переносил. В каком направлении думать?

Аноним 2016/01/21 13:13:28  №630931 61
Господа, а нахуя сделано так, что нумерация элементов массива начинается с гуля? Ну вот нахуя?
Аноним 2016/01/21 13:13:44  №630932 62
Аноним 2016/01/21 13:16:42  №630937 63
>>630931
Потому что нумерация с нуля это единственная верная нумерация. Посмотри на любую линейку или термометр. Нумерацию с единицы делают только ебаные гуманитарии.
Аноним 2016/01/21 13:40:27  №630962 64
>>630937
Неправда. Нумеровать что-либо с единицы настолько естественно, что даже ты об этом не задумываешься. Термометр и линейка это шкала, которая служит для измерения и её начало в нуле, как и у любой числовой прямой. Элементы массива не вписываются в эту аналогию
Аноним 2016/01/21 14:29:36  №631003 65
>>630825
А у меня не получается что-то, ты имеешь в виду решить её вот так?
$ret = $html->find('a', 0);
Где 0 порядковый номер элемента в дереве ДОМ?
Аноним 2016/01/21 14:32:00  №631004 66
Как при помощи cURL сабмитить формы которые передаются через аякс? И формы у полей которых даже нет параметра name а есть только например ID? Надо лазить по странице и всем подключённым к ней страницам и искать где в аяксе описываются параметры запроса?
Аноним 2016/01/21 15:37:24  №631035 67
>>630921
Код на Идеоне вбрось, в каком он у тебя виде находится, а то не всё понятно.
Но могу пованговать, потому что несколько дней возился с этой задачей, переписывал её много раз с нуля, а потом и другим анончикам помогал решить правильно.
Короче, скорее всего, главная ошибка в том, что ты не различаешь $creditBalance (который у тебя учитывает и минус $monthlyPayment) и не проверяешь состояние кредита до всяческих условий с if и else. Для этого можно ввести дополнительную переменную.
Алгоритм такой:
1. Имеем сумму кредита.
2. Прибавляем к ней нужный процент и прибавляем комиссию за обслуживание кредита.
3. Проверяем, получившаяся сумма больше или меньше 5000, которые может выплачивать Анончик в месяц.
4. В соответствии с результатом проверки или продолжаем цикл выплат, или выплачиваем имеющуюся сумму и обрываем цикл (не забывай про пункт 1, что она у нас уже должна быть умножена на процент и к ней уже должна быть прибавлена комиссия за обслуживание кредита).
Всё.
Пробуй решить, каждый раз вбрасывай ссылку на код, так нагляднее.
Отличная задача для понимания работы циклов.
Там всё на поверхности, тем приятнее будет решение, когда уже успел намучиться.
Аноним 2016/01/21 16:13:55  №631079 68
Аноним 2016/01/21 16:14:05  №631081 69
Аноним 2016/01/21 16:14:23  №631082 70
>>631079
Это на данный момент, когда я совета спрашивал
Аноним 2016/01/21 16:30:56  №631098 71
14533830565940.jpg (38, 400x284)
284x400
Шёл третий день битвы с задачей на числа прописью.
С усталой, но довольной улыбкой Аноним нажимал на кнопку "Submit" на ideone.com и не мог остановиться...

"99" - это "девяносто девять рублей"
"45" - это "сорок пять рублей"
"3" - это "три рубля"
"361" - это "триста шестьдесят один рубль"
"316" - это "триста шестнадцать рублей"
"421" - это "четыреста двадцать один рубль"
"124" - это "сто двадцать четыре рубля"
"787" - это "семьсот восемьдесят семь рублей"
"102" - это "сто два рубля"
"863" - это "восемьсот шестьдесят три рубля"
"160" - это "сто шестьдесят рублей"
"0" - это "ноль рублей"
"911" - это "девятьсот одиннадцать рублей"
"892" - это "восемьсот девяносто два рубля"
"749" - это "семьсот сорок девять рублей"
"150" - это "сто пятьдесят рублей"
"140" - это "сто сорок рублей"
"990" - это "девятьсот девяносто рублей"
"186" - это "сто восемьдесят шесть рублей"
"716" - это "семьсот шестнадцать рублей"
"524" - это "пятьсот двадцать четыре рубля"
"802" - это "восемьсот два рубля"

Как много уже было сделано, а сколько ещё предстояло сделать!
Аноним крепко сжимал ладонь свободной левой руки в кулак, а правой уверенной рукой продолжал настойчиво нажимать на кнопку "Submit"...
На его губах играла усталая довольная улыбка...
Аноним 2016/01/21 16:33:59  №631102 72
>>631079
Делай по алгоритму, там у тебя как раз то, что я и предугадывал:
>$creditBalance = ( $creditBalance * $percent ) + $servicePayment - $monthlyPayment;
От $creditBalance уже отнята $monthlyPayment, когда $creditBalance попадает в условие.
То есть, например, $creditBalance у тебя 3000, а ты прибавляешь к нему комиссию и проценты, а потом отнимаешь $monthlyPayment, вот в минус и уходит.
Аноним 2016/01/21 16:34:55  №631103 73
>>631102
И только после этого сравниваешь:
>if ($creditBalance <= $monthlyPayment)
Это неверно.
Аноним 2016/01/21 17:01:16  №631120 74
И все-таки подскажите по задаче о лайках по SQL.
Вот есть две таблице в одной - user(id, name) в другой - (id, user_id(кто поставил), like_user(кому поставил)). Как тут можно подсчитать одновременно сколько юзер поставил лайков и сколько ему? Если я сгруппирую так GROUP BY user.id (или user_id, неважно), то через COUNT смогу соответственно подсчитать сколько он лайков поставил, но не смогу подсчитать сколько ему поставили потому что COUNT зависит от GROUP BY. А еесли так GROUP BY like_user, то смогу подсчитать сколько пользователю поставили лайков, но теперь не смогу подсчитать сколько он поставил.
Аноним 2016/01/21 17:43:13  №631145 75
Допустим вы решили установить линукс, допустим дебиан с гномом. Допустим, запустив гном, вы теперь хотите Хромиум (как же без браузера?), флеш (как же без флеша?) и скайп. Для начала вы ищете где тут play market, software center или что-то аналогичное, долго и мучительно, пока наконец не находите невзрачную иконку с картонными коробками и надписью "пакеты". Она точно не выглядит как плей маркет, а скорее как какая-то ненужная системная утилита. Вы запускаете ее, видите пикрелейтед, только на русском ( https://help.gnome.org/users/gnome-packagekit/stable/add-remove.html.en ) и ищете там:

- chromium - вываливается куча непонятных пакетов, среди них есть нужный
- skype - нету
- flash - вываливается куча хлама, оказывается надо писать flashplugin в поиске

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

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

Разумеется на самом деле ничего не установилось, иконок хромиума нет, самого пакета в dpkg -l тоже нет.

Предлагаю любителям линукса попробовать разгадать эту загадку. В /var/log/messages ничего нет.

Я конечно не удивлен, в линуксе всегда все было так, сколько раз я не пробовал им пользоваться. Но так сломать все надо еще постараться. В сравнении с гномом/дебиан тот же андроид на несколько порядков продуманнее - по крайней мере установка пакетов там работает из коробки.
Аноним 2016/01/21 17:47:13  №631147 76
>>631145
Хуйней занимаешься. Качай исходники и компилируй сам. Скайп под линукс майкрософты не обновляли уже лет пять, я удивлюсь если он вообще там работает. В качестве флэша можно взять гугловский pepperflash. Ах да, забудь про гуй, он не нужен и для инвалидов.
Аноним 2016/01/21 17:56:10  №631153 77
>>631147

Зачем мне качать исходники? В том же андроиде все ставится через менеджер пакетов, в дебиане без гнома - тоже. Только в дебиане с гномом и ГУИ все сломано.
Аноним 2016/01/21 18:00:54  №631159 78
>>631153
В debian? Все сломано? В Debian?
В дистрибутиве, в котором по определению в репозиториях только стабильные версии ПО.
Может тебе Убунту попробывать?
Аноним 2016/01/21 18:08:17  №631161 79
>>631159
Он просто криворукий виндузяткик, который ничего кроме как МЕНЕДЖЕР ПАКЕТОВ не может. Завтра он побежит создавать тред в /s/ какой этот ваш линукс говно и как там все неудобно.
Аноним 2016/01/21 18:12:02  №631163 80
>>631161
У меня арч сам по себе упал. Просто сам по себе. До сих пор лень поднимать, стоит второй системой шиндовс.
Аноним 2016/01/21 18:14:20  №631165 81
>>631163
Он не может сам по себе упасть. Упасть могли иксы, плазма и даже Аллах. Смотри и читай логи, отслеживай из-за чего это происходит.

На втором компьютере стоит центОС, не выключал его с сентября. Ни единого падения или тормоза, все работает идеально.
Аноним 2016/01/21 18:16:02  №631167 82
>>631120
>Как тут можно подсчитать одновременно сколько юзер поставил лайков и сколько ему?
Логично иметь для такого две разные таблицы для разных лайков, не?
Отдельно лайки юзера, отдельно лайки юзеру.
Я хз.
Аноним 2016/01/21 18:18:19  №631168 83
>>631167
А разве это будет не избыточность в БД?
другой-анон
Аноним 2016/01/21 18:18:34  №631169 84
>>631120
У тебя и так две таблицы, ну да пох, я все равно пока не дошел.
Хз, в чем сложность дважды по разным параметрам группировать тогда.
Аноним 2016/01/21 18:20:10  №631171 85
>>631168
Ну а как по-другому возможно?
Для большого дела всего пару таблиц - это норма.
Аноним 2016/01/21 18:22:27  №631173 86
>>631145
Нужно в sources.list добавить non-free. А вообще, для этого есть /s/.
Аноним 2016/01/21 18:23:11  №631174 87
>>631167
Здесь связь одни ко многим, достаточно две таблицы. Кроме того если сделать как ты говоришь, то будет непонятно кто кому ставил лайки
Аноним 2016/01/21 18:24:15  №631175 88
>>631169
>Хз, в чем сложность дважды по разным параметрам группировать тогда.
Сложности нет, но у ОПа написано, что это можно сделать одной группировкой и двумя джоинами
Аноним 2016/01/21 18:29:05  №631183 89
>>631165
Ну может я разик обновился до перезагрузки, пол года назад было лол. До сих пор висит.
Аноним 2016/01/21 18:32:46  №631192 90
Не понимаю, почему аргумент в пользовательскую функцию не передается в слиме? Если передавать вторым аргументов анонимую функцию, то она видит переменную из плейсхолдера, а если функцию записать в переменную, то уже нет.
$app->get("/files/:id", $test($id));
Аноним 2016/01/21 18:37:00  №631201 91
>>631192
Забудьте, оказывается аргументы передавать не нужно.
Аноним 2016/01/21 18:43:32  №631210 92
>>631147
> Скайп под линукс майкрософты не обновляли уже лет пять, я удивлюсь если он вообще там работает.
У меня в Убунту 12.04 работает. Поставлен он был еще во времена 10.04 ни разу не обновлялся, пережил апгрейд на 12.04.
Аноним 2016/01/21 18:45:08  №631214 93
>>631153
Никто тебе не мешает в Дебиана с Гномом и Гуи пользоваться командной строкой для установки пакетов.
Аноним 2016/01/21 18:56:09  №631220 94
>>631210
Там новые облачные чатики не работают.
Аноним 2016/01/21 19:15:17  №631230 95
Вы зарегистрированы на фриланс-биржах под своими реальными данными? Это на что-нибудь влияет?
Аноним 2016/01/21 19:17:39  №631232 96
>>631230
Как заказчик скажу: на лояльность влияет.
Идентифицированный пользователь, безопасная сделка.
А так будешь жумлу с вротперсом устанавливать, а точнее - грызться с кучами школьников ради этого.
Аноним 2016/01/21 19:24:29  №631239 97
>>630664
Поправил выражение, но всё равно слишком громоздко вышло, не знаю как ещё упростить, взгляните кто шарит.
http://ideone.com/AhNYfb
Аноним 2016/01/21 19:35:54  №631243 98
Аноним 2016/01/21 19:36:43  №631245 99
>>631243
сажа случайно прицепилась
Аноним 2016/01/21 19:55:09  №631251 100
Проанализировав апворк я сделал вывод, что надо учить еще и вордпрес, чтобы хоть урвать хоть какой-то заказ.
Аноним 2016/01/21 20:18:48  №631258 101
>>630610
Ты уже пробовал так делать?

Ты же тот кун что как и я делает задачу со студентами?
Как насчет обменяться контактами чтобы в будущем были совместные проекты?
Аноним 2016/01/21 20:37:23  №631271 102
>>631251
Так лучше сначала в контору какую пойти работать за просто так, набраться опыта и потом вкатываться на апворк. Сам с нуля ты наврядли сможешь конкуренцию составить там кому-либо
Аноним 2016/01/21 20:39:04  №631274 103
>>631258
Нет, я тот кун со студентами, а он нет. И я уже знаю вордпрессы. Контакты еще актуальны?
Аноним 2016/01/21 21:10:58  №631316 104
>>631274
>Контакты еще актуальны?
Да, вот моя фейкопочта someapprentice@openmailbox.org
Аноним 2016/01/21 21:17:49  №631323 105
>>631316
А что вы будете вместе делать?
зависть-кун
Аноним 2016/01/21 21:19:09  №631326 106
Аноним 2016/01/21 21:30:59  №631344 107
Аноны, за сколько времени вы до студентов дошли и прошли их? Я с нового года мучаюсь, только до ХТМЛ дошёл, я совсем туп и безнадёжен? Или это не медленный темп?
Аноним 2016/01/21 21:31:43  №631349 108
Аноним 2016/01/21 21:32:39  №631350 109
>>631344
Какая тебе разница? Не забивай себе мозги ненужной информацией.
Аноним 2016/01/21 21:33:28  №631351 110
Аноним 2016/01/21 21:41:50  №631358 111
>>631344
Чего ты там дошёл до хтмл, где в треде куча сложных заданий типа калькулятора или чисел прописью?
Дошел он, посмотрите на него..
Аноним 2016/01/21 21:43:45  №631363 112
>>631358
Да я уже скидывал их в прошлые треды, за исключением 1 или 2 задач все выполнил
Аноним 2016/01/21 21:44:29  №631364 113
>>631363
А задачки на ООП? Вектор и Кошки-Мышки
Аноним 2016/01/21 21:45:22  №631366 114
>>631363
Да ладно, где калькулятор и числа прописью, например?
Лиличку и всякие клавиши шифт я видел, разные аноны делали.
А что посложнее - не было ни одного.
Аноним 2016/01/21 21:48:36  №631369 115
>>631364
А ООП это же следующая глава после ХТМЛ, вот скоро подойду к ней. Ну так ответит кто-нибудь, сколько времени у него уходил на всё про всё?


>>631366
Калькулятор точно кидал.

Аноним 2016/01/21 21:49:06  №631370 116
>>631366
И кстати, лиличка мне мозг вынесла намного сильней, нежели калькулятор
Аноним 2016/01/21 22:02:28  №631385 117
>>631369
>Калькулятор точно кидал.
А числа прописью? Калькулятор увидел сейчас, да.
Мне-то все равно, просто не раз уже видел, как перескакивают через задачи, а потом потыкаются со студентами и пропадают.
Аноним 2016/01/21 22:03:11  №631387 118
>>631370
Значит, ты просто пока еще не делал числа прописью, азаза!!1
Аноним 2016/01/21 22:19:50  №631407 119
>>631385
Числа прописью было тем, что пропустил, ты прав. Примерный принцип я разобрал, но не было времени нормально решить задачу, т.к. жрёт много времени она, а у меня работа. Думаю, на выходных я вернусь к ней
Аноним 2016/01/21 22:43:48  №631444 120
>>631407
А с чем работа связана? Вообще какой бэкграунд, образование, левел и т.п.?
Для чего решил изучать программирование?
Аноним 2016/01/21 23:04:16  №631460 121
>>631444
С перекладыванием бумажек с одного места на другое.
>Для чего решил изучать программирование?
чтобы вырваться из этого круга пиздеца и уныния
Аноним 2016/01/21 23:20:00  №631481 122
>>631159

Это 100% баг. Я установил чистую систему + из нее гном + gdm3, никаких настроек не менял, ничего не устанавливал, версия дебиана №8 (в названиях я путаюсь так как в них нет никакой логики).

И я знаю причину бага.

Алсо линукс я знаю не так и плохо.

>>631167

Нет, нелогично. Хватит одной, обычная связь многие-ко-многим.

>>631173

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

>>631210

Работает в 15-й убунте, скайп 4 версии без рекламы, фейсбука и прочей дряни.

Кстати кто не умеет отключать фейсбук и рекламу в скайпе на винде: прописываете в хостс apps.skype.com на 127.0.0.1 и перезапускаете скайп.

>>631214

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

Аноним 2016/01/21 23:23:28  №631489 123
>>630610

Если ты ххочешь как-то обозначать версии то есть способ проще. Просто помечаешь определенную ревизию тегом, например v1 и продолжаешь работу в мастере, а ОПу даешь ссылку на гитхаб с этим тегом. Теги как раз придуманы чтобы помечать определенные версии.

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

https://git-scm.com/book/ru/v1/%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D1%8B-Git-%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0-%D1%81-%D0%BC%D0%B5%D1%82%D0%BA%D0%B0%D0%BC%D0%B8

Гит очень крутая штука, я все время удивляюсь сколько в нем всего есть.

Аноним 2016/01/22 07:28:29  №631637 124
Из за новогоднего угара и вакханалии только узнал что вышел PHP7.
И поскольку мне лень вникать.
Дайте мне, пожалуйста, максималистское ревью, что нового и круто ли там?
Аноним 2016/01/22 07:32:08  №631640 125
Аноним 2016/01/22 09:44:21  №631678 126
Так что можно ли в сессию записать, чтобы с каждого айпишника можно было сделать только один лайк или обязательно таблицы со статистикой по лайкам и айпи создавать?
Аноним 2016/01/22 09:47:52  №631680 127
>>631678
Каким образом ты это в сессию записывать собрался? Ты вообще понимаешь как сессии работают?
Аноним 2016/01/22 10:14:27  №631695 128
>>631680
вот так берешь и записываешь. все работает.
Аноним 2016/01/22 10:15:32  №631696 129
>>631695
И что ты собрался записывать в сессию?
Аноним 2016/01/22 10:19:28  №631698 130
>>631239
http://ideone.com/GC1nHL - не работает.
Вспомни, что означают квадратные кавычки, как ведут себя в них все символы, как действуют символы ?, + и после квадратных кавычек. Это поможет избавиться от конструкции (\\s|\\(|\\)|\\"|-?), например.
Также тут же поймёшь, почему конструкция ([\\s
\\-\\)\\"]) вообще нелепо выглядит
Вот паста ОПа, как минимум, все эти номера должно проверять верно:
----------

Задачу про номера телефонов надо проверить на большом числе телефонов, чтобы убедиться что твой код правильный. Но руками подставлять номера — долго и скучно. Пусть работает робот, а не человек!

Для этого давай добавим в программу тесты, чтобы сразу было видно, верно все работает или нет. Сделай 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' // нет +
);
Аноним 2016/01/22 10:20:06  №631699 131
>>631695
А потом сессия обрывается и лайки пропадают?
Аноним 2016/01/22 10:20:34  №631700 132
>>631696
айди и кол-во лайков и айпи.
Аноним 2016/01/22 10:21:28  №631702 133
>>631698
Блин, звёздочки всю разметку порушили.
Ну ты там увидишь фрагменты своей регулярки, всё поймёшь, я думаю.
Аноним 2016/01/22 10:21:49  №631703 134
>>631700
А я возьму и получу новую сессию. И буду так делать когда хочу поставить новый лайк. В итоге накручу себе лайков сколько захочу.
Аноним 2016/01/22 11:01:46  №631726 135
14534497065150.png (136, 686x543)
543x686
>>629822 (OP)
Сап, чуваки. Извините, если не в тот тред, но у вас в шапке вроде CSS упомянут. У меня пара вопросов по нему, ответы на которые чёт не гуглятся.

1. Что делаете с уродливыми чекбоксами и радио в Firefox-based браузерах? Хочется рамки в 1px и никаких больше теней и обводок. Перепробовал разные варианты. В поиске громадные фидлы с jquery и анимацией.

2. Насколько уместно в глобальном CSS (через Stylish) добавлять проверку на имена/классы? Например чтобы ютуб не ломался от background-color как на прирепленом скрине. Насколько в целом бьёт по производительности? Если есть опыт, пишите браузер. Я на своей пеке с i5 и 8 Gb оперативки совсем перестал понимать эти вещи (не хвастаюсь, кек).
Аноним 2016/01/22 11:10:26  №631735 136
>>631703
Кстати, поэтому лайки от анонима - дохлый номер априори.
Сессии-то ладно, но и тупо IP можно менять и ставить лайки, скрипт какой-нибудь с проксями.
Если только как-то проверять конфигурацию системы, я даже хз.

Хотя нет. Есть знакомый админ на Питоне, он говорит, что можно тупо воровать данные об аккаунтах в соцсетях. Когда заходишь на страницу и при этом залогинен в какой-нибудь соцсети -система видит тебя и собирает инфу обо всех твоих профилях в соцсетях, чтобы потом продажники донимали тебя ещё и там. Жестоко и по-пидорски, но вот такие дела, такое возможно.
Есть даже какой-то сервис, который траллит тебя тем, что всю инфу о твоих соцсетях выдаёт - чекает, что там у тебя в браузере связано с ними.
Вот по такому можно ещё отслеживать реального юзера, получается. Только сложнота, наверное, я пока до такого не дошёл ещё.
Аноним 2016/01/22 11:16:22  №631740 137
>>631735
>Вот по такому можно ещё отслеживать реального юзера, получается
А если я выйду из всех соц. сетей и каждый раз буду менять проксю и удалять все сессии? Плюс к этому прикрутить еще смену юзерагента и тогда только капчей можно будет защитить от накрутки (да и то капчу можно через антигейт прогнать, если деньги есть).
Аноним 2016/01/22 11:33:46  №631759 138
>>631740
А если по конфигу системы?
Аноним 2016/01/22 11:37:05  №631761 139
>>631740
>А если я выйду из всех соц. сетей и каждый раз буду менять проксю и удалять все сессии?
Как раз может быть сигналом для срабатывания условия, при котором лайки перестают засчитываться. Я это и имею в виду.
Хоть в одной соцсети, но юзер зареган обычно. При этом аккаунты на Google или Yandex тоже ведь проверяются.
Аноним 2016/01/22 11:40:48  №631767 140
Аноним 2016/01/22 11:42:04  №631769 141
>>631759
Тут уже зависит от способа получения конфига системы. Насколько я знаю, без анальных плагинов на джаве (не джаваскрипте) его нормально не получить.
Аноним 2016/01/22 11:44:13  №631772 142
>>631769
Тогда >>631761: сигнал для срабатывания условия при накрутке.
Аноним 2016/01/22 11:46:54  №631773 143
>>631772
Все равно лучше регистрацию сделать, чем такие велосипеды строить.
Аноним 2016/01/22 12:00:37  №631781 144
>>631703
куки каждый раз чистить будешь?
Аноним 2016/01/22 12:02:16  №631782 145
Аноним 2016/01/22 12:16:17  №631789 146
>>631773
Так я думал, что мы говорим только про отдельные анонимные лайки. Что лайки при регистрации - это само собой.
Так-то можно ещё сказать, что тогда проще для накрутки лайков и зарегистрироваться 100500 раз...
Но опять же можно и прочие моменты включать: аккаунты в соцсетях, IP, куки и т.п.
Это так-то болезнь программистов - доводить всё до ситуаций, которые могут и не произойти никогда, при этом не думать о капитальных вещах для пользователей. Аллан Купер об этом пишет хорошо в "Психбольнице...".
Аноним 2016/01/22 12:30:45  №631807 147
>>631789
Если активность аккаунта нулевая в течение какого-либо периода времени - удалять его и все лайки.
Аноним 2016/01/22 12:38:13  №631812 148
Аноним 2016/01/22 15:46:48  №631985 149
Аноним 2016/01/22 15:52:25  №631992 150
>>631985
Я отдельно посчитал баланс кредита (просто не стал отнимать месячный платёж) и ввёл новую переменную olbigation, которая считает не размер кредита, а размер обязательства анона перед банком. Т.е. если у него, к примеру, кредит - 100, а уплатил он 80, то размер обязательства - 20.

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

Таким образом, на последнем этапе вычисленный lastPay заменит месячный платёж анона (5000) - lastPay прибавится к тому, что анон уже заплатил. Итого (схематично):
долг анона - 100;
анон внёс суммарно - 100;
размер обязательств перед банком: 100 - 100 = 0
эхо "$размер обязательства"
Аноним 2016/01/22 15:56:17  №631997 151
14534673776850.jpg (71, 1280x720)
720x1280
>>631985
>>631992

Блядь, как же я долго дня ебался с этим кодом. Сначала выполнил твою задачу, потом решил немного усложнить с этим нулём и 2,5 дня мозгоебли. Наконец-то победа!
Аноним 2016/01/22 16:07:34  №632007 152
>>631992
>>631997
Бро, вынужден тебя дважды огорчить: я не ОП хотя и польщён тем, что меня за него приняли и калькулятор считает неправильно...
Там должна сумма всех выплат ($paymentTotal) составить 61270 рублей со многими копейками.
>долг анона - 100;
>анон внёс суммарно - 100;
>размер обязательств перед банком: 100 - 100 = 0
>эхо "$размер обязательства"
Ноуп, неверно! Долга Анончика 100 - прибавляем к этому проценты от 100, прибавляем 1000 за обслуживание кредита (а как же, ведь кредит не выплачен, а новый месяц пошёл), а потом уже выплачиваем именно эту получившуюся сумму и прибавляем её к общей выплате.
В предыдущем моём сообщении же весь алгоритм был, ты куда-то не туда улез, братишка, такие дела.
>Блядь, как же я долго дня ебался с этим кодом.
Я сам почти неделю всех терроризировал в треде, но в итоге решил практически в пару строк.
Обрати внимание на алгоритм вот тут ещё раз: >>631035
Просто отбрось всё и попробуй его реализовать. Тем более, что это и есть алгоритм задачи на самом сайте ОПа, только более развёрнутый.
Аноним 2016/01/22 16:10:40  №632011 153
14534682402540.jpg (28, 343x256)
256x343
Аноним 2016/01/22 16:13:16  №632013 154
>>632011
Ахаха, ты - это я месяц назад...
Я просто даже сон и аппетит потерял в тот момент.
У меня там, правда, сумма почти сразу получилась верная, но уходило в минус, вот я посношался с этим...
После седьмого раза перестал считать, сколько переписывал ВЕСЬ скрипт с нуля, включая error_reporting(-1), блиять.
Аноним 2016/01/22 18:55:22  №632175 155
Аноним 2016/01/22 19:36:01  №632199 156
Аноним 2016/01/22 19:47:41  №632214 157
В задаче про айфон 3% - это процент от начальной суммы 40к или процент от оставшегося долга?
Аноним 2016/01/22 19:50:59  №632218 158
>>632199
http://ideone.com/jhtZ7c - неправильно показывает некоторые номера. Паста ОПа для проверки: >>631698.


http://ideone.com/MdRvFa - неправильно в некоторых местах. Также почему оставшихся моментов нет? Там много всего помимо этого должно быть.
Также надо показывать как минимум слово до ошибки и слово после - чтобы было понятно, где именно ошибка в тексте. Таковы условия задачи.
Аноним 2016/01/22 19:51:54  №632220 159
>>632214
Процент от 40к и дальше от того, что остаётся после каждой выплаты.
Аноним 2016/01/22 20:12:11  №632247 160
>>632218
почувствовал себя студентом которго заебывает препод при принятии лабы.
Аноним 2016/01/22 20:15:51  №632250 161
>>632247
Что поделать, Десу, но вот такие задачки у ОПа.
Зато потом начинаешь себя чувствовать вполне себе способным на многое.
Аноним 2016/01/22 20:21:20  №632254 162
14534832802270.jpg (46, 600x450)
450x600
>>632250
>Зато потом начинаешь себя чувствовать вполне себе способным на многое.
Ненадолго.
Аноним 2016/01/22 22:27:02  №632400 163
Поясните по поводу Ajax, когда стоит его использовать а когда не стоит? Например в контакте при переходе по вкладкам осуществляется перезагрузка страницы, на многих других сайтах тоже. Почему они не используют Ajax причина кроется в большом количество информации которую выводят такие сайты как контакт, или ещё есть какая-нибудь причина?
Аноним 2016/01/22 22:43:01  №632428 164
>>632254
Подтверждаю так-то.
Шёл четвёртый день битвы с задачей на числа прописью...
Аноним 2016/01/23 00:35:37  №632510 165
>>630471
Внешня библиотека не нужна. Из коробки идет встроенный html DOM document. Для парсинга лучше использовать xpath селектор, вместо CSS. Он более гибкий, но может показаться сложнее по началу.

запрос xpath будет типа:
.//table[3]//tr/td

Проверит можно в хроме, через меню разработчика, на панели HTML нажимаешь ctrl+f и вводишь xpath. На мозиле нужно ставить файрбаг + файрпав.
Аноним 2016/01/23 00:45:53  №632515 166
>>632400
На мой взгляд так.
Если ты выполняешь какое либо действие над элементом на странице, не меняя контекст, то это аякс.
Аноним 2016/01/23 01:04:38  №632520 167
>>631004
Самое простое: в браузере при открытой менюшке разработчика, при открытой вкладке запросов, отправить эту форму. Пото, правой кнопкой щелкаешь на запрос, и выбираешь "копировать как curl". Все необходимое у тебя теперь в буфере обмена.
Я буду долго тыкать на Submit... Аноним 2016/01/23 01:34:44  №632529 168
"602" - это "шестьсот две тысячи".
"672" - это "шестьсот семьдесят две тысячи".
"351" - это "триста пятьдесят одна тысяча".
"354" - это "триста пятьдесят четыре тысячи".
"2" - это "две тысячи".
"1" - это "одна тысяча".
"681" - это "шестьсот восемьдесят одна тысяча".
"11" - это "одиннадцать тысяч".
"886" - это "восемьсот восемьдесят шесть тысяч".
"808" - это "восемьсот восемь тысяч".
"110" - это "сто десять тысяч".
"847" - это "восемьсот сорок семь тысяч".
"200" - это "двести тысяч".

Осталось миллионы вот так же разложить и собрать воедино всё. С миллионами должно быть просто, а вот собирать воедино будет непросто.
Для нулей поставлю условие, которое будет проверять, нет ли цифр больше нуля, а затем либо переводить дальше, либо выявлять имеющиеся цифры.
Очень много говнокода, просто очень много говнокода. Я думал, гораздо лучше будет это всё.
Я кода задачу на кредит для Айфона де-е-елал...
Аноним 2016/01/23 03:50:54  №632548 169
Аноним 2016/01/23 05:13:48  №632557 170
>>631323
>зависть-кун
Прости анончик, я не заходил в тред после того как оставил почту. Можешь оставить свои контакты тоже - я рад любым знакомствам!

Аноним 2016/01/23 06:38:45  №632567 171
Аноним 2016/01/23 06:53:52  №632569 172
Блять, только что заметил, что в документации для функции implode аргументы стоят не в том порядке в котором я их всегда ставил, но при этом у меня она всегда корректно работала. Как такое может быть?
Можете сами убедиться http://ideone.com/DXVHsD
Ответы за 18-19 января в старом треде Аноним 2016/01/23 08:26:19  №632579 173
>>628328

По идее еще можно избавиться от элса и повторяющихся строк через функцию min или max.

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

>>628329

На гитхабе написано: скачать полный пакет + подключить autoload из папки vendor. Зачем ты свои способы изобретаешь? В других туториалах очевидно предполагается что ты его ставил через композер, потому и код другой. Возможно даже тебе надо подключить 2 файла автолад: один из папки вендор, другой как в примере.

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

>>628393

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

>>628490

ВО-первых, ты зря испольузешь левые сборки вместо оригинальных программ, ведь в этом случае никто не гарантирует работоспособность и совместимость. Да и теряешь ценный опыт возни с конфигами. Во-вторых, как ты открываешь консоль? Через меню опенсервера? В нем по моему своя, отдельная консоль и команды в обычной консоли вводить бесполезно - там нет некоторых переменных окружения.
Ответы за 18-19 https://github.com/nsdvw/PreviewGenerator Аноним 2016/01/23 08:26:51  №632580 174
>>628521

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

АПИ адаптера не очень удачное:

> merge($background, $overlay, $left, $top, $opacity = 100);
А если мы хотим прижать ватермарк к правому краю? Нам было бы удобнее указать расстояние от него чем высчитывать отступ слева.

> public function getWidth($image);
> public function getHeight($image);
> public function resizeDown($image, $width = null, $height = null);
У тебя нет ощущения что логичнее было бы так:

$image->getWidth();
$image->getHeight();
$image->resizeDown(....);

Но это не самое важное, самое важное - это вопрос:

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

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

Ну и это наверно не совсем по теме, но почитай (если ты еще не читал) статью про выпечку хлеба: https://habrahabr.ru/post/153225/ (хотя там по моему сломались картинки)

Алсо придерусь немного к английскому, в порядке исключения:

> add to your ... next code:
add the following code to your ...

В общем пока мое мнение: не нужно, надо просто сделать в проекте класс который будет вызывать WideImage с требуемыми настройками. Если это виджет с неизвестными заранее размерами то эти размеры надо сделать свойствами виджета и передавать ниже лежащей библиотеке. Зачем может понадобиться использовать несколько библиотек для уменьшения картинок, мне неясно.
Ответы за 18-19 января старый тред Аноним 2016/01/23 08:27:17  №632581 175
>>628558

Попробуй порешать наши задачи, показывать решения, исправлять замечания - я уверен, что будет прогресс. Тем более что ты не совсем начинающий, тебе легче чем другим. Вуз вузу рознь, если тебя интересуют информационные технологии, то надо искать такие программы: https://park.mail.ru/pages/index/ или например ШАД Яндекса. Ну и есть большая разница, сдавать зачеты или сидеть разбираться в заданиях.

>>628704

Названия неудачные и затрудняют чтение кода.

$totalAr -> $girls, $positions (и не пиши слово array в названии переменной, и тем более не сокращай его)
$e -> $number, $current
as $k => $v -> $key => $position

Заполнение массива проще сделать функцией range (или хотя бы циклом for).

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

>>628710

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

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

>>628770

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

>>628775

> w1: https://ideone.com/sgIZfu
Все правильно!

> w2: https://ideone.com/DBu62z
Верно.

> w3: https://ideone.com/7hEeAu
Тут тоже верно.

> w4: https://ideone.com/rdAHwD
Верно, но тут

> $anonDice1 + $anonDice2) > ($compDice1 + $compDice2))
можно было использовать compSum/anonSum, и иф принято писать с маленькой букв.

>>628800

Молодец, верно.
18-19 января старый тред Аноним 2016/01/23 08:27:41  №632582 176
>>628812

О, интересно, но можно улучшить код:

> elseif ($height == $anonHeight) {
Лучше просто else без условия

> foreach ($ending as $keys => $value){
> foreach ($value as $i => $o) {
Какие плохие и нечитаемые имена переменных:

keys -> word
value -> digits
o -> digit
as $i -> убрать

Да и код трудно понять. Такие вещи обычео пишут через операцию деления с остатком:

if ($x % 10 == 1) ...

Ну и алгоритм неверный, твой код для числа 12 напишет "12 человека". Числа от 11 до 19 идут как исключение (видимо древнию люди умели считать только до 20).

А еще, не хочешь число человек через array_filter? Это тоже интересно будет, если ты конечно знаешь анонимные функции.

>>628913

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

>>628914

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

>>628977

Решение покажешь?
https://github.com/foobar1643/student-list Аноним 2016/01/23 08:28:01  №632583 177
>>629061

Файлы names/surnames лучше убрать в папку, например data.

> name text NOT NULL,
> surname text NOT NULL,
Тут надо varchar с разумным ограничением длины. Тебе надо прочитать в мануале главу про типы колонок (всю!) и выучить названия не менее 5 разных типов (INT и BIGINT считаются за один). Также, ответь на вопрос, в чем разница между REAL и NUMERIC? Где может пригодиться нумерик? Какой тип использовать для хранения телефонного номера? Номера паспорта?

> status text NOT NULL,
> gender text NOT NULL,
Тут нужен enum (который судя по документации в постгрессе даже лучше чем в майскул: http://www.postgresql.org/docs/9.1/static/datatype-enum.html , перевод http://postgresql.ru.net/manual/datatype-enum.html )

> sgroup text NOT NULL,
> email text NOT NULL,
варчар нужен

> byear text NOT NULL,
В майскул есть тип YEAR, а в пострес нужен либо инт, либо децимал (для него можно задать длину).

Также, в постргресе есть очень крутая штука, ограничение на значение поля CHECK: http://postgresql.ru.net/manual/ddl-constraints.html#AEN2554

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

Для уникальных полей надо поставить соответствующее ограничение.

> CREATE TABLE tokens (
А почему отдельной таблицей? И почему нет внешнего ключа? И почему ид текстом?

Также, я вижу ты не очень знаешь SQL, советую порешать задачи на него из ОП-поста.

> CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog;
> REVOKE ALL ON SCHEMA public FROM PUBLIC;
> REVOKE ALL ON SCHEMA public FROM postgres;
Это не надо включать в дамп. Имя базы данных также нежелательно указывать, так как нельзя загрузить дамп в другую базу.

https://github.com/foobar1643/student-list/blob/master/public/design/template/form.html
Это не должно быть в публичной папке, так как это код, не предназначеннный для вызова пользователем напрямую.

https://github.com/foobar1643/student-list/blob/master/app/AutoLoader.php
Не надо копипастить, копипаста - зло, сделай список путей в массиве, и их перебор в автозагрузчике. Более того, если указать эти папки в include_path то можно использовать встроенный в пхп автозагрузчик spl_autoload (детали в мануале).

А лучше конечно освой неймспейсы, урок https://github.com/codedokode/pasta/blob/master/php/autoload.md

> https://github.com/foobar1643/student-list/blob/master/app/AppCore.php#L11
> $this->view_settings = new stdClass();
Тут нужен массив. Объекты это не массивы, для массивов есть куча вспомогательных функций.

> } catch(PDOException $e) {
> print("Database connection error. " . $e->getMessage()
Неправильная работа с исклчениями. ВОт паста.

--------

Как надо обрабатывать исключения:

- записать информацию в лог
- показать пользователю заглушку
- на заглушке выставить HTTP 503 код ответа для роботов
- на компьютере разработчика (при display_errors = 1) показать подробности и стектрейс

Как сделано у тебя:

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

Как будет если просто не ловить исключение:

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

Но даже так лучше чем твой вариант.

Почитай также урок https://gist.github.com/codedokode/65d43ca5ac95c762bc1a

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

Неправильно что ты создаешь PDO в контроллере. Заечм он там? Его надо создавать например в файле bootstrap.php одитн раз и использовать для создания классов работающих с БД. А ты в каждом контроллере создаешь свой ПДО.

Название странное AppCore. Что еще за коре? Это базовый класс контродлера, ControllerBase.

> protected $connection_error;
Зачем поле? Зачем хранить строку с ошибкой?

> $this->view_settings->page_data = new stdClass();
> $this->view_settings->error = array();
> $this->view_settings->page_data->student = array();
Не очень понятно зачем это. Например зачем в базовом классе создавать поле student - он нужен на всех страницах? И что значит page_data? Название ничего не говорит мне.

> https://github.com/foobar1643/student-list/blob/master/app/Controller/ControllerIndex.php
> private $pager;
> private $total_pages;
> private $offset;
> private $sorting_pattern;
Зачем их делать полями? Тебе надо эти значения сохранять между вызовами?

> process_get_request
У нас в пхп в рекомендации PSR принято функции и переменные именовать кемел кейсом: processGetRequest()

> if($get_data['page']
А если нет гет-параметра page то мы получаем ошибку доступа к несуществующему элементу массива? У тебя включено отображения ошибок? Ты видишь, что они есть? Если нет, выставь error_reporting = -1, display_errors = On в php.ini у себя локально.

> $index = array_search($get_data['sort'], $this->sorting_patterns);
> if($this->sorting_patterns[$index]) {
Тут нужен in_array()

Также, не вижу смысла разделять контроллер на process_get_request и run, так как непонятно по какому принципу код разделен на 2 части. Лучше сделать одну функцию.

https://github.com/foobar1643/student-list/blob/master/app/View/ViewIndex.php
Не очень понятен смысл этого класса, не проще ли этот код поместить в контроллер?

https://github.com/foobar1643/student-list/blob/master/app/AppConfig.php
Конфиг лучше сделать обычным php- или ini-файлом:

$config['x'] = 1;

или

[db]
host=localhost
username = 1

https://github.com/foobar1643/student-list/blob/master/public/design/template/form.html#L2
> Проверьте правильность вводимых данных и попробуйте еще раз.
А где текст ошибки?

https://github.com/foobar1643/student-list/blob/master/public/design/template/form.html#L23
Вместо print надо использовать <?= ... ?>. Также, нужна защита от XSS (htmlspecialchars). У меня есть урок. Также нужна клиентская HTML5 валидация.

https://github.com/foobar1643/student-list/blob/master/app/Controller/ControllerForm.php#L28
> $this->student->name = $this->form_validator->process_field($post_data["name_field"]);

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

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

https://github.com/foobar1643/student-list/blob/master/app/Controller/ControllerForm.php#L43
> header("Location: form.php?notify=success"); /
После этого не надо выводить страницу. Ее все равно никто не увидит.
Аноним 2016/01/23 08:32:27  №632584 178
>>629822 (OP)
Бля, это та картинка, где она говорит: "Ну как, в очках я выгляжу умной?))". Как раз та причина, по которой я не хочу линзы, а люблю очки))
18-19 января Аноним 2016/01/23 08:37:54  №632586 179
>>629116

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

>>629158

Не, надо знать раза в 2-3 боьше чем ты перечислил, ветки еще, мерджи, конфликты, пул/пуш. Советую почитать git-book, есть на русском и там достаточно просто все.

>>629279

Для этого надо знать языки HTML, CSS, JS, PHP, работу с базой данных. Довольно много знаний надо.

> посоветовали бесплатное амазноновское хранилище.
Оно не бесплатное. Особенно с нынешним-то курсом.

>>629285

> private function chooseProfession($post) {
Надо убрать отсюда так как это не позволит добавлять профессии не трогая старые классы. Также, у тебя не проверяется в свитче вариант если указана неправильная профессия, это плохо.

> public function countTotalSalary($qty, $rank, $post, $boss) {
Это не очень правльная функция, должно быть так:

public function countTotalSalary() { ... }

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

> abstract class Employee extends Department {
Абсолютно неправильное наследование. Наследование - это создание одного класса на основе другого, когда мы хотим изменить поведение или сделать улучшенную версию чего-то. Ну к примеру мы можем создать класс Транспорт с методом переместиться(), а от него унаследовать Машину, Самолет и Велосипед в которых этот метод реализован по-разному.

У тебя же неправильно: Сотрудник это не разновидност Департамента, значит наследование использовать так нельзя.

> class Manager extends Employee {
> protected function countSalary() {
Ты скопипастил тут код 4 раза.

>>629306

Будем считать этот косяк ОПа тестом на сообразительность.
Аноним 2016/01/23 08:39:58  №632588 180
Аноним 2016/01/23 09:21:01  №632594 181
14535300617030.png (20, 604x477)
477x604
>>629061

Первый файл открыл и сразу ахуел. Что у тебя кол-во элементов на странице в КОНФИГЕ ДБ делает, дурень?
Этот параметр должен быть в классе Pager.
Аноним 2016/01/23 09:23:45  №632595 182
14535302252260.jpg (40, 419x419)
419x419
Четвертый год безработный, юбилейный, рейт авку.
Аноним 2016/01/23 09:24:40  №632596 183
>>632595
У мамки на шее сидишь?
Аноним 2016/01/23 09:29:34  №632597 184
Так писать легально?
$dsn = AppConfig::db_type . ":dbname=" . AppConfig::db_name . ";host=" . AppConfig::db_host; //"pgsql:dbname=students;host=127.0.0.1"
try {
$this->pdo = new PDO($dsn, AppConfig::db_user, AppConfig::db_pswd);
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
print("Database connection error. " . $e->getMessage());
exit();
}
Аноним 2016/01/23 09:31:42  №632598 185
>>632597
Нет, мне ОП уже пояснил за исключения. Это >>632594 тоже переделаю.
Аноним 2016/01/23 09:42:03  №632600 186
>>629061
И класс работы с бд должен лежать отдельно и называться Data Mapper, а не в вперемешку с моделями. И что там за работа с файлом тхт, зачем это?
Вот в этот лучше массив записать, а не повторять, как быдлокодер. И зачем ты exit() везде пишешь? лол, нуб.

$this->student->id = $this->form_validator->process_field($post_data["id_field"]);
$this->student->name = $this->form_validator->process_field($post_data["name_field"]);
$this->student->surname = $this->form_validator->process_field($post_data["surname_field"]);
$this->student->gender = $this->form_validator->process_field($post_data["gender_field"]);
$this->student->group = $this->form_validator->process_field($post_data["group_field"]);
$this->student->email = $this->form_validator->process_field($post_data["email_field"]);
$this->student->byear = $this->form_validator->process_field($post_data["byear_field"]);
$this->student->status = $this->form_validator->process_field($post_data["status_field"]);
$this->student->rating = $this->form_validator->process_field($post_data["rating_field"]);


И кто так пишет? не нужно столько вложенных методов или что там.
$this->view_settings->page_data->next_page
Аноним 2016/01/23 09:42:44  №632601 187
>>632597
>$dsn = AppConfig::db_type . ":dbname=" . AppConfig::db_name . ";host=" . AppConfig::db_host; //"pgsql:dbname=students;host=127.0.0.1"
>try {
>$this->pdo = new PDO($dsn, AppConfig::db_user, AppConfig::db_pswd);

Я про это.
Аноним 2016/01/23 10:14:26  №632605 188
>>632594

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

>>632597

Не, лучше не использовать класс для конфига. Ведь по идее конфиг предназначен для не-программистов и стоит испольозовать что-то попроще, например ini, xml, json, yml, на худой конец пхп файл с переменными. Идея конфига чтобы вынести настройки из кода. А тут они и не вынесены.

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

>>632600

НЕт, TDG это нормальное название, это паттерн такой. https://github.com/codedokode/pasta/blob/master/db/patterns-oop.md

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

Аноним 2016/01/23 10:19:19  №632608 189
>>631812

Нет, мы тоже поможем.

>>631726

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

> 2. Насколько уместно в глобальном CSS (через Stylish) добавлять проверку на имена/классы? Например чтобы ютуб не ломался от background-color как на прирепленом скрине.
Не знаю. С классами наверно проблем не должно быть, так как движок ксс под них может быть оптимизирован, они везде использованы. Но это надо мерять.

> Насколько в целом бьёт по производительности? Если есть опыт, пишите браузер
Не знаю, надо делать измерения (например сравнивать время и потребление памяти со стилями и без или с плагином и без). Вообще, по моим ощущениям фаерфакс сам по себе не очень быстрый, а с расширениями и того медленнее.
Аноним 2016/01/23 10:19:46  №632610 190
>>632600
>И класс работы с бд должен лежать отдельно
Сделаю.
>и называться Data Mapper
В условии задачи не DataMapper, а TableDataGateway
>И что там за работа с файлом тхт, зачем это?
Заполнитель базы данных новыми записями, чтобы вручную не вводить. Делал для тестирования поиска и постраничной навигации, решил оставить.
>Вот в этот лучше массив записать, а не повторять, как быдлокодер
Мне это тоже не понравилось, но заполнять объект Student циклом я не хотел (по понятным причинам). Попробую что-нибудь с этим сделать.
>И зачем ты exit() везде пишешь?
Это последствия того, что я не знал как правильно обрабатывать исключения. Тоже переделаю.

Спасибо за помощь.
Аноним 2016/01/23 11:23:13  №632644 191
Добрый день, в вебаче не спрашиваю, там .5 анона сидит и те проходят мимо. Есть инет-магазин и есть стандартный шаблон сверстанный на основе бутстраповской сетки opencart, так вот, как задать сайту минимальную ширину при сохранении адаптивности? (с 1300 до 850 будет адаптивность, до 850 просто скролл бар и элементы перестают прыгать, двигаться, уменьшаться/увеличиваться)? Пока что этого достичь не вышло, при указании min-width 850, всё равно всякие xs, lg, sm в зависимости от бутстраповских медиа - изменяют свои свойства. Помогай, пхпач.
Аноним 2016/01/23 11:25:46  №632646 192
Аноним 2016/01/23 11:36:24  №632651 193
Антоны поясните сколько в среднем времени уйдёт вкатиться в Junior PHP Developer'ы. Полгода-Год?
Аноним 2016/01/23 11:38:28  №632654 194
>>632651
Зависит от человека, есть такие, что дропают по 20 раз в процессе и потом наверстывают, есть такие что не от фрустрации бросают вовсе.
Аноним 2016/01/23 11:38:44  №632655 195
>>632651
Зависит от твоих текущих знаний. Список необходимых технологий для джуниора можно задрочить и за три месяца (это если ты вообще ничего не знаешь), если ты каждый день по 8 - 10 часов будешь учить. А если размазать на 3 часа в день + выходные, тогда полгода-год, да.
Аноним 2016/01/23 11:38:50  №632656 196
>>632654
>что от фрустрации
selffix
Аноним 2016/01/23 11:54:10  №632660 197
>>632654
>>632655
Баловался в этом треде сам сисадмин, не так давно, дошел до "Бонусные задачки", калькулятор и числа прописью написал без особого труда и съебался админить, сейчас администов в конец доебало. Сколько там последний срок по возрасту последний шанс вкатиться? 22 мне
Аноним 2016/01/23 11:55:57  №632661 198
>>632660
>Сколько там последний срок по возрасту последний шанс вкатиться?
Такого нет. Я знал людей которые в 27 - 28 начинали джуниорами работать. Им уже за 30, один стал тимлидом, другой синьером в каком-то Московском бодишопе.

Успех уровня /pr/, ага.
Аноним 2016/01/23 11:56:00  №632662 199
>>632660
>долбоёб может стать девопсом
>нет, не хочу, хочу шаблоны на жоомлу за 40к натягивать
Аноним 2016/01/23 12:01:18  №632663 200
>>632662
В этом то и по сути основная проблема. Буду гнаться за двумя зайцами, потом на одного забью.
Аноним 2016/01/23 12:01:42  №632664 201
>>632660
Я бы хоть админом пошел бы. Что там знать надо для сисадмина, линукс?
Аноним 2016/01/23 12:03:05  №632665 202
>>632664
ОФИС НАСТРОИТЬ
ВИРУСЫ УБРАТЬ
АДИНЭС НЕ РАБОТАЕТ
Аноним 2016/01/23 12:03:13  №632666 203
>>632664
В зависимости от того, что админишь - линукс или серверную венду.
Энивей, вангую что поциент сверху - типичный втыкатель мышек.
Аноним 2016/01/23 12:04:04  №632669 204
>>632660
Ты это, не бухти, тут и люди с похуже данными входными есть, а ты сразу "поздно".

25-лвл, экономист-кун
Аноним 2016/01/23 12:05:23  №632670 205
>>632669
Двачую.

охранник-кун
Аноним 2016/01/23 12:05:52  №632672 206
Аноним 2016/01/23 12:06:05  №632673 207
Аноним 2016/01/23 12:08:03  №632675 208
>>632665
В местных вакансиях написано, что чуть ли не телефонию надо уметь прокладывать, чинить оргтехнику и знать TCP-протоколы. Я один раз звонил, спросили: как вы будете работать сисадмином, если у вас опыта нет?
Аноним 2016/01/23 12:08:54  №632676 209
>>632675
Так надо было сказать что опыт есть. А потом уже по ходу дела научился бы телефонию прокладывать и чиить оргтехнику.
Аноним 2016/01/23 12:16:25  №632679 210
>>632673
поддвачну
гейшлюха
Аноним 2016/01/23 12:20:00  №632681 211
>>632610
>= $this->form_validator->process_field($post_data["id_field"]);
А что это вообще обозначает? Это ты так пост запрос принял что ли? конструкция прост слишком длинная, выглядит некрасиво. Для валидации лучше передавать данные массивом или через экземпляр класса.
Аноним 2016/01/23 12:26:47  №632688 212
>>632605
У меня вот такой класс для PDO.

class Db {
private static $instance = null;
public static function get()
{
if(self::$instance == null)
{
try
{
self::$instance = new PDO('mysql:host=localhost;dbname=guestbook;charset=utf8', 'root', '');
self::$instance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e)
{
echo $e->getMessage();
}
}
return self::$instance;
}
}


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

AppConfig::db_type . ":dbname=" . AppConfig::db_name . ";host=" . AppConfig::db_host;
13 задача Аноним 2016/01/23 13:20:29  №632704 213
Аноним 2016/01/23 13:36:10  №632709 214
>>632688
>Лучше вынести имя, пароль и название дб в конфиг константы
Нет. ОП выше писал что константами хранить не стоит. Конфиг должен быть в .ini, .txt или в крайнем случае в php формате ($config['x'] = y), чтобы любой не программист смог легко отредактировать данные.
Аноним 2016/01/23 14:48:12  №632732 215
>>632580
> какой смысл делать библиотеку работы с картинками заменяемой
Чтобы иметь возможность заменить одну библиотеку для работы с графикой на другую.
Может она устареет через 3-4 года? Может мне ночальники без аргументации прикажут "WideImage говно, юзай Imagine" (хотя такая ситуация ближе сосачу а не IRL).
В приложении мне понадобится поменять одну строчку кода (заменить new WideImageAdapter на другой), плюс дописать эту обертку-адаптер, если она еще не включена в основной пакет, а она скорее всего будет включена.

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

>У тебя нет ощущения что логичнее было бы так:
>$image->getWidth();
>вместо
>$adapter->getWidth($image)
Нет такого ощущения. Я не знаком с другими графическими библиотеками, но там этот метод может называться по-другому, или принадлежать другому объекту, не $image.
В конце концов в качестве $image можно использовать вовсе не объект, а ресурс. Тогда getWidth адаптера будет вызывать уже не метод объекта, а функцию типа imagesx.

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

>зачем это нужно
Чтобы попрактиковать ооп.

Посмотри еще верстку
https://jsfiddle.net/tLwp60qh/3/
похоже на 8 задание. Во всяком случае я использовал тот же трюк с большим левым полем-паддингом и отрицательным марджином для превью.
Семантичны ли теги типа strong/small, или использовать css для этих целей? Уместно ли абсолютное позиционирование, или это дурной тон (мало ли)?
Аноним 2016/01/23 15:18:21  №632746 216
>>632582
>Решение покажешь?
Обязательно!
Но у меня пока три разных решения: для первых 999 с возвратом "рублей", для тысяч с возвратом "тысяч" и для миллионов с возвратом "миллионов".
Сейчас вот думаю, как всё соединить. Но это уже не так всё сложно, хотя код разросся катастрофически. Чую - ругать и поносить последними словами меня будешь...
Вообще изначально неправильно начал делать через преобразование числа в строку и подсчёт количества символов в ней.
Куча повторяющегося кода, который, правда, убрал в функции, куча условий - можно запутаться. Ты, братишка-ОП, такое не одобряешь. Но я часто сначала делаю говнокодом, а потом преобразую в более-менее человеческое.
На первом же часу работы над задачей понял, что решать её надо делением чисел на 10, 100, 1000 - и так до 100 миллионов с последующим округлением, однако продолжил именно с преобразованием в строку.
Потом попробую и так.
Я никуда не тороплюсь, мне это нравится.
Я вообще забалдел от самого твоего учебника, не хочу ничего пропускать.
Аноним 2016/01/23 15:19:58  №632748 217
>>632644
Бамп вопросу, есть ли общее какое-нибудь решение?
Аноним 2016/01/23 15:36:59  №632764 218
Аноним 2016/01/23 18:26:08  №632896 219
>>632644

1) Ксс в бутстрапе генерируется по моему из ЛЕСС файла. Измени исходники и скомпилируй свою версию бутстрапа, с нужными тебе параметрами сетки.

2) поиграй с параметрами теги meta viewport, может там модно задать минимальную ширину вьюпорта. Но то что ты делаешь это глупость так как при адаптивной верстке сайт должен работать на любой ширине страницы, а ты фактически для пользователей смартфонов и вертикальных планшетов делаешь сайт не адаптивным.
Аноним 2016/01/23 18:36:03  №632906 220
>>632672

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

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

Что касается валидатора, это анон перепутал, он функцию экранирования спецсимволов в хтмл (htmlspecialchars) вызывает не в шаблоне, а в контроллере. Еще и назвал неудачно, "process_field" вместо escapeHtmlCharacters, и объединил с полезными функциями trim/strval (которые как раз вызываются из контроллера). Не беда, многие начинающие делают такую ошибку, и что хуже, в некоторых курсах советуют так делать. Вот паста с описанием уязвимости XSS и как с ней бороться:

https://github.com/codedokode/pasta/blob/master/security/xss.md

Ну и урок про работу с формами тоже может пригодится: https://github.com/codedokode/pasta/blob/master/forms.md
Аноним 2016/01/23 18:37:18  №632909 221
>>632688

А объясни, в чем смысл твоего класса? Я вижу, что он использует ПДО, а какие возможности он к нему добавляет? Зачем нужен этот твой класс? Нельзя ли объект ПДО напрямую использовать без него?
Аноним 2016/01/23 19:29:44  №632953 222
>>632732

> Может она устареет через 3-4 года
Ну поменяешь код в своем классе. Может устареет, а может и нет. Да и даже если она устареет, она ведь по-прежнему будет уменьшать картинки.

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

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

Главные проблемы такие:

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

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

Ну и погуглить, может же что-то такое есть.

> В конце концов в качестве $image можно использовать вовсе не объект, а ресурс. Тогда getWidth адаптера будет вызывать уже не метод объекта, а функцию типа imagesx.
Это потому что у тебя в базовом классе не указан тип, возвращемый функцией load. Укажи его, и ресурс уже вернуть будет нельзя. Конечно, до PHP7 указывать тип возврата нельзя, но семерка уже выпущена, да и в "правильном" ООП этот тип должен быть определен, пусть даже через phpDoc.

ИЗображение тут явно выглядит как объект. Я считаю, ради ресурсов отказываться от ООП подхода неправильно. Проще ресурс обернуть в класс и тогда на нем тоже можно будет делать $image->getWidth(). А передавать $image в каждый метод как раз напоминает больше процедурный, а не ООП подход.

> Я слышал, что у симфони например вообще любой компонент можно использовать вне фреймворка, как отдельный пакет.
Да. Потому что там не прописано никаких фреймворкоспецифичных настроек, и код сделан универсально. И тоже куча адаптеров, кстати.

Аноним 2016/01/23 19:56:56  №632982 223
>>632732

> <div><strong>Moscow</strong></div>
Такие ошибки:

- зачем-то использовано 2 тега вместо одного (это допустимо если без этого не сверстать, но у тебя по моему простая верстка). Не добавляй лишние элементы.
- в хтмл разметке мы размечаем текст страницы семантически (по смыслу), не думая о его внешнем виде. Внешний вид задается только в CSS. Это семантично:

<div class="offer offer__special">
<img class="offer-image" src alt>
<div class="offer-city">Москва</div>
<div class="offer-price">100 Тугр.</div>
</div>

Смотри как логично: есть блок предложения (причем не обычного, а special), в нем есть картинка, город и цена. Прекрасная разметка!

Это семантично:

<ul class="main-menu">
<li><a href>Первый урок</a></li>
...
</ul>

Это в общем тоже:

Переменная <var>$x</var> равна 10, потому код <code>echo $x;</code> выведет <samp>10</samp>.

Это несемантично:

<div class="blue-text">Москва</div>
Переменная <span class="monospace-font">$x</span>

Так как тут в разметку закладывается внешний вид (но такое все равно бывает на практике, например классы вроде margin-top-10 или width-100, но лучше этого избегать).

Это неправильное использование тега:

Переменная <pre>$x</pre>

Советую найти и прочесть список HTML5 тегов (что они обозначают). Учить наизусть не надо. Также советую прочитать про систему именования классов БЭМ от Яндекса.

Для разметки даты и времени есть тег time.

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

div без класса это очень плохо так как непонятно, что он значит? div и span это универсальные блочный и строчный теги и без атрибутов они ничего не значат.

Теперь по CSS

> .price {
> position: absolute;
Такие вещи удобнее делать флоатом, так как он расталкивает текст. Если ты делаешь абсолютом, то протестируй случаи когда длинная цена, длинный заголовок и длинное название города.

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

Пока решение требует доработки. Пока все плохо.

А, и еще, бросается в глаза:

> 123$
или $123 или 123 долл.

Аноним 2016/01/23 20:22:51  №632994 224
Пишу парсер, который может работать с большим количеством сайтов. Правила парсинга разных сайтов, подключаются из других файлов в середине скрипта, для каждого сайта свой файл с правилами парсинга, однако, все они возвращают массив, со спарсенными данными и у всех них, структура этого массива одинакова, сам массив заносится в базу данных. Возникла проблема с кодировками, на всех сайтах они разные, если использовать iconv то всё нормально, данные перекодируются в utf-8 и нормально вносятся в базу данных, но, на всех сайтах разные кодировки, поэтому прописывать такое надо для каждого сайта, а перед этим уточнить какая у него кодировка. как автоматизировать этот процесс и не писать каждый раз одно и тоже?
Аноним 2016/01/23 21:49:03  №633021 225
Всё пропало, шеф...
Всё, что нажито непосильным трудом...
Три скрипта отечественных: один считает три цифры и подставляет "миллионы", второй считает три цифры и подставляет "тысячи", третий считает три цифры и подставляет "рубли".
Столкнулся с тем, что если поставить $number = 012, то число переводится в какую-то другую систему (это вот считает как 10), от этого всё рушится.
В порыве отчаяния закрыл вкладку с Идеоне, где скрипт был для подсчёта миллионов, а остальные сохранились.
Вот для подсчёта с подстановкой "рублей": http://ideone.com/UJLA5U
Вот для подсчёта с подстановкой "тысяч": http://ideone.com/Fx2fbW
Там можно многое вынести в функции, можно расчёт сократить в строчку (я просто делал для наглядности многое) - теперь уже не имеет смысла.
Всё удаляю и забываю.
Начинаю решать эту задачу через деление чисел на 10, 100, 1000 и так далее до 100 миллионов. Всё должно быть в цикле, ориентация на целые числа, в соответствии с чем будут включаться разные условия для вывода числа прописью. Примерный алгоритм мысленно представляю.
Такой вот я тормоз, однако, здравствуйте.
Аноним 2016/01/23 21:51:06  №633023 226
>>633021
И да: увидевшие скрипт буду или смеяться, или плакать. Первые - опытные, вторые - только ещё начинающие разбираться в РНР.
Ну вы поняли.
Аноним 2016/01/23 22:09:55  №633035 227
>>633021
Еще одна из ошибок - даю переменным имена как функциям: $findLastNumber и т.п.
ОП об этом сказал, когда я уже начал решать эту задачу, думал потом всё исправить, но такие вот дела.
Это я учту тоже.
Аноним 2016/01/23 23:54:41  №633110 228
Аноним 2016/01/24 00:20:21  №633130 229
>>632994
Во первых, можно в парвила паосинга добавить два параметра. Типа из какой кодировки в какую.
Во вторых, можно прямо из штмл считывать meta encoding тэг.
someApprentice 2016/01/24 00:51:15  №633141 230
ОПчик, прокомментируй это пожалуйста >>630433>>630650. Я в замешательстве.
Аноним 2016/01/24 02:28:16  №633167 231
Аноним 2016/01/24 03:14:29  №633185 232
>>632909
Класс создает объект пдо один раз, чтобы использовать пдо без этого класса, пришлось бы создавать подключение каждый раз в новом контроллере, как тот быдлошкольник выше.
Аноним 2016/01/24 03:58:45  №633204 233
>>633185

Не вижу связи. Ты читал этот урок? https://gist.github.com/codedokode/e1d31a31b37d5f635057

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

И не надо тут всех обзывать школьниками если сам плохо разбираешься.
Аноним 2016/01/24 03:59:32  №633205 234
>>633185

Также, неприавльно обрабатываются исключения, catch а тем более эхо там не нужны.
Решения за 19-20 января из старого треда Аноним 2016/01/24 04:23:19  №633207 235
>>629523

Тебе я написал советы и замечания выше

>>629589

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

- через ФТП, 1С будет выклаыдвать новые данные, например новые товары, на ФТП сервер и оттуда же забирать обновления с сайта, например заказы.
- через HTTP, 1с будет отправлять запросы с данными на какой-то URL

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

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

>>629605

Написал маленькую букву вместо большой в имени переменной.

>>629631

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

>>629732

Неправильно считает если взять сумму кредита = 1000: http://ideone.com/B81a83

Должно быть всего выплачено 2030 (1000 + процент + комиссия)

Также, выражение повторяется 3 раза, избавься от повторов: $creditBalance x $percent + $servicePayment

>>629735

Босюь что никто не станет решать твою задачу, решай сам.
Аноним 2016/01/24 04:25:15  №633208 236
Аноним 2016/01/24 04:33:21  №633210 237
Решил "Айпад в кредит" .
И мне кажется, что у меня там плохое решение.
http://ideone.com/PfjBQC
Аноним 2016/01/24 05:42:49  №633217 238
>>633185
Внедрение зависимостей гугли и не надо будет ничего создавать
Аноним 2016/01/24 09:13:11  №633236 239
Аноним 2016/01/24 09:59:59  №633240 240
>>633210
Всё отлично.
Через while так-то удобнее её решить. Но ОП предлагает через for - попробуй ещё и через for для верности.
Аноним 2016/01/24 10:03:11  №633241 241
Аноним 2016/01/24 10:06:32  №633242 242
>>633205
>Также, неприавльно обрабатываются исключения, catch а тем более эхо там не нужны.
Почему? Ведь если это исключение не ловить, пользователю просто покажет белую страницу.
Аноним 2016/01/24 11:48:13  №633266 243
Хм, отличная всё-таки находка у ОПа: сделать информацию на сайте в виде изображений.
Я про это говорил уже пару тредов назад, что это не очень хорошо в плане SEO, потом ещё хотел сказать, что это не очень удобно и в плане обучения - приходится всё просматривать, весь материал страницы, чтобы найти что-то интересующее, удобнее было бы ввести это в "Поиск" и получить результат.
А теперь для меня очевидно, что это практически идеально: ты каждый раз просматриваешь информацию, в голове откладывается, что верно сделано, а что неверно. Ну или я просто привык изучать всё по книгам, там практически то же самое, тот же эффект.
Я вот уже давно не смотрел на регулярки - отвлёкся на другие сложные задачи, а сейчас решил проверку номера телефона ещё раз написать с нуля и с подстановкой номеров из массивов в пасте ОПа (вот тут её вставлял: >>631698): http://ideone.com/cPUmGT
Сделал без подглядываний (я сто раз смотрел это всё уже, многое успел крепко запомнить).
Также стоит читать ответы ОПа другим братишкам, смотреть на их ошибки и т.п.
Также способствует всему самостоятельный разбор и исправление ошибок в решении задач у братишек - лишний раз всё отпечатывается в голове.
Просто так это пишу всё пока отдыхаю от решения сложной задачи, которую впоследствии надеюсь так же просто и разнообразно решать, как первые задачки
Аноним 2016/01/24 12:12:29  №633278 244
>>633021
Вообще не всё ещё и пропало!
Можно вот как сделать в этой моей ситуации.
Числа с нулём в самом начале у нас просто и не будет - mt_rand(0,999999999) нам такое число не выдаст. А дальше мы можем просто проверять, нет ли нуля в третьей позиции числа и в шестой - проверять эту строку.
То есть, например, у нас число 50 012.
50 у нас идёт в тот скрипт, где тысячи - выдаёт "50 тысяч".
А далее включается проверка третьего числа с конца. Если оно равно нулю, то берём только последние два числа с конца - это уже есть и оно выдаст "12 рублей".
Так что не всё ещё было потеряно, муахаха!

Но попробую освежить голову и сделать с помощью деления и округления в цикле, посмотрю, как пойдёт.
Аноним 2016/01/24 12:31:49  №633286 245
14536279095090.jpg (75, 577x600)
600x577
>>629822 (OP)
Взываю к среднелевельным анонам. Выполнил задачу Grammar Nazi v2. Всё получилось, но каждую замену мне пришлось гарантировать индивидуальным условием, выглядит как-то не очень грамотно. Думал прибегнуть к функциям, но не придумал, как, да и не уверен, что так можно в данном случае. Полагаю, есть возможность реализовать это с помощью массивов, немного погуглил, но так и не придумал, как правильно сформулировать запрос. Прокомментируйте, пожалуйста.
http://ideone.com/sLeIRY
Аноним 2016/01/24 12:52:18  №633295 246
>>633286
Можно сделать два массива - $regexp и $replace: в одном все регулярки с ошибками, которые должны быть разделены круглыми скобками и знаками "или", а в другой исправляемые моменты, который будут нумероваться как $1, $2 и так далее - то, что у нас в регулярках, но с добавлением пробела или с исправлением на другое слово.
Посмотри этот момент на странице с регулярными выражениями - как заменяются регулярки с помощью $1 и так далее.
Тогда потом достаточно будет подставить в foreach с разложением массива с регулярками на ключи и значения, ещё один массив с разложением реплейсмента на ключи и значения, а потом с помощью preg_replace подставлять регулярки из массива и заменяемые места из реплейсмента, ахаха, я поехал уже...
Но всё тогда будет вообще в несколько строк и без условий каких-либо.
Понятно ли объяснил?
Аноним 2016/01/24 13:00:26  №633302 247
>>633204
Как ты себе это представляешь?

class Mapper {
__construct($db PDO)
$db = new PDO('mysql:host=localhost;dbname=guestbook;charset=utf8', 'root', '');
}

или быть может при каждом создании маппера задавать новый $db = new PDO('mysql:host=localhost;dbname=guestbook;charset=utf8', 'root', '');?
Хуйню несешь короче.
Аноним 2016/01/24 13:06:41  №633305 248
>>633302
>class Mapper {
>__construct($db PDO)
>$db = new PDO('mysql:host=localhost;dbname=guestbook;charset=utf8', '>root', '');
>}
Вообще-то так и надо делать
Аноним 2016/01/24 13:11:48  №633307 249
>>633305
лол, долбоеб, зачем тогда в конструктор пдо передавать. иди задачки порешай, тут взрослые люди общаются.
Аноним 2016/01/24 13:16:04  №633309 250
>>633307
>зачем тогда в конструктор пдо передавать
Чтоб его использовать как поле класса.
Аноним 2016/01/24 13:46:41  №633324 251
>>633305

нью в конструкторе тогда не нужен.
Аноним 2016/01/24 13:48:05  №633325 252
>>633324
Ну да, предпологается, что в конструктор передается уже готовый объект, а сам конструктор просто присвоит его полю.
Аноним 2016/01/24 14:06:30  №633331 253
Аноним 2016/01/24 14:47:36  №633362 254
Задачи на проверку кидать начиная с рублей и кубика?

А то я в целом не совсем ньюфаг в этом деле, но прохожу.
Аноним 2016/01/24 15:31:18  №633406 255
Аноним 2016/01/24 15:39:00  №633417 256
>>633406
Задачку W4.1 неправильно написал(был невнимателен и не написал когда победит дружба), вот правильный(как я думаю) вариант - http://ideone.com/hGYwZs
Аноним 2016/01/24 15:41:45  №633419 257
тест
Аноним 2016/01/24 16:23:23  №633436 258
>>633331
>mb_substr($text, $length, $halfLength);
Щито сие означает? Посмотри, как там у ОПа или в мануале описано, что там должно стоять вместо $length и $halfLength.
Также надо все буквы сделать строчными, ты упустил этот момент с самого начала.
Алгоритм такой, частично он у тебя соблюдён:
1. Делаем все буквы строчными.
2. Убираем регуляркой все пробелы между словами.
3. Подсчитываем количество символов в получившемся тексте.
4. Подсчитываем середину текста.
5. В цикле проходим по буквам от начала текста и до середины. Здесь получше уясни себе, как работает функция mb_substr. Также вспомни, для чего мы используем $i в циклах с for.
6. Если буква с начала строки и конца строки не совпадают - возвращаем результат "Не палиндром" и обрываем цикл.
7. Если буквы с начала и конца и далее совпадают - продолжаем цикл до того момента, когда будет проверена половина текста. Здесь мы можем выводить каждую букву с конца и начала, чтобы сравнивать их.
8. Если у нас цикл был пройден до конца, то возвращаем echo "Палиндром".
Твой код я поправил. Если совсем будет сложно, то буду подсказывать или просто покажу твой же исправленный код.
Аноним 2016/01/24 16:24:09  №633437 259
Аноним 2016/01/24 16:51:54  №633443 260
>>633362
Начиная с того момента, когда будет непонятно.
Аноним 2016/01/24 17:01:41  №633450 261
>>632953
Ладно, пусть так. Я рассчитывал именно на то, чтобы избавиться от зависимости от библиотеки, плюс может быть использовать код повторно в других проектах.
Но тут пожалуй действительно не тот случай. Библиотеку менять не нужно, и код не такой сложный, чтобы выносить его в отдельный пакет.
Тогда такая реализация: http://ideone.com/wNwIh1

>>632982
Не использовать лишние теги, стараться использовать html5-теги по возможности, или классы с семантичным именем, ок.

> position: absolute;
> Такие вещи удобнее делать флоатом
Да, это не учел, что при очень маленькой ширине экрана (или длинном заголовке) он наезжает на цену.
Только с флотами получается странный порядок "слоев": у меня теперь идет сначала блок с ценой, а за ним заголовок, город и время. Хотя визуально сначала должен идти заголовок, а за ним цена (если смотреть слева направо).
Ну и я слышал, что для сео может быть важным порядок блоков, сначала должен идти основной контент, а затем выносить все меню и сайдбары, даже если они визуально идут выше/слева от главного контента.

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

>что будет если убрать картинку (не наедет ли цена на город?).
Добавил min-height внешнему контейнеру. Вообще мне не хватает опыта, чтобы просчитать наперед все "что будет если". Я вижу дизайн и реализовываю. Думаю дальновидность придет с опытом, когда придется такой код поправлять под изменившиеся требования (убрать картинку, добавить текст описания и т.д.)
https://jsfiddle.net/tLwp60qh/6/
Аноним 2016/01/24 17:10:34  №633455 262
>>633362
Все сбрасывай, оп найдет к чему придраться даже в коде из одной строчки.
>не совсем ньюфаг
Какие фреймворки знаешь? Сколько проектов написал? В каких конторах работал?

>>633443
Нет, так рождается быдлокод. Php за это и не любят, что на нем можно написать неподдерживаемый код, который тем не менее будет работать.
Если работает и вроде все понятно, это не значит, что решено правильно.
Аноним 2016/01/24 17:19:50  №633459 263
Блин, мне нужно искать какую-нибудь нормальную работу, но я просто не понимаю, как можно работать в мужском коллективе и НЕ ТРАХАТЬСЯ С НИМИ ВСЕМИ. Я просто шлюхой долго проработала, я не могу вообще общаться с мужиками, если они мне не дают деньги, а потом не трахают во все дырочки. Нет, серьезно, я когда звоню по вакансиям и там мужской голос берет - я просто кидаю трубку и не могу с собой ничего поделать. Как избавиться от этой проф. деформации и начать жить?
Шлюхой ща работать не могу.
Аноним 2016/01/24 17:20:23  №633460 264
Вопрос по задачке с кредитом на айфон:
получается строка "С меня хватит" будет просто не нужна после исправления ошибки? Ведь идеальным решением задачки есть полный вычет денег без переплаты. А то условие не до конца понял.
Аноним 2016/01/24 17:25:25  №633464 265
>>633460
И еще вопрос вдогонку - не понял, нужно ли насчитывать проценты когда долг меньше 5000.
Аноним 2016/01/24 17:25:42  №633465 266
>>633460
Нет, она может остаться и выйти тогда, когда выплачен весь кредит.
Полная выплата кредита с процентами и комиссиями - и далее "С меня хватит!".
Аноним 2016/01/24 17:26:09  №633467 267
>>633464
Конечно. Кредит не выплачен до конца, а новый месяц уже пошёл.
Аноним 2016/01/24 17:29:37  №633471 268
>>633467
А какой тогда вообще смысл?
Вот я что-то запутался с условием задачки.
Под спойлер заглядывал.

Какой смысл проверять больше ли 5000, если потом эта же цифра всё-равно увеличится и чисто теоретически может быть больше чем 5к?
Или проверять надо не просто долг а долг с процентом на следующий месяц?
Аноним 2016/01/24 17:30:22  №633473 269
>>633471
>больше ли 5000
точнее меньше ли.
Аноним 2016/01/24 17:36:54  №633483 270
>>633471
Такое уж сферическое условие в вакууме, сумма возможных выплат Анончика меньше и больше не может становиться.
>Или проверять надо не просто долг а долг с процентом на следующий месяц?
А как по-другому? Конечно!
Аноним 2016/01/24 17:37:47  №633486 271
>>633483
Ещё и оплату комиссии за пользование кредитом не забудь!
Аноним 2016/01/24 17:40:20  №633489 272
>>633483
Чёт я вообще запутался с этим условием, не знаю почему, но очень туго само условие до меня доходит, хотя с циклами давно знаком. Пойду проветрюсь, отвлекусь и чуть позже вернусь к задачке.
ЗАМЕНА Аноним 2016/01/24 18:44:24  №633524 273
14536502643120.jpg (100, 312x718)
718x312
Помогите глупому анону, пожулуйста. Как можно записать это более коротко?
Аноним 2016/01/24 18:45:34  №633525 274
>>633524
Про массивы и циклы слышал что-нибудь?
Аноним 2016/01/24 18:48:19  №633526 275
>>633524
Создаешь массив, заполняешь его твоими регулярками, прогоняешь цикл n раз.
Аноним 2016/01/24 18:48:29  №633527 276
14536505099600.jpg (56, 225x220)
220x225
Аноним 2016/01/24 18:58:10  №633531 277
Аноним 2016/01/24 19:15:45  №633548 278
14536521454210.webm (212, 640x360)
360x640
>>633436
>mb_substr($text, $length, $halfLength);
из $text, длиной 19 (от последней буквы), до середины, но я понял, что так оно не работает и я понятия не имею, как запустить его с другой стороны.

1. Строчные буквы mb_strtolower($text);
2. Убрать пробелы $text = str_replace(' ', '', $text);
3. Кол-во символов $length = mb_strlen($text);
4. Середина $halfLength = floor($length/ 2);
5. Вот тут я и не знаю, а 6,7,8 нужны только после выполнения 5.

Короче, давай подсказку.
Аноним 2016/01/24 19:39:38  №633561 279
>>633548
>mb_substr($text, $length, $halfLength);
>из $text, длиной 19 (от последней буквы), до середины, но я понял, что так оно не работает и я понятия не имею, как запустить его с другой стороны.
У нас есть цикл с for и в нём переменная $i - она меняется каждый раз при прохождении цикла.
Если поставить вот так, то переменная каждый раз будет способствовать передвижению по тексту на один символ:
>mb_substr($text, $i, 1)
Чтобы то же самое получить, но с конца текста, надо эту переменную поставить в отрицательном значении: >mb_substr($text, -$i, 1)
Каждый раз делай var_dump($variable), чтобы понять, что там происходит. variable - это конкретное название твоей переменной или массива
>1. Строчные буквы mb_strtolower($text);
Нет, сработает не само по себе, а если ты поставишь вот так, например:
$text = mb_strtolower($text);
2, 3, 4 у тебя правильно сделаны.
5 у тебя получится, если сделаешь с переменной $i в mb_substr().
Давай, пробуй, всё получится.
Аноним 2016/01/24 20:15:07  №633581 280
>твоей переменной или массива
Твоей переменной, в которой строка, число или массив, ну ты понял.
Аноним 2016/01/24 20:17:42  №633583 281
>>633561
Спасибо за разжевывание.
Ночью сделаю.
Аноним 2016/01/24 21:10:43  №633610 282
>>633583
Var_dump просто на каждом шагу делай, смотри, что там получается. Всегда помогает это.
Аноним 2016/01/24 22:25:57  №633628 283
>>633610
Открой для себя дебаггер.
Аноним 2016/01/24 22:33:46  №633631 284
Аноним 2016/01/24 22:58:12  №633637 285
>>633628
>дебаггер.
Тот, что в PHPStorm?
Аноним 2016/01/24 23:14:57  №633642 286
Тогда вопрос ко всем знающим: какими инструментами лучше всего пользоваться для отладки?
https://habrahabr.ru/post/210202/ прочитал, но так и не понял, куда копать.
Аноним 2016/01/24 23:24:28  №633646 287
>>633642
xdebug + phpstorm, для javascript дебагер в firefox
Больше ничего не надо, хватает даже для крупных проектов.
Аноним 2016/01/24 23:29:45  №633648 288
>>633628
где почитать что такое дебал и вообще зачем он?
Аноним 2016/01/24 23:32:36  №633650 289
Аноним 2016/01/24 23:59:07  №633666 290
Нужен ли будет такой скрипт кому-нибудь вообще, полезен ли он будет?

Есть поле формы, в которое можно вести адрес какой-нибудь текстовой информации (пост блога, статья на сайте и т.д.) скрипт спарсевает всю нужную информацию (Заголовок, Текст, Дата и т.д.), заносит её в базу данных и формирует из этого RSS XML. Спарсивать можно не с любого сайта конечно, а только для тех, для каких я напишу парсер, но таких сайтов может быть много.
Аноним 2016/01/25 03:55:35  №633741 291
Аноним 2016/01/25 09:47:20  №633854 292
А для Sublime Text есть какие-нибудь плагины-дебаггеры?
Аноним 2016/01/25 09:49:14  №633856 293
Аноним 2016/01/25 09:49:27  №633857 294
Интереесно не лучше ли вместо isset(var) проверять переменные всегда !empty(var) там мы сращу проверяем существует ли переменная и не пуста ли она
Аноним 2016/01/25 09:55:37  №633861 295
>>633741
>$new = (-19);
>$symbolRev = mb_substr($text, $new, 1);
Братишка, ну почитай ты, что у ОПа написано про mb_substr, как с конца текста надо получить символ!
Ты же так и разобрался в этом простом моменте!
Почему у тебя $new там сразу -19, она должна точно так же идти в цикле - а буквы будут браться с начала и конца текста и сравниваться друг с другом.
Вот как будет всё выглядеть, если цикл вытянуть и показать его работу ($i заменил на те цифры, которые как раз будут там при изменении этой переменной во время работы цикла):

Первое прохождение цикла.
$symbol = mb_substr($text, 0, 1);
$symbolRev = mb_substr($text, -1, 1);
- берутся "а" с начала текста (текст уже приведён к нижнему регистру) и "а" с конца - первые символы с обеих сторон текста, далее у тебя условия с if и else, в которых эти символы сравниваются.

Второе прохождение цикла.
$symbol = mb_substr($text, 1, 1);
$symbolRev = mb_substr($text, -2, 1);
- берутся "р" с начала текста и "р" с конца - вторые символы с начала и с конца текста, снова сравниваются, равны ли друг другу.

Третье прохождение цикла.
$symbol = mb_substr($text, 2, 1);
$symbolRev = mb_substr($text, -3, 1);
- берутся "о" с начала текста и "о" с конца - третьи символы с одной и другой стороны текста, сравниваются в условиях.

...

Девятнадцатое прохождение цикла.
$symbol = mb_substr($text, 19, 1);
$symbolRev = mb_substr($text, -19, 1);
- берутся "а" в середине текста и "а" в середине (там центральная буква в тексте - это "м" в слове "манит", она не попадает в этот цикл, а вот буквы с обеих сторон проверяются, это как раз обе "а"), сравниваются.

И вот если переменная $i к этому моменту становится равной длине половины текста - то есть цикл работал, а не оборвался сразу, - то срабатывает условие, что это палиндром.

Говорю же - делай var_dump каждый раз - смотри на изменения переменных, чтобы осознать работу скрипта.
У тебя сейчас $symbol = mb_substr($text, $i, 1); даёт букву за буквой с начала текста - если бы цикл вообще работал, а $symbolRev = mb_substr($text, -19, 1); (там же $new у тебя без изменений и всегда равна -19) даст только одну букву из середины текста, как раз букву "а". Поэтому у тебя сейчас случайно показывает верно, что текст палиндром: сравнивает начальную "а" и вот эту 19-ю с конца "а".
Подсказка первая - совсем уже понятная должна быть к этому моменту: В $symbolRev = mb_substr($text, $new, 1); точно так же должна стоять переменная $i. Перед переменной можно ставить минус - всё работает. От переменной можно отнимать или к ней можно прибавлять прямо в функции - всё работает.
Подсказка ещё одна: Числа -0 не бывает.
Аноним 2016/01/25 09:56:34  №633862 296
>>633861
*так и не разобрался в этом простом моменте
Аноним 2016/01/25 10:04:51  №633868 297
>>633861
Я напутал - там не 19 циклов, а восемь будет всего...
19 - это вообще количество букв в этом палиндроме про Аргентину.
Аноним 2016/01/25 11:33:13  №633926 298
Стоит ли использовать БЭМ? Вроде прикольная штука, но теряется смысл каскадности.
Аноним 2016/01/25 11:58:52  №633946 299
>>633524

Тут проще заменять через массив и strtr, помнишь задачу про шифровку?

>>633926

Принцип именования классов - стоит, код будет лучше. Никто и не говорит что ты обязан использовать принцип каскадности.
Аноним 2016/01/25 12:46:25  №633968 300
Числа прописью - мрак, мрак, кладбище, гуманитарий...
Аноним 2016/01/25 14:41:24  №634026 301
Анон, подскажи как в Yii2 можно остановить выполнение текущего вида.
Т.е. например приходят неполные данные и мне нет смысла отображать всю верстку данного вида, а отобразить кусочек из него и все.
Можно ли использовать return; ?
Или есть что то от фреймоврка
по типу current_view->хватитВыполнятьДавайУжеГлавныйЛэйаутПоказывай();
Аноним 2016/01/25 14:51:02  №634030 302
Есть на странице например 10 ссылок с атрибутом ahref="#", у всех них один и тот-же класс, при нажатии на ссылку надо добавлять ссылке ещё один класс, именно добавлять, делаю это вот так:

$("a").click(function() {
$(this).addClass('active');
});

Класс добавляется, но проблема в том, что он добавляется у всех ссылок, если нажимать по нескольким из них, как сделать так, чтобы класс active был только у одной ссылки, при этом при нажатии на другую ссылку класс ей добавлялся, а у той у которой он был раньше удалялся.
Аноним 2016/01/25 14:55:15  №634033 303
>>634030
Запоминать предыдущую и ставить ей тоггл на класс актив, при добавлении этого класса к следующей ссылкею
Аноним 2016/01/25 14:57:07  №634034 304
>>634030
$("a").click(function() {
$("a").removeClass('active');
$(this).addClass('active');
});
Аноним 2016/01/25 14:57:55  №634037 305
>>634034
так может чуть побыстрее будет -
$("a.active").removeClass('active');
Аноним 2016/01/25 14:58:32  №634039 306
>>634030
$("a").click(function() {
$("a").not(this).removeClass('active');
$(this).addClass('active');
});
Аноним 2016/01/25 15:11:36  №634045 307
Посоны, помогите.
Такая ситуация: есть много .xsls шаблонов, мне нужно выгрузить в них товары.
Не хочу чтобы этим меня заебывали в дальнейшем, поэтому пытаюсь написать такую вещь:
-Выбираешь файл, он загружается.
Из строк в нем только заголовки.
Эти заголовки выводяться на страничке.
Внизу под заголовками селекты со списком полей(там вся инфа о товарах).
Затем можно выбрать соответствующие поля и захуярить файл в который всё это запишется.
воот.
С помощью phpExcell я сделал, чтобы шаблон считывался и отображался в браузере.
Но phpExcell так же убирать все хтмл теги, поэтому в ячейки селекты я записать не могу, а как отключить экранирование я не нашел.
Думаю, что буду писать в ячейки какой-то определенный текст, потом с помощью jquery его парсить, получать номер столбца и заменять на селекты.
Может кто посоветует что получше?

Да, ещё хотел спросить. Можно ли часть страницы отобразить в одной кодировке а вторую часть в другой?
Аноним 2016/01/25 16:24:44  №634070 308
Алгоритм перевода чисел в пропись.
Гладко выходит на бумаге, но натыкаюсь на РНР-овраги, пока не получается реализовать.
Не хотел бы отнимать время у ОПа и братишек на проверку этого алгоритма, но был бы рад замечаниям.
Ну и просто чтобы не потерять.

1. Имеем число, например, 123123.
2. Проверяем, на соответствие числам в массиве $spelling - нельзя ли его сразу вывести прописью. Если можно – выводим его. Если нельзя – идём далее.
3. Проходим по числу циклом с делением на 100000000, 10000000, 1000000, 100000, 10000, 1000, 100 и 10 и округляем результат.
4. Когда результат деления становится равным целому числу (от 1 до 9) – уточняем, на какое число делили, чтобы получился такой результат.
5. Далее всё идёт для уточнённого числа, у нас это 100000. Если основное число было разделено на сто тысяч до целого, то умножаем результат на 100, чтобы получить соответствие с числами в массиве $spelling.
6. Если у нас получившаяся сумма соответствует числу в $spelling (у нас это будет 100), то выводим (она будет соответствовать в любом случае, всё это есть в массиве).
7. Далее проверяем, есть ли другие цифры после 1 в реально имеющемся у нас числе. Для этого 123123 делим на 1000, округляем до целого числа, а затем отнимаем 100. В нашем случае – с 123 тысячами 123-мя - получится 23.
8. Проверяем результат на соответствие массиву $spelling. Если соответствие есть ("11", "12" и так далее) – выводим. Если соответствия нет – раскладываем дальше.
9. Раскладываем 23: делим его на 10, округляем до целого и умножаем на 10 – получается двадцать.
10. Проверяем результат на соответствие массиву $spelling. Соответствие обязательно есть.
11. Далее находим последнее число в 123: от 123 отнимаем сумму первого числа и второго числа (100 + 20). Проверяем результат на соответствие массиву $spelling. Соответствие обязательно есть.
12. Далее проверяем, не является ли последнее число "1" или "2": проводим число по массиву $femaleSpelling. Если соответствует - выводим результат "одна" либо "две". Если не соответствует – выводим предыдущий общий результат.
13. Собираем первое число, второе число и третье число: "сто", "двадцать" и "три". При этом у нас изначально всё связано с тысячами, поэтому выводим строку «сто двадцать три» и проверяем последнее полученное число на соответствие массиву с формами слова «тысяча». Соответствующую форму "тысяч" выводим.
14. Далее находим три оставшихся числа от 123123. У нас имеются три первых числа – 123, также мы знаем, что общее число – 123nnn. Поэтому умножаем 123 на 1000, а затем от начального числа $number отнимаем получившиеся 123000. Получается 123.
15. Раскладываем 123 по такому же алгоритму, как и 123000, только в самом конце не активируем шаг с $femaleSpelling. Последнее готовое число проверяется на соответствие в массиве для вывода правильной формы слова «рубли».
Алгоритм для вывода миллионов соответствующий, полностью повторяет алгоритм для вывода последних 123, только "рубли" меняются на "миллионы".
Большинство действий укладываются в функции, целые куски кода могут быть спрятаны в функции. Поиск от тысячи до 999 тысяч, поиск от 1 до 999, поиск от миллиона до 999 миллионов убираются в функции и подставляются в те условия, когда целое число получилось у нас при делении на соответствующие тысячи, десятки тысяч и так далее.
Когда у нас число, например, 20, или 20000, или 20000000, то выявление чисел идёт по этой же схеме – по сокращённой на поиск первого числа из тройки. Для этого вводим сокращённые функции и подставляем их в соответствующие места.

Вроде бы всё логично.
Буду биться и сражаться с ветряными РНР-мельницами далее.
Me Gusta.
Аноним 2016/01/25 16:43:03  №634078 309
В пункт 14 добавить: если полученное число оказывается нулём - уходим и ничего не выводим, кроме формы слова "рубли".
Аноним 2016/01/25 16:49:30  №634083 310
>>632548
Для чего там цикл? Всё работает и без условия, что $i == 2.
Аноним 2016/01/25 16:52:07  №634084 311
>>634070

1) математикой разбиваем число на группы по 3 цифры (миллионы, тысячи, рубли)
2) для каждой группы вызываем функцию печати 3-значного числа + функцию склонения слова, получается например "сто пятьдесят миллионов"
3) в этой функции разбиваем число математически на сотни, десятки, единицы.
4) еслит в числе есть сотни, добавляем нужное слово
5) если есть десятки, добавляем их
6) если число заканчивается на 11-19, добавляем слово
7) добавляем слово для единиц

Вот примерно и все, Еще конечно нуль надо обрабьатывать особо.

Собирать слова в фразу удобно через массив, добавляя слова в массив и потом склеивая его.
Аноним 2016/01/25 16:57:17  №634087 312
>>634070
Ты писателем работаешь? Уже пол задачи бы написал, пока простыню строчил.
Аноним 2016/01/25 17:41:37  №634123 313
>>634084
Спасибо, интересно выглядит.
Я просто не знаком абсолютно с математическими возможностями определения числа, поэтому начал делать через определение числа, на которое делится с целым числом после округления.
Буду искать, как это можно реализовать. Явно как-то проще, чем я расписал.
В массив можно, действительно, спасибо. Через array_push, наверное.

>>634087
Главным редактором в издательстве.
Люблю основательность.
И просто я уже реализовал части этой задачи через перевод числа в строку, вот тут: >>633021.
Хочу сделать более правильно и до конца.
Там так-то тоже можно было бы извратиться и соединить эти части: искать символ "ноль" в строке перед переходом к разложению тройки или складывать три последних числа, чтобы было понятно, нужно ли вообще запускать разложение очередной тройки (если там ноль получается, то не нужно).
Но это совсем уж.

Аноним 2016/01/25 17:43:43  №634127 314
Парни, решил вкатиться в пхп, где стянуть пхпсторм? чтоб не триал и последняя версия
Аноним 2016/01/25 17:45:22  №634130 315
>>634123
>Главным редактором в издательстве.
ахаха лущер блять, иди простыни строчи, редактор блять.
Аноним 2016/01/25 17:49:58  №634134 316
>>634127
Саму иде берешь на сайте у джетбрейнс, потом идешь сюда http://www.rover12421.com/ и качаешь его кейген (это не вишня, исходники лежали на гитхабе, но их заблочили).
Аноним 2016/01/25 18:06:37  №634150 317
Аноним 2016/01/25 18:09:01  №634152 318
>>634150
Если китайский обменник по каким-то причинам не даст тебе скачать файл, можешь попробовать взять иде с кряком отсюда (нужна регистрация).
http://nnm-club.me/forum/viewtopic.php?t=974883
Аноним 2016/01/25 18:13:24  №634156 319
Аноним 2016/01/25 18:16:12  №634158 320
>>634156
Да вроде бы, я активировал этим кейгеном месяцев 6 назад, еще работает со всеми обновлениями.
Аноним 2016/01/25 18:49:28  №634186 321
>>634158
Бля, эт говно какое-то, полностью на китайском.
заебался уже систему чистить, хуй знает куда оно полезло
Аноним 2016/01/25 18:50:23  №634188 322
>>634186
Значит ты не то скачал, смотри тут >>634152
Аноним 2016/01/25 19:17:34  №634217 323
Может кто-то работал с Silex, поясните зачем вот тут в примере http://silex.sensiolabs.org/doc/organizing_controllers.html в самом низу в 5-й строке (return $blog;) нужно возвращать этот контроллер? Если все-равно выполнится "return 'Blog home page'" и по идее дальше уже код не будет выполняться. Но если не прописать return $blog; то вылезает ошибка.
Аноним 2016/01/25 19:32:39  №634233 324
>>634188
Я скачал сам китайский облачный обменник, как я понял. Вычищать его - отдельный ад)
Аноним 2016/01/25 19:42:08  №634238 325
Совершенно не понимаю что надо делать в задачке с кредитом на айфон, как быть?
Аноним 2016/01/25 19:44:27  №634241 326
>>634238
Подумать головой. Там и делать-то нечего.
Аноним 2016/01/25 19:46:38  №634242 327
>>634188
Короче, с переводчиком понял, что сайт будет выпрашивать скачать эту Байду.
лучше крякнутую с ннм стяну с регой)
Аноним 2016/01/25 19:48:14  №634243 328
14537404945720.jpg (89, 932x554)
554x932
Проблема с базами. Устанавливал MySql, сделал все как в этом гайде: http://www.softtime.ru/article/index.php?id_article=98. В браузере ошибка Fatal error: Call to undefined function mysqli_connect() in C:\Users\User\PhpstormProjects\kurs2\demo\test.php on line 9, хотя в консоли пхпшторма все работает. В чем проблема?

Алсо подскажите как импортировать данные из одной базы в другую (первая называется web, вторая web2). Пробовал CREATE DATABASE web; mysql -uroot web < web2.sql, не работает, как указать консоли расположение второй базы?
Аноним 2016/01/25 19:51:42  №634245 329
>>634243
>В браузере ошибка Fatal error: Call to undefined function mysqli_connect()
Апач и Пхпсторм один и тот же интерпретатор используют? Создай в корневой директории апача файл с phpinfo() и посмотри, есть ли там расширение mysqli.
Аноним 2016/01/25 19:52:35  №634248 330
>>634238
А что именно не понятно? Там же всё несложным кажется на первый взгляд.
Аноним 2016/01/25 19:54:53  №634253 331
>>634248
>
Я видимо даже в математику не могу, потому что совсем не понимаю что там надо сделать, чтобы не переплачивать банку. Даже идей нет никаких.
Аноним 2016/01/25 20:05:00  №634265 332
14537415002870.jpg (228, 1280x962)
962x1280
>>634245
Как посмотреть это расширение? Так? Алсо в браузере 404ая, у меня так часто бывает с новыми проектами в phpstorm, помогает, если положить их в отдельную папку проектов.
Аноним 2016/01/25 20:08:27  №634267 333
>>634245
Это странно, но ошибка исчезла сама собой, после создания нового файла, когда я снова открыл проект. Короче я молодой шутливый с ide пока что.
Аноним 2016/01/25 20:10:37  №634269 334
>>634245
Однако, вопрос про расположение второй базы в консоли остается. Это второй вопрос у меня был.
Аноним 2016/01/25 20:10:38  №634270 335
14537418387770.png (79, 1919x703)
703x1919
>>634265
Создай файл в корневой директории твоего апача, без пхпсторма. Я не знаю где она на винде, должно быть что-то вроде C:\Apache\www.

Потом заходишь в браузере по адресу 127.0.0.1 и видишь там всю информацию о пхп, ищешь на странице расширение mysqli, должно быть что-то вроде пикрелейтед.
Аноним 2016/01/25 20:10:41  №634271 336
Аноним 2016/01/25 20:10:50  №634272 337
>>634253
Что значит не переплачивать банку?
Покажи пробы свои на Идеоне.
Там переплата больше 50% будет так-то.
Аноним 2016/01/25 20:11:15  №634273 338
>>634217
Почитай, что такое анонимная функция и callback.
Аноним 2016/01/25 20:21:04  №634284 339
>>632567
Может таки кто-то уже проверит задачу по айфону в кредит?
Аноним 2016/01/25 20:25:19  №634287 340
>>634271
Почему защиту от csrf не сделал? Еще некоторые ссылки неправильно работают, если поместить скрипт в какую-нибудь папку, он будет перенаправлять в корень сервера.
Аноним 2016/01/25 20:27:02  №634289 341
14537428229150.png (25, 1919x633)
633x1919
>>634271
Алсо, если редактировать свою информацию, у меня происходит пикрелейтед.
Аноним 2016/01/25 20:30:55  №634294 342
>>634284
>по айфону в кредит
Надо было покупать Xiaomi. Топовый айфон сосет по железу у китаебогов. Алсо, в айфоне нет божественного MIUI.
Аноним 2016/01/25 20:50:38  №634311 343
Аноним 2016/01/25 20:53:56  №634314 344
>>634284
>>632567

> $start = false; //Для выхода из цикла
Для этого есть команда break

> if($debt <= $pay){
Этот иф можно заменить на функцию min/max, возможно код станет короче, попробуй-ка.

В условии в уайл лучше написать "пока долг больше нуля"

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

> PHP Notice: Undefined variable: total_pay in /home/krtLNc/prog.php on line 18
Эту ошибку обращения к несуществующей в тот момент переменной надо исправить.

Аноним 2016/01/25 20:55:23  №634316 345
ОП, ответь на вот это >>633242
Почему там catch не нужен?
Аноним 2016/01/25 20:55:58  №634317 346
>>634294

А разве в китайских прошивках нет троянов и штуки которая записывает координаты, названия вайфай точек, ИМЕИ, номер телефона и отсылает в байду?
Аноним 2016/01/25 20:58:37  №634320 347
>>634287
>>634289
Спасибо, пилю.

>>634311
Благодарю. Да, со ссылками я что-то тупанул. Про CSRF читаю.
Аноним 2016/01/25 21:01:38  №634323 348
>>634316

Давай начнем с теории. Знаешь ли ты зачем придуманы исключения? Читал ли урок https://gist.github.com/codedokode/65d43ca5ac95c762bc1a

Если нет, прочитай.

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

try {
$app->run();
} catch (..) {
$app->showErrorPage();
}

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

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

Теперь прочти пасту про то что должно происходить при исключении:

------

Как надо обрабатывать исключения:

- записать информацию в лог
- показать пользователю заглушку
- на заглушке выставить HTTP 503 код ответа для роботов
- на компьютере разработчика (при display_errors = 1) показать подробности и стектрейс

Что получается при catch + echo:

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

Как будет если просто не ловить исключение:

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

--------

Теперь посмотри на свой код и попробуй понять, правильно ли в нем сделана работа с исключениями.
Аноним 2016/01/25 21:05:59  №634326 349
>>634271

Прочитай еще этот пункт: https://github.com/codedokode/pasta/blob/master/student-list.md#Выносим-код-за-корень-сервера

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

Аноним 2016/01/25 21:09:19  №634327 350
>>634243

> Пробовал CREATE DATABASE web; mysql -uroot web < web2.sql, не работает, как указать консоли расположение второй базы?

Где ты это набирал? В командной строке системы или в командной строке майэскуэл? Что пишет?

Чтобы перенести одну базу в другую, надо сделать дамп командой mysqldump и залить его в базу командой mysql ... < dump.sql

Можно даже без промежуточного файла:

mysqldump ... | mysql ....

Аноним 2016/01/25 21:10:40  №634330 351
>>634152

Зачем так унижаться? Если нет денег, можно попробовать найти EAP версию пхпсторма, она бесплатна, либо поставить бесплатный netbeans.
Аноним 2016/01/25 21:25:00  №634341 352
Если здесь присутствует пхп-дед-кун из вчерашнего треда "30 лет - ума нет", то скинь, пожалуйста, своё фейкомыло (ты его предлагал, если возникнут вопросы), а то тред сразу смыло после того, как я тебе ответил.
Аноним 2016/01/25 22:00:39  №634365 353
>>634284
>$start = true;
>$start = false;
>PHP_EOL
Каков бэкграунд у тебя? Что-то уже изучал?
Про обилие точек и кавычек пояснили.
Считает правильно, что, кстати, бывает достаточно редко - чтобы сразу считал верно.
Аноним 2016/01/25 22:38:09  №634399 354
>>634341
Парнишка начал изучать РНР в 30+ лет? Как же он дошёл до жизни такой?

31летний новичок, завсегдатай последних нескольких тредов
Аноним 2016/01/25 23:45:28  №634468 355
Не работают строки, хотя в php.ini всё нужное раскомментировано (--enable-mbstring что-то такое), с чем может быть связано ещё?
Аноним 2016/01/26 00:17:48  №634478 356
>>634399
ОП того треда просто поныть пришёл, и явно ничего делать/менять не собирается. Я же просто мимо проходил и наткнулся там на годные советы от пхп-деда.
Аноним 2016/01/26 08:13:14  №634580 357
бляя, устанавливаю уии композером под линуксом, все устанавливается (среда нетбинс) , проект открывается на локалке НО я не могу в нетбинсе пофиксить код вообще, с другими пхп файлам такой хуйни не было, что это?
Аноним 2016/01/26 08:23:17  №634582 358
>>634399
Мне тоже скоро 30, я потратил несколько лет на изучение php, работу так и не нашел естественно по этой профе, сейчас ищу в сфере обслуживания. Грустно, конечно, но жизнь она такая.
Аноним 2016/01/26 08:50:55  №634587 359
Господа, а когда учится то?
Я вот работаю 5.2 ну пишу там стандартные штуки стандартными методами. Процесс изучения нового сильно замедлился. К тому же я в довольно ретророградом коллективе работаю.
После работы не так много свободного времени остаётся понятное дело и отдохнуть хоть чуть хочется.
Как жить то? Превозмогать, в сеньерах на том свете отдохнем?
Аноним 2016/01/26 09:41:59  №634601 360
>>634582
>работу так и не нашел естественно по этой профе
А что естественного, вакансий довольно же много? Зарплаты на среднем уровне по региону даже у джунов. Чому бы не найти?

>>634587
Я после работы всё изучаю. Иногда в перерывах немного посматриваю и пробую.
Всё-таки это личное дело каждого.
У меня знатный САМОПОДДУВ сейчас идёт, поэтому я иногда и до ночи засиживаюсь.
Аноним 2016/01/26 09:53:44  №634607 361
>>634587
Я например с работы приезжаю и учу. Плюс выходные полностью за задрачиванием фреймворков провожу. Если ты работаешь 12 часов в день, задумайся о том чтобы найти работу получше.
Аноним 2016/01/26 10:10:46  №634609 362
>>634601
>>634607

А я видимо просто ленивое хуйло и прокрастенирую после работы, в цивилизацию сижу играю и думаю надо прекращать не прекращаю
Аноним 2016/01/26 10:15:39  №634613 363
14537925396470.png (42, 1069x350)
350x1069
>>634609
Я тоже так делал, потом понял что теряю очень много времени и удалил все игры с компьютера, до лучших времен. Еще очень помогает отслеживание активности, пик статистика за вчерашний день.
Аноним 2016/01/26 10:22:06  №634614 364
>>634613
>отслеживание активности

Это через что? Вручную всё забивается?
Чувствую я буду забывать про такое
Аноним 2016/01/26 10:25:48  №634616 365
>>634614
Нет, ставишь программу и она записывает всю твою активность к ним на сервер. На сайте есть дашборд который показывает сколько времени ты на что тратишь.

Специально для параноиков сделали open source таймтрекер https://habrahabr.ru/post/275447/.
Аноним 2016/01/26 10:46:27  №634620 366
14537943875310.png (183, 540x521)
521x540
>>634616
Спасибо. Будем исправляться.
Аноним 2016/01/26 10:52:47  №634623 367
>>633861
http://ideone.com/kUDIO4
Я не понимаю, как сделать во второй строчке в if $i = -1.
В этой версии она -$++, но она в теле цикла и уже на второй проход становится 0.
Аноним 2016/01/26 10:56:34  №634624 368
>>634130
Кто такой "лущер"?
Аноним 2016/01/26 10:59:31  №634625 369
>>634623
А последнюю подсказку ты смотрел?
Я специально для этого и оставил её!
Числа -0 не бывает, а именно так у тебя получается при первом прохождении цикла.
Подсказка, которая всё должна разрешить:
$i изначально надо определить как "1", а в функциях или отнимать единицу, чтобы получился ноль, или просто поставить минус перед $i, чтобы получилась "-1".
Аноним 2016/01/26 11:01:48  №634626 370
>>634601
>>634587
>>634609
Тоже прокраситериновал и играл то в циву, то просто от усталости сидел на ютубе видео смотрел. Всё надоело, после работы вообще невозможно учить ничего(по крайней мере мне), слишком устаю и скилл постоянно теряю(вот сейчас забыл уже всё почти). Уволился, теперь буду дома 24/7 учить.

Сейчас сел и понял, что почти с начала надо повторять
Аноним 2016/01/26 11:09:15  №634628 371
14537957555950.jpg (197, 3000x1688)
1688x3000
Аноним 2016/01/26 11:09:21  №634629 372
>>634623
Также обрати внимание, как ты проверяешь равенство переменных в одном из if.
Там есть ошибка.
if ($i = $halfLength) - это присваивание, а не проверка на равенство
Аноним 2016/01/26 11:11:15  №634630 373
>>634628
Ну вот и ладненько, молодца!
$i часто будет использоваться и дальше, так что это надо уяснить.
А вот моё первое исправление твоей задачи: http://ideone.com/sL7aTo
Аноним 2016/01/26 11:16:56  №634631 374
>>634626
Неновичку проще, так что лучше с самого начала учебника ОПа.
Аноним 2016/01/26 12:05:55  №634659 375
14537991560210.png (32, 791x396)
396x791
Вы тут програмилируете за своими кантенбухтерами, а мне потом ваш говнокод запускать. Всем добра.
мимо админ
Аноним 2016/01/26 12:27:51  №634672 376
>>634659
Насколько быстр этот диск?
Аноним 2016/01/26 12:32:03  №634676 377
>>634672
Заявлено до 1000 iops, на деле чуть меньше (800), задержка 40 ms.
Скорость чтения - несколько сотен мегабайт/сек.

Для СХД это весьма неплохой показатель.
Аноним 2016/01/26 12:36:57  №634679 378
>>634659
Это же сколько бабла можно сэкономить если выносить большую часть логики на клиента?
Аноним 2016/01/26 12:37:58  №634681 379
>>634679
Пёрнул в лужу как боженька. Как ты на своём хипстерском ангуляре планируешь реализовать хранение заказов интернет-магазина?
Аноним 2016/01/26 12:40:08  №634683 380
>>634679
Для компании, зарабатывающей два лярда в год - 70к за сервер не деньги.
Мы на корпоративные телефоны в месяц тратим в 10-15 раз больше.
Аноним 2016/01/26 12:49:03  №634689 381
>>634681
Я про angular/магазины и не говорил (я вообще мобильный разработчик).
А вот для сайтов с высокой нагрузкой на сеть, можно было бы сэкономить.

>>634683
Но тут все равно сложно поддерживать отказоустойчивость/балансировку.
Да и код написать который сможет нормально маштабироваться не просто.
Хотя это php, там наверное просто логическая прокладка над бд.
Аноним 2016/01/26 12:50:34  №634690 382
>>634689
Тебе лучше не знать, как у нас всё работает.
Новый код масштабируется, легаси-говно нет. Постепенно всё, что делает легаси-говно, переносится в новый код.
Полный уход от легаси планируется только в конце этого года.
Аноним 2016/01/26 12:51:29  №634691 383
>>634689
>отказоустойчивость
Как раз уровня два пальца обоссать - corosync не вчера придумали.
Аноним 2016/01/26 12:55:42  №634697 384
>>634689
Нагрузки на сеть там как раз особой нет. Когда гоняли нагрузочное тестирование (siege) - хостер машины с которой запускался сидж, сказал что мы охуели засирать им канал 4 гигабитами трафика.
Аноним 2016/01/26 12:56:10  №634698 385
>>634690
ЧЕРЕЗ ДВА ГОДА НОВЫЙ КОД СТАЛ ЛЕГАСИ
@
ЦИКЛ ЗАМКНУЛСЯ
Аноним 2016/01/26 12:57:20  №634699 386
>>634698
Бери больше, кидай дальше. Легаси - уже 4 года, и писали его большей частью не мы. После ревью архитектуры стало ясно, что проще выкинуть его нахуй и написать заново, что и делается постепенно.
Аноним 2016/01/26 13:13:10  №634707 387
>>634631
Да я не совсем новичок
Аноним 2016/01/26 13:56:47  №634722 388
Привет, пыхари. Говорят, у вас можно взять задачек на ООП? Можете подкинуть?
Аноним 2016/01/26 13:57:06  №634723 389
Аноним 2016/01/26 13:59:47  №634725 390
>>634722
Что делал слон когда пришёл Наполеон?
Аноним 2016/01/26 14:47:36  №634763 391
Аноним 2016/01/26 14:50:07  №634766 392
>>634763
Спасибо. Мы вам перезвоним.
Аноним 2016/01/26 15:07:52  №634791 393
>>634707
Имел в виду, что тебе проще будет всё делать, поэтому лучше с самого начала учебника и пойти - освежить всё в памяти.
Аноним 2016/01/26 15:53:36  №634829 394
>>634791
Так грустно всё это. Неделю не открывал - открываю и я ВСЁ забыл. Что за хуйня? Даже руки опускаются
Аноним 2016/01/26 16:16:39  №634859 395
>>634829
За неделю забыл, что такое циклы и массивы, регулярки и тому подобное?
Тогда действительно не весело.
А мелочь разную, функции и подобное - и вообще можно не запоминать, не обязательно помнить.
Аноним 2016/01/26 16:20:20  №634863 396
>>634859
Да нет, забыл только мелочь разную, но всё равно как-то я раздосадован. Сижу, смотрю и разбираю свои решения старых задач - вроде, восстанавливаю.
Аноним 2016/01/26 16:26:09  №634873 397
Аноним 2016/01/26 17:26:14  №634937 398
>>634601
>А что естественного, вакансий довольно же много? Зарплаты на среднем уровне по региону даже у джунов. Чому бы не найти?
Не вижу вакансий, в моем городе их всего две и я туда уже ходил. Меня естественно послали.
Аноним 2016/01/26 17:29:23  №634944 399
Аноним 2016/01/26 17:30:42  №634947 400
Кто-нибудь сделал задачу "построение маршрута"?
Аноним 2016/01/26 17:42:59  №634960 401
>>634944
что сразу не на марс?
Аноним 2016/01/26 17:43:30  №634962 402
>>634960
Туда лететь надо.
Аноним 2016/01/26 17:45:01  №634964 403
Подскажите с маршрутом. Делаю по подсказке ОПа, но не могу понять, как превратить функцию, считающую 1 шаг в считающую несколько.
http://ideone.com/XuzycW

если убрать
} else {
foreach($paths[$point] as $key => $value){
makeStep($paths, $pathDone, $time, $paths[$key], $target);
}

то будет считать 1 шаг нормально, но я не понимаю, как рекурсию сделать
Аноним 2016/01/26 18:06:49  №634986 404
>>634960
Обл.Центр так не доступен?

Пробуй на апворке тогда, в wrk есть годный гайд
Аноним 2016/01/26 18:12:06  №634989 405
14538211264470.jpg (25, 500x667)
667x500
Аноны, подскажите:
Накатал скриптец, который разбирает json, приходящий с трекера и сохраняет его, куда мне надо.
1) Как заставить этот скрипт постоянно слушать определенный порт?
2) Два (двадцать два/две тысячи два) трекера одновременно шлют данные на один порт - какие основные моменты мне нужно знать и учитывать, чтобы скрипт корректно обрабатывал входящие данные от многих источников? Это называется многопоточность?
3) Киньте годной инфы по работе с бинарными данными - не получается написать такой же скрипт для трекера, который шлет данные в бинарном режиме.
Аноним 2016/01/26 18:12:59  №634990 406
Аноним 2016/01/26 18:35:47  №635012 407
>>634722

В ОП-посте есть ссылка на учебник.

В нем есть последняя глава про ООП: http://archive-ipq-co.narod.ru/l1/pasta.html

В ней есть 2 задачи, про Вектор и Кошки-Мышки. Вот их и решай и выкладывай сюда ссылку на код, мы посмотрим.

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

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

### Антикризисные меры

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

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

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

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

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

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

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

Если запутаешься, покажи код и попроси подсказку - эти задачи для новичка довольно сложные.
Аноним 2016/01/26 18:36:33  №635013 408
Аноним 2016/01/26 18:38:53  №635018 409
>>634964

Погугли "алгоритмы поиска пути". Там можно исплоьзовать готовый алгоритм, например алогритм Дейкстры довольно простой.
Аноним 2016/01/26 18:39:14  №635019 410
Аноним 2016/01/26 18:42:18  №635027 411
>>635019
Когда посмотришь задачу>>629883

И поясни про алгоритмы, у тебя в комментариях-подсказках ничего про них не сказано и я шёл в решении чётко по ним.
Т.е. надо через алгоритмы? Я просто погуглил и ужаснулся, никогда не имел с ними дело и оче непонятно и страшно.
Аноним 2016/01/26 19:13:56  №635055 412
>>634986
пробовал, расценки не устраиват.
Аноним 2016/01/26 19:20:31  №635065 413
>>629822 (OP)
Рейквестирую инфу. Работа на ПХП. Какой фреймворк учить? И если можно сразу гайдецов.
Аноним 2016/01/26 19:46:51  №635107 414
>>635065
ОП пост то прочитай сначала.
Аноним 2016/01/26 19:56:31  №635118 415
Если в поле базы данных содержится строка со списком id в таком виде: 2,5,8,9,15,27 Можно ли как-нибудь в один запрос, без дополнительных функций (вроде получения строки, потом разбивки её на массив и вызов для каждого элемента массива, функции вывода по id) вытащить все записи у которых такие id, но в другой таблице? Впринципе вариант с двумя функциями подходит, мне интересно как сформулировать запрос, который вытащит все записи по id в виде строчки
Аноним 2016/01/26 20:12:17  №635131 416
JS петух в треде, какие фреймворки учить для backend'а на этом вашем php? Или делать backend тоже на JS?
Аноним 2016/01/26 20:59:28  №635169 417
Бывают такие случаи, что без куки никак не обойтись, во всяком случае мне так кажется. Но что если куки у пользователя отключены? Как поступать в этом случае? Возможно я ошибаюсь, но кажется многие сайты, и очень хорошие сайты используют куки в своей работе, причём не имеют альтернативных вариантов выполнения тех функций, для которых необходимы куки.
Аноним 2016/01/26 21:09:31  №635179 418
>>635107
А можно без выебонов ответить?
Аноним 2016/01/26 21:46:15  №635215 419
>>635169

Ничего не делать. Те, кто отключают куки, должны быть готовы что авторизация и сохранение настроек может перестать работать. Но может им это просто не нужно?
Аноним 2016/01/26 22:07:35  №635236 420
Аноним 2016/01/26 22:08:36  №635238 421
>>635215
>Те, кто отключают куки
В последнее время постоянно вижу предупреждения на сайтах, что с выключенными куками многое недоступно, можно вот такое предупреждение выводить.
Все равно таких поехавших не так уж и много, скорее всего, от общего количества пользователей.
Аноним 2016/01/26 22:12:28  №635246 422
>>635236
Когда кредитбаланс меньше манслипеймент, надо выплатить и оборвать цикл, иначе он закрутится надолго.
Также логика не чувствуется: когда кредитбаланс меньше 5000 - месячная выплата становится кредитбалансом - а дальше-то что?
А дальше её надо бы выплачивать и обрывать цикл как раз, а у тебя всё закручивается.
Аноним 2016/01/26 22:24:29  №635259 423
Как я могу упростить это? Как-то много кода получилось по моему. http://ideone.com/Skje0K
Аноним 2016/01/26 22:26:58  №635261 424
>>635246
Я пытался сделать чтоб месячная выплата была столько, сколько осталось кредитбаланса, но не получается ничего.
Аноним 2016/01/26 22:44:11  №635284 425
>>635261
А зачем именно месячную выплату менять?
Можно просто заплатить столько, сколько осталось - выйти из того круга, где отнимается месячная выплата.
Ты хотел, чтобы она поменялась, а потом цикла заново прошёлся и всё выплатилось, я правильно понял?
Так-то интересный подход, такого пока ещё не встречал.
Ошибка там в том, что цикл надо после этого последнего прохождения уже после изменения манслипеймент оборвать - иначе он снова попадает в условие "если кредитбаланс меньше 5000".
Попробуй разделить на if и else, например.
В else помести это всё, что у тебя до условий, а в if то же, что и есть, плюс вывод последнего echo с окончательной суммой.
Аноним 2016/01/26 22:51:58  №635296 426
>>635284
в общем получилось как-то так http://ideone.com/9g8R4o Опять же не уверен, что сделал правильно, потому что не могу на 100% понять что делаю. Только в последний месяц он заплатил 5262.
Аноним 2016/01/26 22:56:06  №635306 427
Почему в шапке нет сравнений IDE для PHP и советы лично от ОПа?
Аноним 2016/01/26 23:01:23  №635316 428
>>635296
Нет, неверно считает. Должно получиться 61270 и много цифр после точки.
Также неверно считает, если поставить сумму кредита 1000 - http://ideone.com/Ud7IPy
Должно ведь быть 2030 - сумма кредита, тысяча за обслуживание кредита и 30 - проценты от суммы кредита.
Смотрю на сам алгоритм: если осталось выплатить, например, 4000 уже после умножения на проценты и прибавления - у тебя от этого ещё раз отнимается сначала 5000 манслипеймент, уже в минусе попадает в условие, там меняется манслипеймент и ещё раз идёт в цикл.
В какой-то момент, короче, у тебя в минус уходит, этого не должно быть.
Аноним 2016/01/26 23:02:34  №635320 429
>>635306
Да, скажите правду, какой самый лучший редактор.
Когда-то пробовал Sublime text, было про охуительно, есть ли что лучше?
Аноним 2016/01/26 23:11:12  №635333 430
Аноним 2016/01/26 23:24:08  №635348 431
Аноним 2016/01/26 23:28:04  №635353 432
>>635316
Хотя считает все равно не правильно.
Аноним 2016/01/26 23:31:13  №635358 433
>>635333
Эх блин, он платный, воровать не хочется. А из бесплатных редакторов какой лучше?
Аноним 2016/01/26 23:42:03  №635373 434
Аноним 2016/01/27 00:02:08  №635393 435
>>635358
он бесплатно активируется, поищи на рутрекере.
Аноним 2016/01/27 00:12:48  №635402 436
Аноним 2016/01/27 00:13:51  №635406 437
Аноним 2016/01/27 00:15:02  №635408 438
>>635358
Ставь шторм. Не повторяй моих ошибок.

Аноним 2016/01/27 00:17:16  №635412 439
Аноним 2016/01/27 00:40:20  №635429 440
>>635393
Рубисты в соседнем треде на китайском сервере активируются, может и со штормом заработает:
http://idea.lanyus.com/
Аноним 2016/01/27 01:07:23  №635442 441
>>635348
>>635353
Ноуп, неправильно - ты и сам видишь.
Совет: введи дополнительную переменную для подсчёта долга без отнимания манслипеймент и проверяй в if, чтобы именно она была меньше 5000. Если именно этот долг (а не с отнятой месячной платой) меньше месячной платы - выплачивай именно его и прибавляй его к пейменттотал.
Аноним 2016/01/27 01:54:48  №635460 442
https://github.com/toppestkek/GuestBook Аноним 2016/01/27 04:05:26  №635485 443
>>629862

Папки nbproject и vendor надо убрать из репозитория и добавить в .gitignore.

https://github.com/toppestkek/GuestBook/blob/master/.htaccess
Вот тут я бы убрал <IfModule mod_rewrite.c>. Без него, если модуля нет, то будет ошибка 500. А с ним ошибка будет тихо проигнорирована, хотя приложение работать не будет.

Далее: http://pastebin.ru/98nq0FN7 так как сервер думает что это я его взломать пытаюсь текстом.
Немного за 20 января Аноним 2016/01/27 04:05:54  №635486 444
>>629883

> $sentences = explode(PHP_EOL, $text);
Не советую. Надеюсь, ты знаешь что в разных ОС и разных редакторах конец строки кодируется по-разному: как \n или как \r\n (были еще варианты с \r на старых маках, но сейчас это неактуально). PHP_EOL на винде равен \r\n, под линуксом равен \n. Но где гарантия что в твоей программе использован тот же символ конца строки что и на платформе где она запускается? Гарантий нет. Значит, этот код может не сработать.

Правильнее всего бить на строки по символу \n (так как он входит в оба варианта), а потом отрезать \r если он есть, через trim. Либо бить регуляркой которая вырежет любой из вариантов (надо написать выражение "\n, перед которым может быть, а может не быть, \r").

> foreach($sentences as $key => &$value) {
Зачем тут & ? Также, называй переменные нормально, $value ничего не значит и ее надо переименовать.

> '/(?<!^)(?!$)/u'
Сложновато, по моему проще сделать preg_split("//u", $text, null, PREG_SPLIT_NO_EMPTY). //u соответствует границам между буквами, а константа в конце убирает пустые элементы в начале и конце массива.

> /заполняем остальные массивы пробелами, чтобы все стали равны/
Проще при выводе проверять в массиве мы или нет, и если нет то выводить пробел

> for ($c = 0; $c < $max; $c++){
> for ($e = 0; $e < count($letters); $e++ ){
Названия неудачные у переменных, может лучше было x/y?

> $max
maxLength

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

> $print = "";
Тут наверно проще сразу echo писать.

>>629943

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

Вот есть такое https://play.google.com/store/apps/details?id=ru.kslabs.ksweb , но это просто сервер (пхп + майэскуэл), без редактора и браузера (то есть нужен сторонний редактор кода и например встроенный браузер для запуска скрипта).

Есть такое https://play.google.com/store/apps/details?id=org.kidinov.awd но это редактор с браузером без сервера (в качестве него можно использовать приложение выше).

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

В любом случае, тебе надо (по отдельности или в одном приложении):

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

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

>>629949

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

>>630081

Слышал звон, да не знаю, где он. Соль сильно замедляет перебор паролей, защищает от использования заранее вычисленных таблиц хешей и скрывает факт наличия одинаковых паролей в базе. Она нужна однозначно.
Немного за 20 января Аноним 2016/01/27 04:06:18  №635488 445
>>630090

> В аплоадс у меня стоит хтаксесс с таким кодом, поэтому нельзя.
Ты по моему не очень понял как работает htaccess. Загрузка файла идет через скрипт index.php, потому настройки из htaccess вроде uploads_max_size в папке uploads не применяются. Настройки из uploads/.htaccess применяются только если из браузера запустить расположенный в этой папке скрипт. Также, у тебя есть php_flag engine 0 который запрещает выполнение скриптов из этой папки, но это мало:

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

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

>>Непарвильное использование иключений
> А какое правильное?

Правльно не ставить try/catch везде так как исключения были придуманы чтобы жтого не надо было делать. Пасты:

----------

Давай начнем с теории. Знаешь ли ты зачем придуманы исключения? Читал ли урок https://gist.github.com/codedokode/65d43ca5ac95c762bc1a

Если нет, прочитай.

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

try {
$app->run();
} catch (..) {
$app->showErrorPage();
}

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

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

----------

Как надо обрабатывать исключения:

- записать информацию в лог
- показать пользователю заглушку
- на заглушке выставить HTTP 503 код ответа для роботов
- на компьютере разработчика (при display_errors = 1) показать подробности и стектрейс

Что будет если использовать catch + echo:

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

Как будет если просто не ловить исключение:

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

-----------

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

>>Инициализацию всяких объектов лучше вынести из контроллера.
> Куда это их вынести? В новый объект?
В файл где инициализаируется приложение - там можно создать нужные объекты-сервисы один раз и после этого везде их использовать.
Немного за 20 января Аноним 2016/01/27 04:06:36  №635489 446
>>630102

> 1) Задача про миллион в банке
> $sum <= 1000000;
Неточное условие, если ровно миллион накоплен, продолжать цикл не надо.

И форматирование поплыло, плохо, почитай второй пост треда. Ответ получился правильный.

> 2) Генератор стихов:
> [mt_rand(0,count($word1))]
Тут ошибка, в массиве нет элемента с индексом count(...).

Вот внизу видно это:

> PHP Notice: Undefined offset: 9 in /home/hS3YjN/prog.php on line 17
> PHP Notice: Undefined offset: 7 in /home/hS3YjN/prog.php on line 19

> палиндром
> $lower = mb_strtolower($text);
> $str = str_replace(" ", "", $lower);
Плохие названия переменных, в данном случае можно класть результат в ту же переменную $text.

> $secondHalf = mb_substr($str, -1, 1);
Это берет всегда последнюю букву, а не N-ю с конца.

> if ($i = $halfLenght) {
Неправильно, тут = обозначает присваивание и вместо сравнения в $i записывается значение справа. Надо писать == для сравнения. Ну и сравнив 2 буквы, писать что слово это палиндром - рано, надо сравнить остальные.

Эта задача пока решена неправильно.

>>630116

С такой манерой общаться ты ответа не дождешься.

Аноним 2016/01/27 10:02:38  №635582 447
>>635489
ОП-чик, помоги с алгоритмами и с маршрутом>>635027
Аноним 2016/01/27 10:24:03  №635588 448
>>634989
>PHP
>слушать порт
Дуин ит вронг.
>многопоточность
Можно тредами, можно просто рожать новые процессы (подобный подход в апаче и прогах написанных на erlang), можно poll/epoll/kqueue (так делает nginx).
Аноним 2016/01/27 10:47:49  №635597 449
>>635588
К слову, в php есть pecl event (обёртка над libevent), а в его доках есть примеры).
http://docs.php.net/manual/en/event.examples.php - третий семпл, Echo server.
Но всё равно, писать сетевые сервисы на похапе - изврат лютый.
Аноним 2016/01/27 11:45:06  №635611 450
14538843061540.png (71, 513x513)
513x513
что это?
Аноним 2016/01/27 11:47:03  №635614 451
>>635611
Какая-то таблица не существует, соррян, типа, азаза))0)))
Аноним 2016/01/27 11:47:42  №635616 452
>>634873
>Если вас пропустили, не ответили, не проверили, не дали совет - напомните о себе в этом треде.

Меня пропустили. Анлаки.
Аноним 2016/01/27 11:48:28  №635618 453
>>635611
Тебе же написало, таблицы не существует.
Аноним 2016/01/27 14:00:20  №635702 454
Как закрыть страницу на которой обрабатывается форма и подключаются все классы? Чтобы при этом она работала, как надо. То есть как сделать так, чтобы на неё нельзя было попасть, а при попытке ввести её урл в браузерной строке, что-то выводилось.
Аноним 2016/01/27 14:03:58  №635705 455
>>635702
Вынести код обработки формы в тот же файл, который отправляет форму.

Или вынести страницу обработки формы за корень сервера (тогда её нужно будет подключать через include).
Аноним 2016/01/27 14:43:05  №635746 456
>>635442
А чему должна быть равна дополнительная переменная?
Аноним 2016/01/27 15:09:03  №635770 457
>>635618
я понимаю что ты тупая школота и лишь бы ответить, но почему к ней вообще идет запрос - подумай над этим, мидлом станешь базарю.
Аноним 2016/01/27 15:10:54  №635773 458
>>635770
>МАМ СМОТРИ все школота а я взрослый
Аноним 2016/01/27 15:21:41  №635783 459
Проверьте задачку на кредит на айфон: http://ideone.com/CvzJ2a

Чёт я сомневаюсь но всё же, вроде верно. Проверку на меньше ли нуля я убрал так как по идее оно должно(?) тютелька в тютельку забирать весь долг. Но сомнительно.
Аноним 2016/01/27 15:44:54  №635795 460
>>635783
>$creditBalance = ( $creditBalance * $percent ) + $servicePayment - $creditBalance;
Шта?
Считает абсолютно неправильно, там должно получиться 61270 рублей и много копеек.
>if ($creditBalance >= 5000)
Не вполне правильно основные действия сразу связывать с подобным условием. Ведь $creditBalance у нас к моменту попадания в подобное условие уже должен быть умножен на 1.03 и с прибавленной комиссией за пользование кредитом.
Аноним 2016/01/27 15:47:53  №635798 461
>>635795
Ок, буду снова думать.

Я писал $creditBalance = ( $creditBalance * $percent ) + $servicePayment - $creditBalance;
с логики мол если остаётся меньше 5000 после всех процентов и прибавлений, то просто отнимаем это всё финальным ходом.
Какая-то дурная задача, ну да ладно, я её-таки решу.
Аноним 2016/01/27 15:51:08  №635802 462
>>635798
Вообще советую дополнительную переменную ввести для баланса кредита - баланс, умноженный на процент и с прибавленной комиссией, но без отниманий месячной выплаты и тому подобного.
Вот именно когда она становится меньше 5000 - нужно просто её выплатить и прибавить к общим выплатам, оборвать цикл.
Аноним 2016/01/27 15:59:07  №635809 463
14538995476970.png (247, 604x478)
478x604
>>635588
>>635597
На чем могу, мяш, на том и приходится писать. Спасибо тебе.
Аноним 2016/01/27 16:00:35  №635811 464
>>635770
>но почему к ней вообще идет запрос
очевидно, потому что ты его делаешь
Аноним 2016/01/27 16:22:29  №635828 465
Почему меня игнорируют с просьбой помочь с навигатором? >>634964
Аноним 2016/01/27 16:23:54  №635831 466
Кто работал с третьим слимом, подскажите где взять подробную документацию к нему.
У них на сайте нашел только этот http://www.slimframework.com/docs/ юзергайд, но там нет и половины того, что было в документации ко второй версии.
Аноним 2016/01/27 16:24:31  №635833 467
Аноним 2016/01/27 16:29:55  №635839 468
Аноним 2016/01/27 16:36:40  №635852 469
Аноним 2016/01/27 16:49:59  №635859 470
>>635852
Но я уже спрашивал насчёт алгоритмов. Можно ли решить без них(как предполагается по подсказке ОПа), а если нет, то где почитать вообще вводное что-либо про алгоритмы?

Я даже не слышал про них, погуглив - это кромешный ужас и пиздец, НИЧЕГО не понятно
Аноним 2016/01/27 16:51:18  №635861 471
>>635811
Неправильный ответ, я делаю обычный селект, не стать тебе програмиздом, пиздуй в ашан.
Аноним 2016/01/27 16:54:00  №635862 472
14539028401150.png (119, 421x404)
404x421
Аноним 2016/01/27 16:56:32  №635865 473
>>635861
Сделай необычный селект, вдруг поможет
Аноним 2016/01/27 17:10:37  №635877 474
Бля, я здаюсь. Как делается эта грёбанная задачка на айфон? У меня уже мозг кипит, всё никак не выходит.
Аноним 2016/01/27 17:17:34  №635886 475
Аноним 2016/01/27 17:18:14  №635889 476
>>635877
Не отвечайте, ушел дальше ебаться с этим айфоном, то был приступ отчаянья.
Аноним 2016/01/27 17:19:44  №635890 477
>>635889
Её вроде бы можно решить одним условием, если мне не изменяет память. Подумай каким.
Аноним 2016/01/27 17:23:50  №635901 478
>>635890
Ну я думал сделать алгоритм, мол стандартный цикл, а в цикле идёт проверка - если долг с процентами и прибавкой за саму услугу больше или равно 5к, то стандартная выплата долга, если меньше, то вместо 5к мы отнимаем тот остаток вместе с процентами и прибавкой 1к. Потом смотрим если долг меньше 0, то значит завершаем брейком цикл и пишем "Хватит". Но что-то не то, надо нарисовать себе.
Аноним 2016/01/27 17:28:33  №635910 479
>>635611
Это скриншот с ошибкой phpmyadmin. А что?

Если тебя интересует причина, гугли по тексту ошибки.
Из того что я нашел, вроде есть несколько вариантов:
1. Для использования некоторых специальных опций нужно создать дополнительные таблицы (Linked-tables infrastructure). Скрипт для создания этих таблиц лежит где-то в phpmyadmin/scripts/create_tables.sql
2. Баг pma на убунте.
3. Конфликт со сборкой.

Выводы: не пользоваться pma, wamp-сборками и прочими инструментами быдлокодера.
Аноним 2016/01/27 17:34:13  №635916 480
>>635910
А чем админят базы данных небыдлокодеры?
Аноним 2016/01/27 17:35:00  №635918 481
14539053002370.jpg (9, 229x220)
220x229
Аноним 2016/01/27 17:39:22  №635923 482
Аноним 2016/01/27 17:41:12  №635927 483
можно подумать для быдло пхп придумали какие-то небыдло инструменты работы с майсоклом, кроме быдло пхпадмина. вот с жавой у меня таких проблем нет. оче удобно работать с бд в жаве из консоли да. вывод? пхп-быдло яп и инструменты у него быдло-tier.
Аноним 2016/01/27 17:41:48  №635928 484
Аноним 2016/01/27 17:41:58  №635929 485
>>635927
Ваше мнение очень важно для нас. Оставайтесь на линии.
Аноним 2016/01/27 17:42:30  №635931 486
14539057509010.jpg (67, 427x604)
604x427
Аноним 2016/01/27 17:52:42  №635941 487
>>635901
>если долг с процентами и прибавкой за саму услугу больше или равно 5к, то стандартная выплата долга, если меньше, то вместо 5к мы отнимаем тот остаток вместе с процентами и прибавкой 1к.
>Потом смотрим если долг меньше 0, то значит завершаем брейком цикл и пишем "Хватит".
Всё абсолютно верно. Только если ты тот анон, которому я объяснял выше - у тебя от суммы кредита ещё и месячная выплата каждый раз отнимается, что путает всё, когда ты сравниваешь её с 5000 в одном условии.

Аноним 2016/01/27 17:55:14  №635945 488
Парни, проверьте задачку на ипхон.
Теперь то кажись правильно! http://ideone.com/NUiAXY

Пасибо анону, что посоветовал придумать новую переменную . Сам тогда об этом думал, но казалось что ничего нового не надо. И да, сначала выводило херню, думал ДА ЧТО ЖЕ ЭТО ТАКОЕ, а оказалось что надо в цикл впихнуть обьявление переменной. И то правильно - чтоб оно не 40000 постоянно брало а постоянно менялось.
Аноним 2016/01/27 17:55:38  №635946 489
Аноним 2016/01/27 17:57:11  №635948 490
>>635945
Считает правильно, но код можно было написать получше.
Аноним 2016/01/27 17:57:19  №635949 491
>>635945
Алсо, тут может быть небольшая ошибка когда я ставил условие проверки если будет меньше 0. Тупо не нужны эти строки наверное. Но хз.
upd
Аноним 2016/01/27 17:58:52  №635950 492
Аноним 2016/01/27 17:59:00  №635951 493
Помогите выбрать нормальный бесплатный редактор:
vim/atom/brackets/ваши приложения
Сублим не понравился.
Аноним 2016/01/27 17:59:22  №635952 494
Аноним 2016/01/27 18:02:47  №635954 495
>>635950
>$creditBalance = ($creditBalance * $percent) + $servicePayment - $monthlyPayment;
>$paymentTotal= $paymentTotal + $monthlyPayment;
>echo "{$month} месяц спустя: долг = {$creditBalance} руб, выплачено всего {$paymentTotal} руб. \n";
Ты копипастишь один и тот же код два раза. Я не понимаю зачем это.
Аноним 2016/01/27 18:05:13  №635957 496
>>635954
Ну там не прям копипаста, один раз добавляет обычные 5к а другой - monthlyPayment.

Алсо, а что ты предлагаешь?
Аноним 2016/01/27 18:05:56  №635961 497
>>635951
А что такое "нормальный" редактор?
Какой функционал тебе нужен?
Чем "сублим" не понравился?

Попробуй загуглить и проанализировать преимущества и недостатки.
Ну или подождать пока в этом треде проголосует каждый даун, которому понравилась цветовая схема конкретного редактора.
Аноним 2016/01/27 18:07:13  №635964 498
>>635931
жава намного быстрее пхп работает кстати.
Аноним 2016/01/27 18:08:10  №635966 499
Аноним 2016/01/27 18:08:36  №635967 500
>>635957
Редактировать значение переменной monthlyPayment, вместо того чтобы вводить новую переменную и сравнивать её каждый раз.
Аноним 2016/01/27 18:16:40  №635980 501
>>635961
Сублим не приятен внешне, темы на него хуёвые, шрифты там говно, больше половины плагинов уёбищный, другая половина ебанутая.
Жрёт как атом (а атом лучше него в разы).
Аноним 2016/01/27 18:17:40  №635981 502
Аноним 2016/01/27 18:18:06  №635982 503
Аноним 2016/01/27 18:19:41  №635984 504
>>635982
Если любишь по вечерам пердолить консольку - vim
Если не любишь - brackets, atom
Аноним 2016/01/27 18:20:13  №635985 505
>>635945
>>635946
Ну молодца! Я каждый раз радуюсь, когда кто-нибудь справляется с этой задачей - как будто я сам снова пережил то, как с ней справился.
Другой анон верно говорит: от копипасты надо избавляться, особенно, когда в цикле всё крутится и несколько раз считает одно и то же.
>$variable = ($creditBalance умножить $percent)
>$creditBalance = ($creditBalance умножить $percent) + $servicePayment - $monthlyPayment;
Это ведь тоже можно сократить.
Вообще всё условие if ($variable >= 5000) не особо и нужно - цикл сам по себе будет работать и всё делать, а должен среагировать только тогда, когда $variable < 5000.
Это можно даже не в else убрать, а просто так оставить в теле цикла.
>>635967
Можно и так, действительно.
Аноним 2016/01/27 18:22:07  №635987 506
>>635985
Я тоже прям приток мотивации получил, как решил. Весь день думал да что ж не так. Аж с души камень.
Аноним 2016/01/27 18:30:00  №635993 507
14539086003420.jpg (21, 400x369)
369x400
>>635987
Я вот так же сейчас сражаюсь с задачей на числа прописью.
Но у тебя до неё ещё несколько подобных будут: Grammar Nazi с исправлением текста, проверка телефонного номера, клавиша Shift.
Зато потом можно будет не глядя многое раскладывать, приобретается какой-то небольшой опыт.
Аноним 2016/01/27 19:43:33  №636071 508
>>635597
Node.js для этого подойдет лучше?
Аноним 2016/01/27 19:49:23  №636079 509
>>636071
Можно на пайтоне за пару часов написать скрипт который будет это делать на всех ОС. node.js нужен будет только если ты собираешься к этому парсеру еще и веб-сервер прикручивать.
Аноним 2016/01/27 20:08:38  №636102 510
Я вчерашний анон который не мог решить задачу с айфоном http://ideone.com/wvluld Мне предлагали ввести новую переменную, но что-то я не особо понял что куда вводить и как считать, помогите, а то я уже устал от нее, чувствую скоро дропну.
Аноним 2016/01/27 20:12:28  №636104 511
>>636102
>if ($creditBalance < 5000)
Это неправильно, тебе нужно в начале цикла посчитать сколько будет оплата за текущий месяц, потом ввести условие

если оплата за текущий месяц меньше переменной monthlyPayment {
monthlyPayment = оплата за текущий месяц
}
Аноним 2016/01/27 20:24:31  №636115 512
Никак не могу разобраться с составными индексами.

Попробуем на таком примере: есть таблица для хранения nested sets.
CREATE TABLE `category` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`lft` int(10) unsigned NOT NULL,
`root` int(10) unsigned NOT NULL,
`level` int(10) unsigned NOT NULL,
...
PRIMARY KEY (`id`),
KEY `ix_level_root_lft` (`level`,`root`,`lft`)
) ENGINE=InnoDB AUTO_INCREMENT=1000001 DEFAULT CHARSET=utf8

В таблице 1 000 000 записей.
Запрос:
SELECT id, lft, root, level FROM category WHERE level IN (1,2) ORDER BY root, lft; // наверное таки лучше between, но не суть важно

Explain:
id: 1
select_type: SIMPLE
table: category
type: range
possible_keys: ix_level_root_lft
key: ix_level_root_lft
key_len: 4
ref: NULL
rows: 39458
Extra: Using where; Using index; Using filesort

Здесь непонятен момент с filesort. Как говорит документация,
>MySQL must do an extra pass to find out how to retrieve the rows in sorted order. The sort is done by going through all rows according to the join type and storing the sort key and pointer to the row for all rows that match the WHERE clause. The keys then are sorted and the rows are retrieved in sorted order.
Если я правильно понял, будет совершен дополнительный проход, чтобы отсортировать данные в нужном порядке. Но зачем? Разве в индексе они не хранятся в отсортированном виде? Судя по key_len = 4, вторая и третья часть индекса вообще не используется.
Хотя судя по времени выполнения запроса, очень даже используется: с индексом только на (level) запрос 0.20с, индекс (level, root, lft) занимает 0.06с.

Что-то я не понимаю, как это работает.
Аноним 2016/01/27 20:31:49  №636122 513
Какой уровень знаний надо иметь в похапе, чтоб взяли джуном?
Аноним 2016/01/27 20:32:23  №636123 514
Аноним 2016/01/27 20:32:49  №636124 515
>>636102
Не вздумай дропать!
тоже думал, но взял яйца в кулак и засел, пошевелил мозгами и решил
Аноним 2016/01/27 20:33:06  №636125 516
Аноним 2016/01/27 21:44:47  №636172 517
>>636115
Кажется, понял (вернее, догадываюсь): чтобы работала сортировка по индексу, нужно поставить колонки из order by в начало (root, lft, level). Но меня это не устраивает, потому что тогда индекс не будет использован для where, вернее мы получим jointype = index вместо range, что означает фуллскан по индексу и увеличение времени в десятки раз (0.93с).

В общем, получается тут по-другому никак, индекс на (level, root, lft) оптимальный. Сортировка будет выполнена вторым проходом, но это не страшно, потому что данные берутся прямо из индекса (using index), к таблице вообще нет обращений.
Если же сделать индекс только на (level), то using index уже не будет, данные браться из таблицы а не индекса, а время увеличится в 3-4 раза.

Совсем хорошо было бы, если бы мне вообще не нужна была сортировка в запросе. В индексе (level, root, lft) данные уже отсортированы в соответствующем порядке. Меня правда этот порядок не очень устраивает, потому что я получу сначала все категории первого уровня, а потом уже все дочерние. Задача состояла именно в получении блоков вида корень+дети.
Или прямо в php отсортировать массив? Черт его знает.
Аноним 2016/01/27 22:11:08  №636195 518
http://ideone.com/Bsg7kH я уже потерял какую либо логику. Написал такого, что уже и сам перестал разбираться.
Аноним 2016/01/27 22:15:35  №636210 519
>>636195
Тебе нужно было сделать одно условие в начале цикла, как я написал тут >>636104

Зачем ты начал велосипеды строить?

>$creditBalance = ( $creditBalance * $percent ) + $servicePayment - $monthlyPayment;
>$paymentTotal = $paymentTotal + $monthlyPayment;

Вот это два раза копипастишь, когда этого делать совсем не нужно.
Аноним 2016/01/27 22:17:50  №636215 520
>>636210
Я в этих велосипедах пытался найти выход, но все равно ничего не получилось )
Аноним 2016/01/27 22:31:09  №636243 521
>>636215
Просто описывай жизненный процесс в программе.
Один проход цикла это один месяц.
Что происходит вначале месяца? Банк начисляет проценты:
$creditBalance = ( $creditBalance * $percent ) + $servicePayment;
Что потом? Мамка дает школотрону 5000. Он идет в банк и узнает сколько осталось выплатить, если больше его 5000 платит сколько может (т.е. все 5000) если меньше платит сколько нужно и забывает про это все. (Выходит из цикла).
Тут был код, но я его удалил. Нужно все таки самому сделать условие.

Аноним 2016/01/27 22:37:03  №636252 522
>>636102
>$creditBalance = ( $creditBalance $percent ) + $servicePayment - $monthlyPayment;
Когда у тебя $creditBalance становится, допустим, 3000 - ты отнимаешь от него $monthlyPayment, сумма уходит в минус, так не должно быть.
Тебе надо либо ввести переменную для подсчёта только ( $creditBalance $percent ) + $servicePayment, либо отнимать от$creditBalance эти самые 5000 в $monthlyPayment в основном условии, когда цикл продолжает работу.
А когда именно эта вот сумма ( $creditBalance $percent ) + $servicePayment становится меньше $monthlyPayment - именно тогда надо её выплатить, посчитать $paymentTotal и оборвать цикл.
И это можно сделать как изменением $monthlyPayment, так и простой выплатой вот этого окончательного ( $creditBalance
$percent ) + $servicePayment (той самой переменной, о которой я и говорил).
>>636124
Советую помогать братишкам - так сам ещё лучше разберёшься в задаче, я базарю.
Аноним 2016/01/27 22:48:22  №636268 523
>>636252
Чёртовы звёздочки опять.

>>636195
Аа, вот тут уже ближе, неплохо!
Ты на верном пути.
Аноним 2016/01/27 22:53:42  №636272 524
Аноним 2016/01/27 22:54:12  №636273 525
>>629822 (OP)
W4.2 Сделай рулетку, то есть генерируется 6-значный номер поста, и, в зависимости от последней цифры, что-то пишется (что, придумай сам). Подсказка: чтобы найти последнюю цифру числа, возьми остаток от деления на 10: $lastDigit = $number % 10

Аноним 2016/01/27 22:54:53  №636274 526
>>636273
как это решать, я не могу понять ((
Аноним 2016/01/27 22:55:41  №636277 527
Аноним 2016/01/27 22:57:38  №636279 528
>>635859
Блять, такое ощущение, что игнорируют. Просто игнорируют вопросы про алгоритмы!
Аноним 2016/01/27 22:58:34  №636280 529
Насколько сильно нужно погружаться в HTML? Поверхностные знания достаточны или надо зубрить всё это?
Аноним 2016/01/27 22:59:01  №636281 530
>>636195
В последнем if ошибка: там должно быть равно нулю, а не меньше.
Совет, который всё решит: просто вынеси в else то, что у тебя стоит в условии if ($gg > 5000). Попробуй, базарю - ещё захочешь.
Аноним 2016/01/27 23:00:07  №636284 531
>>636280
Если хочешь в будущем быть fullstack разработчиком тебе обязательно нужно будет знать HTML и уметь верстать шаблоны любой сложности.
Аноним 2016/01/27 23:02:36  №636285 532
>>636284
Я просто увяз в ХТМЛ и никак не дойду до главы с ООП и проч. Вот и думаю дропнуть пока этот ХТМЛ и вернуться к нему позже, если потребуется
Аноним 2016/01/27 23:03:57  №636287 533
Аноним 2016/01/27 23:04:33  №636288 534
>>636285
Можешь и так попробовать, но для задачи на список студентов, например, уже нужно будет уметь сверстать простой шаблон.
Аноним 2016/01/27 23:04:43  №636289 535
14539250840570.png (458, 429x604)
604x429
>>636285
Увяз в HTML после Лилички, чисел пропись, калькулятора, ещё кучи сложных задач?..
Я не понимат.
Аноним 2016/01/27 23:06:14  №636290 536
>>636289
так тема-то обширная последние две задачи пропустил, чересчур сложные для меня
Аноним 2016/01/27 23:06:32  №636292 537
>>636288
поясни за такую терминологию. Сверстать шаблон - это чё?
Аноним 2016/01/27 23:09:42  №636297 538
И ещё сразу: что лучше для HTML - html academy или codeacademy?
Аноним 2016/01/27 23:12:00  №636300 539
>>636290
>последние две задачи пропустил, чересчур сложные для меня
Последние две страницы с задачами, наверное?
Куда так торопишься-то? Получай удовольствие от того, что можешь, успеешь ещё во всём разобраться.
А то будешь как многие в треде: уже изучал, но всё забыл, на прошлой неделе писал сложный скрипт, а сейчас не могу вспомнить, как разложить массив в цикле.
Неосновательно как-то.
Аноним 2016/01/27 23:12:03  №636301 540
>>636252
Я на правильном пути? http://ideone.com/wvluld Просто будет грустно если я опять делаю совсем не то.
Аноним 2016/01/27 23:14:30  №636303 541
>>636292
Шаблон это визуальное представление в веб-приложении. Т.е. то, что видит и с чем взаимодействует пользователь.
Аноним 2016/01/27 23:16:06  №636306 542
>>636300
Да нет, именно задачи. Ту, где буквы в круг встают - вообще убил мозг тригонометрией (не моё, сука, не моё).

И последнюю с навигатором. Оче долго пытал и мучал задачу, в итоге тут ОП посоветовал сделать по алгоритмам, а я впервые о них слышу и вообще не имею представления о них. Более внятной помощи не добился (посмотри по треду). Вот так и живу.
Аноним 2016/01/27 23:16:32  №636307 543
>>636301
Братишка, вот тут правильный путь: >>636281
У тебя там путаница с лишними прохождениями цикла, это всё решит.
Ну и $creditBalance = 0 - это не сравнение, а присваивание.
Не elseif, а просто else - сам по себе будет цикл крутиться, пока не попадёт сначала в условие, что оставшаяся сумма меньше 5000, а потом в условие, что $creditBalance равняется 0.
Аноним 2016/01/27 23:18:56  №636311 544
>>636306
Я знаю это чувство, бро.
Вторая неделя идёт битвы с числами прописью, хочется сделать по-человечески, а не через задницу.
Буквы в круге - мне бы хоть дойти...
Аноним 2016/01/27 23:21:53  №636316 545
Кто-нибудь пытается зарабатывать на фриланс-сайтах? Такое ощущение что большинство заданий там, это поправить какую-то CMS, которую впервые слышишь и информации о которой в интернете не так и много. Я знаю php, jQuery, на базовом уровне javascript, css, html, на базовом уровне знаю вордпресс, могу верстать из ПСД и натягивать на вордпресс, но вообще никакой работы не могу найти на фрилансах сайтах.
Аноним 2016/01/27 23:27:09  №636324 546
>>636316
На базовом уровне знаний недостаточно. Учи симфони, юи, ларваель и вордпресс до нормального уровня.
Иди на upwork.com и получай свои $500 в месяц.
Работа там в основном что-нибудь типа: Сверстать шаблон для вордпресса, натянуть шаблон на вордпресс, написать плагин для вордпресса, пофиксить баги в плагине для вордпресса, пофиксить баги в приложении на юи или симфони.
В /wrk/ есть годный тред по апворку, о русскоязычных фриланс-биржах даже не думай, там одно наебалово и зарплата в рублях.
Аноним 2016/01/27 23:29:38  №636326 547
>>636324
И еще помни что фриланс на подобных сайтах это не сколько твои навыки в программировании, сколько твои социоблядские скиллы и умение себя продать, умение убедить клиента почему он должен нанять именно тебя, а не какого-нибудь индуса, который еще и денег меньше просит.
Аноним 2016/01/27 23:34:41  №636329 548
>>636326
То есть упор на вордпресс нужно делать, чтобы туда влиться?
Аноним 2016/01/27 23:38:26  №636334 549
>>636329

Я, кстати, недавно об этом же писчал, когда смотрел заказы >>631251
Аноним 2016/01/27 23:39:33  №636337 550
>>636334
Щито такое вордпресс?
Аноним 2016/01/27 23:40:49  №636338 551
>>636329
Можешь зайти и почитать описание заданий в категории web development. Большая половина там это вордпресс или какие-нибудь приложения на модных фреймворках. Бывают и заказчики которые абсолютно ничего не понимают в в вебе, и сами не знают чего они хотят.
Аноним 2016/01/27 23:42:54  №636340 552
14539273749010.png (138, 677x934)
934x677
>>636329
>>636334
>>636338
Вот открыл рандомную страницу в категории веб разработки.

На каждое задание там уже 50+ кандидатов, лол.
Аноним 2016/01/27 23:45:59  №636343 553
>>636340
Проорал со скрина на всю квартиру.
Аноним 2016/01/27 23:47:47  №636345 554
>>636343
Это еще нормально, там есть азиаты которые пытаются по английски писать, но у них это получается еще хуже чем у русских. В итоге уже на стадии описания задачи ты не понимаешь что от тебя нужно.
Аноним 2016/01/27 23:58:40  №636355 555
Кстати, а вот по поводу английского, само собой он очень нужен. Но я его в свои 25 лет, не знаю вовсе, есть ли какой-нибудь лёгкий вариант изучения английского необходимый программистам? Или тут так не обойтись, надо знать досконально?
Аноним 2016/01/27 23:59:26  №636358 556
>>636355
Cмотри сериалы, читай книжки. Где ты был все 25 лет, живёшь в чайнике?
Аноним 2016/01/28 00:02:31  №636361 557
>>636358
Я вот смотрю ( не читаю правда, как-то пробовал осилить престолы в оригинале, дропнул после 250 страниц, слишком часто в словарь приходилось заглядывать). Воспринимать текст (ну и речь худо-бедно) и переводить могу, а вот говорить и выражать свои мысли очень туго выходит. Так что тут нужно еще и практиковаться с кем-нибудь или где-нибудь.
Аноним 2016/01/28 00:03:20  №636363 558
>>636358
Вряд ли мне помогут сериалы, так как английский я не знаю вообще, знаю только на уровне человека, который постоянно сталкивается с английскими словами в рекламе и в интернете, но всё равно ничего не знаю. Есть ли какие-нибудь сервисы, есть ли в языках, вообще какая-то основа, поняв которую можно хоть немного понимать текст на английском? Например как правильно строить предложения и т.д. мне бы вот это узнать, а дальше уже буду каждый день обогащать словарный запас.
Аноним 2016/01/28 00:04:04  №636364 559
>>636363
Ну тут уж тебе в /fl
Аноним 2016/01/28 00:04:23  №636365 560
>>636364
и говорю без шуток, там много на эту тему есть инфы
Аноним 2016/01/28 00:05:36  №636368 561
>>636363
http://lingualeo.com/ тут есть тренировки и словарь. Еще советую поставить их одноименное расширение для браузера, которое по двойному клику на слове на любом сайте переводит его, потом ты можешь добавить его в свой словарь и потом тренировать.
Аноним 2016/01/28 00:18:10  №636391 562
Аноним 2016/01/28 00:22:16  №636395 563
Повторю вопрос, много ли надо знать, чтоб взяли джуном.
Реквестирую - что надо знать и уметь для джуна.
Аноним 2016/01/28 00:24:58  №636399 564
>>636395
Забудь об этом, ты слишком тупой, если не можешь додуматься открыть вакансии и посмотреть требования.
Аноним 2016/01/28 01:46:18  №636468 565
Если сделать что-то вроде такого чата http://drrrchat.com только не на фреймворке, а при помощи обычного ООП PHP, это будет нормально для портфолио при приёме на работу?
Аноним 2016/01/28 02:04:35  №636477 566
>>636468
Конечно, если ты можешь написать приложение с соблюдением современных стандартов разработки, это похвально. Но от знания фреймворков, если вакансия того требует (а они все требуют), не освобождает.
Аноним 2016/01/28 02:12:57  №636486 567
>>636340

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

>>636297

кодеакадеми очень ознакомительного уровня.

Ну и у нас в ОП посте есть задания по ХТМЛ, тоже неплохие, обрати внимание.

>>636279

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

По поводу поиска пути, я сказал погуглить, ты гуглил?

Есть такая страница

https://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%B8%D1%81%D0%BA_%D0%BF%D1%83%D1%82%D0%B8

И еще такая, интересная и подробная: http://pmg.org.ru/ai/stout.htm

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

Почитай все это. затем смотри сюда:

https://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%94%D0%B5%D0%B9%D0%BA%D1%81%D1%82%D1%80%D1%8B

Святые угодники, это же готовый алгоритм поиска пути! Осталось в нем разобраться и реализовать.

Если что непонятно, задавай уточняющие вопросы. Можно использовтаь и другой алгоритм, можно попытаться понять что написал ОП в подсказках к задаче.
Аноним 2016/01/28 02:14:50  №636488 568
>>636395

hh.ru

Обычно требуется уметь сделать приложение, иногда на фреймворке, реже на чистом пхп.
Аноним 2016/01/28 02:16:14  №636490 569
>>636363

Ищи уроки для начинающих, там как раз структуру предложений и разбирают. Английский за пару месяцев не выучить, так что готовься к долгому пути.
https://github.com/lexdss/shop Аноним 2016/01/28 02:19:33  №636492 570
>>630249

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

https://github.com/lexdss/shop/blob/master/dump.sql#L92
> CONSTRAINT `order_product_ibfk_2` FOREIGN KEY (`product_id`) REFERENCES `product` (`id`) ON DELETE CASCADE
Правильно ли это - при удалении продукта удалять его их всех заказов? Я думаю, нет. Нужно запретить удаление продкутов если они использованы в заказе. Для скрытия с сайта сделать в продукте поле, отвечающее за скрытие/показ. Вообще, во многих случаях удаление данных нежелательно, если на эти данные где-то есть ссылки.


https://github.com/lexdss/shop/blob/master/dump.sql#L122
> CONSTRAINT `product_ibfk_1` FOREIGN KEY (`category`) REFERENCES `category` (`code`) ON DELETE CASCADE
Почему ссылка на категорию сделана через код, а не через первичный ключ? Не очень логично по моему. Ну или тогда надо в категориях убрать ид и сделать код первичным ключом.

> `role` enum('user','admin') DEFAULT NULL,
Может логичнее по дефолту ставить user? А нулл запретить?

https://github.com/lexdss/shop/blob/master/dump.sql#L151
> `date` datetime
Непонятно дата чего это. Название поля неудачное.

https://github.com/lexdss/shop/blob/master/app/autoloader.php
Тут унылая копипаста. Надо эти 5 функций объединить в одну. Ну, к примеру, ты можешь сделать массив с именами папок и перебирать их в цикле, ища в них файл. Более того, ты можешь добавить эти 5 папок в include_path ( http://php.net/manual/ru/function.set-include-path.php ) и тогда файл можно будет загрузить обычным require (а найти в какой именно папке файл через http://php.net/manual/ru/function.stream-resolve-include-path.php ). Более того, если у тебя папки включены в include_path и имя файла соответствует определенному шаблону то можно использовать стандартный автозагрузчик в функции spl_autoload. Почитай мануал на все эти темы.

Или ты мог бы освоить неймспейсы из этого урока: https://github.com/codedokode/pasta/blob/master/php/autoload.md и сделать автозагрузку с использованием PSR-4.

https://github.com/lexdss/shop/blob/master/app/config.php
Я думаю, использовать константы для конфига не очень хорошая идея. Константы доступны глобально, зачем нам это? Нам это не нужно. ЛУчше использовать обычные переменные.

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

https://github.com/lexdss/shop/blob/master/index.php#L10
> include VIEW_DIR.'503page.tpl.php';
Тут не очень понятно какой получается путь к файлу:

/app/view/503page.tpl.php

Это что, файл должен лежать в корне файловой системы? Ты проверял, работает ли это?

https://github.com/lexdss/shop/blob/master/index.php#L8
> error_log($e->getMessage());
Неправильно. Ты записываешь только текст ошибки, а имя файла, строку, где она произошла, стектрейс, УРЛ страницы - не запсиываешь. Какая польза от такого лога, по нему ты не найдешь даже что это за ошибка была. Надо как минимум записывать то что вернет $e->__toString(), там больше подробностей + УРЛ страницы добавить.

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

https://github.com/lexdss/shop/blob/master/app/controller/FrontController.php
Код не рекомендации PSR отформатирован. После имени класса и функции скобка ставится на новой строке, а не на той же.

Нехорошо что у тебя в конструкторе фронт контроллера вызывается 404 и exit. Ненормально как-то завершать скрипт при попытке создать объект. Я думаю, код разбора надо поместить в метод вроде route(). Свойства controller, action можно выпилить и заменить на обычные переменные.

Далее, насчет сервисов. Сервисами я называю классы вроде PDO, Auth, мапперов. Видно, что они создаются у тебя где попало и как попало, такж видно что у тебя почему-то у всех контроллеров есть зависимость от Db что тоже не очень логично: может база данных ему и не нужна.

Эта проблема решается так: надо сделать класс, например Container или ServiceLocator, который умеет создавать сервисы по требованию, а при повторном вызове возвращать ранее созданный экземпляр. У этого класса будут методы вроде getPdo(), getSomeMapper(), getAuthManager() и тд. Он будет передаваться в конструктор контроллера, и тот из него получает нужные ему сервисы.

Контейнер существует в 1 экземпляре, создается в бутстрапе. Как передать в него настройки из конфига? Можно через конструктор

$container = new Container($settings);

можно через анонимную функцию, так:

$container->setPdoFactory(function () use ($settings) {
$pdo = new Pdo(...);
$pdo->setAttribute...
return $pdo;
});

Почитай про контейнер в Симфони - можно идею брать с него, он тоже там хранит в себе настройки и создает сервисы:

(рус) http://symfony-gu.ru/documentation/ru/html/book/service_container.html
(англ) http://symfony.com/doc/current/book/service_container.html
https://github.com/lexdss/shop Аноним 2016/01/28 02:20:11  №636493 571
>>630249

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

> if(isset($_GET['act']) | $_GET['act'] == 'logout'){
| - это битовый оператор, а тебе нужно логическое или ||

Также, выражение написано неверно. Там явно должно быть И, а не ИЛИ.

> header('Location: '.$_SERVER['HTTP_REFERER']);
Это неправильный код, реферер может быть пуст, может указывать на ту же страницу, может на какой-то левый сайт и тд. Не стоит его вообще использовать. Адрес возврата лучше передавать явно, и следить что он не указывает на посторонний сайт (например, не включать в него имя домена).

Ну и логаут логичнее делать через ПОСТ так как он изменяет состояние залогиненности.

https://github.com/lexdss/shop/blob/master/app/controller/AController.php#L31
> //Перебрасываем на 404 если в контроллерах нет нужного экшена
Абсолютно неправильно. Проверку на отсутствие экшена надо делать в фронт контроллере, а так у тебя при опечатке в названии метода вместо ошибки в логе и ошибки 503 будет просто выдаваться страница 404. Бред же. Я вообще советую не использовать магические методы, от них проблем больше чем пользы.

https://github.com/lexdss/shop/blob/master/app/controller/AController.php#L15
Вот тут видна необходимость в контейнере служб.

> AController{
Название никуда не годится, что такое A?

https://github.com/lexdss/shop/blob/master/app/controller/CatController.php#L11
> //Для каждой категории выполняются одинаковые действия, чтобы не создавать одинаковые методы для каждой категории можно использовать магический метод
> public function __call($name, $args){
Какие-то костыли. По моему, тебе надо либо поменять УРЛ на формат /cat/index/some-category либо переделать роутинг чтобы он умел выделять имя категории как параметр. А не лепить костыли, делая вид как будто у тебя 20 разных экшенов.

> //Вместо categoryAction делаем category
> $this->category_code = str_replace('Action', '', $name);
someCategoryActionActionAction тоже будет тогда работать.

> FrontController::page404();
Имя метода должно начинаться с глагола. Также, мне не нравится тут статисеский метод, почему бы не сделать через $this->showErrorPage(404) или $this->showNotFoundPage()?

> if($_GET['add']){
Непонятно, почему добавление товара сделано методом ГЕТ, а не ПОСТ. Выучи-ка какие есть методы в HTTP и для чего они применяются. Также, непонятно, почему добавление товара делается через контроллер вывода товаров в категории. Это явно должно быть в другом месте.

Редирект обратно надо делать не через реферер, а через УРЛ, указанный в форме добавления в корзину.

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

> //Если пришел параметр, загружаем детальную страницу товара, если нет - страницу категории
> if(!empty($_GET['item_id'])){
Это должно делаться не тут, а в роутере в фронт контроллере. Сделай отдельный УРЛ для товара вида /product/view/1234 либо /cat/guitar/123 и научи роутер его понимать.

> $user_validate->valid($_POST);
Имя функций начинается с глагола

> //В случае не пройденной валидации приходит массив ошибок, если пройдена - объект пользователя
Неудачно выбран тип возвращаемых значений. Функция не должна возвращать значения разных типов, значения должны быть одного типа, + null в некоторых случаях. Иначе легко наделать ошибок, и неудобно работать с такой функцией. Функция валидации может работать так:

$errors = validate(User $user); // Возвр. массив ошибок
$errorList = validate($user); // возвращает объект списка ошибок
$trueOrFalse = validate($user, &$errors); // заполняет массив ошибок
$trueOrFalse = validate($user, ErrorList $errors); // заполняет объект ошибок

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

> $this->view->value = $_POST;
Плохая идея. ты не знаешь какие в этом массиве есть ключи, а какие нет, как ты будешь делать их вывод? Плюс, там может быть например массив вместо строки, это вызовет ошибки при попытке вывести через эхо.

> $this->user_mapper->save($result);
> //Получаем ID нового пользователя и сохраняем его в сессионной переменной
> $user = $this->user_mapper->getUserFromEmail($result->email)
Для получения id только что вставленной записи есть метод lastInsertId(). Получение надо делать сразу после вставки, в методе save, и записывать этот ид в объект пользователя.

Там наверно еще есть замечания, но на сегодня хватит этого, исправишь, будем смотреть дальше.
Ответы за 20-23 января Аноним 2016/01/28 02:20:41  №636494 572
>>630376

Кодировка виндоуз содержит 256 символов, утф-8 - десятки тысяч. Очевидно твоя функция будет терять символы, не входящие в кодировку виндоуз и лучше бы ее не использовать, чем потом разгребать эти проблемы. Если тебе надо перевернуть строку, ты можешь разбить ее на массив символов хаком с preg_split('//u'), перевернуть массив стандартной функцией и склеить обратно.

А про strrev лучше забыть - она безнадежно устарела.

https://github.com/someApprentice/Students Аноним 2016/01/28 02:21:05  №636495 573
>>630433

https://github.com/someApprentice/Students/blob/master/app/config.php
В конфиге лучше не использовать DSN, а просто указать в массиве отдельно хост, базу, имя, пароль. Ведь редактировать конфиг может быть будет незнакомый с программированием человек. Еще лучше - вообще сделать конфиг в формате ini напрмиер, он очень простой и читабельный.

https://github.com/someApprentice/Students/blob/master/app/Controller/RegisterAction.php
В контроллерах надо отказаться от статических методов. Код на статических методах - это процедурщина, а не ООП.

https://github.com/someApprentice/Students/blob/master/app/Model/Gateway/TableDataGateway.php#L15
> public function addUser(User $user) {
Непонятно зачем эта функция в базовом классе, а не в UserTableGateway.

> Essence
то обычно назвают Entity

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

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

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

Далее, насчет сервисов. Сервисами я называю классы вроде PDO, Auth, мапперов. Видно, что они создаются у тебя где попало и как попало.

Эта проблема решается так: надо сделать класс, например Container или ServiceLocator, который умеет создавать сервисы по требованию, а при повторном вызове возвращать ранее созданный экземпляр. У этого класса будут методы вроде getPdo(), getSomeMapper(), getAuthManager() и тд. Он будет передаваться в конструктор контроллера, и тот из него получает нужные ему сервисы.

Контейнер существует в 1 экземпляре, создается в бутстрапе (инит.пхп). Как передать в него настройки из конфига? Можно через конструктор

$container = new Container($settings);

можно через анонимную функцию, так:

$container->setPdoFactory(function () use ($settings) {
$pdo = new Pdo(...);
$pdo->setAttribute...
return $pdo;
});

Почитай про контейнер в Симфони - можно идею брать с него, он тоже там хранит в себе настройки и создает сервисы:

(рус) http://symfony-gu.ru/documentation/ru/html/book/service_container.html
(англ) http://symfony.com/doc/current/book/service_container.html


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

Ну а продолжать писать код тебе надо в любом случае, не дожидаясь меня.
Ответы 20-23 янв Аноним 2016/01/28 02:21:28  №636496 574
>>630602

> mt_rand(1, count($word1));
Индексы идут от 0 до каунт - 1.


>>630629

Выражение слишком сложное, попробуй записать так:

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

Ну и проверь свой код на списке номеров:

Правильные: 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' // нет +
);

Также, есть такой сайт: https://regex101.com/r/qF7vT8/3 - там уже вбиты номера и на нем можно простестировать свою регулярку и проверить что она соответствует правильным и не соответствует неправильным номерам. Помни что на этом сайте надо писать бекслеш один раз, например \s, а не \\s. Флаг m там стоит чтобы ^ и $ в регулярке обозначали «начало и конец любой строки», а не «начало и конец всего текста». Флаг g (его нет в PHP, он только на этом сайте) значит что надо искать все совпадения с регуляркой, а не только первое.

>>630637

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

>>630765

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

>>630865

Так нельзя?

function () use ($x) {
echo $x;
}
Ответы 20-23 янв Аноним 2016/01/28 02:21:55  №636497 575
>>630879

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

>>630931

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

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

>>630937

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

>>631098

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

>>631079

Держи готовый алгоритм:

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

«Платим» здесь значит уменьшаем долг и увеличиваем общую сумму выплаченного.

>>631120

> в другой - (id, user_id(кто поставил), like_user(кому поставил))
В качестве первичного ключа можно использовать пару (user_id, like_user), а id выпилить.

> Как тут можно подсчитать одновременно сколько юзер поставил лайков и сколько ему? Если я сгруппирую так GROUP BY user.id (или user_id, неважно), то через COUNT смогу соответственно подсчитать сколько он лайков поставил, но не смогу подсчитать сколько ему поставили потому что COUNT зависит от GROUP BY. А еесли так GROUP BY like_user, то смогу подсчитать сколько пользователю поставили лайков, но теперь не смогу подсчитать сколько он поставил.
Да, верно. Более того, если ты попытаешься к таблице юзеров приджойнить таблицу лакйов 2 раза (полученные и отданные лайки) то ты вообще получишь в COUNT число всех комбинаций отданных и полученных лайков (например для 4 полученных и 5 отданных получится 20 комбинаций).

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

http://phpclub.ru/mysql/doc/group-by-functions.html

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


>>631145

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

>>631168

Конечно будет, достаточно одной таблицы связи
Ответы 20-23 янв Аноним 2016/01/28 02:22:28  №636498 576
>>631192

У тебя неправильный код, должно быть так:

$app->get("/files/:id", $test);

А ты вместо функции передаешь результат ее вызова, это не то.


https://jsbin.com/pakonaseho/1/edit?js,console
>>631243

> designationSize
Имена функций начинаются с глагола.

try/catch делать не надо, ловить исключение должен тот, кто использует твой класс, а не ты сам. А то исключение до него просто не дойдет. Почитай-ка урок про исключения https://gist.github.com/codedokode/65d43ca5ac95c762bc1a

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

> hamburger.addTopping("MAYO");
В задаче написано что обозначать тип добавок должна константа, а не строка. Константы делают код понятным и защищают от ошибок.

В полях объекта не надо хранить цены и прочее, храни только тип гамбургера, а цену можно потом найти по нему.

> for(var key in this.settingsHamburger["topping"]) {
> if(topping === key) {
> this.topping.push(this.settingsHamburger["topping"][topping]);
Проверку правильности и добавление надо сделать отдельно, а не вместе. Также, нет проверки на повторное добавление той же добавки.

> if(this.stuffing === undefined || this.size === undefined) throw new Error("Недостаточно данных");
Надо на уровне конструктора сделать так, чтобы такая ситуация с пустыми полями была невозможна.

> (this.topping[0] ? this.topping[0]["calories"] : 0) +
> (this.topping[1] ? this.topping[1]["calories"] : 0);
Не надо закладывать ограничение на максимум 2 добавки.

>>631637

Гугл даст

>>631735

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

>>631761

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

>>631985

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

И считает оно как-то неправильно. Должно получиться - всего выплачено 61270 р. А у тебя там больше почему-то.

Давай начнем с простого примера: анон берет кредит на 1000 р и через месяц выплачивает 2030р с учетом всех накруток: http://ideone.com/7uWggK

Твоя программа ушла куда-то в минус. Правильный алгоритм такой:

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

«Платим» здесь значит уменьшаем долг и увеличиваем общую сумму выплаченного.
https://github.com/MindiMakridi/filehosting Аноним 2016/01/28 02:22:59  №636500 577
>>632175

https://github.com/MindiMakridi/filehosting/blob/master/files.sql#L29
> `upload_time` int(11) NOT NULL,
Почему тип поменял? В БД есть специальный тип для дат, надо использовать его, а не лепить числа. Преобразование типов можно делать в маппере.

https://github.com/MindiMakridi/filehosting/blob/master/public/index.php#L51
> $files = $app->filesMapper;
> $lastUploadedFiles = $files->fetchLastUploadedFiles();
> $app->render("main.html.twig", array(
> 'files' => $lastUploadedFiles,
> 'filesHelper' => $app->filesHelper
Нехорошо что ты тут одинаковые вещи называешь разными именами. Это путает.

> $app->get("/files/:id", $pageFunc);
> $app->post("/files/:id", $pageFunc);
Это можно сделать без вынесения функции в переменную, через $app->map(...)->via(..): http://docs.slimframework.com/routing/custom/

https://github.com/MindiMakridi/filehosting/blob/master/public/index.php#L67
> $file = new Filehosting\File;
> $file->setComment($app->request->post('comment'));
> $file->setToken($app->request->post('token'));
Здесь ты создаешь какой-то неполноценный объект у которого не заполнена часть полей. Это плохо, надо либо загружать из базы полноценный объект и делать правки в нем, либо не использовать тут объект, а использовать обычные переменные.

https://github.com/MindiMakridi/filehosting/blob/master/public/index.php#L79
> if (!$file = $files->fetchFile($id)) {
> $app->notFound();
Это наверно в начале функции, а не в середине должно идти.

https://github.com/MindiMakridi/filehosting/blob/master/public/index.php#L82
> if (!isset($comment)) {

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

https://github.com/MindiMakridi/filehosting/blob/master/public/index.php#L116
> $app->get("/thumbs/:id/:fileName"
Нужно ли здесь имя в конце? Превьюшка же не предназначена для скачивания. Хотя хорошее имя может помочь роботам проиндексировать картинку, пусть будет тогда.

https://github.com/MindiMakridi/filehosting/blob/master/public/index.php#L119
> $thumbName = "thumb." . $app->filesHelper->getFileExtension($file);
Получение имени превьюшки хорошо бы тоже вынести в метод, а не размазывать по коду несколько раз.

https://github.com/MindiMakridi/filehosting/blob/master/public/index.php#L133
Валидацию файла при загрузке хорошо бы сразу вынести в функцию, чтобы код тут не разрастался. При ошибке надо повторно вывести форму с сообщением.

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

> $files->beginTransaction();
> $id = $files->addFile($file);
> $file->setId($id);
> $tmpName = $_FILES['userfile']['tmp_name'];
> if ($app->filesHelper->saveFile($tmpName, $file)) {
> $files->commit();
> } else {
> $files->rollBack();
Вот это все логично вынести в метод в хелпере. чтобы мы например легко могли загрузить файл откуда-то еще через этот метод.

https://github.com/MindiMakridi/filehosting/blob/master/models/File.php
Я тут подумал, выбрасывать исключение для пустого свойства не очень логично. Может мы хотим проверить, заполнен ли id, а как это сделать? Непонятно.

https://github.com/MindiMakridi/filehosting/blob/master/models/FilesMapper.php#L24
> $id = $this->dbh->lastInsertId();
Логично бы этот ид прямо в объект файла и сохранять.

https://github.com/MindiMakridi/filehosting/tree/master/models/helpers
Нейсмпейсы принято писать с большой буквы, надо переименовать папку. под виндой это придется делать через 2 переименования, так как она не видит разницы между буквами разного регистра.

https://github.com/MindiMakridi/filehosting/blob/master/models/helpers/FilesHelper.php#L48
Тут надо проверять не только является ли он какртинкой, но и можно ли для него сгенерировать превью. Причем проверка поддерживаемых форматов по логике должна быть в классе-генераторе превьюшек.
Ответы 20-23 янв Аноним 2016/01/28 02:23:28  №636501 578
>>632199

http://ideone.com/NuO5fo
Надо проверить это на списке номеров, скорее всего работать не будет так как у тебя жестко задано как цифры сгруппированы в номере, лучше этого не делать, а просто разрешить любое число пробелов, минусов, скобок между цифрами.

> регулярка тест на граммар наци
> http://ideone.com/I2Q3I9
> $regexp1 = '/[+7]/';
Тут неправильно, квадратные скобки значат "любой один из символов, либо + либо 7", а не последовательность 2 символов.

>>632214

От оставшегося, невыплаченного долга.

>>632400

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

>>632510

По моим ощущениям, внешние библиотеки удобнее, а ксс селекторы нагляднее xpath

>>632548

Все верно работает, только в условии в цикле лучше писать $i <= 2, а то можно подумать что цикл 3 раза выполняется.

>>632569

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

>>632704

> if (this._elements.getPowerProduction) {
Не нравится мне что-то это, метод может быть, а может не быть. Нехорошо, лучше сделать чтобы он всегда был, но например возвращал 0 по умолчанию.

> return profit result;
Я думаю, лучше бы сделать функцию, которая бы вычисляла и возвращала в виде словаря:

- избыток ли у нас энергии
- недостаток ли энергии
- величину избытка/недостатка
- цену покупки или прибыль от продажи
- удалось ли закупить или продать

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

> if (powerExcess > this._powerCapacity) {
> return this._powerCost (this._powerCapacity / PowerLine.MW);
Тут можно использовать min/max вместо if.


А так, пока получается неплохо, почти все сделано уже.


>>632746

ЧТобы не было копипасты, надо код разбить на функции, например:

- функция записи числа от 0 до 999 слвоами
- функция выбора формы слова (тысяча/тысяч)
- функция которая разобъет число на группы по 3 цифры и запишет словами

>>633021

Код надо разбивать на функции, такая стена текста это перебор.

Определение формы слова не стоит делать так:

> 'рубль' => array(1),
> 'рубля' => array(2, 3, 4),
> 'рублей' => array(0, 5, 6, 7, 8,
Вообще форма слова в русском зависит только от последней цифры, исключение - это если число заканчивается на 11-19. Соответственно надо ифами это проверять. Всего может быть 3 формы слова: 1 рубль, 2 рубля, 5 рублей.

Разбивать число на цифры надо математически, есть такие варианты:

// получить последние 3 цифры числа:
echo 1234567 % 1000; // выведет 567

// получить число миллионов
echo floor(1234678 / 1000000); // выведет 12

Комбинируя их, можно получить что угодно.

Преобразование числа в текст делается примерно так:

- если есть слово для сотен, ставим его
- если есть десятки, ставим
- если число оканчиваетя на 11-19, ставим слово
- если есть единицы, ставим слово для них

>>633167

Решено правильно.

Аноним 2016/01/28 02:58:17  №636512 579
>>636477
С фреймворками разберусь, пробовал YII 2 понял всё то что касается работы с базами данных и некоторые другие вопросы, однако, общей сути всёравно не понял. Что ты имеешь в виду под стандартами современной разработки приложений?
Аноним 2016/01/28 04:09:17  №636528 580
14539433580610.png (88, 973x300)
300x973
Дошел до этого задания, вроде сделал, но не уверен что я правильно понял его условия. Правильно ли я его решил? http://ideone.com/3RZSd2
Аноним 2016/01/28 05:20:08  №636540 581
>>636528

Имена функций должны начинаться с глагола.

Возвращаемые значения должны быть осмысленные, например true/false, а не непонятные строки.

Смысл переменной $a непонятен, что тебе сразу мешало в ифе условие проверить? Проверка сделана неверно, так как ключи в массиве могут идти в любом порядке, а у тебя предполагается определенный порядок.

Ну и наконец задача решается без циклов.
Аноним 2016/01/28 08:23:38  №636555 582
А ОПчик даст годные ресусры для изучения вёрстки (джаваскрипт сам знаю где трогать).
Аноним 2016/01/28 09:01:26  №636567 583
>>636555
>(джаваскрипт сам знаю где трогать).
делись:?
Аноним 2016/01/28 09:10:46  №636570 584
>>636495
>https://github.com/someApprentice/Students/blob/master/app/Controller/RegisterAction.php
>В контроллерах надо отказаться от статических методов. Код на статических методах - это процедурщина, а не ООП.
А что тогда писать сначала $registeraction = new RegusterAction();? Зачем? Ведь тоже самое будет. Что плохого в такой "процедурщине"? Тем более init тоже процедурно написан. Не понимаю.

>>636495
>https://github.com/someApprentice/Students/blob/master/app/Model/Gateway/TableDataGateway.php#L15
>> public function addUser(User $user) {
>Непонятно зачем эта функция в базовом классе, а не в UserTableGateway.
Просто как пример для самого себя.
А если бы, например, за место студентов у нас были простые юзеры, и, при этом, я бы не хотел наследовать и писать новый класс как бы приходилось писать эту функцию? public function addRecord(Record $record)? Или всегда обязательно писать новый класс?
Аноним 2016/01/28 09:55:29  №636575 585
C какого момента я готов к понимаю классов, конструкторов, объектов, медодов и MVC?
Накидайте задачек для вхождения. (Учебник смотрел, а войти в ООПне смог)
Аноним 2016/01/28 11:45:11  №636626 586
>>631035

Если ты помнишь:

Алгоритм такой:
1. Имеем сумму кредита.
2. Прибавляем к ней нужный процент и прибавляем комиссию за обслуживание кредита.
3. Проверяем, получившаяся сумма больше или меньше 5000, которые может выплачивать Анончик в месяц.
4. В соответствии с результатом проверки или продолжаем цикл выплат, или выплачиваем имеющуюся сумму и обрываем цикл (не забывай про пункт 1, что она у нас уже должна быть умножена на процент и к ней уже должна быть прибавлена комиссия за обслуживание кредита).
Всё.

Я опять ебусь с этой задачей. Если в п.1 только считаем сумму, то когда вычитать месячный платёж?
Аноним 2016/01/28 12:02:01  №636636 587
>>636626
Решил в итоге вот так. По-моему в описанный тобой алгоритм опять не уложился - http://ideone.com/J7rb0R
Аноним 2016/01/28 12:04:04  №636639 588
>>636636
Считает неправильно. В этой задаче конечный результат будет 61270 рублей с копейками.
Аноним 2016/01/28 12:04:31  №636640 589
Аноним 2016/01/28 12:07:29  №636645 590
Аноним 2016/01/28 12:10:58  №636648 591
Аноним 2016/01/28 12:12:13  №636650 592
>>636645
>Всего выплачено 50000
А должно быть
>61270 рублей с копейками

Зачем ты там $creditBalance делишь на 100? Насколько я помню, там такого делать не нужно.
Аноним 2016/01/28 12:19:34  №636660 593
>>636650
Чтоб процент узнать. В итоге получается так: имеющаяся сумма + процент + платёж за обслуживание. Нет?
Аноним 2016/01/28 12:22:52  №636664 594
>>636660
Вот же у тебя переменная $percent, это и будет твой процент. В данном случае это 3%, значит тебе нужно

$creditBalance умножить на $percent + платеж за обслуживание - оплата за месяц
Аноним 2016/01/28 12:26:34  №636668 595
14539731944020.png (85, 950x750)
750x950
>>636664
Смотри, у ОПа $percent задан как 1,03 вот на этом скрине. Это опечатка? Должно быть 0,03?
Аноним 2016/01/28 12:29:54  №636669 596
>>636668
Нет, не опечатка. Так и должно быть.

Таким образом считаются проценты за месяц. Текущая сумма умноженная на 1,03 (03 - 3%). Т.е. каждый месяц к сумме кредита начисляются 3%.
Аноним 2016/01/28 12:30:44  №636671 597
>>636668
А, я всё понял. Это чтоб лишнее действие не делать, можно сразу умножить на 1,03
Аноним 2016/01/28 12:40:59  №636684 598
Аноним 2016/01/28 13:11:07  №636714 599
Блин, какая же ХТМЛ-КСС тема - хуита скучная.
Аноним 2016/01/28 13:16:48  №636721 600
ОП, поясни про задачу 11 на КСС
Задание 11. Сверстай изображенный на картинке текст. Обрати внимание, размер картинки должен определятся так: большая картинка — ужимается до ширины окна (с учетом полей конечно), маленькая — выводится как есть. HTML-код добрый дядя уже написал и выложил тут: http://pastebin.com/s1P96nVA, тебе надо лишь добавить свой CSS.

Но там только 1 картинка в коде. И что делать с текстом? Не очень ясно
Аноним 2016/01/28 13:37:47  №636740 601
Хочу сделать приложение, которое ищет треды по тэгам и линкует их. Но ведь для этого (чтобы ввести в поиск параметры и сделать запрос) нужно исопльзовать curl, а для этого его нужно устанавливать. А я хочу, чтобы приложение работало на компе у любого пользователя и чтобы он никаких пхп библиотек не качал и не устанавливал. Что делать?
Аноним 2016/01/28 13:39:14  №636741 602
>>636740
Если ты хочешь сделать декстопное приложение, причем тут пхп тред?
Аноним 2016/01/28 13:43:00  №636743 603
>>636740
Бери какой-нибудь пайтон, там есть все что тебе нужно для этого. На пхп для такого приложения можно было бы сделать бэкэнд, а фронт на каком-нибудь модном реакте или ангуляре. Но это веб-приложение, если ты хочешь сделать на десктоп, тебе в другой тред.
Аноним 2016/01/28 13:57:42  №636753 604
W5.2 Некто кладет в банк 10000 р. Банк начисляет 10% годовых
(то есть, каждый год на счету становится на 10% больше, чем в прошлом году).
Напиши программу, считающую, через сколько лет в банке будет миллион?
Сколько лет будет этому некто? Доживет ли некто до этого дня, если сегодня ему 16 лет?


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

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

Можно сделать цикл с 10000 и вплоть до ляма, это подойдет? И тут цикл надо обязательно for? While как-то посимпатичнее выглядит для этого.
Аноним 2016/01/28 13:59:03  №636758 605
В одном из полей базы данных, содержатся id в таком формате: 32, 67, 89, 92 Каким образом совершать обновление этого поля? Надо при помощи одной функции вызвать содержимое это поля, дописать к нему средствами пхп нужный id после чего другой функцией обновить прошлое значение на новое? Вариантов в одну функцию нет?
Аноним 2016/01/28 14:05:37  №636763 606
>>636741
Но я только на пхп знаю, как вводить параметры в запрос.
Аноним 2016/01/28 15:04:45  №636799 607
Аноним 2016/01/28 15:07:27  №636803 608
>>636636
>2. Прибавляем к ней нужный процент и прибавляем комиссию за обслуживание кредита.
>$creditBalance = $creditBalance + ($creditBalance / 100 звёздочка $percent) + $servicePayment - $monthlyPayment;
>По-моему в описанный тобой алгоритм опять не уложился
Yep. Не надо отнимать месячную плату в основном цикле, потому что у нас всё улетит в минус.
В какой-то момент получится, допустим, $creditBalance = 3000, а ты тут же отнимешь от этой суммы 5000 $monthlyPayment - всё уйдёт в минус и в таком виде попадёт в условие if ($creditBalance < $monthlyPayment).
Совет тот же, который я давал другому братишке: попробуй либо ввести дополнительную переменную для проверки $creditBalance без вычета $monthlyPayment, либо ставь в условии, что $monthlyPayment в последний момент становится равной чистому $creditBalance (без отнятой $monthlyPayment!), а потом выплачивается, после чего цикл обрывается.
Первый вариант как-то естественнее.
>>636668
>у ОПа $percent задан как 1,03 вот на этом скрине
Да, это чтобы сразу получить $creditBalance с прибавленными 3%.

>>636753
>Можно сделать цикл с 10000 и вплоть до ляма, это подойдет?
Конечно. Нам же важно узнать, когда именно сумма вклада станет равной 1млн, к этому и стоит привязать цикл.
>И тут цикл надо обязательно for? While как-то посимпатичнее выглядит для этого.
Попробуй сначала, как проще, а потом поменяй циклы, например.
Аноним 2016/01/28 15:15:03  №636806 609
>>636501
>Вообще форма слова в русском зависит только от последней цифры, исключение - это если число заканчивается на 11-19. Соответственно надо ифами это проверять. Всего может быть 3 формы слова: 1 рубль, 2 рубля, 5 рублей.
Там у меня столько разных if и else получается, что лишнего не хотелось бы.
Спасибо за советы, ОП, постараюсь применить.
Вчера вот только сделал полное разложение трёх чисел с подстановкой "рублей" - уже с помощью деления.
Хороший совет математически разбивать на тройки, я думал опять с помощью перевода числа в строку решить. Попробую и так, и так.
Тот код со стеной текста я просто не стал оптимизировать, там многое можно сократить - махнул рукой, потому что в тот момент не подумал, как можно было продолжить соединение этих частей для разложения.
Аноним 2016/01/28 15:22:44  №636814 610
>>636636
Кстати, правильно сделал, что так всё наглядно разложил - сколько в какой месяц выплачивается. Я тоже так делал, когда решал.
Но вот поэтому сразу видно, что у тебя в первом же действии ошибка:
>Месяц 1
>Баланс кредита 36412
А должно быть 37200.
40000 + 3% + 1000 - 5000 = 37200.
Аноним 2016/01/28 15:27:11  №636822 611

Test
& 2016/01/28 15:29:54  №636827 612
test
Аноним 2016/01/28 16:23:38  №636895 613
Аноним 2016/01/28 16:28:53  №636901 614
В чем проблема алгоритма http://ideone.com/8Eqcuz ?
Задача 5.2. Делаю цикл - начиная с 10к и вплоть до цифры что больше или равно миллиону(момент когда Некто всё-таки получает нужную сумму) мы выводим на экран цифры переменных и останавливаем цикл. В самом цикле повышение годов(возраст Некто и срок депозита) идёт после проверки, чтоб не добавлять в нулевой год и месяц.

Что не так?
Аноним 2016/01/28 16:33:35  №636904 615
>>636495
>Почитай про контейнер в Симфони - можно идею брать с него, он тоже там хранит в себе настройки и создает сервисы:

>$container->setDefinition(...);

Вот я не понимаю такие статьи - как я могу понять как настраивать контейнер, если я не знаю что делает эта функция? Дальше просто комом становиться непонятно что написано в статье. ОП, я нормален?

Аноним 2016/01/28 16:42:44  №636913 616
>>636743
Так на пхп тоже можно написать десктопное приложение, не?
Аноним 2016/01/28 16:44:28  №636916 617
>>636913
Можно, но пхп не для этого сделан.
Аноним 2016/01/28 17:17:44  №636936 618
>>636901
Ахаха, бро, ты отжёг!
Я тоже путаю знаки "больше" и "меньше".
Подсказка (сначала сам всё-таки поищи ошибку): цикл и не работает из-за того, что в условии внутри цикла то же выражение стоит, что и в условии для работы самого цикла. Он же должен работать, когда вклад меньше миллиона...
Аноним 2016/01/28 17:23:37  №636942 619
>>636901
Также каждый раз при прохождении цикла баланс у тебя становится 10000 - это у тебя определяется в самом цикле ведь.
Это надо вынести за пределы цикла, поставить перед ним.
Аноним 2016/01/28 17:32:14  №636949 620
>>636936
>Я тоже путаю знаки "больше" и "меньше".
Используй хинт: С какой стороны символ больше, с такой и значение больше
min < max
max > min
Аноним 2016/01/28 17:32:31  №636950 621
>>636901
Также после условий с if ставить изменения переменных - неправильно.
Надо или перед условием, или в else.
Аноним 2016/01/28 17:33:49  №636951 622
>>636950
Тогда получается что в самом начале прибавляется плюс один год и там и там, но вклад остаёся 10к.
Аноним 2016/01/28 17:35:20  №636952 623
>>636949
Я почти серьёзен был в тот момент.
Ну, каждый раз представляю первое число и второе, какое больше и какое меньше, чтобы определить, в какую сторону повернуть знак.
Аноним 2016/01/28 17:36:39  №636955 624
>>636951
Для этого и нужен else.
Массив регулярка Аноним 2016/01/28 17:42:31  №636958 625
Анончик, объясни, пожалуйста, почему в этом коде нумерация $replacements с конца?

<?php

$string = 'The quick brown fox jumped over the lazy dog.';

$patterns = array();
$patterns[0] = '/quick/';
$patterns[1] = '/brown/';
$patterns[2] = '/fox/';

$replacements = array();
$replacements[2] = 'bear';
$replacements[1] = 'black';
$replacements[0] = 'slow';

echo preg_replace($patterns, $replacements, $string);
?>
Аноним 2016/01/28 17:45:12  №636961 626
>>636721
Кто-нибудь, объясните, а
Аноним 2016/01/28 17:47:05  №636963 627
>>636949
пиздец что за дауны тут сидят. шли бы в 1 цээ что ли.
Аноним 2016/01/28 17:47:42  №636964 628
>>636958
Чтобы показать, что и в этом случае будет замена идти по порядку ключей, а не расположения.
Или наоборот - я с телефона и не проверю сейчас.
Аноним 2016/01/28 17:48:38  №636965 629
>>636952
Лайфхак - в чью сторону "рот" открыт, тот и больше.

Лол, это классе в 3-4 учат.
Аноним 2016/01/28 18:10:20  №636979 630
>>636964
>Или наоборот.
This. Замена по порядку расположения, а не нумерации ключей.
Аноним 2016/01/28 18:11:30  №636980 631
>>636965
А что делать, если я привык смотреть на "острие" треугольной скобки, а не на "рот"?
Не надо меня путать, пожалуйста!
Аноним 2016/01/28 18:13:02  №636981 632
Помогите с осознанием таких баз как: сервер, дебаг.

Я вот пользуют Штормом и сейчас наткнулся на статью, как прикрутить Опен Сервер на него и Хдебаг. Для чего это? Может кто-нибудь как дауну разжевать? Вообще не понимаю
Аноним 2016/01/28 18:15:16  №636984 633
Аноним 2016/01/28 18:29:57  №637005 634
>>636984
Пиздец я даун, как же худо даётся всё это. А с сервером как? Зачем какой-то Апач или ОпенСервер ставить на Шторм, если и так программы запускает? Зачем?!
Аноним 2016/01/28 18:35:50  №637012 635
>>637005
А человеку который далек от программирования ты тоже будешь советовать шторм ставить для запуска твоих скриптов? Я вот например не пользуюсь ИДЕ, пишу в редакторе, поэтому мне необходим сервер чтобы тестировать то что получилось. Точно так же сервер будет необходим чтобы запускать твои скрипты для использования.
Аноним 2016/01/28 18:39:43  №637020 636
>>637005
Помимо IDE, а не на неё. Сервер будет ещё одним диском в "Компьютере".
РНРStorm запускает скрипты без установки сервера? Ох щи, а я думал, что тут как и с другими IDE - устанавливать сервер.
Аноним 2016/01/28 18:40:45  №637023 637
>>637020
>РНРStorm запускает скрипты без установки сервера? Ох щи, а я думал, что тут как и с другими IDE - устанавливать сервер.
Там у них какой-то свой интерпретатор стоит, который криво работает. Для комфортной работы лучше поставить сервер.
Аноним 2016/01/28 18:41:13  №637025 638
Реквестирую оповскую пасту по мультиверсионированию в innodb. Еще по видам джойнов: помню шо имеет значение порядок объединения таблиц, но не помню почему. Оптимизатор запроса что-то там выбирает оптимальный план, как-то так. Сохранял когда-то эти пасты на старый комп, но там окончательно умер винчестер.

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

p.s. Как на сосаче происходит автообновление? Сижу набираю пост, тут раз, и все подвисает на секунду, потому что очередной дебил что-то запостил.
Джаваскрипт блокирует ввод на время выполнения запроса? Не могу найти это место в коде.

https://2ch.hk/makaba/templates/js/swag.js
> (621) var that = this;
Каков затейник.

> (4949) function updatePosts
Непонятная мешанина колбеков и прочего добра. Я вот не знаю, как буду работать. Скажут пофиксить такой код, буду наверное дня три только сидеть и разбирать последовательность вызовов.
Аноним 2016/01/28 18:41:37  №637026 639
>>637012
Хм. А зачем люди тогда ставят сервер НА шторм? Это меня больше всего вымораживает

>>637020
Да всё запускается спокойно, жил не тужил и только тут понимаю, что какие-то сервера, малафья есть ещё.

И по поводу дебаггера - вроде поставил его на Шторм. ЗАЧЕМ ОН? Да, статью на вики видел и читал, но зачем? Показывать ошибки в синтаксисе? Так ИДЕ же это исполняет.
Аноним 2016/01/28 18:45:31  №637030 640
>>637026
>А зачем люди тогда ставят сервер НА шторм?
Чтобы работать удобнее было. Гораздо комфортнее что-нибудь делать, когда ты знаешь что у тебя стоит настроенный тобою же сервер и интерпретатор. Плюс так удобнее тестировать, не нужно ничего заливать по фтп и прочее.
>Да, статью на вики видел и читал, но зачем? Показывать ошибки в синтаксисе?
Чтобы отлаживать программу в процессе её работы. С помощью дебаггера ты сможешь остановить выполнение скрипта в любой момент, и посмотреть текущее значение любой переменной. Так же, с помощью дебаггера можно выполнять программу по шагам и смотреть что происходит в нужных тебе ситуациях. Это очень полезно когда у тебя какая-то ошибка в скрипте и ты не можешь понять почему она возникает.
Аноним 2016/01/28 18:50:00  №637042 641
>>637030
Cпасибо, хоть что-то проясняется. В итоге у меня как-то криво хдебаг встал на Шторм и теперь он пишет, что нет дебагера, но кое-как его запускает(по крайней мере, перестал ругаться на его отсутствие при запуске). Хуй знает, короче, не понимаю нихуя, сейчас компьютер буду ебашить кулаком
Аноним 2016/01/28 18:50:40  №637043 642
>>637023
>который криво работает
Помню, аноны просили ОПа установить РНРСторм, чтобы проверить, что в их скриптах всё работает.
А на Идеоне не работало в тот же момент.
Аноним 2016/01/28 19:14:31  №637064 643
>>637030
>Гораздо комфортнее что-нибудь делать, когда ты знаешь что у тебя стоит настроенный тобою же сервер и интерпретатор.
То есть таки можно на шторм поставить сервер? Я не понимаааат.
Аноним 2016/01/28 19:18:39  №637069 644
>>637064
Можно, читай
https://www.jetbrains.com/phpstorm/help/creating-a-local-server-configuration.html для локального сервера
https://www.jetbrains.com/phpstorm/help/creating-a-remote-server-configuration.html для удаленного сервера
Алсо, начиная с версии 5.4 в пхп есть встроенный веб-сервер, у JetBrains и это в справке есть.
https://www.jetbrains.com/phpstorm/help/php-built-in-web-server.html
Аноним 2016/01/28 19:21:57  №637076 645
>>637069
Спасибо, годно, надо вникнуть.
Аноним 2016/01/28 19:47:36  №637108 646
Реально ли без опыта работы в офисе пойти во фриланс?
Аноним 2016/01/28 19:48:39  №637111 647
>>637108
Если у тебя есть опыт в написании больших приложений - реально.
Аноним 2016/01/28 19:50:06  №637114 648
>>637111
Ну я хочу для практики что-то наподобии форума написать. Хватит или нет?
Аноним 2016/01/28 19:52:10  №637115 649
>>637114
Хватит, только я бы на твоем месте делал уклон в вордпресс. Я вчера уже объяснял одному анону.
>>636324
>>636326
>>636340
Аноним 2016/01/28 19:55:32  №637123 650
>>637069
То есть можно и не ставить? Какие преимущества будут, если поставить?
Аноним 2016/01/28 19:55:46  №637124 651
>>637114
Потом ссылочку скинь на Гитхаб, ага, спасибо.
Интересно будет посмотреть.
Аноним 2016/01/28 19:56:14  №637125 652
>>637115
Сколько нужно учить пхп, чтобы сделать такое? Что вообще такое вордпресс?
Аноним 2016/01/28 20:03:19  №637134 653
Оп, можешь написать пример того, как частое использование статических методов делает код процедурщиной? И в каких тогда случаях нужно юзать статик?
Аноним 2016/01/28 20:17:43  №637146 654
>>637115
Всего 500 долларов? А как на такие деньги жить (живу не в СНГ, тут ни в одну контору без образования не берут, уже 5 контор прошёл).
Аноним 2016/01/28 20:22:31  №637152 655
>>637146
Можно и больше, зависит от твоих скиллов и от того, сколько времени ты этому будешь уделять.
Аноним 2016/01/28 20:25:15  №637158 656
>>636567
javascript.ru?
мимо другой анон
Аноним 2016/01/28 20:32:10  №637170 657
Аноним 2016/01/28 20:46:12  №637181 658
>>637152
У меня в стране чтобы не мереть с голода надо хотя бы 2к долларов в месяц зарабатывать. Лол
Аноним 2016/01/28 20:46:52  №637183 659
>>637181
Что за страна такая?
Аноним 2016/01/28 20:46:56  №637185 660
>>637181
Тогда это скорее всего не для тебя. Можешь искать в офисах стажировки и превозмогать.
Аноним 2016/01/28 20:49:26  №637187 661
>>637185
Так всё плохо на апворке и индусы поработили отрасль?
Аноним 2016/01/28 20:51:59  №637194 662
>>637187
Скорее в вебе платят недостаточно. На каких-нибудь плюсах или шарпе платят побольше, но там вакансий меньше и работа сложнее.
Задача Shift Аноним 2016/01/28 20:56:23  №637198 663
14540037836500.jpg (16, 425x282)
282x425
Аноним 2016/01/28 21:11:27  №637208 664
>>634613
>>634587
>выходные полностью за задрачиванием фреймворков провожу
C 9 до 18 работа, потом допоздна обучение + без выходных, а жить то когда при таком графике?
Аноним 2016/01/28 21:12:35  №637210 665
>>629822 (OP)
Ребят помогите пожалуйста "W5.1 Исправь и переделай программу, чтобы она работала нормально. Например, эта версия позволяет школьнику переплатить за кредит, так, что банк ему становится должен — это плохо! Подсказка: перед тем, как платить, надо проверять, сколько осталось долга, и если он меньше 5000, то платить только остаток и завершать цикл через break" как заставить его платить остаток ??
Аноним 2016/01/28 21:26:11  №637216 666
>>637198
>foreach($offers as &$sentence)
Объясни, плиз, как работает такая конструкция?
Что даёт & перед $sentence?
А так очень хорошо решено ОП потом что-нибудь найдёт наверняка - у него дельные замечания обычно.
Но вот массив с регулярками и реплейсментом сразу можно было готовым сделать, а не набивать его после начала работы скрипта.
Вот так:
$regexp = array('/[ ][,][ ]/u', '/[ ][!][ ]/u', '/[ ][?][ ]/u', '/[ ][.][ ]/u');
$replacements = array(', ', '! ', '? ', '. ');
Эффект будет тот же, разумеется.
Аноним 2016/01/28 21:28:03  №637217 667
>>637216
Едритские звёздочки, всё время забываю.
http://pastebin.com/1iYpcSXF - твои массивы с регулярками и заменами.
Аноним 2016/01/28 21:39:23  №637227 668
>>635408
Не мог бы ты поподробней ответить каких именно?
Аноним 2016/01/28 22:18:36  №637259 669
>>637216
>Объясни, плиз, как работает такая конструкция?
>Что даёт & перед $sentence?
foreach ($arr as &$value) == foreach ($arr as $key => $value)
Ясно, неплохо, спасибо, не дошёл ещё до этого, хотя читал уже про & для ссылок внутри скрипта.
Многое проще будет удаваться записывать.
Аноним 2016/01/28 23:54:34  №637319 670
14540144745940.gif (2964, 360x288)
288x360
>>636803
Я по ходу сказочный долбоёб. 4 дня без отрыва решаю задачу с циклом и до сих пор не решил её. Какой пиздец, товарищи...
Аноним 2016/01/29 00:34:42  №637353 671
>>637319
Я сам решал не меньше, базарю.
При этом я каждый раз с самого начала переписывал скрипт полностью. После седьмого переписывания перестал считать.
У меня там было одно решение, в котором я расписал отдельно в echo, сколько прибавляется процентов именно каждый месяц, как всё отнимается ближе к концу, чтобы понять, где я промахиваюсь.
Но общая плата у меня почти сразу стала верной, не получалось от минуса избавиться, в который всё неизбежно уходило, пока анон не надоумил ввести дополнительную переменную для расчёта кредита без вычета месячной платы.
А сейчас я буквально с закрытыми глазами могу написать решение, при этом до сих пор помню некоторые цифры из решения - типа 262 рублей под конец, общей выплаты в 61270 и т.п.
Цикл как любой проходит - просто с закрытыми глазами вижу, многое стал предугадывать в работе циклов - благодаря ОПу и этой задачке.
Аноним 2016/01/29 01:15:53  №637367 672
В веб не секу, в пхп тоже.
Короч надо сделать что-то типо интернет магазина, который не имеет собственного склада, а формирует ассортимент из других магазинов.
Инфу о товарах других магазов можно брать по сути только с их страниц.
Сколько такая хуита обойдётся в деньгах и часах работы?
Аноним 2016/01/29 01:25:47  №637374 673
>>637367
http://www.youtube.com/watch?v=mnT2zCXunuc
Не такое?
А так, скорее всего, надо будет магазин свой поднять, а дальше подключить парсер. Тысяч около 20 за установку, настройку купленного ContentDownloader'а какого-нибудь.
Только толку от такого будет немного, базарю.
Аноним 2016/01/29 01:39:05  №637383 674
>>637374
Типо такого, но можно намного проще.
Толк понятно, что никакой, один мудак хочет сделать приложение, которое будет давать инфу по другим магазам, скидкам, хуиткам, понятное дело, что человеку проще в гугле погуглить пол часа, чем платить за какое-то приложение и искать что-то в нём пол часа.
Меня интересовал чисто ценовой вопрос, потому что в вебе не секу.
Аноним 2016/01/29 01:49:33  №637387 675
>>637383
>один мудак хочет сделать приложение, которое будет давать инфу по другим магазам, скидкам, хуиткам
Идея хорошая, но уже реализована Яндексом.
У него есть какой-то бар, который даже когда ты находишься на магазине Эльдорадо, покажет тебе, что на магазине М.Видео этот товар дешевле на столько-то рублей.
Тогда даже не скажу, сколько бы стоила такая система.
Нужен парсер по основным магазинам, собственная база, на которой будет размещаться информация.
В пределах 20к рублей - по самым скромным подсчётам. Но давно не заказывал ничего, не знаю теперешних цен.
Аноним 2016/01/29 02:34:04  №637396 676
Кто-нибудь тут?
ОП, у меня к тебе важный вопрос. Он не из "стандартных".

В общем, как узнать ширину/длинну и пр. параметры WebM? TinyIB использует mediainfo и ffmpegthumbnailer, с которыми у меня не срослось (точнее, у моего бесплатного хостинга не срослось с shell_exec и установкой ПО)
Если-ли способы узнать как минимум ширину и длину, но без всяких ненужных библиотек и пр.?
Аноним 2016/01/29 02:35:31  №637397 677
>>637396

В библиотеке getId3 нет парсера заголовков WebM? А вообще, это несерьезно, из-за хостинга переделвать код.
Аноним 2016/01/29 02:36:28  №637399 678
>>637396

> Если-ли способы узнать как минимум ширину и длину, но без всяких ненужных библиотек и пр.?
Почитать спецификации на формат файла и понять где она хранится. Учти что в видеофайлах часто есть отдельно форма контейнера и формат в котором кодируются видеоданные.
Аноним 2016/01/29 06:17:57  №637452 679
Как можно сократить
... = "/(\\.[а-я])|(\\,[а-я])|(![а-я])|(\\?[а-я])|(;[а-я])|(:[а-я])/u"
Аноним 2016/01/29 06:52:06  №637457 680
>>637210
остаток на каждый ход тебе известен, он записан в $creditBalace, как только он стал меньше 5000:
$paymentTotal = $paymentTotal + $creditBalance; //вместо 5000 платишь остаток
$creditBalance = $creditBalance - $creditBalance; //кредит погашен без переплат
break;
Аноним 2016/01/29 07:32:08  №637462 681
>>637457
сначало>>637457
поправка! проверяем условие $creditBank < 5000 после всех операций банка со счетом (процент и комиссия)

Аноним 2016/01/29 09:37:46  №637491 682
>>637457
все понел спасибо
Аноним 2016/01/29 10:46:40  №637503 683
>>637259

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

>>637134

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

Почему это плохо можно почитать в уроке про зависимости https://gist.github.com/codedokode/e1d31a31b37d5f635057

Статические методы нужны в редких случаях, когда методу не нужны поля объекта, обычно это вспомогательные функции вроде вывода объема файла словами "2,1 Гб". В большинстве случаев нам нужны нормальные объекты с обычными методами. Иначе это не ООП. Так как суть ООП как раз в том что мы создаем классы для описания объектов используемых в программе. А со статическими методами объектов нет.

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

>>637146

Тебя никто на фриланс не гонит, можешь заняться чем-нибудь другим.

>>637125

Вордпресс это CMS. Погугли.

>>637064

ЧТо значит на шторм? Как я понимаю, он умеет запускать интерпретатор пхп и Апач еси их установить и прописать нужные настройки.

>>637043

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

>>637042

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


Аноним 2016/01/29 10:51:00  №637507 684
>>637025

> Еще по видам джойнов: помню шо имеет значение порядок объединения таблиц, но не помню почему.
Для обычных джойнов не имеет, для LEFT JOIN имеет значение так как он несимметричен и выполняется в определенном порядке.

> Я вот не знаю, как буду работать. Скажут пофиксить такой код, буду наверное дня три только сидеть и разбирать последовательность вызовов.
Отладчик надо освоить, на learn.javascript есть статья.

Паста про иннодб, неформатированная

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

> Как вообще работает транзакция? Можно ли вставить миллион записей одной транзакцией, или оно пишется куда-то (в память, на диск, во временную таблицу), где есть лимит?
Транзакция это изолированный набор изменений, соответствующий принципам ACID:

https://ru.wikipedia.org/wiki/%D0%A2%D1%80%D0%B0%D0%BD%D0%B7%D0%B0%D0%BA%D1%86%D0%B8%D1%8F_(%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0)
https://ru.wikipedia.org/wiki/ACID

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

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

В реальном мире частью требований можно жертвовать (менять уровень изоляции транзакций) в пользу производительности: https://ru.wikipedia.org/wiki/%D0%A2%D1%80%D0%B0%D0%BD%D0%B7%D0%B0%D0%BA%D1%86%D0%B8%D1%8F_(%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0)
https://ru.wikipedia.org/wiki/%D0%A3%D1%80%D0%BE%D0%B2%D0%B5%D0%BD%D1%8C_%D0%B8%D0%B7%D0%BE%D0%BB%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D1%82%D1%80%D0%B0%D0%BD%D0%B7%D0%B0%D0%BA%D1%86%D0%B8%D0%B9
http://habrahabr.ru/post/135217/

Вопросы по транзакциям любят задавать на собеседованиях. Я считаю это правильно.

Как реализовать изоляцию транзакций и параллельную их работу с минимумом задержек?

В MySQL в InnoDB используется так назваемая мультиверсионность:

https://en.wikipedia.org/wiki/Multiversion_concurrency_control
https://dev.mysql.com/doc/refman/5.0/en/innodb-multi-versioning.html

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

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

Соответственно если ты выполняешь запросы по одному, каждый идет отдельной транзакцией и mysql после каждого должна ждать диск. Это неэффективно. Если ты делаешь 100 запросов одной транзакцией, то mysql имеет право накапливать данные в памяти (или писать на диск без подтверждения и без ожидания), а сбросить на диск только в конце транзакции, и это работает быстрее.

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

Возвращаясь к MVCC - там для каждой строчки таблицы добавляется несколько скрытых полей, вроде таймстампа (время добавления) и номера транзакции. При изменениях в таблице (update/delete/insert) исходные данные не удаляются, а просто добавляются новые строчки. При выборке если есть несколько версий строки, по id транзакции и таймстампу выбирается самая новая видимая данному пользователю версия. При коммите новая версия становится видна всем, старая становится неактуальной и специальный фоновый тред очищает такие строки и помечает занимаемое ими место как свободное.

Условно говоря, у нас есть таблица такого вида:

id | text
1 | hello

В InnoDB она хранится с id транзакции которая ее вставила и таймстампом:

txn | timestamp | id | text
1000 | 12:00:00 | 1 | hello

Как мы видим эта строчка вставлена транзакцией 1000, которая (допустим) давно закоммичена.

Допустим 3 пользователя подключенных к базе параллельно открывают 3 транзакции. Первый (транзакция 1001) удаляет строчку (и пока не закоммитил транзакцию), второй (1002) и третий (1003) добавляют вторую строчку.Таблица выглядит так:

txn | timestamp | id | text
1000 | 12:00:00 | 1 | hello
1001 | 13:00:00 | 1 | (deleted)
1002 | 13:00:00 | 2 | world1
1003 | 13:00:00| 3 | world2

Пользователь внутри транзакции видит только закоммиченные чужие изменения, а также все свои. То есть транзакция 1001 видит изменения из закомиченной транзакции 1000 и незакомиченной 1001. Если пользователь сделает SELECT из этой транзакции, то база будет брать только строки транзакций 1000 и 1001, причем если эти строки соответствуют одному id, то база берет самую новую версию.

Транзакция 1001 видит только эти строки:

txn | timestamp | id | text
1000 | 12:00:00 | 1 | hello
1001 | 13:00:00 | 1 | (deleted)

Так как id одинаковый то она берет последнюю версию, которая помечена как удаленная. Больше строк нет потому SELECT вернет 0 строк.

Транзакция 1002 видит только строки от транзакций 1000 и свои, 1002. Транзакция 1003 видит строки от транзакций 1000 и 1003. Что они получат при выборке всех строк, подумай сам.

Допустим теперь транзакции 1002 и 1003 отменяются, а 1001 коммитится. Строки для отмененных транзакций стали неактуальными, и их позже удалит сборщик мусора. А так как 1001 теперь закоммичена то любой пользователь видит эту строку. При выборке он получит такие строки:

txn | timestamp | id | text
1000 | 12:00:00 | 1 | hello
1001 | 13:00:00 | 1 | (deleted)

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

Строка транзакции 1000 после коммита тран. 1001 стала неактуальной, и ее позже удалит сборщик мусора. А также строку 1001 которую после этого нет смысла хранить.

На первый взгляд сложно, но смотри какое преимущество имеет эта система: транзакции не меняют существующие данные, а только добавляют новые. Получается нет такой ситуации, что 2 транзакции могут писать в одну строку (или одна пишет, а другая читает). У нас есть либо закомиченные ранее строки, из которых идет только чтение, либо видимые только одной транзакции незакомиченные строки, которые принадлежат только ей. Раз так, нам не надо делать блокировки на эти строки и не надо ждать например пока блокировка освободится (а блокировки нужны именно когда есть 2 писателя или писатель + читатель).

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

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

В redis тоже нет, но там однопоточное приложение (асинхронное) и параллельный доступ к данным невозможен. В MongoDB нету, там блокируется вся коллекция (до версии 3 - блокировалась вообще вся база) на время записи, но там и транзакций нет.

.... продолжение далее ...
Аноним 2016/01/29 10:52:06  №637511 685
>>637025

продолжение пасты

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

.....

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

В redis тоже нет, но там однопоточное приложение (асинхронное) и параллельный доступ к данным невозможен. В MongoDB нету, там блокируется вся коллекция (до версии 3 - блокировалась вообще вся база) на время записи, но там и транзакций нет.

Обрати внимание что речь тут шла о блокировках для модификации данных. MVCC (почти) не требует их наличия. Но MySQL все равно блокирует строки, которые изменяются или удаляются. Это делается для того чтобы 2 транзакции не могли сделать противоречащие изменения (например записать разные значения в одну и ту же строку) и нарушить ACID. MySQL делает блокировки как минимум в таких случаях:

- есть 2 писателя (UPDATE/DELETE) для 1 и той же строки
- есть писатель + читатель (SELECT) для 1 и той же строки

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

https://dev.mysql.com/doc/refman/5.0/en/innodb-transaction-model.html
http://webew.ru/articles/1383.webew

В особо тяжелых слуаях можно словить взаимную блокировку - deadlock:

https://ru.wikipedia.org/wiki/%D0%92%D0%B7%D0%B0%D0%B8%D0%BC%D0%BD%D0%B0%D1%8F_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0

Например транзакция A хочет апдейтить строку 1, за ней строку 2. Транзакия B хочет апдейтить сначала 2, потом 1. Каждая их них захватит блокировку по одной строке и никогда не получит блокировку по второй. MySQL обнаруживает дедлоки и решает их принудительным откатом одной из транзакций.

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

Подробности о работе и состоянии движка InnoDB можно получить запросом (попробуй это сделать):

SHOW ENGINE InnoDB STATUS\G

Увидеть список соединений и выполняющихся запросов можно командой SHOW FULL PROCESSLIST\G. Убить поток-воркер можно командой KILL 123; (принципы ACID и целостность данных это не нарушит).

Наконец, вернемся к этому вопросу:

> Можно ли вставить миллион записей одной транзакцией, или оно пишется куда-то (в память, на диск, во временную таблицу), где есть лимит?
В InnoDB есть пул страниц (InnoDB buffer pool) в памяти: https://dev.mysql.com/doc/refman/5.5/en/innodb-buffer-pool.html

Размер пула задается в конфиге mysql. В нем хранятся страницы (строки таблиц и куски индексов). При выборке данных mysql читает данные с диска в пул (если их там нет) и в нем уже делает выборку. При записи данные пишутся в пул, а при нехватке места сбрасываются на диск, также они надежно сбрасываются на диск при коммите транзакции.

Потому ответ на твой вопрос: данные пишутся в память пока есть место и на диск. Размер базы ограничен местом на диске, настройками конфига и встроенными ограничениями (вроде того что размер строки ограничен 65536 байтами).

Как ты понимаешь, от объема пула зависит часто ли базе придется обращаться к диску, а диск очень медленный. На серверах БД под пул выделяют 80-90% свободной памяти, также есть мнение что размер пула должен быть не меньше чем размер индексов (и «горячих» данных). Не редкость иметь например 100 Гб пула если на сервере много памяти.

А теперь вопросы для проверки.

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

Если это важно, то в MyISAM данные хранятся так: для каждой таблицы и каждого индекса делается отдельный файл и в нем хранятся строки таблиц или записи индекса.

2) Почему MVCC позволяет это не делать?

3) Более сложный вопрос, почему InnoDB блокирует строки, хотя MVCC позволяет это не делать? Почему строки блокируются на все время транзакции (а не на время выполнения запроса)? Что будет если не блокировать?

4) И еще, если программа выбирает какие-то данные (SELECT), меняет их и записывает назад в базу (UPDATE), как запретить другим в это время их менять?

Аноним 2016/01/29 10:57:48  №637515 686
>>637012

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

>>637005

Он их в консоли ведь запускает? А с веб-сервером можно через браузер запускать.

>>636981

Про сервер - почитай урок про Апач в ОП посте. Может поможет.

>>636721
>>636961

> Но там только 1 картинка в коде. И что делать с текстом? Не очень ясно
Имеется в виду если ширина страницы меньше чем картинка то картинка ужимается. Если больше - то картинка НЕ увеличивается так как растровые картинки нельзя увеличивать, они мылятся.

С текстом особо ничего и не надо делать.

Аноним 2016/01/29 11:01:14  №637520 687
Знаком тут кто с YouTube API ?
Аноним 2016/01/29 11:03:21  №637521 688
>>636904

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

- как создать объект: через new, через вызов метода-фабрики или еще как-то
- объект какого класса создать
- что передать в конструктор
- есть ли зависимость от других сервисов (т.е. надо ли их передать в конструктор)

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

Но в твоем приложении ты можешь упростить задачу и сделать не универсальный контейнер + конфиг к нему, а заточенный под твою задачу, где все сервисы прописаны в классе и не требуется его настраивать. То есть с методами типа getPdo(), getUserMapper() и тд.
Аноним 2016/01/29 11:06:06  №637522 689
Аноним 2016/01/29 11:08:49  №637523 690
Перекат будет? Почти 700 постов уже.
Аноним 2016/01/29 11:15:14  №637524 691
А для Javascript и html+css нормально использовать phpstorm? Очень важно автодополнение и автоподстановка.
Аноним 2016/01/29 11:17:16  №637526 692
>>636895
>>636799

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

>>636806

3 формы = 3 ифа, немного

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

>>636763

Значит надо идти учить Си++, C#, java.

>>636758

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

>>636753

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

>>636714

А ты порешай наши задчки из ОП поста и покажи решения.

>>636684

> function isArrayOk($arr)
Копипаста, почему бы не сделать массив со списком полей и не сравнить их готовой функцией?

> function isArrayOk2($arr)
Это уже лучше, хотя мне кажется проще сделать через 2 вызова array_diff. Ну и не надо число 10 прописывать, надо его вычислять автоматом.



Аноним 2016/01/29 11:21:32  №637530 693
>>636575

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

>>636570

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

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

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

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

Аноним 2016/01/29 11:22:15  №637531 694
>>636555

В задачах в ОП посте на ХТМЛ есть несколько ссылок.

Аноним 2016/01/29 11:22:37  №637532 695
>>637523

Пока нет, горим тут.
Аноним 2016/01/29 11:40:08  №637535 696
>>637526
>3 формы = 3 ифа, немного
Хм, я думал, что надо больше.
Ведь у нас 1 даёт одну форму, 2, 3, 4 дают другую, а все остальные числа дают третью.
Допустим, у нас первое вот так пойдёт:
if ($lastThousandNum == 1) {
$rouble = 'рубль';
echo $rouble;
} else {
$rouble = 'рублей';
echo $rouble;
}
А дальше я вот не знаю, как можно заставить работать вот такое нечто:
if ($lastThousandNum == 2|3|4) {
$rouble = 'рубля';
echo $rouble;
}
Такое просто не работает! Можно ли как-нибудь этот момент представить? Пробовал по-разному представлять там "или это, или то, или сё". Гуглил-шмуглил - ничего не нашёл.
Иначе можно будет только копипастить:
if ($lastThousandNum == 2) {
$rouble = 'рубля';
echo $rouble;
} elseif ($lastThousandNum == 3) {
$rouble = 'рубля';
echo $rouble;
} elseif ($lastThousandNum == 4) {
$rouble = 'рубля';
echo $rouble;
}
Наверняка же какой-то способ должен быть.
Аноним 2016/01/29 11:46:39  №637537 697
>>637535
>$lastThousandNum
*$lastNum
Исправил.
Это я сейчас думаю с тысячами как быть - не получается без костылей исправить момент с женским родом 1 и 2 тысяч.
>"452" - это "четыреста пятьдесят два тысячи"
Я могут просто сделать в этом случае ещё одну функцию именно для тысяч, которая 1 и 2 в последней цифре тройки переведёт в "одна" и "две", либо сделать массив $menSpelling, который будет подставляться в функцию вместо $femaleSpelling - и менять то, что и так должно выходить правильно.
Не получается изменить внутри общей функции, чтобы всё было компактно.
Аноним 2016/01/29 11:50:36  №637538 698
>>637396
getId3 версии 1.9.4 может давать подробную информацию о всех медиафайлах, включая webm.
Аноним 2016/01/29 12:19:06  №637551 699
в обще не могу понять как это делать
W5.1
W5.2
у меня есть шансы?
Аноним 2016/01/29 12:31:42  №637556 700
14540599026760.jpg (79, 486x600)
600x486
Выручайте, ребята. Пхп в последний раз видел в 2006.
А тут надо было по-быстрому одну хуету сделать, и что-то даже с ней обосрался
Есть хтмл форма с одним полем и сабмитом, нужно по сабмиту отправлять мейл с содержимым формы на определённый адресс

Форма:
<form action='form.php' method="post">
<fieldset>
<input id="field" name="field" type="text" placeholder="Координаты" class="form-control input-md" required="">
<button id="submit" name="submit" class="btn btn-primary btn-lg">Отправить</button>
</fieldset>
</form>

Скрипт:
<?php
if(isset($_POST["submit"]) and ($_POST["field"]=="")) {
echo "Пусто";
} else {
$subject = 'New Customer from DoorsLandingPage'
$message = $_POST['field'];
$message = addslashes($message);
$headers = "From: Landing"; // Sender's Email
mail("тут_е_мейл", $subject, $message, $headers);
echo "Отправлено";
sleep(2);
echo "<meta http-equiv=\"refresh\" content=\"0; url=\"адрессайта\"/>";
}
?>

Чому оно всё время мне Еррор 500 даёт?
Аноним 2016/01/29 12:35:51  №637558 701
>>637556
>Еррор 500
Это ведь северу пиздец, и от самого скрипта не зависит, насколько я помню.
Аноним 2016/01/29 12:36:21  №637559 702
>>637556
ПХП твой тут непричём
www.jino.ru/help/faq/problems/error-500/
Аноним 2016/01/29 12:41:49  №637562 703
>>637551
>ыфвфывфывфвфы@mail.ru
>2016
>у меня есть шансы?
Нет.
Аноним 2016/01/29 12:43:19  №637563 704
14540605998550.gif (2883, 354x349)
349x354
>>637558
>>637559
Вот блин. Всё нахуй в айти всегда через сраку, сука.
Спасибо, тем не менее, парни. Добра!
Аноним 2016/01/29 12:46:06  №637565 705
>>637558
>>637559
Вы тролите или дауны? Там просто точка с запятой пропущена.
Пятисотый статус здесь как раз из-за ошибки в php скрипте.
Аноним 2016/01/29 12:46:17  №637566 706
Друзья, а как сделать в пхп ввод строки пользователем? Или это сделать невозможно?
Аноним 2016/01/29 12:48:49  №637569 707
14540609293070.gif (3530, 500x321)
321x500
>>637565
Ох ё! Спасибо тебе огромное, товарищ! Починил и говно это заработало.
Держи дочку Бори Немцова
Аноним 2016/01/29 12:49:10  №637570 708
>>637562
ну и что мне теперь делать я не хочу быть агрономам(
Аноним 2016/01/29 13:13:08  №637578 709
>>637570
Если ты идешь в айти ради денег у тебя ничего не получится.
Аноним 2016/01/29 13:16:30  №637580 710
>>637578
не совсем так , мне это интересно но видимо я глуповат
Аноним 2016/01/29 13:22:50  №637582 711
>>637578
да и все что я умею это сидеть за компутиром,
это единственное в чем я хоть как-то разбираюсь
Аноним 2016/01/29 13:32:05  №637586 712
>>637580
>>637582
Тогда учи и превозмогай. В задачах нет ничего сложного, главное подумать немного.
Аноним 2016/01/29 13:35:34  №637589 713
>>637586
наверно просто плохо старался, спасибо тебе теперь я что-то понел.
Аноним 2016/01/29 13:41:12  №637592 714
Абу негодуе

swag.js:4984
post.comment = post.comment.replace('<script ', '<!--<textarea '); //какой-то УМНИК решил, что будет гениальной идеей в посты вставлять кривой <script> с document.write
post.comment = post.comment.replace('</script>', '</textarea>-->');
Аноним 2016/01/29 14:42:00  №637623 715
>>637592
swag.js:4984
post.comment = post.comment.replace('<script ', '<!--<textarea ');
document.write
post.comment = post.comment.replace('</script>', '</textarea>-->');
Аноним 2016/01/29 15:07:22  №637642 716
У кого-нибудь есть простенький круд или гостевуха на друпале? Заебало по хеллоуворду на каждом цмс-фреймворке пистаь, все равно они все однотипные.
Аноним 2016/01/29 15:28:20  №637665 717
Аноним 2016/01/29 16:15:43  №637695 718
14540733431410.jpg (69, 768x730)
730x768
Никак не могу понять, в чем проблема в моем массиве.
Хром выкидывает ошибку непредвиденного ДАББЛ АРРОУ unexpected T_DOUBLE_ARROW.

Сначала делал по новой схеме:
<?php
$leftMenu = [
['link' => 'Домой', 'href' => 'index.php'],
['link'=>'О нас', 'href'=>'about.php'],
['link'=>'Контакты', 'href'=>'contact.php'],
['link'=>'Таблица умножения', 'href'=>'table.php],
['link'=>'Калькулятор', 'href'=>'calc.php']
];
?>

Потом, задумался, что у меня старая версия ПХП установлена и сделал по-старинке, но все равно та же херня.

<?php
$leftMenu = array(
('link' => 'Домой', 'href' => 'index.php'),
('link'=>'О нас', 'href'=>'about.php'),
('link'=>'Контакты', 'href'=>'contact.php'),
('link'=>'Таблица умножения', 'href'=>'table.php'),
('link'=>'Калькулятор', 'href'=>'calc.php')
);
?>

Где проблема? Кто-нибудь ее видит?
Аноним 2016/01/29 16:16:42  №637696 719
>>637695
Точнее, даже не так, когда делал по новой схеме, то у меня интерпретатор даже не распознавал массив и показывал анэкпектед "[".
Аноним 2016/01/29 16:20:10  №637699 720
14540736107160.png (23, 1919x143)
143x1919
>>637695
$leftMenu = array(
array('link' => 'Домой', 'href' => 'index.php'),
array('link'=>'О нас', 'href'=>'about.php'),
array('link'=>'Контакты', 'href'=>'contact.php'),
array('link'=>'Таблица умножения', 'href'=>'table.php'),
array('link'=>'Калькулятор', 'href'=>'calc.php')
);
Аноним 2016/01/29 16:21:21  №637702 721
>>637695
>['link'=>'Таблица умножения', 'href'=>'table.php],
table.php не закрыл кавычкой, например.
Аноним 2016/01/29 16:23:33  №637703 722
Аноним 2016/01/29 16:24:55  №637705 723
>>637696
Аа, ну вот и ответ: IDE ожидает ', а получает неожиданную ].
Аноним 2016/01/29 16:25:53  №637708 724
>>637703
>>637702
Кавычкой закрыл, просто стер ее случайно, когда скобки менял.

>>637699
Что ты хочешь сказать?
Аноним 2016/01/29 16:27:20  №637709 725
Насколько оправданно самому возиться с установкой Апаче, его настройкой вместо сборки типа Хамп?
Аноним 2016/01/29 16:27:36  №637712 726
>>637705
Так в чем проблема-то тогда? У меня сейчас истерика начнется. Программа ни единой ошибки не засекла, сам я их тоже не вижу.
Аноним 2016/01/29 16:27:59  №637714 727
>>637709
Хамп хуита, попробуй накатить опен сервер.
Аноним 2016/01/29 16:29:07  №637715 728
>>637714
В чём отличие? И стоит ли вообще делать, как говорит ОП - самому поочерёдно ставить апач, настраивать и его тп?
Аноним 2016/01/29 16:30:09  №637717 729
>>637712
Так у тебя не заработало, что ли?
Вот же ссылку я на Идеоне дал, в которой массив нормально читается: http://ideone.com/RC7NY1
Проблема и была в не закрытой кавычке, разве нет?
Аноним 2016/01/29 16:30:38  №637718 730
14540742388000.png (52, 582x465)
465x582
14540742388011.png (43, 1919x136)
136x1919
>>637708
В первом варианте не закрыл кавычку, во втором неправильно объявляешь массив в массиве.

У меня пхп версии 5.6, оба варианта работают.
Аноним 2016/01/29 16:31:10  №637720 731
>>637714
Опенсервер говно, денвер рулет.

>>637715
Если ты на работе собираешься каждый раз ставить и настраивать апач, то ставь и настраивай.
Аноним 2016/01/29 16:31:30  №637721 732
>>637715
А зачем? Если ты любишь красноглазить и разбираться во всяких штуках низкоуровневых, то пожалуйста. Если любит нажать комбинацию кнопок, и чтобы все работало - ставь опен сервер. Отличие в стабильности, мультиверсионности и удобства интерфейса как такового.
Аноним 2016/01/29 16:33:04  №637722 733
>>637718
Няшный тёмный скриншот из какой IDE?
Аноним 2016/01/29 16:33:15  №637723 734
>>637721
Блин, где вы были два часа назад, когда я муторно возился с каждой ошибкой апача... Его теперь сносить лучше и ставить опен или поверх можно поставить и не будет проблем?

И надо ли ставить опенсервер на phpstorm или нет?
Аноним 2016/01/29 16:33:39  №637724 735
>>637722
все IDE имеют одинаковые цветовые гаммы, если что
Аноним 2016/01/29 16:34:11  №637725 736
>>637722
Это Атом с темой One Dark.
Аноним 2016/01/29 16:34:48  №637726 737
>>637717
Проблема решена и была вот в чем => >>637718
Я не правильно объявлял массив в массиве. Спасибо за участие, анончик.

>>637718 - тебе особое огромное спасибо.
Аноним 2016/01/29 16:37:30  №637727 738
>>637723
Эм, попробуй все снести и поставить опен сервер. Тебе он понравится, гарантирую.

>И надо ли ставить опенсервер на phpstorm или нет?
Не понял вопроса. Пхпшторм это же редактор, да? Как на него можно сервер ставить?
Аноним 2016/01/29 16:39:35  №637728 739
Аноним 2016/01/29 16:40:02  №637730 740
>>637718
Ах, да, у меня 5.3 стоит, на ней не работает вариант первый.
Аноним 2016/01/29 16:42:55  №637731 741
>>637727
Да не совсем редактор, это IDE полноценная, у него есть свой сервер и интерпретатор и т.п., просто из настроек я вижу, что можно сервер поставить сторонний, но не знаю, надо ли
Аноним 2016/01/29 17:09:03  №637747 742
>>637731
Задай себе вопрос. У тебя пыха работает во встроенном сервере? Дальше следуй алгоритму: if (true) { echo "Нахуя мне что-то еще?"; } elseif (false) { echo "Поставлю-ка я опен сервер."; } else { echo "Зачем мне вообще программирование? Лучше пойду займусь чем-нибудь интеллектуальным"; }.
Аноним 2016/01/29 17:09:43  №637748 743
>>637623
Ты даже скопировал неправильно

>>637507
>Отладчик надо освоить, на learn.javascript есть статья.
Распиши подробно, как этим пользоваться. На learn.javascript описано только как
он выглядит, и как ставить точки останова.
Все равно ведь придется ползать по коду и искать, где ставить эти точки останова.
Вот я хочу отследить, как на сосаче происходит обновление треда.
Либо при нажатии на кнопку "обновить", либо по таймеру.
На кнопке "обновить тред" функция updatePosts на строке 4949.
В ней метод объекта Post.download(function(data){...}).
В data приходит объект с массивом постов, полем с ошибкой и т.д.
Дальше на строке 4968 в цикле $.each для каждого элемента в data вызывается
appendPost(tmpost.getJSON())
appendPost объявлена на 5081.
В ней вызывается generatePostBody, объявленная на 4982. В ней на лету склеивается
корявый html из строк, вместо того чтобы использовать шаблон.
Затем пост добавляется через $('#thread').append()

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

Так все-таки, какая польза от отладчика кроме возможности остановить исполнение
в определенный момент (а этот момент еще надо вычислить) и посмотреть значение переменных?
Аноним 2016/01/29 17:26:27  №637758 744
Вангую, что пошлете меня читать мануалы, но почему в случае, когда двойные кавычки входят в другие двойные выскакивает ошибка T_LNUMBER? Неужто их нужно экранировать? В экмаскриптах такого не было.
Аноним 2016/01/29 17:26:46  №637759 745
Аноним 2016/01/29 17:39:23  №637764 746
>>637526
>Да. И кстати такой принцип хранения не соответствует принципам нормализации (погугли нормализацию БД), так что страдай теперь. Надо было с самого начала правильно делать.
А как осуществить хранение idишников пользователей, которые находятся в данное место в определённом месте сайта (в комнате чата), не создавать же для каждого отдельное поле в таблице. Или надо было создать отдельную таблицу, в которой бы просто хранились айдишники и принадлежость их к той или иной комнате чате?
Аноним 2016/01/29 17:44:44  №637767 747
Аноним 2016/01/29 17:54:18  №637781 748
>>637520
Уже познакомился.
Задавайте свои ответы.
Аноним 2016/01/29 17:57:07  №637784 749
>>637759
У тебя там Успешный статус.
В чем проблема то?

И как двойные кавычки вставить в двойные кавычки, то? Это же 2 пары получится, конечно нужно экранировать.
Аноним 2016/01/29 18:07:28  №637791 750
>>637784
>У тебя там Успешный статус.
Что, прости?
Про кавычки понял.
Аноним 2016/01/29 18:09:53  №637792 751
>>637791
Твой код выполнялся без ошибок
Аноним 2016/01/29 18:13:14  №637796 752
14540803944880.png (6, 408x288)
288x408
Поясните, кто делал задания на КСС, что тут требуется?

Какая-то наркомания, какой-то родитель, 10 пикселей всюду разные, 34% - 10 пикселей, что это вообще такое? Вообще ничего не понятно.
Аноним 2016/01/29 18:18:12  №637799 753
>>637796
Что такое margin?
Что такое padding?
Что такое width?
Аноним 2016/01/29 18:19:16  №637801 754
>>637799
Это я нагуглил и понял, но вот что требуется в задании? Сделать эти два прямоугольника?
Аноним 2016/01/29 18:20:09  №637802 755
Аноним 2016/01/29 18:21:55  №637804 756
>>637792
А, ну, я просто сначала по привычке две в две закинул по принципу js. Потом понял ошибку и изменил на одинарные.
Аноним 2016/01/29 18:32:19  №637813 757
>>637804
Какому "принципу js"? В яваскрипте все точно так же. Нажми ctrl+j и скопируй в консоль var str = "abc"def"ghi";

>>637796
Что тут может быть непонятно? Желтый блок занимает две трети ширины родительского блока (серый прямоугольник), прижат к левому краю контейнера.
Фиолетовый блок то же самое, прижат вправо.
Между блоками 10px по вертикали. У родительского контейнера (серый прямоугольник) поля по 10px.

Аноним 2016/01/29 18:41:45  №637833 758
>>637813
>ctrl+j
Ты хотел сказать ctrl+f12.
Аноним 2016/01/29 18:43:48  №637837 759
Аноним 2016/01/29 18:45:56  №637841 760
>>637726
Теперь я не понимаю, какие проблемы в первом твоём варианте были после исправления той кавычки.
Там массив правильно сам по себе определён же!
>>637730
Аа, теперь понимаю.
А второй вариант я даже не посмотрел, в чём там дело.
Аноним 2016/01/29 18:50:43  №637848 761
>>637841
Я уже сменил на 5.6 и апач 2.4 накатил.
Аноним 2016/01/29 18:59:53  №637858 762
>>637813
> родительского блока (серый прямоугольник)
в задании сказано, что серые прямоугольники верстать не надо. Что будет родителем в таком случае?
Аноним 2016/01/29 19:11:25  №637872 763
Аноним 2016/01/29 19:15:55  №637878 764
Аноним 2016/01/29 19:16:59  №637879 765
Аноним 2016/01/29 19:20:43  №637881 766
>>637879
Не благодари за меня.
Аноним 2016/01/29 19:28:35  №637889 767
>>622151
Если бы ты его внимательно слушал, то понял бы, что он вообще с формочек на делфи начинал.
Аноним 2016/01/29 19:32:17  №637893 768
>>622151
>но боюсь пхп-макаке о таком и мечтать нельзя
Чего это нельзя? Всякие Epam и Softserve набирают PHP миддлов и синьеров. Да и вакансий на PHP за рубежом не меньше чем в СНГ.
Аноним 2016/01/29 19:39:51  №637900 769
>>637893
Какая разница сколько там вакансий? Кто возьмет на них простого хуя из другой страны, когда и в своей пхп девелоперов полно?
Аноним 2016/01/29 19:43:37  №637905 770
>>637900
Лол, точно такое же можно сказать про все остальные ИТ вакансии. Тем не менее очень много людей уезжают по H1B. Да и по L1 тебя так же могут перевести как PHP девелопера.
Аноним 2016/01/29 19:47:24  №637908 771
>>637905
>Человек без высшего образования может быть нанят по визе H1B в США, если он сможет подтвердить, что является специалистом, эквивалентным дипломированному, на основании опыта двенадцати или более лет в определенной отрасли занятий.
Пиздос
Аноним 2016/01/29 19:50:04  №637911 772
>>637908
Да, для визы H1B нужно иметь вышку (как минимум бакалавр) которую признают как Computer Science degree. Для визы L1 это требование отсутствует, но её обычно получить сложнее чем H1B.

А вообще если интересно, проследуй в /em/, там есть тред с пояснениями.
Аноним 2016/01/29 19:51:09  №637913 773
>>637908
Средний возраст иммигранта 28-32 года.
Тебе сейчас 16-20 лет, так что если устроишься на работку в ближайщее время, то вполне впишешься в график.
Аноним 2016/01/29 19:52:51  №637917 774
>>637913
12 лет это уж слишком, полжизни пройдет, мне уже к земле надо будет готовиться, а не к эмиграции.
Аноним 2016/01/29 19:54:31  №637918 775
>>637917
Лол, а я думал, что один, кто умрет до 40.
Аноним 2016/01/29 19:55:04  №637919 776
>>637913
>Тебе сейчас 16-20 лет
но мне 25
Аноним 2016/01/29 19:55:54  №637920 777
>>637917
Так опыт 12+ лет обязателен если у тебя нет высшего образования. Если оно у тебя есть, и служба которая выдает визы признает его как Computer Science degree, тогда на опыт работы будет смореть только твой работодатель.
Аноним 2016/01/29 19:59:45  №637923 778
>>637920
У бОльшей части пхп-треда нет высшего образования в области IT.
Аноним 2016/01/29 20:00:14  №637924 779
>>637920
Я бы даже сказал, у всех.
Аноним 2016/01/29 20:27:59  №637948 780
>2016
>изучать РНР только ради каких-то денежных вознаграждений в будущем
Свои приложения надо пилить, сервисы, сайты для людей.
А не надеяться на дядю.
Аноним 2016/01/29 20:28:40  №637949 781
>>637948
Много уже своих приложений запилил, бизнесмен?
Аноним 2016/01/29 20:28:54  №637951 782
Четвертая версия select2 еще зеленая что ли?
https://jsfiddle.net/v699fwb3/1/
Странное позиционирование списка это баг, или так и должно быть?

В 3.5 этой фигни нет.
https://jsfiddle.net/v699fwb3/3/

Ну елки зеленые, как же это утомляет.
inb4: сейчас оп посоветует перечитать пять тысяч строк исходников, чтобы пофиксить эту мелочь.
Аноним 2016/01/29 20:48:21  №637967 783
>>637951
>inb4: сейчас оп посоветует перечитать пять тысяч строк исходников, чтобы пофиксить эту мелочь.
Таки придется, если ты велосипедов не нагуглил.
Аноним 2016/01/29 20:57:03  №637973 784
>>637919
Есть тут ещё такие?
Аноним 2016/01/29 20:57:55  №637976 785
>>637919
Мне скоро 22. Знаю очень мало.
Аноним 2016/01/29 21:06:49  №637982 786
У меня в задаче написано что если кредитбаланс будет меньше, или равен нулю, то цикл надо брейкать, почему он продолжает считать 0 рублей до 20 месяца?
Аноним 2016/01/29 21:08:24  №637983 787
>>637982
А твой код где увидеть?
Аноним 2016/01/29 21:09:48  №637985 788
>>637982
Либо кредитбаланс никогда не становится меньше или равен нулю.
Либо ты как те два дебила выше путаешь знаки больше/меньше.

Код выкладывай.
Аноним 2016/01/29 21:53:54  №638028 789
Ляпаю тут несколько страничек, особое внимание тому, чтобы леваков не ходило, поэтому было решено сделать авторизацию.
Делаю через сессии.
При старте сессии на каждой из страниц вроде всё нормально. Авторизовался ранее - работаешь. Не авторизовался - редиректит на логин страницу. В качестве значений есть $_SESSION['userlogin'] и $_SESSION['userid']. Отсюда же вопрос. Подсунуть эти значения посетитель как-то может? Надо ли проверять их валидность на каждой из открываемых страниц с сессиями или же достаточно просто проверки на их наличие?
Аноним 2016/01/29 22:01:01  №638036 790
>>638028
>Подсунуть эти значения посетитель как-то может?
Подсунуть эти значения из ничего никак не выйдет. Подсунуть можно айди сессии другого пользователя, но тут уже нужен доступ к его кукам, который не так-то просто получить. Ну и еще можно будет формы отправлять с других сайтов под именем пользователя, это называется csrf и у ОПа на эту тему есть урок.
https://github.com/codedokode/pasta/blob/master/security/xsrf.md
Аноним 2016/01/29 22:03:54  №638037 791
Пилите перекат, господа
Аноним 2016/01/29 22:05:20  №638038 792
Аноним 2016/01/29 22:07:08  №638039 793
>>638036
>>638028
Кстати, чисто в теории можно будет написать скрипт, который сможет угадать чей-то айди сессии, но это уже оверкилл и такого делать никто не будет, я думаю. Если ты делаешь какую-то очень защищенную систему, можешь при логине записывать айпи пользователя и айди сессии, потом на каждой странице проверять, если айпи пользователя поменялся - удалять сессию и отправлять его на страницу логина. Конечно, у этой системы будет недостаток, например если пользователь переподключился к интернету и у него сменился айпи - его перенаправит на страницу логина.
Аноним 2016/01/29 22:08:54  №638042 794
Как внести в базу данных значения при помощи Аякса я понял, а как вывести эти значения на страницу без перезагрузки страницы? Нашёл два варианта подобного, и оба делаются через setInterval, так и должно быть? Или есть другие варианты? Это нормально вообще, запускать функцию каждую секунду всё время работы?
Аноним 2016/01/29 22:19:33  №638048 795
>>638038
Попробуй в условие поставить именно $pain.
Потому что $creditBalance же у тебя в минус уходит к тому моменту, когда тот-же $pain становится меньше $monthlyPayment (ты же сразу там же от $creditBalance отнимаешь $monthlyPayment), да сколько же можно? Или ты другой анон?
Аноним 2016/01/29 22:20:08  №638049 796
>>638036
Хм, т.е. xsrf пройдёт в любом случае, если пользователь залогинен и токен хранится в $_SESSION, проверяй я валидность userid (некоторое значение под sha512) или не проверяй?
То есть вариант - тупо вынести из сессии в качестве передаваемого параметра?

>>638039
Не думаю, что ip прямо так часто меняется.
Аноним 2016/01/29 22:21:19  №638051 797
>тот-же
тот же
Аноним 2016/01/29 22:23:24  №638053 798
>>638049
>т.е. xsrf пройдёт в любом случае, если пользователь залогинен и токен хранится в $_SESSION, проверяй я валидность userid (некоторое значение под sha512) или не проверяй?
Да.
>То есть вариант - тупо вынести из сессии в качестве передаваемого параметра?
Да.
>Не думаю, что ip прямо так часто меняется.
На телефонах может связь с сетью пропасть например. Меня бы раздражали постоянные вылеты на страницу логина из-за плохого интернета или связи.
Аноним 2016/01/29 22:24:11  №638055 799
Кто решал задачи на КСС? Никак не возьму в толк задачу 6, как добиться правильного решения?
Аноним 2016/01/29 22:25:13  №638056 800
>>638053
Либо переключаешься от одного бесплатного Wi-fi к другому, попивая чай в кафе.

Мимо
Аноним 2016/01/29 22:27:06  №638058 801
>>638048
Я два дня назад спрашивал как решать, просто время за задачу взяться есть только ночью, а вчера вообще не получилось, пытаюсь вот разобрать потихоньку.
Аноним 2016/01/29 22:31:33  №638062 802
>>638058
Ну, у тебя всё есть же для этого.
Вот какой совет: попробуй добиться правильной работы при первом прохождении скрипта при сумме, меньшей 5000.
Вот чтобы раз - и тут же выплатилась эта сумма.
Вот как бы ты это реализовал с помощью переменной $pain?
А дальше или сам уже всё увидишь, или опять будем вместе думать.
Аноним 2016/01/29 22:32:21  №638064 803
>>638053
Спасибо.
>На телефонах может связь с сетью пропасть например
Ну у меня на мегафоне том же, как правило, даже при разрывах связи ip тот же самый видится снаружи после переподключения. Меняется, конечно, иногда, но я бы не сказал, что прямо катастрофически часто.

Кстати, а global не прокатит, чтобы не передавать каждый раз? Или global он будет для всех пользователей одинаков?
Аноним 2016/01/29 22:53:24  №638089 804
>>638058
Также не ставь в условие $creditBalance < 0, там никогда не должно такого получиться при правильном решении!
Ставь $creditBalance <= 0 тогда уж или просто "равняется нулю".
Аноним 2016/01/29 23:48:54  №638130 805
>>638042

Тебе надо изучить язык яваскрипт и DOM.
Аноним 2016/01/29 23:50:06  №638132 806
>>638042

Вообще, ненормально. А зачем запускать ее каждую секунду? И зачем вообще такая скорость обновления? Так конечно есть вебсокет, но интуиция мне подсказывает что тебе не нужно ничего обновлять в реальном времени.
Аноним 2016/01/29 23:55:16  №638137 807
>>638039

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

Ну и это все равно не поможет от случая когда например владелец вайфай точки ворует ид сессии и делает что-то от своего имени, так как айпи будет тот же самый. От таких случаев поможет использование https.
Аноним 2016/01/30 08:15:06  №638253 808
Ответы за 24 января Аноним 2016/01/30 09:05:03  №638259 809
>>633210

Вполне нормальное решение, ответ верный.

>>633236

Тебе в прошлом треде написал:

> private function chooseProfession($post) {
Надо убрать отсюда так как это не позволит добавлять профессии не трогая старые классы. Также, у тебя не проверяется в свитче вариант если указана неправильная профессия, это плохо.

> public function countTotalSalary($qty, $rank, $post, $boss) {
Это не очень правльная функция, должно быть так:

public function countTotalSalary() { ... }

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

> abstract class Employee extends Department {
Абсолютно неправильное наследование. Наследование - это создание одного класса на основе другого, когда мы хотим изменить поведение или сделать улучшенную версию чего-то. Ну к примеру мы можем создать класс Транспорт с методом переместиться(), а от него унаследовать Машину, Самолет и Велосипед в которых этот метод реализован по-разному.

У тебя же неправильно: Сотрудник это не разновидност Департамента, значит наследование использовать так нельзя.

> class Manager extends Employee {
> protected function countSalary() {
Ты скопипастил тут код 4 раза.

>>633240

Это не обязательно
Ответы за 24 января Аноним 2016/01/30 09:05:37  №638260 810
>>633266

В общем верно, но регулярку можно еще упростить, объединив группу из 3 цифр и из 7 цифр в одну группу из 10 цифр.

Ну и круглые скобки тут не нужны:

([\\s-(]*)

>>633278

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

$x = 012;

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

>>633286

Ошибки:

> /$
$ в начале строки значит символ доллара, это только в самом конце регулярки он значит что тут должен быть конец строки.

> [а-я]
Чтобы указать все русские буквы, надо писать [а-яё] так как ё идет в юникоде отдельно и в диапазон а-я не входит. Ну и хорошо бы помнить, что буквы бывают и не русские.

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

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

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

>>633307

Нет, ты уходи.
Ответы за 24 января Аноним 2016/01/30 09:06:01  №638261 811
>>633331

> $symbol = mb_substr($text, $i, $halfLength);
Это непраивльно, ты берешь не первый символ, а первую половину строки и сравниваешь с пустой строкой (так как mb_substr($text, $length, $halfLength) даст пустую строку).

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

>>633406

> W2(перевод долларов в рубли) - http://ideone.com/5zHXdu
Верно, но строка $roubles = 0; лишняя.

> W3(имитация броска кубика) - http://ideone.com/2QvVvX
Правильно.

> W4.1(дописать кубик) - http://ideone.com/ckuYdx
Не совсем правильно, нет проверки на случай когда число очков одинаковое (ничья).

> W4.2(рулетка что смотрит последнюю цифру) - http://ideone.com/TKuvUB
Тут верно, но exit писать не требуется, так как после блока if/else все равно ничего нет. Ну и форматирование неправильное, скобки и elseif пишутся на одной строке:

} elseif (...) {
..
} else {
..


>>633417

Теперь верно, только exit там ставить не надо, в скрипте все равно после if/else ничего нету.

>>633450

Вроде генератор выглядит верно, но не уверен насчет этих полей:

> private $previewWidth;
> private $previewHeight;

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

По верстке:

- нехорошо что ты флоатишь влево картинку, а ссылку в которую она вложена, оставляешь - тут не очень понятно какую форму примет она. По идее у инлайн-элементов нет своей формы, они окружают содержимое. Но лучше бы флоатить ссылку.
- ты используешь абс. поз. для прижатия к низу города и времени, но учел ли ты сценарий когда название города переносится на новую строку? С абс. поз. ты не можешь это предусмотреть и оставить нужное количество места. Если говорить про максимально безопасную верстку, то я вижу только один вариант (без использования всяких флексбоксов): сделать таблицу из 2 колонок, слева поместить картинку, правую колонку сделать из 2 строк, сверху описание, снизу город и время. Город и время прижать вниз за счет vertical-align. Таблицу естественно средствами css, через display: table. Изучи-ка эту возможность, помни что там есть свои подвохи: у строк и ячеек таблицы нет маргинов, относительно элементов таблицы нельзя применять абс. позиционирование, для таблиц width/height обозначают min-width/height, а не реальные размеры.

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

> time {
надо писать .item time иначе это правило будет действовать на все такие теги на странице. Да и то, не очень хорошая идея, вдруг этот тег будет в описании?

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

>>что будет если убрать картинку (не наедет ли цена на город?).
> Добавил min-height внешнему контейнеру
Лучше бы просто опираться на содержимое, паддинги и маргины, чтобы высота определялась контентом.

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

> Только с флотами получается странный порядок "слоев": у меня теперь идет сначала блок с ценой, а за ним заголовок, город и время. Хотя визуально сначала должен идти заголовок, а за ним цена (если смотреть слева направо).
Контент в HTML не обязан идти в том же порядке что выводится. Просто хорошо бы чтобы HTML код нормально читался.
Ответы за 24 и немного за 25 января Аноним 2016/01/30 09:06:39  №638262 812
>>633460

Эту строку можно не писать, она там просто как символ того что анон наконец-то выплатил весь кредит.

>>633464

Разумеется нужно.