Вы видите копию треда, сохраненную 25 января 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Почему PHP? Потому что фейсбук и википедия на нем написаны, и вакансий море, и учить легко.
Это тред для начинающих. Не написал за свою жизнь ни одной программы? Ты наш человек.
Устанавливать пока что ничего не требуется, разве что редактор кода вроде Sublime Text 3, Notepad++, Netbeans PHP или PhpStorm (с ним будет удобнее).
Предыдущий тред был тут: >>597909 (OP) (OP)
Что самое главное для программиста? Умение аккуратно оформлять код (читай второй пост).
Правила: ведем себя воспитанно, помогаем новичкам, постим ссылки на решения задачек, ОП их проверяет и дает советы и замечания. ОП отвечает даже на самые нубские вопросы. ОП заходит где-то раз в день-два, не жди его, решай задачки дальше.
У нас есть уроки по основам PHP, они собраны и выложены по адресу http://archive-ipq-co.narod.ru/ Это учебник для изучающих с нуля, то есть если ты вообще ничего не знаешь, то надо начать с него. Он простой и понятный (по крайней мере в начале). Там есть задачи, их надо решать обязательно (чтобы стать программистом, надо писать код — иначе никак). Пости ссылки на решения в тред, мы их проверим, напишем замечания и дадим советы по улучшению.
Если не знаешь как решать, запости код, напиши в каком месте остановился и попроси подсказку.
Учебник дает основы языка PHP, но чтобы делать сайты, этого недостаточно. Если ты его прошел, то надо переходить в более серьезным задачкам, которые научат тебя как выдавать страницы в браузер, работе с таблицами в БД, работе с формами, MVC.
- Простая, но полезная задача сделать список студентов: https://github.com/codedokode/pasta/blob/master/student-list.md
- Более сложная задача сделать файлообменник на микрофреймворке Slim: https://gist.github.com/codedokode/9424217
- Еще более сложная и долгая задача на Yii/Yii2: https://gist.github.com/codedokode/8733007
- После нее можно изучать автоматизированное тестирование
- Если ты все решил, переходи к Symfony 2/Doctrine 2
Чтобы делать эти задания, тебе надо установить Апач + PHP (можно заодно сразу и MySQL) на компьютер. Вот полезные инструкции:
https://gist.github.com/codedokode/10774100
https://gist.github.com/codedokode/7054af4a03865c4cc863
Может тебе понадобится пользоваться командной строкой, вот гайд https://gist.github.com/codedokode/10539568
Вот небольшой туториал по тому как начать использовать PHP на сервере для отдачи странички в браузер: https://php.net/manual/ru/tutorial.php Увы, уроков плавно подводящих к тому, как сделать задачи выше, пока нет, так что если что, задавай вопросы.
Решения задач лучше показать мне, особенно на ООП,так как сам ты вряд ли увидишь все ошибки. Пости свой код на гитхаб и вкидывай ссылку в тред по мере решения. Я прокомментирую и укажу на ошибки.
Также, у нас есть задачи которые позволят тебе изучить или подтянуть до нормального уровня знания JS/HTML/CSS/SQL. Решай их параллельно с задачами выше.
- HTML/CSS: https://gist.github.com/codedokode/58ebc90bd006baf4b35c
- JS: https://gist.github.com/codedokode/ce30e7a036f18f416ae0
- Проверялка решений на JS: http://dkab.github.io/jasmine-tests/
- MySQL: https://gist.github.com/codedokode/10539213
Что почитать
- Мануал по PHP — http://www.php.net/manual/ru/langref.php
- Сайт phptherightway (перевод на русский: http://getjump.me/ru-php-the-right-way/ )
- По PHP: Профессиональное программирование на PHP Джордж Шлосснейгл
- По PHP: Мэтт Зандстра — PHP: Объекты, шаблоны, методики программирования
- JS: learn.javascript.ru
- Про Git: https://git-scm.com/book/ru/v1
Нужен ли ООП, фреймворки, MVC? — Да, однозначно. Посмотри любую вакансию.
Сайт опять упал!!!!! — Не паникуй, а открой http://rghost.net/45000175 и получи личную немного устаревшую копию сайта
Оформляй код аккуратно!!! — например пропусти через phpformatter.com . Также, если ты пользуешься IDE вроде PhpStorm, Netbeans, Eclipse, то в них эта опция встроена, подробнее: https://gist.github.com/codedokode/8759492
ОП, сделай за меня мою работу или домашнее задание? — Это конечно, хорошая идея, но нет.
Подскажи сайты для поиска работы, я не умею гуглить? — hh.ru, geekjob.ru, moikrug.ru (склеен с brainstorage.me), fl.ru, upwork.com (бывший одеск). Имей в виду, что кроме фриланса есть еще постоянная удаленная работа (remote job) когда тебе не надо тратить время на поиск заказов и переговоры с неадекватными заказчиками.
Еще. Код нужно писать не как попало, а аккуратно и по правилам. Почему? Потому, что на неакуратно написанный код не хочется даже смотреть.
Если тебе лень выравнивать код руками, закачай его на 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, то рассказать об этом стоит в каком-нибудь другом треде.
Не придирайся к знанию английского языка, анон пишет как умеет.
Ах да. Если тебе кажется, что что-то в учебнике или задачах можно сделать лучше — пиши, обратная связь всегда очень полезна.
Еще. Код нужно писать не как попало, а аккуратно и по правилам. Почему? Потому, что на неакуратно написанный код не хочется даже смотреть.
Если тебе лень выравнивать код руками, закачай его на 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, то рассказать об этом стоит в каком-нибудь другом треде.
Не придирайся к знанию английского языка, анон пишет как умеет.
Ах да. Если тебе кажется, что что-то в учебнике или задачах можно сделать лучше — пиши, обратная связь всегда очень полезна.
Добавлю, что с самими базами данных я знаком, есть опыт работы с Access и Paradox(в C++ Buildere еще проект писал с подключением к приложению БД), с теорией тоже знаком. С SQL не знаком вообще.
С первой. Если ты не про js задачи конечно. Для них на первые 10 есть проверялка.
PS Я про учебник PHP для начинающих
Ну это верно разве что для задачек, где одна строчка с echo. В отношении других же это в общем не так, чаще всего восторженный ньюфаг при виде правильного результата спешит выложить "решенную" задачу в тред и обнаруживается, что работает она не совсем верно, либо вообще не верно.
Тебя никто не укусит если выложишь ссылку на Ideon сюда.
Это был риторический вопрос.
http://myrusakov.ru/php-regauth-user.html Держи. У него, кстати, полно примеров на пхп на все случаи жизни.
Хостингер.
http://ideone.com/C8o0SL - скрипт калькулятора Айфона.
http://ideone.com/8q8JVk - скрипт калькулятора Айпада.
http://ideone.com/wzPQ7W - скрипт проверки телефона.
http://ideone.com/BXho8s - скрипт проверки ошибок в тексте.
Некоторые явно не вполне нормальные. В телефоне можно ещё сильнее сократить регулярку.
http://integer64.github.io/site-layout/
По 12 заданию, сделал 2 варианта:
0. С id, потому что адаптивность более проще сделать.
1. Без id, тут уже для большой универсальность, надо бы еще использовать JavaScript. Я не стал заморачиваться и сделал через position:absolute; top:192px;.
Зачем ты пишешь о том, чего не знаешь?
Действительно, я сначала проверю старые задачи в старом треде и только потом перейду сюда. Но новые решения нужно постить в этот тред - его легче найти и в нем есть другие аноны, которые может уже решали эту задачу и помогут вам советом.
Напомню что вчера проверил файлообменник
https://github.com/MindiMakridi/filehosting/ тут >>611856\t
Что ты не понял конкретно, можешь написать?
Дописал комментарии, но то как реализован аякс мне не очень нравится. Если есть какая-то пространная статья о том как вообще нужно интегрировать яваскрипт и аякс в частности, буду благодарен. В общем жду твоих замечаний, ОП
А ты вообще JS изучал, learn.javascript.ru весь прочел, а может даже все наши задания на JS решил?
Если нет то советую решить.
Насчет JS: во-первых, не разбирай библиотеки на части и не перемешивай с другими файлами. Бутстрап должен быть в отдельной папке, не изменен и не перемешан ни с какими другими файлами. Как иначе понять где твой код? Как его обновлять потом?
Насчет аякса.
Тут такая вещь: когда ты делаешь какую-то фичу через аякс вместо традиционной отправки формы, ты лишаешь пользователя удобств которые дает браузер а именно:
- индикатор прогресса операции
- вывод сообщений об ошибках
- возможность повторить операцию
Сооветственно если ты что-то делаешь через аякс, теперь ты а не браузер обязан реализовать эти возможности. Любой аякс-запрос должен сопровождаться:
- индикацией прогресса. Пользователь должен иметь обратную связь и видеть состояние системы: идет обработка данных, успешно обработано, произошла ошибка. Ты можешь не показывать индикатор прогресса только в случаях когда обработка запроса происходит очень быстро (менее 150 мс) - тогда можно сразу показать сообщение с результатом операции.
- обработкой ошибок. Ошибки могут быть транспортного уровня (пропал интернет, сервер отдал код 500, пришел ответ не ожидаемого типа или формата), так и уровня приложения (сервер ответил что данные в форме заполнены неправильно)
- возможность при некоторых ошибках повторить запрос
Теперь посмотри на свой код и проверь, есть это у тебя или нет.
Вообще, то что касается обратной связи - она должна быть всегда, не только при аякс запросах. Пользователь делает жест (клик мыши или нажатие кнопки) - система должна отреагировать.
По организации кода. Хотя маленький кусок кода можно вставить в страницу, это плохая идея так как со временем он разрастется. Правильнее всего сделать 2 js-файла:
- файл с общими функциями, подключаемый на всех страницах (если нужно)
- файл с функциями, нужными только на данной странице.
В файл мы выносим функции, а на странице оставляем только код запуска, такого типа:
<скрип>
var a = {{ x | json_encode }};
var b = {{ y | json_encode }};
initSomething(a, b);
initSomething(100500);
</скрип>
Не смешивай внешние переменные с кодом, как тут:
> $.ajax("/ajaxComments/{{file.id}}",
из-за этого функцию не получится вынести во внешний файл.
В реальной жизни ты можешь конечно увидеть более худший код. например все пишут в один огромный файл, он подключается на всех страницах и весь код в нем выполняется хотя нужны только 10% от этого кода. Более того. половина кода там мертвая но никто не решается ее удалить.
> document.forms.commentForm
Это какой-то древний подход, не используй его, используй поиск через jQuery
> ajaxStop: function() { $body.css({"display": "none"}); }
Что за ерунда. все исчезает? Не годится. Пусть лучше форма блокируется и например около кнопки или на кнопке отправки появляется крутилка. Ведь пользователь смотрит в этот момент на кнопку, логично ее и использовать.
Алсо не пиши так
> $body.css({"display": "none"});
Стили должны быть в CSS файле, а в JS ты только навешиваешь классы. Показать/скрыть можно через show/hide.
> alert(errorThrown + ' - ' + textStatus);
Обработку ошибок надо сделать нормально, alert очень раздражающий.
> <br>
Ты плохо знаешь CSS. Советую найти время и пройти наш курс по HTMl/CSS
> {{ user.login|e }}
зачем |e ?
> <p><strong>Загружен:</strong> {{ file.uploaded|date('d-m-y H:i') }}</p>
это удобнее делать через dl/dt/dd
> <label for="name">
Где элемент с id = name ?
> <label for="comment"
> <textarea name="comment" id="commentBody">
Неправильно
Что насчет именования классов и id? По какой системе ты их именуешь? Как ты думаешь, стоит ли писать большое приложение не имея какой-то системы именования классов?
> <input type="hidden" name="userId" value="{{ userHelper.getCurrentUserId() }}">
то есть я могу писать комментарии от любого имени?
> <input type="hidden" name="fileId" value="{{ file.id }}">
зачем это поле если там есть parentId? ты проверяешь соответствие fileId и parentId?
> <input type="button" onclick="postComment()" value="Post your comment">
Почему не submit? А если я хочу форму отправлять не кнопкой а нажатием Enter? А если кнопкой отправки на мобильной выдвижной клавиатуре?
Событие отправки формы это submit. А не click.
Также, ошибка:
<input type="button" onclick="postComment()" value="Post your comment">
У тебя кнопка стоит выше определения функции. Значит возможна ситуация когда кнопка есть на экране, а функции еще нет.
> $("#commentButton").click(function(){
> onclick=""
Почему разные способы навешивания используются? Что-то это маленько сбивает с толку.
Также, мне кажется код будет качественннее если не разбрасывать получение элементов по всему коду, а вынести вот это вот
> $(".commentReply").
в самое начало кода.
> function refreshComments(){
> type: "POST",
Почему POST?
> $( "#comments" ).empty().append(text);
Неэффективно обновлять все комментарии. Подумай как обновлять только новые или изменившиеся комментарии.
> $body = $(".modal");
Почему одно и то же называешь по-разному?
Я вижу там еще много кода (когда ты только успел его написать), его наверно позже проверю. Пока работай над HTML/JS/AJAX.
А ты вообще JS изучал, learn.javascript.ru весь прочел, а может даже все наши задания на JS решил?
Если нет то советую решить.
Насчет JS: во-первых, не разбирай библиотеки на части и не перемешивай с другими файлами. Бутстрап должен быть в отдельной папке, не изменен и не перемешан ни с какими другими файлами. Как иначе понять где твой код? Как его обновлять потом?
Насчет аякса.
Тут такая вещь: когда ты делаешь какую-то фичу через аякс вместо традиционной отправки формы, ты лишаешь пользователя удобств которые дает браузер а именно:
- индикатор прогресса операции
- вывод сообщений об ошибках
- возможность повторить операцию
Сооветственно если ты что-то делаешь через аякс, теперь ты а не браузер обязан реализовать эти возможности. Любой аякс-запрос должен сопровождаться:
- индикацией прогресса. Пользователь должен иметь обратную связь и видеть состояние системы: идет обработка данных, успешно обработано, произошла ошибка. Ты можешь не показывать индикатор прогресса только в случаях когда обработка запроса происходит очень быстро (менее 150 мс) - тогда можно сразу показать сообщение с результатом операции.
- обработкой ошибок. Ошибки могут быть транспортного уровня (пропал интернет, сервер отдал код 500, пришел ответ не ожидаемого типа или формата), так и уровня приложения (сервер ответил что данные в форме заполнены неправильно)
- возможность при некоторых ошибках повторить запрос
Теперь посмотри на свой код и проверь, есть это у тебя или нет.
Вообще, то что касается обратной связи - она должна быть всегда, не только при аякс запросах. Пользователь делает жест (клик мыши или нажатие кнопки) - система должна отреагировать.
По организации кода. Хотя маленький кусок кода можно вставить в страницу, это плохая идея так как со временем он разрастется. Правильнее всего сделать 2 js-файла:
- файл с общими функциями, подключаемый на всех страницах (если нужно)
- файл с функциями, нужными только на данной странице.
В файл мы выносим функции, а на странице оставляем только код запуска, такого типа:
<скрип>
var a = {{ x | json_encode }};
var b = {{ y | json_encode }};
initSomething(a, b);
initSomething(100500);
</скрип>
Не смешивай внешние переменные с кодом, как тут:
> $.ajax("/ajaxComments/{{file.id}}",
из-за этого функцию не получится вынести во внешний файл.
В реальной жизни ты можешь конечно увидеть более худший код. например все пишут в один огромный файл, он подключается на всех страницах и весь код в нем выполняется хотя нужны только 10% от этого кода. Более того. половина кода там мертвая но никто не решается ее удалить.
> document.forms.commentForm
Это какой-то древний подход, не используй его, используй поиск через jQuery
> ajaxStop: function() { $body.css({"display": "none"}); }
Что за ерунда. все исчезает? Не годится. Пусть лучше форма блокируется и например около кнопки или на кнопке отправки появляется крутилка. Ведь пользователь смотрит в этот момент на кнопку, логично ее и использовать.
Алсо не пиши так
> $body.css({"display": "none"});
Стили должны быть в CSS файле, а в JS ты только навешиваешь классы. Показать/скрыть можно через show/hide.
> alert(errorThrown + ' - ' + textStatus);
Обработку ошибок надо сделать нормально, alert очень раздражающий.
> <br>
Ты плохо знаешь CSS. Советую найти время и пройти наш курс по HTMl/CSS
> {{ user.login|e }}
зачем |e ?
> <p><strong>Загружен:</strong> {{ file.uploaded|date('d-m-y H:i') }}</p>
это удобнее делать через dl/dt/dd
> <label for="name">
Где элемент с id = name ?
> <label for="comment"
> <textarea name="comment" id="commentBody">
Неправильно
Что насчет именования классов и id? По какой системе ты их именуешь? Как ты думаешь, стоит ли писать большое приложение не имея какой-то системы именования классов?
> <input type="hidden" name="userId" value="{{ userHelper.getCurrentUserId() }}">
то есть я могу писать комментарии от любого имени?
> <input type="hidden" name="fileId" value="{{ file.id }}">
зачем это поле если там есть parentId? ты проверяешь соответствие fileId и parentId?
> <input type="button" onclick="postComment()" value="Post your comment">
Почему не submit? А если я хочу форму отправлять не кнопкой а нажатием Enter? А если кнопкой отправки на мобильной выдвижной клавиатуре?
Событие отправки формы это submit. А не click.
Также, ошибка:
<input type="button" onclick="postComment()" value="Post your comment">
У тебя кнопка стоит выше определения функции. Значит возможна ситуация когда кнопка есть на экране, а функции еще нет.
> $("#commentButton").click(function(){
> onclick=""
Почему разные способы навешивания используются? Что-то это маленько сбивает с толку.
Также, мне кажется код будет качественннее если не разбрасывать получение элементов по всему коду, а вынести вот это вот
> $(".commentReply").
в самое начало кода.
> function refreshComments(){
> type: "POST",
Почему POST?
> $( "#comments" ).empty().append(text);
Неэффективно обновлять все комментарии. Подумай как обновлять только новые или изменившиеся комментарии.
> $body = $(".modal");
Почему одно и то же называешь по-разному?
Я вижу там еще много кода (когда ты только успел его написать), его наверно позже проверю. Пока работай над HTML/JS/AJAX.
Еще при аякс запросах надо делать:
- блокировка формы на время отправки данных для защиты от повторной отправки, некоторые люди например дважды кликают по кнопкам
что написал?
Раз в 2 дня примерно. Но тут так-то полно народу. Они тоже дельно пишут в 99% случаев.
то есть - вот есть папка, запоминаю состояние файлов (список файлов, которые есть, забекаплены ли они и т.д.)
потом файлы меняются, мне нужно обновить индекс, какие новые, какие изменены, ну ты понял
ВОПРОС:
как мне связать этот класс для индексации с классом работы с бд?
отвечай по пунктам:
1) класс индексации же нужно отделить от хранения данных, так ведь? ну можно хранить в файлах, можно в бд
2) или же не делать класс индексации как отдельный компонент, который можно переиспользовать, а хуячить всё хардкодом на бд, без ебли?
>Это же однотипные классы. Почему нет наследования?
Так ведь есть же. Зря что-ли я у паверстанции все методы в прототипах написал и передал в соларпанел? А больше там и нечего наследовать.
проиграл с тебя
>2016
>анальные игры с популярнейшим инструментарием для веб разработки
Как, скажите, как такое возможно?
>постоянные танцы с бубмом, чтобы установить и заставить работать Apache, mysql и php.
Какие это? раскоментировать 5 строк в php.ini?
https://jsfiddle.net/8kwx97my/3/ 12
https://jsfiddle.net/8k8604L3/ 13
https://jsfiddle.net/o2shx897/1/ 16 заодно и 14я в одном флаконе.
Есть форма авторизации (регистрацию пока не рассматриваем). Пользователь ввел логин и пароль - если такой пользователь есть в БД, сразу на этой же странице выводим "Привет, пользователь-нэйм", а все формы убираем без перезагрузки страницы.
Где взял?
Ужасный бубнеж
Мало кому по зубам его решить, хотя может и стоит позже добавить. Может его стоит еще в список JS задач ссылку добавить.
https://github.com/codedokode/pasta/blob/master/js/spa.md
Это скорее черновик задачи, многое не описано, нужно больше советов по архитектуре итд
>реализовать поддержку оффлайн-режима (работы при временном отсутствии соединения с интернетом).
Эм..............................
На PHP, реализовать поддержку оффлайн-режима?
Я бы такого заказчика послал-бы. Например.
PHP не серверный язык?
Это вообще-то задача на JS приложение. PHP там только на сервере для АПИ нужен (если кто-то хочет сделать на Питоне, Руби, ноде - пожалуйста, но разумеется сделать надо качественно).
Заметьте, написано на PHP + MYSQL. То же самое что мы цчим в этом треде. Судя по именам файлов, это какая-то переделанная CMS.
>>612707
Спасибо. Смотрю первое видео. Под этот голос я засну до конца видео раз наверное 8.
Что за банкомат, какая задача?
>>613041
сижу 666 тредов, помню опа когда тот еще под столом кодил на хаскеле.
▲
▲ ▲
>>613151
Пути не надо хранить в базе, пусть их возвращают соотв.методы.
В бд хранить только имена картинок или часть имени. В задаче на файлообменник мы тут пришли к выводу, что лучше сохранять файлы под именем {$id}+оригинальное_имя+{безопасное_расширение, например .txt}
Так что в базе хранится только имя, под которым юзер загрузил файл и его id.
Методы твоего класса возвращают полное имя и путь к файлу.
Что такое "текстовая информация"? Текстовые файлы с точки зрения системы не отличаются от картинок или архивов.
Если это содержимое большой статьи или комментарий, тогда хранить в базе в поле с типом TEXT.
Сделай задачи из оп-поста про сайт для студентов и файлообменник, потому что судя по вопросам у тебя есть небольшие пробелы в знаниях.
Я бы еще добавил что в оригинальном имени возможно стоит делать фильтрацию или транслитерацию. Пртилют файл с какими-нибудь непонятными символами в названии или из одних пробелов и непонятно как с ним работать.
На линуксе вроде все работает. Только что проверил с файлами, содержащими юникодную фигню в названии.
На виндовс понятно никто в здравом уме рабочий сервер подымать не будет. Другое дело что у пользователя на винде, который попытается качнуть файл с неподходящим названием, могут возникнуть осложнения. Сейчас проверю, как rghost решил этот вопрос.
Да вроде никак, ничего они не переименовывают (ссылки на rghost почему-то не пропускает вакаба) http://pastebin.com/sByKUAuP
А нет, пробелы обрезают. Вот тут я поставил много пробелов в начале имени и между подчеркиваниями, были вырезаны http://pastebin.com/sByKUAuP
>>613160
В отдельных колонках таблицы, естественно, тип varchar для имени автора или названия книги.
Авторы впрочем посторонняя сущность, их нужно сделать отдельной таблицей. А связь между ними - классический пример связи многие ко многим.
Качни какую-нибудь книжку типа "Основы mysql", потому что это самые основы, смысл тут все пересказывать. Видеокурс по-моему тоже есть от "Cпециалиста" (кавычки не из иронии, это название конторы). Потом порешай задания из оп-поста на sql для закрепления.
>>613161
Я не знаю про индексацию файлов. Но исходя из принципа единой ответственности, конечно нужно делать отдельный класс для индексации, чтобы ты под этим не подразумевал. Связать через dependency injection.
>Я не знаю про индексацию файлов
речь не про индексацию. речь про то как организовать это всё
> 1) класс индексации же нужно отделить от хранения данных, так ведь? ну можно хранить в файлах, можно в бд
Да, отдельно. Тут можно сделать класс работы с БД с паттерном ТDG, например FilesGateway и отдельно класс индексиации например FilesIndexer. Причем возможно что можно сделать это по-умному и сделать так чтобы эти 2 класса друг про друга не знали. Это лучший вариант, чем меньше зависимостей тем лучше.
Также при желании можно сделать класс, представляющий информацию об одном файле или директории. Путь, состояние бекапа, размер, может хеш и еще что-нибудь. Если не делать такой класс, придется информацию хранить в массиве.
Ничуть не информативнее того, что дается в этих тредах ОПом. Нынче любят видеокурсы, любят смотреть и слушать, вместо того, чтобы читать.
Посмотреть для общего развития можно и я посмотрю, только совет тем, кто это будет делать: качайте себе, и смотрите на плейере, где можно увеличивать скорость воспроизведения. Я на 1.5 х смотрел его загробные речи. Иначе уснете. Пиздюк не умеет в поставленную речь, не умеет излагать свои мысли структурированно, пиздит не по теме, и отвечает что-то несуразное крокам из чатика его уютного вебинара. Хотя что-то он в теме понимает.
А так сойдет. СПАСИП ЗАБРАЛ НА МАЙЛ ДИСК
>> $paymentTotal = $paymentTotal + $debt;
>>echo "{$month} месяц спустя: долг = {$
>Это повторяется 2 раза, надо бы избавиться от повтора
Ох щи, бро, ОП, разве куда-то ещё можно сократить? Там же все обязательные элементы стоят уже? Или ты имеешь в виду, что из разных частей нужно вытащить их и сделать общим для if и else? Там, где мы считаем для суммы больше, чем выплата в месяц, и там, где сумма долга меньше выплаты в месяц.
Честно говоря, не представляю, как это сделать, я в растерянности.
>>612623 >>612624
>Давай упростим задачу. Как бы ты записал «ровно один минус, скобка или пробел»? То есть один любой символ из указанных?
Например, вот так: "/^\\-|\\)|\\s$/". Но там в какой-то моменты может быть вот такое место в номере: "...9 ) - 8888..." То есть там сразу пять символов появляются, это меня запутало. Впрочем, сейчас я уже понял, как это должно выглядеть, позже переделаю. Планирую завершить регулярные выражения и снова все задачи пройти перед повторением, писать их не глядя.
>> Эта вот конструкция не замещает такое выражение: (\\s?\\)?\\s?\\-?\\s?\\)?\\s?\\(?\\s?[0-9]){7} ?
>Нет, это не то. У тебя там заложен определенный порядок символов и слишком громоздко
Да, спасибо, с этим тоже понял, как быть, - в скобках с обеих сторон пробелы, а внутри разные символы, затем уже цифры.
>По коду: выражение слишком громлоздкое и возможно ловит не все варианты. Ты пробовал подставлять все номера что я дал?
Да, все номера из твоей пасты показывает правильно.
> Или ты имеешь в виду, что из разных частей нужно вытащить их и сделать общим для if и else?
да. Незачем копипастить один и тот же код.
> Например, вот так: "/^\\-|\\)|\\s$/
А теперь напиши «любое число пробелов, минусов, скобок в любом порядке».
Также, подумай как то что ты написал выше, записать короче. Есть специальная конструкция, которая значит «один из этих символов» - квадратные скобки.
> с этим тоже понял, как быть, - в скобках с обеих сторон пробелы, а внутри разные символы, затем уже цифры.
Там надо написать «любые промежуточные символы в любом порядке». Не надо писать громоздкие сложные выражения с кучей вопросов.
Делаю на LAMP сервере, но юзаю пока только php, до этого пытался в c# и java, но понял что не мое.
А php вроде ничего так, затянуло.
https://github.com/weissart/ipq-lessons
И спасибо тебе, оп, твои уроки приятно проходить.
>>612432
> p {
> position: relative;
Не, так не пойдет. В тексте могут быть и другие теги, например списки или заголовки.
> float: left;
> position: absolute;
Это 2 свойства взаимоисключающие по моему
Твое решение с искуственным заданием min-height 180 мне кажется неправильным так как при увеличении длины текста высоты не хватит. Чтобы черная плашка не вылезала за пределы блока надо использовать overflow.
> img {
> display: block;
> width: 100%;
Неправильно, ты все картинки на странице растягиваешь а надо только ту что внутри figure. Также, мне кажется тут надо использовать max-width а не width. Почему width 100%?
Также, у тебя цифра [1] ниже пикселя на 3-4 чем строка текста.
> задача 11
На нижнем переключателе с чебоксами сделано не очень удачно: если нажать и отжать чекбокс то он все равно серый (из-за наведения мыши) и непонятно что с ним происходит.
Тень по моему не совсем правильная, на рисунке тень смещена вниз, а у тебя по центру.
Также неправильно указан радиус для закрашенной кнопки. Видно что между фоном и бордером есть небольшой промежуток. Ведь у фона радиус будет чуть меньше чем у бордера.
>label {
> span {
Неудачно выбраны селекторы. Вот представь мы твой переключатель на страницу добавим - и все спаны на ней поменяют стиль? Надо привязать все селекторы к какому-то основному классу, чтобы они работали только внутри блока переключателя. Также, не привязывайся к спану, верстальщик добавит еще один спан и на него стили применятся.
Также, по 11 задаче дополнительный пункт. Если ты выведешь обычный чекбокс или радиокнопку, то увидишь что по ним можно перемещаться с клавиатуры, клавишами Tab, Shift + Tab, стрелками, пробелом. Попробуй и у себя это реализовать.
> Exercise 12.0
При переключении вкладок мигает фон.На мой взгляд, это неэстетично (а вот в версии 12.1 не мигает, хорошо). Можно ли сделать чтобы мигал только текст? заодно протестируй случай когда вкладки имеют разную высоту.
Также, можно ли сделать возможность переключения табов без использования мыши?
Насчет использования id: тут недостаток в том, что мы не можем поместить 2 блока со вкладками на странице так как id совпадут. Лучше использовать для обозначения табов класса или может даже data-атрибуты.
> 12.1
Тут мне кажется ты выбрал неудачную схему позиционирования. Абс. поз. имеет недостаток: элемент вырывается из потока и не расталкивает блоки под ним. То есть у тебя нельзя эти вкладки вставить в поток блоков, идущие далее блоки наедут на вкладки. Это никуда не годится.
Также, ты привязываешь положение тела вкладки к заголовку - это ненадежно так как не сработает в мобильной версии или если вкладок много и они выводятся в 2 строки.
Также, тут многовато врапперов. Попробуй избавиться от них.
В общем, тут надо менять общий принцип.
Попытка отказаться от id это хорошо, но не такой ценой. Из-за АП эти вкладки не получится интегрировать в верстку.
Также дам тебе статью для размышлений, про организацию вкладок без идентификаторов: http://chikuyonok.ru/2009/04/dl-tabs/
Также, я дополнил текст задач, перечитай и проверь все ли у тебя верно.
Вообще, как у тебя ощущение? Есть польза от решения задач или ничего нового не узнал?
>>612432
> p {
> position: relative;
Не, так не пойдет. В тексте могут быть и другие теги, например списки или заголовки.
> float: left;
> position: absolute;
Это 2 свойства взаимоисключающие по моему
Твое решение с искуственным заданием min-height 180 мне кажется неправильным так как при увеличении длины текста высоты не хватит. Чтобы черная плашка не вылезала за пределы блока надо использовать overflow.
> img {
> display: block;
> width: 100%;
Неправильно, ты все картинки на странице растягиваешь а надо только ту что внутри figure. Также, мне кажется тут надо использовать max-width а не width. Почему width 100%?
Также, у тебя цифра [1] ниже пикселя на 3-4 чем строка текста.
> задача 11
На нижнем переключателе с чебоксами сделано не очень удачно: если нажать и отжать чекбокс то он все равно серый (из-за наведения мыши) и непонятно что с ним происходит.
Тень по моему не совсем правильная, на рисунке тень смещена вниз, а у тебя по центру.
Также неправильно указан радиус для закрашенной кнопки. Видно что между фоном и бордером есть небольшой промежуток. Ведь у фона радиус будет чуть меньше чем у бордера.
>label {
> span {
Неудачно выбраны селекторы. Вот представь мы твой переключатель на страницу добавим - и все спаны на ней поменяют стиль? Надо привязать все селекторы к какому-то основному классу, чтобы они работали только внутри блока переключателя. Также, не привязывайся к спану, верстальщик добавит еще один спан и на него стили применятся.
Также, по 11 задаче дополнительный пункт. Если ты выведешь обычный чекбокс или радиокнопку, то увидишь что по ним можно перемещаться с клавиатуры, клавишами Tab, Shift + Tab, стрелками, пробелом. Попробуй и у себя это реализовать.
> Exercise 12.0
При переключении вкладок мигает фон.На мой взгляд, это неэстетично (а вот в версии 12.1 не мигает, хорошо). Можно ли сделать чтобы мигал только текст? заодно протестируй случай когда вкладки имеют разную высоту.
Также, можно ли сделать возможность переключения табов без использования мыши?
Насчет использования id: тут недостаток в том, что мы не можем поместить 2 блока со вкладками на странице так как id совпадут. Лучше использовать для обозначения табов класса или может даже data-атрибуты.
> 12.1
Тут мне кажется ты выбрал неудачную схему позиционирования. Абс. поз. имеет недостаток: элемент вырывается из потока и не расталкивает блоки под ним. То есть у тебя нельзя эти вкладки вставить в поток блоков, идущие далее блоки наедут на вкладки. Это никуда не годится.
Также, ты привязываешь положение тела вкладки к заголовку - это ненадежно так как не сработает в мобильной версии или если вкладок много и они выводятся в 2 строки.
Также, тут многовато врапперов. Попробуй избавиться от них.
В общем, тут надо менять общий принцип.
Попытка отказаться от id это хорошо, но не такой ценой. Из-за АП эти вкладки не получится интегрировать в верстку.
Также дам тебе статью для размышлений, про организацию вкладок без идентификаторов: http://chikuyonok.ru/2009/04/dl-tabs/
Также, я дополнил текст задач, перечитай и проверь все ли у тебя верно.
Вообще, как у тебя ощущение? Есть польза от решения задач или ничего нового не узнал?
> (\\,|\\;|\\!|\\?|\\:)
Экранировать тут надо только вопрос. Более того, чтобы указать «один из символов» есть конструкция квадратных скобок - лучше использовать ее тут
> [а-яё]
Надо добавить латинницу и цифры или использовать \\w
> з(делал|делаю|делано)
Можно было вынести не «з», а «здел»
> (\\,(а|но))
Надо искать не наличие, а отстутсиве запятой перед «а». Сразу скажу, контструкции для этого в регулярках нет, разве что негативное утверждение.
> Однако столкнулся с тем, что если пересекаются символы от предыдущей ошибки и от следующей, то не выводит символы перед ошибкой у крайней ошибки.
> Как-нибудь можно это всё сделать более хорошо и правильно?
Сложно. Для этого надо убрать .{3,5}, использовать специальный флаг в preg_match_all, PREG_OFFSET_CAPTURE (подробности в мануале) который вернет для каждого совпадения байтовый (не в символах, а в байтах) отступ от начала строки, далее по нему определить позицию в символах и добавить символы до и после совпадения. В общем, довольно сложно.
Есть еще альтернатива: разбить строку preg_split по ошибкам, получив массив вида
['я ', 'зделал', ' подарок']
И потом из этого массива уже нарезать как-то предыдущее и следующее слова.
Также, можно попробовать разбить строку на массив отдельных слов и их проверять циклом.
> (\\,|\\;|\\!|\\?|\\:)
Экранировать тут надо только вопрос. Более того, чтобы указать «один из символов» есть конструкция квадратных скобок - лучше использовать ее тут
> [а-яё]
Надо добавить латинницу и цифры или использовать \\w
> з(делал|делаю|делано)
Можно было вынести не «з», а «здел»
> (\\,(а|но))
Надо искать не наличие, а отстутсиве запятой перед «а». Сразу скажу, контструкции для этого в регулярках нет, разве что негативное утверждение.
> Однако столкнулся с тем, что если пересекаются символы от предыдущей ошибки и от следующей, то не выводит символы перед ошибкой у крайней ошибки.
> Как-нибудь можно это всё сделать более хорошо и правильно?
Сложно. Для этого надо убрать .{3,5}, использовать специальный флаг в preg_match_all, PREG_OFFSET_CAPTURE (подробности в мануале) который вернет для каждого совпадения байтовый (не в символах, а в байтах) отступ от начала строки, далее по нему определить позицию в символах и добавить символы до и после совпадения. В общем, довольно сложно.
Есть еще альтернатива: разбить строку preg_split по ошибкам, получив массив вида
['я ', 'зделал', ' подарок']
И потом из этого массива уже нарезать как-то предыдущее и следующее слова.
Также, можно попробовать разбить строку на массив отдельных слов и их проверять циклом.
Хоть с первой. Только не сиди в ожидании ответа, решай задачи дальше.
>>612193
Не знаю, по моему из картинки все понятно:
- есть авторизационная кука и она валидная - пропускаем
- нет - редиректим на форму авторизации, передавая текущий URL для возврата. В самой форме пробрасываем этотURL, не редиректим на левые сайты, только на свой.
>>612267
> PHP Parse error: syntax error, unexpected 'else' (T_ELSE) in /home/ol2Qj2/prog.php on line 26
Ошибка - лишняя точка с запятой
elseif (($anonSum) < ($compSum));{
>>612282
Места знать надо
>>612487
Теперь сидит.
Это не практично так как часто страница для авторизованного пользователя и неавторизованного различается, проще ееперезагрузить.
Конфа php-богов данного ИТТ трендла.
>А ты вообще JS изучал, learn.javascript.ru весь прочел, а может даже все наши задания на JS решил?
Прочитал пару месяцев назад learn.javascript.ru, но не углубленно, все задачи оттуда не решал, похоже настало время вдумчиво перечитывать. Вообще после файлообменника я хотел сделать что-то по типу твоего SPA приложения, но на другую тему чем ты предлагаешь. Уже читал вводные статьи по knockout и angular, но знания яваскрипта надо таки сильно подтянуть.
>Ты плохо знаешь CSS. Советую найти время и пройти наш курс по HTMl/CSS
Это да, давно собираюсь пройти интенсив хтмлакадэми, но блин не хватает мне терпения смотреть все эти двухчасовые сюжеты со смишнявками про кота Пряника, как-то мне намного проще все воспринимается в письменном виде. Но интенсив вроде годный, так что придется себя заставалять.
https://github.com/V3N0m21/Uppu4
Добавил проверку на зарегистрированного пользователя при просмотре списка файлов и пользователей, по твоим замечаниям к яваскрипту и вообще темплейтам пока ничего не делал, пока чуть подтяну знания.
Больше меня интересует чтоб ты сейчас посмотрел по самой архитектуре какие есть замечания
Общение на разные темы завуалированные пхп тематикой.
До SPA надо изучить хорошо JS, DOM, jQuery.
> но блин не хватает мне терпения смотреть все эти двухчасовые сюжеты со смишнявками про кота Пряника, как-то мне намного проще все воспринимается в письменном виде
У них есть просто текстовые уроки с задачами и проверкой вроде бы.
неизвестный тип адреса
ларавел - медленнешее говнище вообще из 9000 фреймворков. Не понимаю почему оно так популярно.
Чем тебе не по существу? Запросы медленнее, функции излишне нагруженны чем-то. Иногда устыпают в скорости раз в 10. Короче оверхайп какой-то.
Я о пороге и перспективности. Куда быстрее въехать (кроме ларавела есть ещё и yii)? Куда легче въехать?
>У них есть просто текстовые уроки с задачами и проверкой вроде бы.
В этих уроках там дается только база, по уровню интенсивов спираченых у них ничего нет
>До SPA надо изучить хорошо JS, DOM, jQuery.
Теорию я более-менее понимаю, для меня лучшее обучение это практика. Хотя я не спорю, сначала перечитаю learn.javascript, и постараюсь решить твои задачи
>>612384
>>613300
>>612387
Спасибо, исправил. Со скобками все в порядке было.
Спасибо, ОПчик!
Вот, сократил: http://ideone.com/4sYVu8
Там пришлось ввести дополнительную переменную для общих выплат в том случае, когда общий долг Анончика меньше его месячной выплаты. Верно ли на этот раз?
>А теперь напиши «любое число пробелов, минусов, скобок в любом порядке».
Наверное, так: "/^\\Wсимвол звёздочки$/".
Но ведь тогда там могут пройти проверку и такие вот номера: "8-(910) - - - - - 8888888" или "8-(910) ) ) ) ) - 8888888".
Не будет ли это неправильным?
>Также, подумай как то что ты написал выше, записать короче
>>> Например, вот так: "/^\\-|\\)|\\s$/
Наверное, вот так: "/^\\W?$/".
>Там надо написать «любые промежуточные символы в любом порядке». Не надо писать громоздкие сложные выражения с кучей вопросов.
Ясно, спасибо. Я просто немного не уверен, когда символов становится совсем уж много, думал, что здесь всё должно быть строже.
Ведь с \\Wзвёздочка могут проверку пройти и номера с кучей ненужных скобок, минусов и пробелов.
>>613289
>Экранировать тут надо только вопрос. Более того, чтобы указать «один из символов» есть конструкция квадратных скобок - лучше использовать ее тут
Ясно, спасибо. Наверное, это будет вот так выглядеть: "/[\\W][a-zа-яё]/ui".
>Надо добавить латинницу и цифры или использовать \\w
Спасибо, не подумал о таком.
>Можно было вынести не «з», а «здел»
Точно!
>Надо искать не наличие, а отстутсиве запятой перед «а». Сразу скажу, контструкции для этого в регулярках нет, разве что негативное утверждение.
Да, с этим пока тогда повременю, потому что только проникаю в PHP, со многим ещё не знаком.
>Сложно. Для этого надо убрать .{3,5}, использовать специальный флаг в preg_match_all, PREG_OFFSET_CAPTURE (подробности в мануале) который вернет для каждого совпадения байтовый (не в символах, а в байтах) отступ от начала строки, далее по нему определить позицию в символах и добавить символы до и после совпадения. В общем, довольно сложно.
Это для меня суперсложно пока что...
>Есть еще альтернатива: разбить строку preg_split по ошибкам, получив массив вида
>['я ', 'зделал', ' подарок']
>И потом из этого массива уже нарезать как-то предыдущее и следующее слова.
Я с самого начала пробовал проверялку ошибок именно так сделать, но столкнулся с тем, конечно, что проверяется только одна ошибка из текста под соответствующий указанный в регулярке момент (сочетание символов). Вот моя первая проба: http://ideone.com/hTlU2P Так-то я теперь представляю, как можно попробовать вставить саму ошибку между этими частями (через preg_replace), можно попробовать, но тогда как ты советуешь дальше:
>Также, можно попробовать разбить строку на массив отдельных слов и их проверять циклом.
Вот так ещё попробую, вроде это вполне мне сейчас доступно.
>>613283
>И спасибо тебе, оп, твои уроки приятно проходить.
Неистово подтвердил!
Спасибо, ОПчик!
Вот, сократил: http://ideone.com/4sYVu8
Там пришлось ввести дополнительную переменную для общих выплат в том случае, когда общий долг Анончика меньше его месячной выплаты. Верно ли на этот раз?
>А теперь напиши «любое число пробелов, минусов, скобок в любом порядке».
Наверное, так: "/^\\Wсимвол звёздочки$/".
Но ведь тогда там могут пройти проверку и такие вот номера: "8-(910) - - - - - 8888888" или "8-(910) ) ) ) ) - 8888888".
Не будет ли это неправильным?
>Также, подумай как то что ты написал выше, записать короче
>>> Например, вот так: "/^\\-|\\)|\\s$/
Наверное, вот так: "/^\\W?$/".
>Там надо написать «любые промежуточные символы в любом порядке». Не надо писать громоздкие сложные выражения с кучей вопросов.
Ясно, спасибо. Я просто немного не уверен, когда символов становится совсем уж много, думал, что здесь всё должно быть строже.
Ведь с \\Wзвёздочка могут проверку пройти и номера с кучей ненужных скобок, минусов и пробелов.
>>613289
>Экранировать тут надо только вопрос. Более того, чтобы указать «один из символов» есть конструкция квадратных скобок - лучше использовать ее тут
Ясно, спасибо. Наверное, это будет вот так выглядеть: "/[\\W][a-zа-яё]/ui".
>Надо добавить латинницу и цифры или использовать \\w
Спасибо, не подумал о таком.
>Можно было вынести не «з», а «здел»
Точно!
>Надо искать не наличие, а отстутсиве запятой перед «а». Сразу скажу, контструкции для этого в регулярках нет, разве что негативное утверждение.
Да, с этим пока тогда повременю, потому что только проникаю в PHP, со многим ещё не знаком.
>Сложно. Для этого надо убрать .{3,5}, использовать специальный флаг в preg_match_all, PREG_OFFSET_CAPTURE (подробности в мануале) который вернет для каждого совпадения байтовый (не в символах, а в байтах) отступ от начала строки, далее по нему определить позицию в символах и добавить символы до и после совпадения. В общем, довольно сложно.
Это для меня суперсложно пока что...
>Есть еще альтернатива: разбить строку preg_split по ошибкам, получив массив вида
>['я ', 'зделал', ' подарок']
>И потом из этого массива уже нарезать как-то предыдущее и следующее слова.
Я с самого начала пробовал проверялку ошибок именно так сделать, но столкнулся с тем, конечно, что проверяется только одна ошибка из текста под соответствующий указанный в регулярке момент (сочетание символов). Вот моя первая проба: http://ideone.com/hTlU2P Так-то я теперь представляю, как можно попробовать вставить саму ошибку между этими частями (через preg_replace), можно попробовать, но тогда как ты советуешь дальше:
>Также, можно попробовать разбить строку на массив отдельных слов и их проверять циклом.
Вот так ещё попробую, вроде это вполне мне сейчас доступно.
>>613283
>И спасибо тебе, оп, твои уроки приятно проходить.
Неистово подтвердил!
>Со скобками все в порядке было.
Да, но просто они лишние, и без них всё работает.
Просто надо готовиться к тому, как ОП проверяет: там тебя ждёт полный дотошный разбор, который весьма и весьма полезен.
>"/[\\W][a-zа-яё]/ui"
Наверное, первые квадратные скобки не нужны.
Эх, я совсем не уверенно себя чувствую пока что с этими регулярными выражениями.
Это для тебя в отрыве от контекста, а ОП поймет о чем я. В папку www/public/files мы помещаем подобный .htaccess чтобы предотвратить выполнение скриптов, которые туда могуз загрузить.
Так и mod_rewrite слимовский тоже только на апаче работает, к нему почему-то претензий нет.
Как зайти?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
На отдаваемой странице. meta-charset вот это вот все.
>>А теперь напиши «любое число пробелов, минусов, скобок в любом порядке».
> Наверное, так: "/^\\Wсимвол звёздочки$/".
Неправильно. \\W - это любой символ кроме букв, цифр и по моему подчеркивания. А надо искать только пробелы, минусы, скобки в любом количестве.
> Но ведь тогда там могут пройти проверку и такие вот номера: "8-(910) - - - - - 8888888" или "8-(910) ) ) ) ) - 8888888".
Пусть. Мы все равно не можем угадать все способы которыми люди ставят минусы и скобки и потому разрешаем любое их число. Ну и важно не отсеять правильные номера.
> >>> Например, вот так: "/^\\-|\\)|\\s$/
> Наверное, вот так: "/^\\W?$/".
Нет. \\W это не то же самое что \\-|\\)|\\s
> Ведь с \\Wзвёздочка могут проверку пройти и номера с кучей ненужных скобок, минусов и пробелов.
Это ничего. А вот то что там пройдут совсем левые символы вроде знаков доллара или вопроса - это хуже.
> Наверное, это будет вот так выглядеть: "/[\\W][a-zа-яё]/ui".
Нет, неправильно. Тебе надо искать отсутствие пробела только после определенных знаков вроде точки, а не после вообще любых символов.
> Вот моя первая проба: http://ideone.com/hTlU2P
Тут по идее надо результаты циклом обрабатывать, так как там может быть много фрагментов текста.
>>Также, можно попробовать разбить строку на массив отдельных слов и их проверять циклом.
> Вот так ещё попробую, вроде это вполне мне сейчас доступно.
Вот это мне кажется проще и удобнее. Разбиваешь строку на слова, затем проходишь по каждому слову и проверяешь, нет ли в нем ошибки, не пропущен ли пробел.
Потому что ты не угадаешь все расширения для которых вызывается PHP на данном хостинге. И даже если у тебя свой сервер, где гарантия что админ по какой-то причине не добавит запуск каких-нибудь файлов через php.
Или допустим вы будете переезжать с апача на нгинкс -опять же есть шанс что админ забудет перенести настройки из htaccess в конфиг нгинкса и запуск PHP файлов станет разрешен. Ты не должен забывать человеческий фактор - он всегда есть. например однажды в фейсбук отдавал код файла index.php вместо выполнения (его можно найти в сети), а пару дней назад valve выдавала отладочную информацию.
Потому надежнее - переименовывать файлы с заведомо безопасным расширением вроде .txt. И как дополнительная мера, отключить PHP в папке через php_flag engine 0
А без переименования получается нельзя пересылать PHP файлы или .htaccess. Хотелось бы иметь возможность пересылать любые.
И кстати (?i) работает в Апаче - ты проверял?
>>613504
Это задача про файлообменник.
Что за древность? Где ты откопал это? XHTML давно умер, более того реально им почти никто никогда и не пользовался, все использовали HTML4 с лишними слешами и неправильным доктайпом (так как язык XHTML выбирается не доктайпом а заголовком Content-Type, и почти никто не писал там application/xml+xhtml).
В HTML5 это пишется проще:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
Согласно спецификациям HTML и XHTML тег DOCTYPE (что означает «объявление типа документа») сообщает валидатору, какую именно версию (X)HTML вы используете в своей странице. Этот тег должен всегда находиться в первой строке каждой страницы. Тег DOCTYPE — ключевой компонент web-страниц, претендующих на соответствие стандартам: без него ваш код и CSS не пройдут проверку валидатором. Если вы будете пользоваться неполным тегом DOCTYPE, устаревшим его видом, или вообще забудете про него, броузер перейдет в «загадочный» (quirk) режим и будет исходить из предположения, что вы писали код страницы с ошибками и вольно отступали от стандартов, т.е. так, как писали в конце 90-ых годов. В этом режиме броузер попытается разобрать вашу страницу по правилам обратной совместимости и выведет на экран, например, CSS так, как его вывел бы Internet Explorer 4-ой версии, а DOM будет работать так, как он работал именно в этом броузере (IE переключается в свой старый DOM, а Mozilla и Netscape 6 переключается вообще в бог знает что).
Понятно, что для вас эти выкрутасы не желательны. Но именно это вы и получите, если будете пользоваться неполным или неправильным тегом DOCTYPE.
>>613595
Я впервые такой формат вижу и только тут его советуют применять. Может у меня что-то там давно и померло, но всё прекраснейшим образом работает только с этим тегом. Не вижу смысла переходить на что-то другое.
>Вообще, как у тебя ощущение? Есть польза от решения задач или ничего нового не узнал?
Конечно польза есть.=) Твой вопрос посеял во мне сомнения, типо я решил часть твоих задачек и ничему не научился=)
> Я впервые такой формат вижу
HTML5 не вчера появился. Ты по моему лет на 5 отстал. Или читаешь старые учебники.
«все работает» это вообще странный аргумент тут. HTML прощает многие ошибки, можно вообще случайных символов написать и оно будет работать, но разве это значит что это правильно? Нет.
В HTML не ставится слеш в конце тегов:
> charset=utf-8" />
Это ошибка, а работает оно так как HTML парсер прощает многие ошибки.
> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.
Это не столько неправильно, сколько нелогично. Зачем в HTML-документе указывать доктайп от XHTML? Чтобы запутать читателя?
> xml:lang="ru"
Опять же непонятно зачем это. Ты просто копируешь код не думая правильный он или нет нужны эти атрибуты или нет. В данном случае неймспейс xml не определен - значит с точки зрения XHTML это неправильный атрибут. А с точки зрения HTML это просто ничего не значащий атрибут.
Я этот код скопировал где-то года 3-5 назад, когда после переезда на хостинг, сайт в фаерфоксе немного raspidorasilo, безо всякой мысли и желания вникать в то, что этот код делает я его скопировал и вставил (попутно перелопатив 40 страниц гугла в попытках понять что не так, и почему фаерфокс не умеет в определение кодировки). Помогло. Во всех браузерах сайт смотрелся отлично. Главным образом я получил фикс кодировки.
Ни один из популярных браузеров не умеет в определение кодировки, и не обязан. По стандартам вроде при отстутствии кодировки надо ставить utf-8, но Хром например предпочитает windows-1251 - возможно в России сайты делали или делают на этой кодировке.
Если код помог 1 раз тебе, это не значит что он поможет кому-то другому в другой ситуации. Потому не стоит подавать его как универсальное решение. Плюс, у нас учебный тред и в него лучше вбрасывать правильный современный код с пояснениями.
>Неправильно. \\W - это любой символ кроме букв, цифр и по моему подчеркивания. А надо искать только пробелы, минусы, скобки в любом количестве.
Хм, тогда без конкретных символов не обойтись, получается.
>Пусть. Мы все равно не можем угадать все способы которыми люди ставят минусы и скобки и потому разрешаем любое их число. Ну и важно не отсеять правильные номера.
Ясно, как скажешь, а то меня это застопорило.
>Нет. \\W это не то же самое что \\-|\\)|\\s
Блин, действительно, там же куча других символов ненужных будет возможна.
>совсем левые символы вроде знаков доллара или вопроса - это хуже.
Да, тогда это не подойдёт, однозначно.
>>613584
>Нет, неправильно. Тебе надо искать отсутствие пробела только после определенных знаков вроде точки, а не после вообще любых символов.
Действительно. Будет там, например текст о переменных в PHP с примерами - все переменные со знаками доллара посчитаются ошибочно написанными. Это не дело.
>Вот это мне кажется проще и удобнее. Разбиваешь строку на слова, затем проходишь по каждому слову и проверяешь, нет ли в нем ошибки, не пропущен ли пробел.
Я попробую, потом покажу.
Кстати, вот ещё одна моя решённая задача вот отсюда: >>612398.
>http://ideone.com/8q8JVk - скрипт калькулятора Айпада.
Просто если ты вдруг начнёшь отвечать на посты в этом треде.
Спасибо.
Вопрос, для того, чтобы его создать-необходимо изучать весь этот массив учебников и уроков?
Или есть какие нибудь готовые конструкторы или что-то вроде?
>Вопрос, для того, чтобы его создать-необходимо изучать весь этот массив учебников и уроков?
Конечно нет, достаточно лишь нанять макаку на фрилансе. Это ведь не проблема для тебя, судя по тому, что твоя гениальная идея должна окупиться.
CMSки есть, Wordpress.
Для его установки достаточно почитать пару статей из Гугла, сделать всё по шагам.
Но это чисто база: страницы, меню, комментарии, вот это всё. Какие-то оригинальные идеи на нём реализовать сложно даже и достаточно разбирающимся в нём людям.
А ты займи денег, а с прибыли отдашь.
>возможно даже потом делать денюжку на рекламе.
А вот об этом уже можно забыть.
Реклама с кризисом знатно пошатнулась, доходы сеошников с информационными сайтами упали значительно.
Вот тут можно посмотреть: http://adsensetop.ru
Там топы - это люди с сайтами в буржуйском сегменте Интернета, там с рекламой более-менее, там нет кризиса значительного.
Анон делал сервис, кстати, доходы анонов тоже.
Можно ли на нем создать что-то вроде закрытого форума?
Страничку с регистрацией, репутацией и всем прочим?
Ну само собой с аватарками, уровнями и так далее.
Ну на бутстрапе сложно сделать нечто некрасивое.
Хорошо, сейчас посмотрим.
чем лучше сконструировать?
Давай я тебе дам подсказку. Вот допустим мы хотим найти такую строку: «буква от a до f, за ней 2 цифры». Мы можем записать это так:
[abcdef]\\d{2}
[abcdef] = один любой из указанных символов
\\d{2} = 2 цифры подряд
Квадратные скобки значат «один любой из указанных символов». Также, там есть еще пара правил. Во-первых, для букв и цифр можно писать диапазон через дефис. Например [abcdef] можно записать как [a-f] или как [ab-f] или как [a-cd-f]. При этом надо помнить что буква ё в юникоде идет отдельно и в диапазон а-я не попадает. Потому надо писать [a-яё].
Второе правило - если в самом начале скобок стоит ^ то это значит «любой из символов кроме указанных». То есть [^a-f] значит «любой символ, кроме a, b, c, d, e, f».
Теперь подумай еще раз как записать «любое число идущих подряд минусов, скобок, пробелов».
Это тред по веб-программированию, он рассчитан на тех кто учится или умеет программировать. Так что дольше обсуждать тут СЕО и как сделать сайт будет оффтопиком. Это лучше делать в /web.
По твоей проблеме - ищи готовый движок для форума, есть сотни CMS, может среди них есть то что тебе нужно.
Скорее всего это чушь. У плохо разбирающихся в теме людей есть ощущение что нейросеть это какая-то магическая штука обладающая разумом, ничего такого на самом деле нет - она просто выдает ответы на входные параметры которым ее обучили. Сомневаюсь что для нейросети со 128 входами достаточно информации с 2700 фотографий. даже если представить что каждый вход имеет всего 2 значения, это уже 2^128 комбинаций.
Это самая последняя версия 2015, насколько я понял их школа каждый год новые уроки делает, даже не те языки которые были ими разобраны.
Отзывы в интерентах хорошие.
на те языки*
Учебный центр при Бауманке, сайт их в интерентах найдёшь, вообще их курсы платные и транслируются для дистанционного обучения, добрые люди записывают и выкладывают на трекерах.
http://nnm-club.me/forum/viewtopic.php?t=889322
http://nnm-club.me/forum/viewtopic.php?t=889427
http://nnm-club.me/forum/viewtopic.php?t=889601
А каков твой уровень? Уроки ОПа все сделал?
Аноны базарят, что там после переход к студентам резкий, вот как раз такие уроки могут подойти.
Спасибо.
Это люди которые ООП изучают только в третьей части, а до этого учат быдлокодить на функциях и писать велосипеды? Ну даже не знаю.
Какой смысл в стыренном видео если нет обратной связи, нельза задать вопрос, проверить решение, получить замечания?
Начал делать уроки ОПа, понял что это слишком легко для меня, HTML и CSS я уже знаю нормально, когда-то пробовал на php делать всякие регистрации, взаимодействие с БД но знания мои разбросаны, поэтому подумал начать с первого урока этого специалиста, но задания с ОП сайта реально уровня шестого класса, хочется чего-то посложнее.
Я думал ля этого и существует этот тред
Вот и я не знаю, как думаешь это навредит моему обучению и вообще обучению?
А ты показывал ОПу свои решения? Насколько уверен в их правильности? Вот что-нибудь сделай из массивов (калькулятор кредита на айфон) и регулярок, оцени свой уровень непосредственно.
Бро, спасибо, это я уже схватил вроде бы.
Я попробую сократить регулярку чуть позже, сейчас пока стал читать учебник Савельевой "Основы программирования на PHP", немного хочу перезагрузиться.
Мне ещё оставшиеся задачи на регулярные выражения надо сделать, я вроде бы их себе сейчас представляю.
>Теперь подумай еще раз как записать «любое число идущих подряд минусов, скобок, пробелов».
Я многое делаю методом тыка пока что (знаю, что это неправильно, но ведь пока опыта просто нет), поэтому мне надо все проверять. Пока думаю, что вот так надо будет записать: "/^[\\-\\(\\)\\s]звёздочка$/ui".
Правильно ли это? Я почему-то не улавливаю в твоём намёке ответ: не понимаю, как можно тут циркумфлекс использовать. Если только есть какая-то конструкция, которая может сокращённо указать все символы, но с помощью циркумфлекса можно как-то обозначить, что определённые сиволы там не нужны.
Воскресенье, вечер - всё отдыхает, голова - в том числе.
Ты можешь пропустить легкие задачи из учебника и перейти например к предпоследней или последней главе (про ООП). Я что-то сомневаюсь что ты с первого раза решишь Вектор или кошек-мышек.
А после них - студенты, файлообменник, ООП подучишь, композер, микрофреймворки, шаблонизаторы, мало не покажется.
Также обрати внимание, у нас есть еще задачи на SQL, на JS, на HTML/CSS.
http://ideone.com/fork/CucUxi
да решение не идеально, но суть циклов я уяснил
>>613772
Окей спасибо, попробую порешать. Полистал сайт подальше и понял что я очень дохуя не знаю, а первые уроки казались какими-то странно лёгкими.
То чувство, когда с удовлетворением понимаешь, что не зря мучаешь ОПа своими тупыми вопросами.
Бро, неправильно калькулятор считает.
Там должно получиться 61270 рублей со многими копейками.
закрытая группа вк может подойдет?
ну или попробуй макабу накатить, и дописать код, чтобы закрытые разделы отображались только при наличии SUPER_PUPER_KEY в куке
Бля хуёво, значит я где-то ошибся в математике, может подскажешь где я проебался?
годнота, я после первого уровня скрипты типа краулер/парсер/генератор влегкую пишу
учитель поясняет как для двачеров даунов
правда я еще читал коече, но книга попалась - хуйня старая
У тебя получается за двенадцатый месяц выплачивается вроде бы 5262 рубля, а должно уже только 1270 - там остается 262рубля долга, к ним нужно прибавить 3% от 262 рублей и 1000 рублей СервисПеймент. Однако общая выплата у тебя не учитывает вот эти 1000 и 3%. Она меньше оказывается, чем была бы, если бы твой скрипт реально посчитал долг на двенадцатый месяц - вот эти получившиеся у тебя 5262.
Там алгоритм такой: в последний месяц или когда сумма долга оказывается меньше месячной выплаты анона - нужно просто выплатить остаток (также к нему нужно прибавить 1000 за обслуживание кредита и 3%).
После написания обязательно проверь на сумме кредита в 1000 рублей - там должно получиться 2030 рублей.
Немного запутанно, наверное?
Советую также поставить в echo $paymentTotal - чтобы отследить, как увеличивается общая сумма выплаты.
Куплю менструальную кровь. Дорого. Много.
Я понял про что ты, как раз я под этим и подразумевал "не идеально", просто если оставшаяся сумма меньше той которую покупатель платит каждый месяц, как-то нецелесообразно отдавать лишний косарь и лучше в последний месяц отдать чуть больше месячной.
В твоём случаи в условии надо проверять "пока сумма больше нуля" и ещё кое что поменять.
В общем ты так это имел ввиду?
http://ideone.com/4DiXVe
> и лучше в последний месяц отдать чуть больше месячной.
Лучше отдать все в первый день но школьнику столько денег не дают. даже лишний рубль сверх 5000 он найти не может.
> 13 месяц - осталось заплатить -3729.8132554793 руб.
Какой-то странный итог. Программа должна быть умнее и не платить больше чем требуется. Если долг = 262, и выплатить надо 1270 то надо выплатить только их и это же отразить в сообщении.
>если оставшаяся сумма меньше той которую покупатель платит каждый месяц, как-то нецелесообразно отдавать лишний косарь и лучше в последний месяц отдать чуть больше месячной.
Вот в том-то и дело, что Анон найти больше не может - такой Анон в вакууме, поэтому в месяц платит или 5000к, или оставшуюся сумму.
>В твоём случаи в условии надо проверять "пока сумма больше нуля" и ещё кое что поменять.
Нет, там лучше проверять так: пока сумма долга (долг + 1000 за сервис и 3% от долга) остаётся больше суммы месячной выплаты - мы выплачиваем 5000, сумма выплаченная растёт на эти 5000, а сумма кредита уменьшается на них. А когда общая сумма долга становится меньше 5000 (но уже с прибавленными 3% от неё и прибавленной 1000 за обслуживание кредита), то выплачиваем только этот получившийся долг и эту выплату плюсуем к прошлым выплатам.
ОП не одобрит твой калькулятор потому, что в минус не должно ничего уходить, такие дела.
Вот как получилось у меня после кучи наводящих советов ОПа и помощи другого анончика.
>>613843
Ну и плюс это же математическая задача, тут всё идеально.
Я просто раз ПЯТНАДЦАТЬ переписывал этот калькулятор с нуля, чуть не поехал, это наложило отпечаток.
Я почти все цифры в нём до запятых помню наизусть...
>>613857
Блять я уже третий раз эту ёбаную задачку переделываю, надеюсь это окончательно верный вариант.
http://ideone.com/X2E6dg
То чувство, когда опытный анон тоже торчит на одной задаче много времени...
Если подставить 1000р, то считает в минус.
Для тестирования необходимо ставить долг меньше месячной выплаты и смотреть, правильно ли считает даже в этом случае.
Вот там что вижу я: $credit =+ ((($credit * $naeb) + $oxyet) - $money); - это считается даже в том случае, когда сумма долга не превышает 5000к, вот поэтому и уходит в минус, когда она изначально меньше. Ведь у тебя цикл связан с этим: if (0 >= $credit).
Это мешает - эта привязка к нулю, потому что не вполне верно: сумма кредита никогда и не должна быть меньше нуля, надо брать другой ориентир.
Под спойлером его напишу и нужный алгоритм: сумму долга надо сравниваться с месячной выплатой. Если меньше - то сразу выплачиваем долг с 1000 и 3%, а если больше - то продолжается цикл с увеличением общей выплаты и уменьшением суммы долга.
>То чувство, когда опытный анон тоже торчит на одной задаче много времени...
Вголоснул. Опытный анон такое решит за пару минут. Человек просто переоценил свои способности.
Ну, мне и до этого ещё далеко. Для меня все, кто может просто взять и написать скрипт с массивами, циклами и регулярками, сейчас опытные.
А он там что-то с БД уже мутил, какие-то сложные скрипты писал.
Поэтому уже три недели изучаю сайт ОПа - хочу заложить основы.
В $credit надо подставить: http://ideone.com/ghRtcV
ОП так делал для проверки калькулятора.
Должно получиться 2030, то есть 1000 *1.03 + 1000.
Аа, вот сейчас всё верно, мои поздравления.
Иногда Ideone не сохраняет конечный результат, замечал такое.
Задача у тебя при этом совсем по-другому решена, не так, как я решил.
Вот моё решение: http://ideone.com/C8o0SL
Спасибо, ебать решение, ты как до этого додумался, это же пиздец как запутано, можно охуеть просчёты на 20 месяцев вперёд. По моему, мой вариант рациональнее.
А ну ка ОП или знающий анон поясните нам двум не шибко умным, какой вариант рациональнее, мне важно знать кто КРУЧЕ тот злорадствующий Анон или я пидорчсвшник.
http://ideone.com/C8o0SL
http://ideone.com/fazW3B
Ой, я тебе прежнее своё решение дал, вот сокращённый вариант: http://ideone.com/4sYVu8
Там упрощено уже было.
ОП обязательно пояснит со временем.
Там у тебя в одном месте то, от чего он требует обычно избавляться, - повтор или лишние телодвижения.
Вот тут: $credit = $credit + ((($credit * $naeb) + $oxyet) - $money);
\t$paid = $paid + $money;
В тот момент, когда $credit изначально меньше $money, после прохождения этого он становится с отрицательным значением. А потом становится нужной итоговой цифрой, когда снова прибавляем $money.
Предчувствую критику ОПа в этом случае.
>По моему, мой вариант рациональнее.
Вообще согласен: эти 20 месяцев изначально тоже какая-то неудобная привязка. Кто знает, сколько там месяцев, лучше исходить из точно известных или уже в ходе работы скрипта получаемых величин, я так думаю.
Я знаю, ты специально настраиваешь ОПа заранее против меня, вот негодяй.
Ну да, я это отрицательное значение использую в свою пользу, тем самым делаю код рациональнее как мне это кажется, наверно.
Ведь программа работает как надо, и на вывод нет никаких непонятных чисел.
ОПа хрен настроишь, такие дела.
Он часто проверяет все промежуточные варианты. Вот ты три калькулятора выложил в тред - он все три проверит и подробно напишет, что там не так.
Я его боюсь.
Лол, интересно я вообще в этот тред впервые сегодня зашёл и как ведёт себя ОП даже не знаю, но видимо я тоже начинаю его бояться.
И да, зачем у тебя процент это 1.03, когда 3% это 0.03 с математической точки зрения?
В решении есть копипаста, надо убрать:
2 раза написано ($creditBalance x $percent) + $servicePayment;
Неудобно если придется формулу менять например.
>>613935
Тут надо убрать копипасту:
> echo "{$month} месяц спустя: долг = {$creditBalance} р
> $paymentTotal = $paymentTotal + $debt;
> ($creditBalance x $percent) + $servicePayment;
Копипаста - зло.
Тут серьезная ошибка: PHP Notice: Undefined variable: paid in /home/jf4cUQ/prog.php on line 11
Обращение к еще не существущей переменной.
Также, алгоритм неправильно делает, что уходит в минус. Это его запутывает и делает код менее понятным, в таком коде труднее что-то поправить и проще сделать ошибку. В частности переменная $credit не всегда содержит достоверную информацию и может быть отрицательной - если ее еще где-то использовать, может быть ошибка.
Тут нет никакой выгоды уходить в минус, проще сделать нормально.
Также, echo зачем-то скопипащено 2 раза.
Обе программы требуют доработки.
В решении есть копипаста, надо убрать:
2 раза написано ($creditBalance x $percent) + $servicePayment;
Неудобно если придется формулу менять например.
>>613935
Тут надо убрать копипасту:
> echo "{$month} месяц спустя: долг = {$creditBalance} р
> $paymentTotal = $paymentTotal + $debt;
> ($creditBalance x $percent) + $servicePayment;
Копипаста - зло.
Тут серьезная ошибка: PHP Notice: Undefined variable: paid in /home/jf4cUQ/prog.php on line 11
Обращение к еще не существущей переменной.
Также, алгоритм неправильно делает, что уходит в минус. Это его запутывает и делает код менее понятным, в таком коде труднее что-то поправить и проще сделать ошибку. В частности переменная $credit не всегда содержит достоверную информацию и может быть отрицательной - если ее еще где-то использовать, может быть ошибка.
Тут нет никакой выгоды уходить в минус, проще сделать нормально.
Также, echo зачем-то скопипащено 2 раза.
Обе программы требуют доработки.
20 это защита от вечного цикла если вдруг невозможно вернуть долг. Ты можешь не ставить 20, но все равно какая-то защита от зацикливаения нужна бы.
Там где стоит условие $credit > 0 - защиты нет, плохо. Самый простой способ защиты -как раз почтавить счетчик и ограничить каким-то разумным числом N. 20 конечно слишком мало.
Или более сложный вариант - аналитически определить например что долг не снижается N месяцев подряд.
> PHP Notice: Undefined variable: paid in /home/jf4cUQ/prog.php on line 11
Окей с этим ясно спасибо, просто объявить эту переменную вначале и присвоить 0 например. Сойдёт за исправление?
> Это его запутывает и делает код менее понятным
Спорно.
> $credit не всегда содержит достоверную информацию и может быть отрицательной - если ее еще где-то использовать, может быть ошибка.
Окей, предположим что это кусок какой-то большой программы и вдруг идёт обращение к $credit в момент её отрицательного значения, опять же, в конце этого куска кода её можно обнулить при условии что она отрицательная, и не нужно будет постоянно проверять отрицательная она или нет. Это конечно костыль, но и замечание это имеет косвенное отношение к конкретно этой задачи, но просчёт наперёд сколько-то там месяцев я считаю тоже не рациональным подходом, а если там не 13 месяцев, а 113, так что вопрос остаётся открытым, какое же решения для этой задачи является самым рациональным, в пределах этой задачи, без "если бы".
Предложи тогда свой вариант защиты от зацикливания. Ну и насчет ухода в минус - а в чем сложность не уходить? Я понимаю, если бы там что-то мегасложное было.
Понятно что в задаче из 4 строк это может и не принесет вреда, но такой подход в общем неправильный, и его лучше искоренять на самом раннем этапе. В программе большего размера использование таких неочевидных вещей приведет к тому что кто-то сделает ошибку.
> Предложи тогда свой вариант защиты от зацикливания.
Если бы я знал, то давно бы им поделился.
>насчет ухода в минус - а в чем сложность не уходить?
Я не знаю, во всём, вот так вот я вижу решение этой задачи, с минусом. Ты меня спрашиваешь будто я предъявы кидаю что всё говно и нахуй, я же интересуюсь, пусть знающие Аноны поделятся как надо.
>искоренять на самом раннем этапе
Давай искоренять, я только за, но защита от зацикливания каким-то конкретным числом прогонов тоже не лучший вариант.
В голову приходят такие варианты защиты от зацикливания:
- если долг увеличивается быстрее чем уменьшается, у нас вечный цикл
- поставить ограничение на число месяцев превышающее срок жизни человека
- сравнить долг на данном шаге и начальный. Если за N месяцев нет его уменьшения, то останавливаться.
Мне конечно самым простым кажется второй.
Чтобы не уходить в минус можно сделать так:
- прибавляем проценты и комиссию к остатку долга (!не вычитаем ничего пока!)
- если остаток маленький, выплачиваем сколько осталось и уходим
- иначе платим 5000
Можно, но не имеет смысла.
Я не думаю, что хорошую GUI проограмму можно написать «просто». Нужно всерьез разбираться, иначе будут баги, зависания и тд. Отдельная тема это кроссплатформенность.
Вроде раньше GUI программы писали на Си++, но он сам по себе сложный. Зато быстрый. Под винду сейчас на C# пишут. Можно писать на Яве, но она тяжелая и надо ставть огромный инсталлятор. Есть еще node-webkit и похожие штуки, позволяюие писать на HTML/JS.
PHP там применять точно не стоит.
Почему? Память течет? Та же Qt добавила бы события и заебись. Яву не хочу по описанным причинам, а шарп из-за зависимости от Microsoft. HTML/JS для гуя - ну это совсем пиздец. Я надеялся взять что-то, что хорошо ладит с кьютом, уж больно он моему сердцу мил. Я не собираюсь таким образом писать СЛОЖНЫЕ программы. Небольшие тулзы, простенькие игрушки, не больше.
Ох щи, вот же как можно было сократить, действительно: http://ideone.com/krFqvs
Вроде бы всё, дальше некуда сокращать.
Но приблизительное время для выплаты кредита так и остаётся 20 месяцев.
>переменная $credit не всегда содержит достоверную информацию и может быть отрицательной - если ее еще где-то использовать, может быть ошибка.
Кстати, да, там и в одном echo есть неболшая засада: echo "$month мес.: долг = 0 руб, выплачено всего: $paid руб.\n"; - долг просто текстом выводится как "0", а не переменной. Нужно ещё помудрить, получается, чтобы именно переменной получить этот "0" в долге.
Блин, я запутался в своих вариантах, вот совсем сокращённый вариант: http://ideone.com/7FJfGm
>зачем у тебя процент это 1.03, когда 3% это 0.03 с математической точки зрения?
Так проще считать становится, мы сокращаем код.
Пишем не $credit умножить на $percent прибавить $credit (чтобы получить сумму кредита и процентов), а просто $credit умножить на $percent.
>Кстати, да, там и в одном echo есть неболшая засада: echo "$month мес.: долг = 0 руб, выплачено всего: $paid руб.\n"; - долг просто текстом выводится как "0", а не переменной. Нужно ещё помудрить, получается, чтобы именно переменной получить этот "0" в долге.
Да чего там мудрить - вот как всё просто: http://ideone.com/foG9Y6
Просто ставим в самом конце выполнения скрипта $credit = 0; - и всё. Тем более, что это всё уже верным оказывается.
Сразу спрошу, почему не рботает /n как перенос строки?
>header("Content-Type: text/plain; charset=utf-8");
Куда втыкать?
Задача на курс доллара
https://ideone.com/YZp02e
Игра в броски кубиков
https://ideone.com/euuZLK
Рулеточка
https://ideone.com/JG4grX
Айфон в кредит
https://ideone.com/VVwDGV
Второй пик - работа рулетки.
Првый пик - в мануале не написано про то, как работать с /n может прописать? А то за пару тредов уже платиновый вопрос.
Само по себе всё работает, только вот с этой прокруткой проблема, гугл пишет много разной фигни.
Для Саблаймоюзеров. Вдруг кому пригодится.
Тогда уж если совсем сокращать, то вот так http://ideone.com/xq0hgG
тот самый автор этого варианта
>почему не рботает /n как перенос строки?
Ты именно так и пишешь? Слэш там обратный: \n.
>Куда втыкать?
Так у тебя в рулетке же воткнуто всё верно? В header и втыкать, если ты пишешь скрипты в IDE, а потом проверяешь в браузере.
В скрипте Айфона в кредит надо в последний момент долг нулевым сделать. Иначе у тебя получается, что в последний месяц всё выплачено, а долго всё равно 1270р.
Также некоторые переменные начинаются с заглавных букв - не по понятиям! Надо со строчных, а далее новое слово в переменной с заглавной.
>>614181
И то верно. Echo же одно и то же там. Но в моём скрипте так не получится, я там дополнительную переменную $paymentTotalLast ввёл, там у меня echo различаются.
Накопление процентов
http://ideone.com/sbRfdB
Задача про рост
https://ideone.com/OeB9Zb
Ответ на любой вопрос
https://ideone.com/hYGrl2
Генератор имён (надеюсь я правильно понял задачу)
http://ideone.com/NVt8My
Доделай шифрование до нормального уровня
http://ideone.com/JOFYEB
Доделай расшифровку зашифрованного текста.
http://ideone.com/CRpzpH
>>614208
>В header и втыкать, если ты пишешь скрипты в IDE, а потом проверяешь в браузере.
В header куда именно? Можешь пример написать?
Чтобы переносы строк нормально работали и в браузере и в ideone (и в консоли), можно использовать для этого \n, а в начале программы поставить
header("Content-Type: text/plain; charset=utf-8");
Это заставит браузер воспринимать то, что выводит твоя программа, как обычный текст, а не HTML, и уважать переносы строк в нем (так как в языке HTML перенос строки равносилен пробелу).
Иначе перенос строки будет в исходном коде страницы (его можно увидеть нажав Ctrl + U), но на самой странице его не будет.
Покажи код, скажи куда сохраняешь php файл и как открываешь (если браузером то что в адресной строке).
Понял, спасибо. Теперь всё работает.
А, ты это имеешь ввиду, ну если не надо выводить комментарий на экран, то надо загнать в <? ?>. А если надо вывести задачу на экран просто вывожу за пределами <? ?>, и // не обязательно писать, просто осталось.
блять, борда звёздочки спиздила [CODE]//[/CODE]
>614216
Воу, воу, паринь палехчи!!1
Ты кроме РНР явно какой-то ещё язык знаешь?
> Надо со строчных, а далее новое слово в переменной с заглавной.
Буду знать, спасибо.
Лев Толстой
http://ideone.com/3UbyNy
Палиндром
http://ideone.com/f8UWDS
>>614264
Ну как-бы смысл комментария ведь в этом. Чтобы после компиляции его не было видно.
>>614288
>Ты кроме РНР явно какой-то ещё язык знаешь?
C++ уровня школьника знаю. Но толком ничего серьёзного не писал. С# уровня "Написал лабу 3 раза".
>>614290
Один на Щ, а второй где?
Fixed
Нет, там можно по среднемубанку проверить, должно быть 61270 - как в скрипте на кредит Айфона. Значит, и другие тоже неправильно считает.
В прошлом или позапрошлом треде было. Попробуй поискать по @media, ну или я буду с компа - скину настройки для адаптива в CSS.
да, еще я там)
А зачем нам ОП? Тут не все ведь джуны в пхп/програмировании.
Нет, бро, там третий банк самый дорогой, там 69к должен кредит выйти.
Названия у переменных хер проссышь, что это, непонятно и запутанно.
Ух как вкачусь сейчас, да как начну вас траллить регулярками да прочей туфтой...
Да ты уже скидывал, но там только для телефона разрешения для одноколончатого сайта, там же еще менюхи есть и у планшентов ширина экрана отличается от компьютерного. Т.е. я предполагаю, что нужно три мета тега выстраивать(телефон, планшет, компутер). А еще планшет может быть вертикальный или горизонтальный. А под телефон нужно делать более крупные иконки и текст, т.к. все масштабируется.
>там третий банк самый дорогой
У него самый мелкий процент и нет комиссии. Считай - 12к рублей сразу. (если 1к в месяц платить целый год)
Сделать сайт на вордпресс с рейтингами (топ-10), натянуть уникальный дизайн, а также реализовать через админку, удобную добавку записей в которых будет весь необходимый функционал для размещение записи с виде рейтинга (то есть слайдер с картинками, например рейтинг самых высоких зданий и чтобы можно было через админку добавить картинки, которые будут отображаться в виде слайдера).
Такое пойдёт или не очень?
Не пиши "слайдеры-картинки-карусель-через админку", пиши нормальным языком плагины и виджеты. Не в школе все-таки уже.
>Сделать сайт на вордпресс
>если пойду устраиваться на работу ПХП программистом
Я думаю это сразу фэйл. Сейчас вордпресс даже домохозяйки могут.
Ты те шаблоны смотрел, на которые я ссылку давал? Там HTML-шаблоны simplicite, что-то такое.
Там на некоторых шаблонах изначально три колонки или две. Там в @media просто указываются id сайдбара или главного блока, когда экран такой-то ширины - они и становятся соответствующей ширины.
>Так ты изначально за открытие счёта платишь 7к - в том-то и дело.
В других банках ты платишь 6 тыщь и 13 тыщь только не разово, а за счёт сервисных.
Добавлю: из-за этих 7777 рублей там и должно получиться больше в итоге, потому что процентов там на тысяч 5-6 всего.
У тебя как-то неверно считается прибавление этих 7777 к начальному кредиту.
Артемий.jpg
В прошлом тренде оп давал, в самом конце.
Есть метод, который принимает аргументы:
public function select($table, $fields, $where = null, $page, $order_by = array('id' => 'DESC'))
И есть его вызов:
$products = $this->db->select('products', $fields, $where, $page)
Но какого-то хуя $page всегда ебаный НУЛЛ. Я даже в самом методе уже задавал ему значение по-умолчанию, но он все-равно НУЛЛ. Причем если поменять местами $where и $page, то $where становится НУЛЛ, хотя до этого ее значение нормально отображается. В чем дело? Порядок аргументов разве играет значение? Или что блять не так?
Зачем where по умолчанию равно null? Если это не обязательный аргумент, то он должен быть после обязательных.
Я знаю, но я делал и $page по-умолчанию null, ничего не менялось, хотя при вызове метода я туда значение передавал
http://ideone.com/UAC9M6
http://archive-ipq-co.narod.ru/l1/functions.html
http://codepad.org/EqoSCLwx
И, может, кто знает как задача на палиндром без функции решается?
Нет, задача решена не верно. Там стоит внести лишний пробел - всё ломается: http://ideone.com/unkTGF
Алсо паста (ОПа).
### Номера телефонов
Задачу про номера телефонов надо проверить на большом числе телефонов, чтобы убедиться что твой код правильный. Но руками подставлять номера — долго и скучно. Пусть работает робот, а не человек!
Для этого давай добавим в программу тесты, чтобы сразу было видно, верно все работает или нет. Сделай 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' // нет +
);
Бро, извини, это у меня ошибка, походу.
Потому что я изначально бездумно прибавил 7777 к 40 000, а потом, получается, и проценты отсчитывались от этой суммы.
ОП просто ещё не проверил мой этот калькулятор.
Сейчас переделал - вот как у меня получилось: http://ideone.com/DK8ez3
Опять же расхождение с твоей цифрой по третьему банку, а остальное совпадает.
Я тупо прибавил к получившемуся в функции 7777р этой платы за открытие счёта.
Вроде бы и у тебя там то же самое.
Пока туплю и не могу проследить, почему так выходит.
И еще как узнать диапозон айпи локальной сети? "и настройка виртуального сетевого адаптера так чтобы его IP-адрес входил в диапазон адресов локальной сети."
Специально копирую кусочек из мануала и катаю длинный пост, чтобы местные аутисты его а) прочитали б) правильно поняли в) местные школьники-дауны тоже правильно поняли и не задавали тупых вопросов и не раздавали еще более тупых советов.
http://socketo.me/docs/hello-world
Может хост и порт неправильные? Какие указывать под винду локалку? Или лучше на линуксе это делать?
NOPE
>Вроде бы и у тебя там то же самое.
Я тебя наслушался и код перелопатил весь. В итоге изменилось только то, что 7777 я теперь считаю частью изначального кредит, соответственно процент в этом банке считается от суммы 4776 рублей, а не от 3999 как в других банках.
>А если нет, то что бы такое взять, что было бы максимально близко к PHP по простоте старта, количеству и качеству документации, особенно,русскоязычной, коммьюнити, идеологии языка...
Миллиард тонн доков, простота в освоении, огромное комьюнити, кросплатформенность (нативная в отличии от всяких JAVA) - C++.
Доков - на английском, причем сложном. Трудность освоения - МАКСИМАЛЬНАЯ. Код писать - одно мучение.
1) Кому нужны браузерные игры в 2015?
2) Кому нужны браузерные игры без мощнейшего фронтенда и охуенной графики?
>Кому нужны браузерные игры в 2015?
Тебе шашечки или ехать, я чёт не пойму? Так можно вообще про всё написать, кому нужна земля, небо, двачь в 2015?
Перечитал твой вопрос.
У тебя есть Pyton, Perl, Ruby. Но по простоте освоения они ещё хуже плюсов.
>Доков - на английском, причем сложном.
На русском тоже есть. Причём много.
>Трудность освоения - МАКСИМАЛЬНАЯ.
Ну не надо тут. Вполне всё осваивается.
>Код писать - одно мучение.
Ставь MVSN и будет тебе счастье. Остальные компиляторы - да, ужос.
Только все "шахматы" уже 100 раз написаны.
>>614717
Писать ради писать? Тебе в хачкель-тред.
>>614720
Ну... Питон, имхо, проще, раби тоже, хоть и бесполезнее.
>На русском тоже есть. Причём много.
Покажи годный, реально годный и всеобъемлющий справочник по c++, STL, Boost, Qt вроде cplusplus.com или cppreference, но на русском? Покажи реально годных и всеобъемлющих учебниках не на тысячу страниц по чему-то, кроме с++ и стл (с поправкой на правило Парето, ладно) на русском.
Давай ты как-нибудь сам со своими тараканами разберёшься и придёшь сюда когда будешь готов получить совет.
Тебе на всё ответили. А ты ответил в стиле "Ну хз, мне лень искать мануалы, лень писать игры, лень самому придумывать идеи, лень писать код".
>Питон считается понятным и простым. И для него есть биндинги на Qt.
Я и не говорил что он сложный, я говорил, что С++ проще.
Как вообще можно говорить что один язык сложнее другого? Я понимаю сравнивать парадигмы, но блять, не ЯП же. Есть более понятный синтаксис и менее.
Мы разные люди. Я мимокрок, который утверждает, что С++ НИХУЯ НЕ ПРОСТ ДЛЯ ИЗУЧЕНИЯ, это бред. И уж на русском нормальных доков по нему точно нет.
Есть возможность взять и работать с файловой системой. И есть возможность долго заниматься сексом с драйверами, библиотеками, разбираться в коде и потом работать с файловой системой. Понятная аналогия?
ХЗ, у меня знакомый джуном работает прочитав 1 книгу Страуструпа. Куда уж проще.
В таком случае это называется "менее подходящий для данной задачи".
В плюсах нет NULL?
Есть указывает на NULL - массив закончен?
Типа в любом адекватном ЯП енто так.
>NULL
В плюсах указатель, указывающий на элемент, следующий за последним в твоем массиве, указывает на ЧТО УГОДНО. И да, адекватно проверить переменную на определенность ты тоже не можешь, если сам её предварительно не занулил. Как в Паскале прям.
Вообще что угодно. Он напрямую указывает на ячейку в оперативной памяти. Там может быть число, число, представляющее символ, знак числа, ссылка на какой-нибудь другой адрес, любое значение вообще.
https://ideone.com/0BcDtA
И функции загрузки скриптов в конце тоже есть. и таблицы в бд с полями офк.
В одном ручное управление памятью, указатели могущие быть NULL, массивы без проверки размера, адские шаблоны, макросы, а в другом все безопасно. Действительно, какой же проще?
>нет даже функции, узнающей размер массива?
Ой вэй. кто-то за тебя написал ФУНКЦИЮ for(i=1; ;i++) и теперь ты без count жить не можешь
А где у тебя геттеры то? Что-то не понял?
Получает сейчас 90к в ДС. Опыт чуть больше года.
>А ты сам понял, что сказал "одну книгу?"
Джуниор же. Тем более C++ спецов сейчас просто нет. Все внезапно решили года 4 назад вкатиться в руби, PHP, Питоны и прочие. Ну и да, его не с улицы взяли, он таки тестовые задания решал на собеседовании.
Джуниор. С++. Одна книга. 90к? И что ж тут делает целый тред-сериал "нет работы, куда деваться?"
>Ну и да, его не с улицы взяли
Вот с этого и надо было начинать, сын Роттенберга вон вообще всех дальнобоев страны доит.
>Джуниор. С++. Одна книга. 90к?
Что ты удивляешься? Он же её не просто пролистал, прорешал каждый пример, каждую задачу решил. Получил много знаний. Меня например хватало только на пол книги в 1300 страниц.
>И что ж тут делает целый тред-сериал "нет работы, куда деваться?"
Ты в этом треде был? Там буквально все поголовно "Я чёт задолбался хикковать, неделю назад нагуглил что можно вкатиться в JAVA и зарабатывать, 6 дней назад прочитал две статьи и написал целых 3 хеллоуворда. Вчера на собеседовании дали очень сложные задачи по сортировке массива, афигевшие HR хотят чтобы я знал всё за какие-то 150к рублей, вот сволочи!"
>Вот с этого и надо было начинать
Ну он не чей-то родственник если ты об этом, и не по знакомству. Просто подал резюмэ на вакансию которая была размещена, решил задачи. прошёл собеседование. Его взяли. А не так как ты тут хочешь представить. Шёл по улице, его спросили про C++ и сразу взяли на работу.
>Что ты удивляешься? Он же её не просто пролистал, прорешал каждый пример, каждую задачу решил. Получил много знаний. Меня например хватало только на пол книги в 1300 страниц.
Страуструп же меньше в 2 раза. Или ты про какую книгу?
>ни графики
>невозможно написать ничего
У апача тоже графики нет. Так-то.
А вообще - Этож С++, подрубаешь библиотеку и лопатишь графон\сеть\мультипоток. Также как в PHP фрэймворки так и там. Только в крестах проще.
Апач - это не язык. И да, на PHP есть графика.
>А вообще - Этож С++, подрубаешь библиотеку и лопатишь графон\сеть\мультипоток.
Так это их все надо знать, а не чистый С++, о чем и речь. А в php/java оно из коробки есть.
Притом учить их все равно проще.
>Апач - это не язык.
Ты сейчас намеренно дурака включаешь? Я говорю что не все приложения требуют графона и на С++ таки можно писать без использования навороченных библиотек. Причём тут язык?
>на PHP есть графика.
Библиотека обработки графики есть. На чистом PHP ты интерфейс не нарисуешь.
>А в java оно из коробки есть.
>Притом учить их все равно проще.
Ага, всего-то второй томик Хорстмана прочитать в 1850 страниц по JAVA в котором кратко описано как Java со Swing пытается в графику. Очень всё просто и есть из коробки.
бля эти сказочки уровня одна книга-волшебная пилюля меня в этом разделе доебали уже. все как будто пытаются подсунуть гнилой помидор под видом золотого слитка. а потом, когда ты показываешь, что это всего лишь гнилой помидор, они так нравоучительно: ну вот у меня знакомый получил золотой слиток при таких же обстоятельствах, значит ты что-то не так сделал, поробуй нарыть еще один гнилой помидор.
чтобы работодатель потек оттого, какой продвинутый спец лепит ему круды, с которыми справится и пятиклассник.
Апач активно использует сеть зато, а сетевых библиотек вместе с С++ тоже не идет. GD2 входит в поставку PHP, как и AWT/Swing в Java.
>Ага, всего-то второй томик Хорстмана прочитать в 1850 страниц по JAVA в котором кратко описано как Java со Swing пытается в графику. Очень всё просто и есть из коробки.
Вполне достаточно Шилдта в полтора раза меньше, все подробно.
>>614802
Но он прав.
>>614799
НО ЗАЧЕМ? Это ж даже хуже энтерпрайзного проганья в джаве. В PHP скрипты на 200-300 строчек, какие там MVC, паттерны и фреймворки, зачем?
>он прав.
В чём? Он просто устроил истерику в треде и все его посты сводились к "Вы всё врёти, я так не смог поэтому никто так не может."
>GD2 входит в поставку PHP,
Напиши трёхмерную игру на GD2.
>Вполне достаточно Шилдта в полтора раза меньше, все подробно.
Это уже совсем толсто. Шилд по свингу проходится мало, в общем и конкретики у него никакой. Как раз Шилда не рекомендуют в качастве учебника.
>Это ж даже хуже энтерпрайзного проганья в джаве.
Вот с этим согласен.
Для использования библиотек книги уже читать не обязательно, достаточно документации к библиотекам. Вообще использовать книги вместо документации - признак неудачника, который так и не понял, что к чему. Книги при этом нужны, но не как копипаста документации.
> В итоге изменилось только то, что 7777 я теперь считаю частью изначального кредит, соответственно процент в этом банке считается от суммы 4776 рублей, а не от 3999 как в других банках.
Так ведь это абсолютно не верно! Это стоимость открытия счёта, зачем от неё считать проценты?
Но разве вот эта часть у тебя не то же самое, что и у меня: $finalPayed=$dolg+$openDebtPay; то есть простое прибавление 7777 к получившейся сумме выплат?
Подождём ОПа, он всех уничтожит рассудит.
Вот! Вы спрашивали откуда появляется столько говнокода? Вот откуда!
>книги уже читать не обязательно
Всё. Пиздец. Человек реально поехал на собственном ЧСВ.
наоборот, говнокод появляется от личностей, которые прочитали какого-нибудь k&r (про си еще до стандартизации) или страуструпа (привет, 90-е) или лутца про гвидон 2 а потом думают что их устаревшие "знания" (не знаю правда стоит ли называть тупую зубрежку книг знаниями) это пиздец как нужно и важно.
У тебя шаблон головного мозга. Кто вообще будет читать книги 90 годов?
Поясните, норм ли, для создания и взаимодействия с БД, привязки к сайтам и тд.
http://ideone.com/WK0zr7
Также регулярка сокращено по самое не балуйся, но это было и в предыдущем варианте, когда просто проверяли номер.
http://ideone.com/1FcqEH
Когда искали пробелы и разные символы в номере, то было понятно, но теперь у нас строгий порядок букв, не могу додуматься, как сократить.
Так-то работает, но ОП же уничтожит и испепелит...
Поставил себе MySQL Server, открываю источник от ОП'а, самый первый, теорию(пикрелейтед) и вижу подключение к серверу. Но у меня пароль спрашивает автоматически, когда открываю консольное окно, это получается я конекчусь сразу же при старте? Скриншот консоли прилагается.
И еще вопрос, нашел команду CREATE DATABASE ну и ввёл в консоль create database abc, сказало мол ок, всё создано. Куда её сохранило, где это посмотреть, пощупать?
Открыл \h, посмотрел возможные команды. Решил потестить \r (reconnect) и увидел id 14, как я понял каждый раз как я заново подключаюсь к серверу, id=id+1, но зачем, что это вооще такое и как работает?
На первом скрине обычная консоль, там нужно конектится к sql, на втором терминал mysql, там нужно только ввести пароль.
А куда сохраняет созданную базу и таблицу, где можно вживую пощупать, в какой папке?
У тебя скобки не все закрыты. И я не понял, зачем там 2 return'а подряд стоит. Перечитай урок про функции, по моему ты не понимаешь, как они работают.
Анон, а что ты мутишь такое? Зачем ты задачу на калькулятор Айфона делаешь через функцию сразу, ты делал её просто через циклы?
У тебя там сумбур полнейший: $bonus откуда ты взял? Почему не назначено этой переменной значение? В функции не может быть два return'а, может быть только один!
Ты сделал перед этим этот калькулятор, показывал нам решение?
Вот советую сначала с циклами разобраться, а потом ещё и про функции перечитать.
лел, не знаю, то, что вышло бы в 20 строк кода максимум на одной странице, вместе с добавлением всяких фреймворков, цмс, мвц, "орхитектуры", дата мапперов, юнит тестов, эксепшенов, классов и прочей хуеты растягивается на многолетний пиздец.
Предполагаю, что кодером просто скучно лепить простенькие круды, вот они и пытаются занять свое время раскапыванием и закапыванием ямок. Ну и плюс повод понтануться "знаниями". А еще говорят, что гуманитарии в логику не могу, гуманитариям хотя бы свойственно ставить базовый метафицический онтологический вопрос НАХУЯ.
Ну почему же никто. Кому-то везет, у кого-то другие входные данные, богатые морально уравновешенные родители, прописка в ДС. Я и не приравниваю себя к некоторым.
Че анон скажет за пхп7? Используете новые фичи? Как скорость?
200-300 строк это статические странички, очевидно же. Сложные порталы отражающие сложную предметную область сложны. В чем суть твоего негодования - ты не видел больших сложных проектов на пыхе или считаешь что это все нинужно и ты знаешь как сделать лучше?
>Сложные порталы отражающие сложную предметную область сложны.
Вся суть даже очень сложных порталов - сводится к обработке нескольких полей и получении данных. Делать ради этого монстра больше 300 строк, тоже сомнительное занятие и изобретание велосипеда.
>И, может, кто знает как задача на палиндром без функции решается?
Так она и в уроке без функций решается. Там всё написано.
Можно через mt_rand, а можно через array_rand.
http://ideone.com/qmOJ3J - задача про поиск и выведение e-mail'ов.
Тараканы в голове не позволяют мне удовлетвориться сим результатом, поэтому ожидаю разгромного анализа ОПа или других анончиков.
почему этот код работает:
<?php
try
{
$pdo = new PDO('mysql:host=localhost;dbname=testing', 'root',
'' ) ;
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->exec('SET NAMES "utf8"');
}
catch (PDOException $e)
{
$output = 'Невозможно подключиться к серверу баз данных.' . $e->getmessage();
include 'output.html.php';
exit();
}
$output = 'Соединение с базой данных установлено.';
include 'output.html.php';
а этот не работает: я слепой?
<?php
try
{
$pdo = new PDO(`mysql:host=localhost;dbname=testing`, `root`,
``) ;
\t$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
\t$pdo->exec('SET NAMES "utf8"');
}
catch (PDOException $e)
{
$output = 'Невозможно подключиться к серверу баз данных.' . $e->getmessage;
include 'output.html.php';
exit();
}
$output = 'Соединение с базой данных установлено.';
include 'output.html.php';
почему этот код работает:
<?php
try
{
$pdo = new PDO('mysql:host=localhost;dbname=testing', 'root',
'' ) ;
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->exec('SET NAMES "utf8"');
}
catch (PDOException $e)
{
$output = 'Невозможно подключиться к серверу баз данных.' . $e->getmessage();
include 'output.html.php';
exit();
}
$output = 'Соединение с базой данных установлено.';
include 'output.html.php';
а этот не работает: я слепой?
<?php
try
{
$pdo = new PDO(`mysql:host=localhost;dbname=testing`, `root`,
``) ;
\t$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
\t$pdo->exec('SET NAMES "utf8"');
}
catch (PDOException $e)
{
$output = 'Невозможно подключиться к серверу баз данных.' . $e->getmessage;
include 'output.html.php';
exit();
}
$output = 'Соединение с базой данных установлено.';
include 'output.html.php';
У вызова метода нет круглых скобок.
Поставь ide, там подсвечиваются такие ошибки.
И getMessage пишется кемелкейсом. php не чувствителен к регистру, поэтому прощает в именах функций. Но с именем переменной это была бы ошибка.
Спасибо , выручил.
Я не знаю о каких именно круглых скобках ты говорил , но проблемка была с вот такими символами:
' '' ' ' ' ' , вместо них почему то всегда ставлю ```` либо """" ._.
Не знал о таком, спасибо.
Не получается исправление - не понимаю, как вернуть в текст именно тот символ, который ушёл в предыдущей регулярке.
Например, можно пойти окольным путём: после первой регулярки тупо поставить после каждого пунктуационного знака пробел, далее третьей регуляркой заменить два пробела подряд на один пробел.
Со словами то же самое сделать, но уже четвёртой регуляркой.
Только ведь ОП за такое испепеляет одним своим взглядом...
В preg_replace, кстати можно передать массив из регулярок и соответствующий массив для замены по каждой регулярке. Не знаю как правильно, но я делал эту задачку через массивы.
Хм, даже не представляю, как бы это выглядело...
Как так - массив из регулярок? Как будут подбираться соответствующие ошибкам регулярки? Даже не могу сообразить, как бы это выглядело.
Что ты предлагаешь?
Делаю задачу про кратчайший путь.
Допустим, я нашел минимальное расстояние до каждого узла. Как мне построить путь для необходимой точки?
Не расстояние, а время, конечно.
C:\ProgramData]MySQL\MySQL Server 5.7\Data\
Эта папка по умолчанию является скрытой.
Ну или можно посмотреть путь в консоли с помощью команды:
SELECT @@datadir; .
Мы и так знали, спасибо.
Сможете ли вы совладать с нею?
Гуманитарий 31-го уровня потому что.
У меня просто гуманитарный синдром: раскладываю на простые действия до максимального усложнения кода, потому что тупо не могу сообразить, как сделать то же самое с помощью более сложных для меня элементов, массивов, например, и циклов.
Не пойму вообще, как тут можно было бы поступить, не представляю из-за отсутствия опыта.
Завязываю с Сальмой, просто восхитился её грудями, когда искал картинку по запросу "сомнение".
Спасибо, буду разбираться.
Чому там в итоге сумбур какой-то: не все ошибки выводятся, всё перемешано?
Опять же нет исправления текста в итоге.
Однако на следующие задачи ОПа смотрю - ну я лучше ещё раз все задачи перед повторением пройду, а то вообще нет ни уверенности, ни понимания, как всё реализовать, как будто не ковырялся со всеми предыдущими задачами три недели.
Даже не разбирая могу сказать, что это лютый говнокод, попробуй заняться чем-нибудь другим.
А может, приведешь пример своего неговнокода, который ещё и работал бы?
Да, я постоянно мониторю тренд, заняться больше нечем
Мне бы твои проблемы. Я давно был бы уже долларовым миллионером.
Анончик, блиять, ничего не работает, всё пропало....
Сейчас занимаюсь сексом с твоим кодом - не выходит ничего, понимания нет.
С Наступающим!
http://ideone.com/fKxy2O
дальше засунь дилдо в жопу.
Что ты понимаешь под "вкатываться"? Для того, чтобы достичь каких-то высот и зарабатывать этим? Это в любое время будет перспективно для того, кто понимает, для чего это ему нужно.
А если нет, то будешь три года искать работу, как анон выше.
Это такой намек, что я "не понимаю, для чего мне это нужно"? Ну так объясни "ДЛЯ ЧЕГО ЖЕ" мне это нужно, помимо заколачивания бабла? Вы тут каких-то сектантов напоминаете.
Конечно вкатывайся, если ты молодой-горячий школьник со стоящим хуем, тебя сразу возьмут, чтобы разминать мягкое очко в перерывах.
Собственные проекты надо делать, полно тем, которые приносят много денег, а конкуренции большой нет. Ты видел codeacademy, есть ли у неё достойные конкуренты в России? Скажешь, если бы был достойный конкурент, то его не разнесло бы сарафанное радио и школьники и слоупоки вроде меня не платили бы какие-то деньги за продвинутые курсы?
Это как пример, такого много в плане разных сервисов.
Учить программирование просто ради работы на дядю - как минимум, неумно.
>продвинутые курсы платные
Там продвинутые курсы уровня /b
Я хз чему там вообще научиться можно.
Пруфы, у них на сайте написано что они вообще только за Хелпдеск плату принимают. Ничего про продвинутые курсы не нашол.
Там влошений куча, там доля принадлежит Юрию Мильнеру (несколько миллионов долларов за 5 лет существования) и платыне курсы вроде становятся доступны только после прохождения основ.
И вообще я попутал с codeschool.com, сасайте, это там курсы по 20-30$ в месяц.
Codeacademy же не высокого уровня, >>616581 прав.
НЕ ИЩИТЕ ОТМАЗКИ, КАРОЧИ, ЧТОБЫ НИЧЕГО НЕ ДЕЛАТЬ И ЖДАТЬ СВОЕГО ДЯДЮ
Три питерских пограмиста в начале 2000-ых забацали свой IDE для Java, какую-то еще ебалу для этого всего, а сейчас десятки миллионов долляров зарабатывают в год, имеют штат из 400 сотрундиков. Google у них сасает со своим Android Studio.
Так что искренне сожалею, что у вас нет идей.
У меня вот идей ДО ХУИЩА, а знаний практически нет пока, не достаточно для реализации.
JetBrains и их редактор IDEA.
Android Studio от Google происходит от IDEA.
https://ru.wikipedia.org/wiki/JetBrains
Phphstorm и прочая ебала для языков - тоже их потных ручонок дело.
У меня нет никаких идей или стремлений. Я и код пишу уже на автомате, чтобы хоть что-то делать. Никакой фантазии не осталось, все, полный нигилизм.
Да и за выкладывание любого объемного проекта на цмсках или фреймворках больше слима придется покупать хостинг. А нахуй тратить в кризис на хостинг, если это говно не будет ничего приносить с 99.999999999% вероятностью.
В дешевенькие продвинутые курсики на кодеакадемии вложили несколько лямов долларов??? Застрелите меня, мне точно в айти делать нечего.
http://www.yiiframework.com/wiki/763/step-by-step-for-how-to-full-export-yii2-grid-to-excel/
namespace app\controllers;
public function actionEntry()
{
$model = new EntryForm();
}
Class 'app\controllers\EntryForm' not found
namespace app\models;
use Yii;
use yii\base\Model;
class EntryForm extends Model
{
}
Либо импортировать класс через use, либо при создании экземпляра писать полный неймспейс.
Впрочем use тоже работает. В C# неймспейсы понятнее.
У меня в файлообменнике эта библиотека занимается составлением отчета о медиаданных файла. Мелкие файлы грузятся без проблем, но при загрузке файла размером в 50 мб получил сюрприз вида:
PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 17759557 bytes) in /vendor/james-heinrich/getid3/getid3/module.archive.gzip.php on line 54
Под php выделено 128 мб памяти, upload_max_size и post_max_size по 500.
Хотя нет, эта либа судя по логу хочет только 17 мб (тоже немало), нужно понять кто съел остальные 110.
Ну ладно, сейчас я приведу код в рабочий вид и скину гитхаб.
Калькулятор.
Что не так? Или может нужно как-то без этих ififif делать, но как?
Ну хз, не понимаю я такого.
Несколько проектов уровня "проверить битые ссылки на сайте", "перемешать строки", "проверить текст на количество ключевых слов". Несколько проектов для портфолио - я тебе как заказчик на фрилансах скажу: это вкупе с нормальной ценой на услуги и нормальным количеством отзывов привлекает заказчика.
>>616648
Так там одной посещалки в сутки пара сотен тысяч человек, несколько тысяч человек оплатят курс на месяц - миллионная прибыль.
>>609392
Постарался исправить все, надеюсь нигде опять не накосячил с ООП. Посмотри, пожалуйста.
http://ideone.com/sepIh4
По ходу кодинга появились вопросы.
1)Сложный цикл for для мышей где 4 направления-копипаста делать(он там закомментирован)? Или достаточно его в котах и собаках где 8 направлений-копипастов.
2)> foreach ($foundAnimals["mice"] as $mouse) {
> if ($this->field->areChosenAnimalsNearTheCage($mouse->x, $mouse->y, $foundAnimals["mice"])) {
Тут явно ошибка - ты не используешь переменные $x, $y хранящие координаты хода.
Ошибки нету. Метод класса Field areChoosenAnimalsNearTheCage использован в foreach не с координатами хода, а с координатами каждой мыши чтобы перебрать все варианты. Допустим у нас две мыши. Одна мышь найдет рядом другую, аналогично со второй.
OneLine будет равно двум. А если их три, то результат будет равен трем (каждая мышь подтвердит факт наличия рядом с собой представителя своей породы).
3)>Попробуй использовать тут array_filter с анонимной функцией, мне кажется будет чуть проще.
Я сделал это для мышей и собак, но в кошках у меня три условия для массива(рядом ли мышка? можно ли походить? можно ли съесть?). Делать ли отдельный метод который совместит ли эти три условия?
4)Вопрос по тому же array_filtr
canIMoveTo у меня теперь с одним параметром содержащем две координаты, вместо двух наглядных параметров x и y, потому что не знаю как передать два параметра
в array_filtr вторым аргументом, который представляет собою анонимную функцию(метод из другого класса). Как передать эти два параметра?
5)Правильно ли я передаю анонимные функции? array($this, "функций").
6)Как быть со свойствам символов и дальности обзора? Делать ли их через _construct или указывать в свойствах?
Если что вспомню из вопросов, напишу. Что я изменил без твоего совета:
1)В методе startGame во внутреннем цикле foreach у меня был баг. Если следующий элемент в цикле был съеден, он не ходит, однако не ходят и все следующие элементы за ним. Они будут ходить только в следующем ходу. Поэтому foreach я поменял на for с новым последовательным порядком индексов через функцию array_values.
2)Переделал функцию searchNearbyCorner. Теперь она называется countStepsToCorners и считает сумму свободного пространства.
http://pastebin.com/xbTyqfUw твой ответ, на случай, если старый тред утонет.
http://ideone.com/oQtKhu код который ты проверял.
>>609392
Постарался исправить все, надеюсь нигде опять не накосячил с ООП. Посмотри, пожалуйста.
http://ideone.com/sepIh4
По ходу кодинга появились вопросы.
1)Сложный цикл for для мышей где 4 направления-копипаста делать(он там закомментирован)? Или достаточно его в котах и собаках где 8 направлений-копипастов.
2)> foreach ($foundAnimals["mice"] as $mouse) {
> if ($this->field->areChosenAnimalsNearTheCage($mouse->x, $mouse->y, $foundAnimals["mice"])) {
Тут явно ошибка - ты не используешь переменные $x, $y хранящие координаты хода.
Ошибки нету. Метод класса Field areChoosenAnimalsNearTheCage использован в foreach не с координатами хода, а с координатами каждой мыши чтобы перебрать все варианты. Допустим у нас две мыши. Одна мышь найдет рядом другую, аналогично со второй.
OneLine будет равно двум. А если их три, то результат будет равен трем (каждая мышь подтвердит факт наличия рядом с собой представителя своей породы).
3)>Попробуй использовать тут array_filter с анонимной функцией, мне кажется будет чуть проще.
Я сделал это для мышей и собак, но в кошках у меня три условия для массива(рядом ли мышка? можно ли походить? можно ли съесть?). Делать ли отдельный метод который совместит ли эти три условия?
4)Вопрос по тому же array_filtr
canIMoveTo у меня теперь с одним параметром содержащем две координаты, вместо двух наглядных параметров x и y, потому что не знаю как передать два параметра
в array_filtr вторым аргументом, который представляет собою анонимную функцию(метод из другого класса). Как передать эти два параметра?
5)Правильно ли я передаю анонимные функции? array($this, "функций").
6)Как быть со свойствам символов и дальности обзора? Делать ли их через _construct или указывать в свойствах?
Если что вспомню из вопросов, напишу. Что я изменил без твоего совета:
1)В методе startGame во внутреннем цикле foreach у меня был баг. Если следующий элемент в цикле был съеден, он не ходит, однако не ходят и все следующие элементы за ним. Они будут ходить только в следующем ходу. Поэтому foreach я поменял на for с новым последовательным порядком индексов через функцию array_values.
2)Переделал функцию searchNearbyCorner. Теперь она называется countStepsToCorners и считает сумму свободного пространства.
http://pastebin.com/xbTyqfUw твой ответ, на случай, если старый тред утонет.
http://ideone.com/oQtKhu код который ты проверял.
Создание скрипта для поиска и замены ошибок в тексте
- переменная для вывода текста ($text);
- массив с регулярками в ключах и описаниями ошибок в значениях ($regexp);
- пустой массив, в который будем собирать ошибки ($errors);
- С помощью функции вытаскиваем регуляркой из текста все ошибки и заполняем ими массив $errors (preg_match_all($regexp, $text, $errors);)
- Определяем переменную для всех ошибок, вытащенных предыдущей функцией ($matches = $errs[0];)
- Считаем количество ошибок в тексте (($number = count($matches);) ;
- Далее надо текст разбить на ошибки и вставить кусок из них с ошибкой: preg_split на три элемента – с ошибкой, предыдущий и последующий ($partOfText), далее циклом вытащить соответствующие части и собрать в строки.
- Далее находим соответствие между ошибками в массиве $matches и описанием ошибок в массиве ($regexp);
- Далее выводим результат с помощью echo: индекс с объяснением ошибки из массива $regexp и соответствующую ошибку из $errors.
На этом проверка и вывод ошибок оканчивается.
Для исправления ошибок нам надо массив из регулярок ($regexp) разбивать на ключи, содержащие регулярки, и с помощью цикла подставлять в функцию с заменой куска текста через регулярку (preg_replace($regexp[$i], $text, $cleanText[$i]);). Так же пополнять массив $cleanText[$i] с постепенно очищающимся текстом.
В самом конце выводим $cleanText[$i] – исправленный полностью текст.
Имеет ли право на жизнь?
Как же мне не хватает соображения во всём этом и какого-нибудь хорошего наставника уровня многих анончиков в этом треде, который бы давал советы и т.п.
Это пиздеец....
На каком уроке это начинается?
Я до такого в жизни не дойду, вообще даже не врубаюсь, что там есть....
Не пугайся, я так тоже думал про многое, регулярки в оп учебнике, например, но постепенно дошел до этой задачи. Это раздел "Пасты и ООП".
>Несколько проектов уровня "проверить битые ссылки на сайте", "перемешать строки", "проверить текст на количество ключевых слов".
Это прикол такой?
> в array_filtr вторым аргументом, который представляет собою анонимную функцию
Не анонимная, а callback функция. Путаюсь в терминах.
Нет.
Да.
Бро, есть ли у тебя желание помогать стремящемуся в РНР нубу? Оставь контактик, молю! Помогая другому - сам лучше понимаешь всё...
Ну и так далее моя пьяный бред.
http://www.jomashop.com/accutron-watch-64c104.html
http://www.jomashop.com/bulova-ladies-watch-63r33.html
http://www.jomashop.com/accutron-innsbruck-26e09.html
Я уже не знаю, что делать.
Урок ОПа на регулярные выражения может помочь.
Там есть регулярка для поиска всех ссылок на странице (или в тексте). Можно поставить в регулярке обязательное "watch", чтобы собирать ссылки только на часы.
привет, программач!
Подскажи, сведущий анон, с кем бы поговорить тут о плагинах WP? Я начинаю изучать движок и придумал себе задачу, с которой сам пока не в силах справиться.
Оп, помогай. Я не знаю, что дальше делать. Вернее я хочу правильно автозагрузку реализовать, но не понимаю как. Смотри она в bootstrap.php. Я подключаю ядро (core). А пространства имен как тут реализовать? Я читаю разные доки, в том числе и твои, и ничего не могу понять.
Я уже начал изучать, как реализовывается автозагрузка в composer. Но опять мне многое не понятно.
Да что там пилить.
В середине ноября зарегался на hh, в резюме указал только навыки и кинул ссылку на свой гитхаб с задачками от ОПа (студенты и не отполированный, но рабочий файлообменник). Начал метать отклики. Компании, которым нужны неджуны меня не брали. Джуновакансии были только у уэб-студий. Одна меня отшила, две другие я сам послал. Сижу, мониторю hh, но кроме старого говна ничего не появляется. На пятый день моего нахождения на сайте на почту падает письмо от крупной конторы (я ещё тут спрашивал, мол, знаете про них что?) с предложением побеседовать по скайпу. Согласился. Саму вакансию, при этом, они нигде не разместили - только в письме отдельным файлом прислали описание.
Собеседование проводило непосредственное начальство (парень лет тридцати). Спрашивали, как я изучал всё это дело, почему решил программировать. Основные вопросы были по базам данных и ООП. По PHP всего один вопрос, лол. Ещё спросили, что я написал на яваскрипте. По самому языку вопросов не было.
Дали тестовое задание (если интересно, могу откопать в почте). Решил. Отправил. Позвали на очное собеседование с HR-ом. Побеседовали. Сказали, перезвонят. Перезвонили в тот же день. Сказали, что я им подхожу и нужно пройти ещё собеседование - с дядьками в чОрных костюмах. После него опять перезвонили, договорились о дате выхода на работу. Всё общение с этими ребятами (три собеседования, тестовое задание и т. д.) заняло примерно три недели.
На работе используют Symfony и Doctrine. Код пишу в PhpStorm`е, на компе с виндой. Запускаю на удаленном сервере в личной виртуалке (там debian).
Если что-то ещё интересно - спрашивай.
ДС, вышки нет.
1. Накидать архитектуру мини-приложения, не вдаваясь в детали.
2. Написать скрипт вытаскивающий из таблицы с ссылками (внешним ключами) на саму себя данные и строящий из них древовидную иерархию.
3. Написать SQL-запрос.
На задание дали один день.
5.5 месяцев где-то. Но я много времени уделял, особенно на первых порах.
Поясните за лучшие по вашему мнению IDE/текстовые редакторы бесплатные для разработки.
Я ни копейки не заплатил. он совершенно безболезненно активируется. Ещё есть Atom.
бамп
Сделай вектор и сразу переходи. По студентам хорошие советы у опа есть, должно легко идти. Возможно, урок по работе с формами тебя натолкнет на некоторые мысли.
Google: phpstorm 10 activation.
Спасибо.
Респектую успешно-куну!
Получается, программирование для толковых потсанов - шанс довольно быстро выбиться в люди и устроиться на нормально оплачиваемую работу с перспективами. И всё это без высшего образования.
Хотя тут пробегает иногда анон, который три года не может найти работу. Значит, имеет значение и дислокация.
В ДС ведь работу и так несложно найти, как правило, не обязательно пограмистом.
>в резюме указал только навыки и кинул ссылку на свой гитхаб с задачками от ОПа (студенты и не отполированный, но рабочий файлообменник).
>>Несколько проектов уровня "проверить битые ссылки на сайте", "перемешать строки", "проверить текст на количество ключевых слов".
>Это прикол такой?
Нет.
>что ты там делаешь?
Обучаюсь. Йобу с симфони выкачали мне на виртуалку, после праздников будут показывать, что там да как. Ну и документацию я сам в свободное время читаю, что-то пишу, пробую запускать.
>И за это платят деньги?
А почему не должны?
>Может там еще бесплатные обеды и шлюхи?
Нит. Но потом, может, будет дотация на питание.
Silex, Doctrine.
Я в мухосрани тоже устроился на работу. Правда сижу обновляю джумлы и делаю сайтики. За 25к.
Какой лвл? Я вот на 24-ом врываюсь в ИТ сферу, вышки нет, только желание добиться чего-нибудь.
Ну, добра, ты молодец. Надеюсь, так же преуспеть
>А что ты говорил про образование?
Сказал, что меня выгнали из гуманитарного вуза.
>И почему решил вкатиться?
Ойти всегда было в моем сердце мне интересно. В школе сдавал информатику в том числе. Правда, ничего не программировал.
Немного экзотическая гум. специальность.
Можно ли как-то присвоить ключам порядковый номер и так достать?
На всякий случай бамп реквесту правильных книжек.
Каждый элемент ассоциативного массива в PHP по дефолту можно достать и числовым ключом. $a = ["kek" => "cat", "lol" => "dog"]; $a[1] === "dog", $a[0] === "cat".
Хуй знает, с чего я это взял.
Есть функции для движения указателя по массиву. можно циклом отсчитать нужное количество вызовов next(), но как по мне, это ебать костыль.
http://php.net/manual/en/function.next.php
Здесь как достать именно КЛЮЧ, а не значение
http://php.net/manual/en/function.key.php
Бакинских хотя бы?
Поясните за четвёртую плз. Уже не первый раз натыкаюсь на её упоминание.
Вот именно, что нет.
Что очень неудобно в решении задачи про поиск ошибки в тексте. Я думал в массив забить регулярки => объяснения правил. Потом тупо подставлять регулярки в цикл, чтобы искались разные ошибки в тексте.
Но не получается у меня, не получается.
Не даёт мне покоя моё кривое решение этой задачи, хочется правильного решения.
>>617252
Спасибо, вроде бы это должно помочь.
читай шапку, ленивый хуй
вообще то там хардкор полный и фундаменталки дохуя, а не просто идея, компьюктер саенс во все поля.
Если поставить var_dump($matches), то покажет массив со всеми допущенными ошибками, в echo выведет в $values все соответствующие ошибкам значения.
Но как, как, блять, мне вытащить в эхо и соответствующие куски текста с теми ошибками? Я уже третий день трахаю эту задачу в хвост и в гриву.
Можно например вместо одной большой регулярки сделать несколько, одно регулярное выражение для каждого типа ошибки.
Тогда ошибки одного типа будут сгруппированы в отдельные массивы, и ты сможешь вывести это в формате
"Описание ошибки 1": [перечень фрагментов текста с этой ошибкой], ...
>Можно например вместо одной большой регулярки сделать несколько, одно регулярное выражение для каждого типа ошибки.
Так ведь у меня так и есть в $possibleErrors, разве нет? Почти так ведь.
>Тогда ошибки одного типа будут сгруппированы в отдельные массивы, и ты сможешь вывести это в формате
"Описание ошибки 1": [перечень фрагментов текста с этой ошибкой]
То есть одна регулярка будет проходить текст и собирать свои ошибки? Но не пойму всё равно, как бы это выглядело.
https://www.coursera.org/specializations/full-stack
https://www.coursera.org/course/webapplications
https://www.coursera.org/specializations/web-design
https://www.coursera.org/specializations/java-object-oriented
https://www.coursera.org/learn/html
https://www.coursera.org/learn/javascript
https://www.coursera.org/learn/introcss
https://www.coursera.org/learn/responsive-website-examples
https://www.coursera.org/learn/object-oriented-java
https://www.coursera.org/learn/website-coding
https://www.coursera.org/course/programming2
https://www.coursera.org/learn/java-programming
https://www.coursera.org/learn/duke-programming-web
https://www.coursera.org/course/cs101
https://www.coursera.org/learn/python
https://www.coursera.org/learn/web-application-development
https://www.coursera.org/learn/website-coding
https://www.coursera.org/course/programming1
https://www.coursera.org/learn/java-programming-design-principles
https://www.coursera.org/learn/html-css-javascript
https://www.coursera.org/learn/html-css-javascript-for-web-developers
Дс? Да не верю я в эти влажные истории, у меня уже давно гораздо больше проектов, чем файлообменник и что ты там за говно написал, висит - никаких откликов вообще. Забил уже, сижу в игры играю третий год.
Может дело не только в дислокации, но и в том, что я 30летняя женщина, хз.
Везение, тупо не видно твою анкету из-за наплыва новых. Руки-то не надо опускать.
Опять же если бы не опускал руки, то на фрилансе работал бы давно.
>Тогда ошибки одного типа будут сгруппированы в отдельные массивы, и ты сможешь вывести это в формате
>"Описание ошибки 1": [перечень фрагментов текста с этой ошибкой], ...
Да блиять, как это сделать?
Там только бла-бла-бла от препода можно слушать, есть ли какие-нибудь тесты, возможность писать код и просто выполнять задания?
Говно какое-то, честно говоря.
Да
Анон - 30-летняя тётя, вполне возможно, хочет многого и сразу, по всей видимости.
Его только возьмут на работу, как он сразу залетит, потому как пора бы уже, блеять, а работодателю выплачивать декретные и прочая ебала, которая никому не нужна.
Ты вакансии-то сначала посмотри. Там одни битриксы.
Рад был помочь.
Он обиделся на флуд в его треде. И ушёл.
Всё вроде бы должно как минимум выводить ошибки и правила, какого же, спрашивается, дьявола сие не работает?
ну едрит твою через коромысло, ошибки внизу для кого написаны? Во первых зачем ты вручную прописываешь числовые индексы массиву? Из-за этого у тебя массив начинается с 1, а не 0, а в цикле сначала обращение идет к несуществующему элементу с индексом 0.
Далее, еще одна тупейшая ошибка:
>preg_match($possibleErrors[$i]['pattern'], $matches[$i])
Смотрим документацию по preg_match:
>Ищет в заданном тексте subject совпадения с шаблоном pattern
>Список параметров
>pattern
>Искомый шаблон, строка.
>subject
>Входная строка.
>matches
Смотрим что у тебя: паттерн есть, необязательный аргумент matches есть, а Subject где? К чему применять регулярку?
Ideone не показывает ошибки, когда несколько раз редактируешь код, сам сейчас увидел...
>Во первых зачем ты вручную прописываешь числовые индексы массиву? Из-за этого у тебя массив начинается с 1, а не 0, а в цикле сначала обращение идет к несуществующему элементу с индексом 0.
Почему же так?.. Ведь там стоит for ($i=0; $i < $number; $i++) и сначала в $i везде должен ноль подставиться?
Вот тут:
if (preg_match($possibleErrors[$i]['pattern'], $matches[$i])) { /Достаём из массива регулярку, подставляем её в функцию, проверяем найденные ошибки в массиве $matches на соответствие/
\t\t$message = $possibleErrors[$i]['message'];
А как их ещё прописать можно? Как по-другому вообще можно?
Но ведь у меня там $matches и есть subject?
Я этот получившийся массив проверяю регулярками из массива $possibleErrors...
Ты массивы проходил? Если создать массив вот так
$example = array("Яблоко", "апельсин", "банан")
То у яблока будет индекс 0, у апельсина 1, у банана 2 и т.д. Ты же пишешь вот так
$example = array(1 => "Яблоко", 2=>"Апельсин") Зачем? Мало того, что это делается автоматически, так ты еще и начал не с нуля, что потом вылезло в цикле, в котором ты уже начинаешь с нуля.
Ну дак у него как бы все верно, необязательный аргумент последний же должен быть. Он тут просто проверяет есть совпадения или нет.
Я массивы уже вдоль и поперек прочитал у ОПа и в мануале...
Но эту ошибку не заметил, блин, спасибо...
Хотя всё равно у меня не работает, и я не понимаю, почему же так.
Разве там не подставляется соответствующая регулярка в preg_match? Почему же цикл не работает и не проходится до того, пока $i < $number (количества ошибок)?
Субъект :)
preg_match([регулярка], [где проверяем], [куда выводим результат(необязательно)]);
Да, название просто не подходящее для второго прохода по всяким циклам.
>>617757
Да, всё так и делается у меня там.
*вообще не воспринимает эту переменную почему-то.
Вообще не воспринимает этот массив как текст для проверки. Сразу ошибка: PHP Warning: preg_match() expects parameter 2 to be string, array given in /home/4JI2nI/prog.php on line 46
Может, как-то надо разбить этот массив на строки?
Сделай var_dump своего массива matches и увидишь там 22 элемента. Регулярок у тебя всего 7. То есть на 7ом шаге цикла мы обращаемся к элементу $possibleErrors[7]['pattern'] которого нет, на 8ом к 8ому и т.д до 21.
Вложенный цикл еще нужен тебе. В каждом нахождении сверять с 7-ю возможными ошибками.
Ох щиии...
Спасибо, вот ещё где засада....
А вообще можно ли массив проверить регулярками, а не строку?
Google показывает, что нет...
Тогда надо будет массив в строку вытянуть, получается?
>>617766
Как так, для чего? Почему нельзя будет просто выводить сработавшую регулярку в ключе массива и соответствующее правило (значение в этом массиве)?
Проверяй на тексте попроще постепенно.
Вот смотри
https://ideone.com/EskNkX
Здесь все нормально.
Поменяем местами ошибки и уже ничего не находит.
https://ideone.com/Uq2Gcw
У тебя скрипт ожидает что ошибки в тексте будут идти ровно в том порядке, в котором они указаны в регулярках. Нужно для каждой ошибки проходиться по всему массиву регулярок, а не надеяться, что индекс у ошибки и у паттерна совпадет.
>У тебя скрипт ожидает что ошибки в тексте будут идти ровно в том порядке, в котором они указаны в регулярках. Нужно для каждой ошибки проходиться по всему массиву регулярок, а не надеяться, что индекс у ошибки и у паттерна совпадет.
Блииин, действительно...
Тогда там надо использовать ещё и preg_match_all, наверное? Не цикл ещё один пустить, а каждую регулярку пустить по всему тексту?
А весь общий цикл можно ограничить количеством ключей-регулярок в массиве $possibleErrors - просто сделать count($possibleErrors).
Попробую так, ты вселил в меня надежду, спасибо!
>Не цикл ещё один пустить, а каждую регулярку пустить по всему тексту?
Почему ты так боишься вложенных циклов? Не нужно ничего переписывать, всего-лишь добавить внутренний цикл, который будет проходить по всему паттерну.
>А весь общий цикл можно ограничить количеством ключей-регулярок в массиве $possibleErrors - просто сделать count($possibleErrors).
А это зачем? То есть если у тебя будет 20 ошибок, ты собираешься проверять только первые 7?
>Не нужно ничего переписывать, всего-лишь добавить внутренний цикл, который будет проходить по всему паттерну.
Я стараюсь упростить сразу. Разве с preg_match_all не будет то же самое? У меня сумбур уже начинается какой-то.
>А это зачем? То есть если у тебя будет 20 ошибок, ты собираешься проверять только первые 7?
Нет, я хотел именно регулярки посчитать, не ошибки. Чтобы цикл продолжался, пока не пройдены все регулярки в массиве, а каждая регулярка проверяет весь текст. Вот так думал.
Теперь вот разбираюсь, как посчитать отдельные элементы в массиве из массивов, что за напасть...
Я не понимаю к чему ты собрался применять Preg_match_all. Я написал очевидное решение, которое требует от тебя всего-лишь добавить и переписать пару строк. Внутри цикла for мы делаем цикл, который проходится по массиву регулярок и проверяет на каждом шаге через preg_match соответствует ли текущая регулярка с matches[$i], c $i из внешнего цикла. Делай как считаешь нужным, но я предупредил.
Preg_match_all - чтобы пройтись регуляркой по всей получившейся строке из ошибок.
Сейчас соберусь с мыслями, что-то сложно.
Нам ведь нужно использовать каждую регулярку в ключах массива для поиска ошибки во всём тексте, а когда соответствие находится - получать и это же значение из этого же массива......
Блин, я опять куда-то не туда упёр....
Какая строка из ошибок, а как я буду получать соответствующие куски из текста...
Ой, всё. Я уже поехал.
>У тебя скрипт ожидает что ошибки в тексте будут идти ровно в том порядке, в котором они указаны в регулярках. Нужно для каждой ошибки проходиться по всему массиву регулярок, а не надеяться, что индекс у ошибки и у паттерна совпадет.
>Внутри цикла for мы делаем цикл, который проходится по массиву регулярок и проверяет на каждом шаге через preg_match соответствует ли текущая регулярка с matches[$i], c $i из внешнего цикла.
Я теперь туплю и не представляю, как проверить это соответствие.
Внутри for сделать ещё один цикл с for?
Что с чем сравнивать и как? В массиве как я сравню регулярки и с чем? Ещё раз дублировать цикл? Каша в голове полнейшая уже.
Как сравнить matches[$i] с $i из внешнего цикла, там же у нас регулярка и просто числовое значение?...
>Внутри for сделать ещё один цикл с for?
О чем я и говорю.
>Что с чем сравнивать и как? В массиве как я сравню регулярки и с чем?
Значит у нас есть первый цикл, который берет некое $i, которое нам нужно для массива matches. $i в данном случае это номер ошибки. Для каждой ошибки нам нужно перебрать массив регулярок. Во внутреннем цикле for проверяем элемент массива регулярок $regElement[$n] на соответствие ошибке matches[$i].
>О чем я и говорю.
Есть в принципе еще array_search. Нативные функции по идее должны быстрее работать (точно не знаю) и кода меньше.
Мне так удобнее, да и foreach не зависит от нумерации индексов и подходит даже для ассоциативного массива.
Да что ж такое-то, никак не пойму, как это будет работать и что именно нам даст...
Мне надо переспать с кодом или сложной задачей, чтобы наконец всё сложилось в голове
Просто поспать, мысленно подыскивая решение
4 дня уже плохо сплю
>$i в данном случае это номер ошибки.
Хм, но ведь $i у нас номер массива с регуляркой (ключом) и правилом (содержанием)?..
То есть нам нужно перебрать все эти массивы с регулярками и правилами, сравнивая их с ошибками в matches[$i], я ведь так и делал в первом цикле - я именно к этому там и стремился.
>>617828
То есть мне можно вот так сделать, наверное:
foreach ($possibleErrors as $pattern => $message тут пока не пойму, как разложить сложный массив на составляющие, сейчас буду искать) {
if ($pattern[$i] == $matches[$1]) {
echo "{$pattern[$i]} и {$message[$i]}\n";
}
}
Такое что-то?
Ну охренеть, вообще как в тумане хожу-брожу...
У тебя possibleErrors состоит из ассоциативных подмассивов. Соответственно не $pattern[$i] (там ведь нет элемента с таким индексом $pattern это массив с индексами 'pattern' и 'message') а $patter['pattern']. И нужно не сравнивать с matches[$i] через == а проверять preg_match'ем
ах да, у тебя as $pattern => $message, здесь нам не нужны ключи, можно просто as $pattern. Соответственно мой совет выше именно для такого кода, где $pattern это сам элемент, а не ключ.
Постов через 300.
Точно, спасибо! Одно узнаю, прежнее забываю, я же уже и делал так: $possibleErrors[$i]['pattern'].
Тогда вот так, наверное:
for (; $i <= count($matches);) {
if (preg_match($possibleErrors[$i]['pattern'], $matches[$1]) {
$pattern = $possibleErrors[$i]['pattern'];
$message = $possibleErrors[$i]['message'];
echo "{$pattern} и {$message}\n";
}
}
>>617855
Вроде я тебя понял. Но только вроде, я уже не уверен.
То есть я просто взял и переписал ещё раз то, что у меня и так уже было.
Зачем так жить.
Именно это у меня и было в коде же.
А к чему мне привести foreach?
Мне же не нужно, получается, раскладывать массив на регулярки и значения, я же их непосредственно потом достаю с помощью $possibleErrors[$i]['pattern']. Там ведь у меня ошибка в foreach, получается?
https://ideone.com/3RAY9G вот попытался максимально абстрактно пояснить, без совсем уж конкретики, чтобы это не было готовым решением.
>$i для регулярок, когда это номер ошибки
А тогда вообще конструкция $possibleErrors[$i]['pattern'] имеет ли право на жизнь? Если $i у нас номер ошибки, то, как анон писал выше, после семи регулярок там уже будет ошибка подставляться...
Я вот и думал $i к количеству регулярок привязать, а не ошибок.
Бро, пройди до конца, там может быть как и на сайте ОПа - чем дальше, тем глубже и сложнее.
Просто знака кукиш нет.
бля, тоже бесит, перекатился с джавы и вечно забываю где-нибудь, а потом заебываюсь искать
Бро, спасибо тебе огромное.
Вот, вроде бы вот так надо быть с циклом внутри:
foreach ($possibleErrors as $value) {
$pattern = $value['pattern'];
$message = $value['message'];
if(preg_match($pattern, $matches[$i])) {
\t\t \t
echo "{$pattern} и {$message}\n";
}
Выдаёт сейчас соответствующие ошибкам регулярки и правила из массива $possibleErrors.
Сейчас пойду немного подышу свежим воздухом, чтобы в себя прийти.
Надеюсь, дальше соображу всё.
Да уж, это вам не говносайтики на HTML и Вротмнепрессе да SEO...
Oh no!..
Спасибо, бро, это мне будет полезно.
Какой там ООП, я пока все эти задачи с хода не буду решать - не перейду даже на другую страницу учебника.
Даже не знаю чем тебе помочь. На таком уровне задач уже не синтасксис или логику нужно проверять, а архитектуру приложения. Тут я не лучший советчик, дождись лучше ОПа.
Ну толсто же.
сколько лет?
у меня не хватает терпения клянчить, как попрошайка возле сортира, задания по 4 баксов. работа должна приносить без выклянчивания не меньше 20 в месяц, иначе это не работа, а хуйня какая-то.
А удаленка, фриланс? Я тут на двачах же нашел работодателя, которому пишу скриптики и деньгами не обижает. Есть и конфы таких людей. Ищи лучше.
>на уровне продвинутого миддла
уже надо нахуй слать.
Да это легко, сидя дома можно 20ку делать, если даже тут на двачах связей набраться. Точно тебе говорю.
Уже прямо точно укажу. В вебе ищи. Я там и на хорошие скайпоконфы вышел, и на хороших работодателей.
Ебана, /web.
ОП, у тебя есть задачки, для которых обоснованно брать Symfony? А если нет, придумать можешь?
Это не ответ, прилипло.
https://ideone.com/Upnbx3 Короче вот, я решил почувствовать себя ОПом и сделал для тебя задачку, а то оповские массивы совсем уж простые. Выведи массив досок в формате как на пикрелейтеде. Хотя, наверное, слишком просто, может в будущем усложню.
Зачем? Задание чисто на php, на скрине stdout c ideone.
нет, питон
Спасибо, бро, интересная задачка.
Сразу застреваю с массивом в массиве в 'threads' и отсутствием такого же массива в 'name'.
Там точно можно сделать с учётом всего лишь знания массивов? Вроде бы да.
Сначала сделаю твою задачу, а потом продолжу тогда проверку ошибок - отдохнуть от неё хочу. Да и лучше представлю себе всё.
Молодец, даже лучше чем мое изначальное решение.
Да, себя же не обманешь.
Тогда сразу подскажи, бро: сколько там циклов будет в виде матрёшки? Можно ли как-то разложить массив без foreach или много значений туда внести: foreach ($boards as $desks => $threads => $names) - вот такое возможно что-нибудь?
3 массива == 3 цикла. foreach можно использовать только по следующей схеме:
foreach ($variable as $key => $value)
Ну и можно $key опустить.
>>612398
> http://ideone.com/C8o0SL - скрипт калькулятора Айфона.
Проверил тут >>612619
> Этот код все еще слишком большой. Надо упростить дальше:
>> $paymentTotal = $paymentTotal + $debt;
>> echo "{$month} месяц спустя: долг = {$
> Это повторяется 2 раза, надо бы избавиться от повтора
> http://ideone.com/8q8JVk - скрипт калькулятора Айпада
Тут тоже повторяется выражение
> ($creditBalance x $percent) + $servicePayment;
попробуй убрать повторы. Так, считает верно.
> http://ideone.com/wzPQ7W - скрипт проверки телефона.
Ответил в старом >>612624
Регулярка слишком громоздкая, надо упростить.
> http://ideone.com/BXho8s - скрипт проверки ошибок в тексте
Программа не находит ошибку «отсутствие запятой перед союзами а/но»: http://ideone.com/AflGY0
>>612815
> https://jsfiddle.net/4akump8y/2/ 11 задача
Ок, верно
> if (this.getSizes()[size]===undefined){
Неправильный путь. Для проверки наличия ключа в объекте есть оператор in
> Hamburger.SMALL_PRICE = 50;
> Hamburger.SMALL_CALORIES = 20;
Это незачем делать константами. Мы обозначаем константой тип гамбургера или начинки (и передаем его в разные функции), но стоимость не надо делать константой. Стоимость это просто число.
> if (this._toppings == Hamburger.TOPPING_MAYO) {
Вот это лишнее. Лучше в список список с калориями вписать 0. А то для добавления нового вида добавки нам придется ее и в список добавлять, и иф в код дописывать. Легко забыть.
Остальное в задаче верно.
> for (var i = 0; i < this._elements.length; i++) {
> if (this._elements instanceof PowerStation) {
> if (this._elements instanceof LivingHouse) {
Та же ошибка что в предыдщей задаче. Дописывая ифы ты усложняешь расширяемость кода. Теперь для добавления нового вида генераторов нам мало сделать новый класс, мы должны еще и код править. Не надо так.
> Network.prototype.getProfit = function(timeOfTheDay) {
Здесь не учтено что мы должны пытаться продавать электричество по максимальной цене. Ты же берешь первую попавшуюся линию.
> var result = 1;
Название неправильное - не говорит о смысле переменной
> SolarPanel.prototype = Object.create(PowerStation.prototype);
Непонятно почему SolarPanel наследуется от PowerStation. Солнечная панель это улучшенная версия электростанции? А почему не наоборот?
Также, в функции addElements я не вижу проверки, что нам передан обобъект правильного типа. Сделай такую проверку, причем так чтобы при добавлении новых видов элементов сети не надо было ее переписывать. Проще всего это сделать, унаследовав все объекты сети от общего абстрактного класса ЭлементСети.
Также, ты сделал наследование через Object.create из ES5. Давай сделаем поддержку и для ES3.
> https://jsfiddle.net/o2shx897/1/ 16 заодно и 14я в одном флаконе.
> if(typeof obj[key] == "object"){
> copy[key] = deepCopy(obj[key]);
> }
> else{
> copy[key] = obj[key];
Догадаешься где тут ошибка? Алсо, "} else {" пишется в 1 строку.
>>612398
> http://ideone.com/C8o0SL - скрипт калькулятора Айфона.
Проверил тут >>612619
> Этот код все еще слишком большой. Надо упростить дальше:
>> $paymentTotal = $paymentTotal + $debt;
>> echo "{$month} месяц спустя: долг = {$
> Это повторяется 2 раза, надо бы избавиться от повтора
> http://ideone.com/8q8JVk - скрипт калькулятора Айпада
Тут тоже повторяется выражение
> ($creditBalance x $percent) + $servicePayment;
попробуй убрать повторы. Так, считает верно.
> http://ideone.com/wzPQ7W - скрипт проверки телефона.
Ответил в старом >>612624
Регулярка слишком громоздкая, надо упростить.
> http://ideone.com/BXho8s - скрипт проверки ошибок в тексте
Программа не находит ошибку «отсутствие запятой перед союзами а/но»: http://ideone.com/AflGY0
>>612815
> https://jsfiddle.net/4akump8y/2/ 11 задача
Ок, верно
> if (this.getSizes()[size]===undefined){
Неправильный путь. Для проверки наличия ключа в объекте есть оператор in
> Hamburger.SMALL_PRICE = 50;
> Hamburger.SMALL_CALORIES = 20;
Это незачем делать константами. Мы обозначаем константой тип гамбургера или начинки (и передаем его в разные функции), но стоимость не надо делать константой. Стоимость это просто число.
> if (this._toppings == Hamburger.TOPPING_MAYO) {
Вот это лишнее. Лучше в список список с калориями вписать 0. А то для добавления нового вида добавки нам придется ее и в список добавлять, и иф в код дописывать. Легко забыть.
Остальное в задаче верно.
> for (var i = 0; i < this._elements.length; i++) {
> if (this._elements instanceof PowerStation) {
> if (this._elements instanceof LivingHouse) {
Та же ошибка что в предыдщей задаче. Дописывая ифы ты усложняешь расширяемость кода. Теперь для добавления нового вида генераторов нам мало сделать новый класс, мы должны еще и код править. Не надо так.
> Network.prototype.getProfit = function(timeOfTheDay) {
Здесь не учтено что мы должны пытаться продавать электричество по максимальной цене. Ты же берешь первую попавшуюся линию.
> var result = 1;
Название неправильное - не говорит о смысле переменной
> SolarPanel.prototype = Object.create(PowerStation.prototype);
Непонятно почему SolarPanel наследуется от PowerStation. Солнечная панель это улучшенная версия электростанции? А почему не наоборот?
Также, в функции addElements я не вижу проверки, что нам передан обобъект правильного типа. Сделай такую проверку, причем так чтобы при добавлении новых видов элементов сети не надо было ее переписывать. Проще всего это сделать, унаследовав все объекты сети от общего абстрактного класса ЭлементСети.
Также, ты сделал наследование через Object.create из ES5. Давай сделаем поддержку и для ES3.
> https://jsfiddle.net/o2shx897/1/ 16 заодно и 14я в одном флаконе.
> if(typeof obj[key] == "object"){
> copy[key] = deepCopy(obj[key]);
> }
> else{
> copy[key] = obj[key];
Догадаешься где тут ошибка? Алсо, "} else {" пишется в 1 строку.
> А нет, пробелы обрезают. Вот тут я поставил много пробелов в начале имени и между подчеркиваниями, были вырезаны
Открой исходник страницы или скачай файл - все пробелы на месте. Это просто HTML при отображении страницы их объединил.
>>613283
Проверяю.
https://github.com/weissart/ipq-lessons/blob/master/arrays.php
> for ($i = 0; $i <= count($weather)-1; $i++){
удобнее, наглянее и проще использовать foreach для перебора массива. foreach ($weather as $day => $temp) ...
> //Оценки, которые поставили анону
Верно
> Рост анона
Верно
> $answers[mt_rand(0, 5)]
Нехорошо что числа записаны, ведь при изменении вариантов придется их пересчитывать. Лучше бы пусть это делал компьютер сам.
> Сгенерированное имя
Ок, верно
https://github.com/weissart/ipq-lessons/blob/master/cipher.php
Тут все правильно.
https://github.com/weissart/ipq-lessons/blob/master/credits.php
> return "Вам нужно платить больше чтобы покрыть этот кредит.";
Это не очень хорошая вещь, что функция возвращает либо число либо строку. При работе с такой функцией надо не забывать это проверять. В таком случае лучше возвращать данные в массиве, например из 2 элементов:
return ['total' => 10000, 'error' => null ]; // нет ошибки
return ['total' => 0, 'error' => 'Ошибка ...' ]; // есть ошибка
Вообще, нехорошо когда функия возвращает разные типы данных - это запутывает и приводит к ошибкам
> $price x $percent) + $commision
Это повторяется раза 4, попробуй избавиться от повторов.
https://github.com/weissart/ipq-lessons/blob/master/cubes.php
В общем верно, хотя нет проверки на случай когда выпадают даблы.
https://github.com/weissart/ipq-lessons/blob/master/hello.php
> //тут я аутировал и пытался пофиксить \n, но забил, чому-то не работает
Чтобы переносы строк нормально работали и в браузере и в ideone (и в консоли), можно использовать для этого \n, а в начале программы поставить
header("Content-Type: text/plain; charset=utf-8");
Это заставит браузер воспринимать то, что выводит твоя программа, как обычный текст, а не HTML, и уважать переносы строк в нем (так как в языке HTML перенос строки равносилен пробелу).
Иначе перенос строки будет в исходном коде страницы (его можно увидеть нажав Ctrl + U), но на самой странице его не будет.
Так, все верно.
https://github.com/weissart/ipq-lessons/blob/master/loops.php
Тут выражение $creditSum = ($creditSum x $bankPercent) постоянно повторяется, попробуй избавиться от повторов.
> return false;
> break;
break никогда не выполнится так как return выходит из функции и из цикла тоже.
https://github.com/weissart/ipq-lessons/blob/master/poem.php
Не совсем по шаблону генерируется стих. Можешь переделать, не убирая цикл, чтобы генерировалось по шаблону описанному в задаче?
Также, лучше использовать foreach вместо for.
https://github.com/weissart/ipq-lessons/blob/master/regexp.php
> Задача на проверку номера телефона:
Слишком сложное выражение. Лучше проверять так: +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' // нет +
);
> isGrammarNaziHappy
> а-яё\\w
\\w (при наличии флага u) включает в себя все буквы всех алфавитов, цифры и подчеркивание, так что указывать тут буквы излишне.
> (^, (а|но
Э не. ^ тут значит символ крышечки и не несет специалного значения. Спецсимвол он только если идет первым в квадратных скобках.
> но не все ошибки находит из-за того что они расположены близко друг к другу, вот
Надо убрать .{3,5} которое съедает символы и сделать как-то по другому. Ну например, использовать preg_split, разбивать строку на куски с ошибками и их окружение, и нарезать как-то. Или использовать флаг PREG_DELIM_CAPTURE который захватывает позицию где найдено соответствие. Или не выводить окружающие ошибку буквы (самый простой вариант). Или после нахождения ошибки искать ее поиском по строке и искать окружение.
> for ($i = 0; $i < count($matches[0]); $i++) {
Лучше foreach
> replaceNumber
> '/( |-|\\( ?| ?\\))+/';
Тут лучше использовать квадратные скобки
> А нет, пробелы обрезают. Вот тут я поставил много пробелов в начале имени и между подчеркиваниями, были вырезаны
Открой исходник страницы или скачай файл - все пробелы на месте. Это просто HTML при отображении страницы их объединил.
>>613283
Проверяю.
https://github.com/weissart/ipq-lessons/blob/master/arrays.php
> for ($i = 0; $i <= count($weather)-1; $i++){
удобнее, наглянее и проще использовать foreach для перебора массива. foreach ($weather as $day => $temp) ...
> //Оценки, которые поставили анону
Верно
> Рост анона
Верно
> $answers[mt_rand(0, 5)]
Нехорошо что числа записаны, ведь при изменении вариантов придется их пересчитывать. Лучше бы пусть это делал компьютер сам.
> Сгенерированное имя
Ок, верно
https://github.com/weissart/ipq-lessons/blob/master/cipher.php
Тут все правильно.
https://github.com/weissart/ipq-lessons/blob/master/credits.php
> return "Вам нужно платить больше чтобы покрыть этот кредит.";
Это не очень хорошая вещь, что функция возвращает либо число либо строку. При работе с такой функцией надо не забывать это проверять. В таком случае лучше возвращать данные в массиве, например из 2 элементов:
return ['total' => 10000, 'error' => null ]; // нет ошибки
return ['total' => 0, 'error' => 'Ошибка ...' ]; // есть ошибка
Вообще, нехорошо когда функия возвращает разные типы данных - это запутывает и приводит к ошибкам
> $price x $percent) + $commision
Это повторяется раза 4, попробуй избавиться от повторов.
https://github.com/weissart/ipq-lessons/blob/master/cubes.php
В общем верно, хотя нет проверки на случай когда выпадают даблы.
https://github.com/weissart/ipq-lessons/blob/master/hello.php
> //тут я аутировал и пытался пофиксить \n, но забил, чому-то не работает
Чтобы переносы строк нормально работали и в браузере и в ideone (и в консоли), можно использовать для этого \n, а в начале программы поставить
header("Content-Type: text/plain; charset=utf-8");
Это заставит браузер воспринимать то, что выводит твоя программа, как обычный текст, а не HTML, и уважать переносы строк в нем (так как в языке HTML перенос строки равносилен пробелу).
Иначе перенос строки будет в исходном коде страницы (его можно увидеть нажав Ctrl + U), но на самой странице его не будет.
Так, все верно.
https://github.com/weissart/ipq-lessons/blob/master/loops.php
Тут выражение $creditSum = ($creditSum x $bankPercent) постоянно повторяется, попробуй избавиться от повторов.
> return false;
> break;
break никогда не выполнится так как return выходит из функции и из цикла тоже.
https://github.com/weissart/ipq-lessons/blob/master/poem.php
Не совсем по шаблону генерируется стих. Можешь переделать, не убирая цикл, чтобы генерировалось по шаблону описанному в задаче?
Также, лучше использовать foreach вместо for.
https://github.com/weissart/ipq-lessons/blob/master/regexp.php
> Задача на проверку номера телефона:
Слишком сложное выражение. Лучше проверять так: +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' // нет +
);
> isGrammarNaziHappy
> а-яё\\w
\\w (при наличии флага u) включает в себя все буквы всех алфавитов, цифры и подчеркивание, так что указывать тут буквы излишне.
> (^, (а|но
Э не. ^ тут значит символ крышечки и не несет специалного значения. Спецсимвол он только если идет первым в квадратных скобках.
> но не все ошибки находит из-за того что они расположены близко друг к другу, вот
Надо убрать .{3,5} которое съедает символы и сделать как-то по другому. Ну например, использовать preg_split, разбивать строку на куски с ошибками и их окружение, и нарезать как-то. Или использовать флаг PREG_DELIM_CAPTURE который захватывает позицию где найдено соответствие. Или не выводить окружающие ошибку буквы (самый простой вариант). Или после нахождения ошибки искать ее поиском по строке и искать окружение.
> for ($i = 0; $i < count($matches[0]); $i++) {
Лучше foreach
> replaceNumber
> '/( |-|\\( ?| ?\\))+/';
Тут лучше использовать квадратные скобки
https://github.com/V3N0m21/Uppu4/blob/master/users.sql#L47
Тут зачем-то добавляется 3 раза один и тот же индекс по id. Почему логин не объявлен уникальным?
https://github.com/V3N0m21/Uppu4/blob/master/comments.sql
Нет внешнего ключа на fileId. Также логично было бы добавить поле userId чтобы заполнять в том случае если комментарий оставил залогинившийся пользователь. Хотя непонятно что делать с полем user тогда.
> https://github.com/V3N0m21/Uppu4/blob/master/Uppu4.sql#L22
CREATE DATABASE лучше наверно не писать, а то нельзя например развернуть 2 версии сайта.
Также, у тебя в Uppu.sql нет внешних ключей. Вообще, почему там так много sql файлов? Оставь только те что правильные.
> https://github.com/V3N0m21/Uppu4/blob/master/app/bootstrap.php
Тут маленький совет - запихнуть файл в отдельный неймспейс либо перед функциями ставить префиксы (bootstrapGetCache), иначе допишешь где-то функцию getCache и вылетит ошибка.
> https://github.com/V3N0m21/Uppu4/blob/master/public/index.php#L31
> $app->response->cookies->set('urlRedirect', $app->request->getResourceUri(), '1 day');
Это нехорошо так как куки общие для всех вкладок браузера и потому не годятся для таких вещей. Тут логичнее указать URL в GET-параметрах в URL. Генерацию такого URL стоит вынести в функцию. При редиректе не забудь проверить что переданный URL ведет на твой, а не чужой сайт.
> && UPLOAD_ERR_OK == 0
Неправильная проверка. UPLOAD_ERR_OK это константа а не код ошибки.
> $app->response->cookies->set('urlRedirect', '');
Там нет команды удаления куки?
> $app->get('/logout'
Хорошо бы после логаута еще выводить сообщение «Вы вышли с сайта». ВОобще, на любое действие должна быть какая-то реакция. Сообщение проще всего сделать через GET параметр вроде ?notify=logged_out
> $app->get('/users/:id/', function ($id) use ($app) {
Нет проверки что id существует - это ок?
> $app->delete('/users/:id/', function ($id) use ($app) {
Это любой анонимус может так удалять пользователей?
> https://github.com/V3N0m21/Uppu4/blob/master/public/index.php#L144
> $user = $app->em->getRepository('Uppu4\Entity\User')->findOneById($file->getUploadedBy());
Мне кажется это неправильно, лучше сделать связь в доктрине и писать:
$user = $file->getUser(); (да, она так умеет)
> $app->delete('/view/:id/', function ($id) use ($app) {
Логичнее было бы назвать URL /file/:id, а то «delete view id» плохо читается. Также, нет проверки. Мне кажется для таких операций стоит сделать функцию или метод в каком-то классе, проверяющий полномочия. Например, удалять файл может только автор или админы. Также, метод проверяющий полномочия, пригодится в шаблоне: он может определять, показывать ли на экране кнопку удаления. Обычно такие методы называют вроде canDeleteFile().
> $validation = new \Uppu4\Helper\DataValidator;
> $commentHelper = new CommentHelper($app->em);
Стоит наверно сделать синглтоном Слима.
> $commentHelper->createComment($app->request->params('comment'), $parent, $file, $user);
> $comment = $commentHelper->comment;
вот это нехоршее усложнение. Почему не возвращать коммент сразу? В твоем варианте получается какой-то извращенный способ вернуть результат. Плюс можно сделать ошибку, прочитав поле comment и получив пустой ответ или старый результат.
> $comments = $app->em->getRepository('Uppu4\Entity\Comment')->findBy(array('fileId' => $id), array('path' => 'ASC'));
Возможно это стоит засунуть в отдельный метод коммент хелпера.
> https://github.com/V3N0m21/Uppu4/blob/master/app/Helper/CommentHelper.php#L15
Необязательные аргументы идут в конце списка
В этом хелпере есть 2 нехороших момента, усложняющих понимание кода и могущих привести к ошибке:
1) createComment не возвращает результат, а кладет его в поле.
2) commentSave не получает аргумент напрямую, а зачем-то берет из поля. А что если мы забыли положить его туда? И как вообще понять что надо что-то положить в поле перед тем как вызвать метод?
https://github.com/V3N0m21/Uppu4/blob/master/app/Helper/DataValidator.php
Тут вопрос - почему используется поле $error, а не возвращается список ошибок сразу? Есть ведь такие варианты:
$errors = validate($entity);
$result = validate($entity, &$errors);
причем $errors может быть массивом, а может быть и объектом. Ты явно смешал в одном классе хранение ошибок и функцию валидации.
> return $this->error['comment'] = "Comment should not be empty";
Это 2 действия и их надо писать в 2 строки.
> https://github.com/V3N0m21/Uppu4/blob/master/app/Helper/FileHelper.php#L21
Тут лучше макс. размер брать из поля класса где он и хранится.
https://github.com/V3N0m21/Uppu4/blob/master/app/Helper/FileHelper.php#L25
> public function fileSave(
Проблема: при ошибке запись в базу добавится, а файл на диске еще не сохранен. Надо бы завернуть в транзакцию вызов этой функции.
> public function fileDelete($id) {
Файл с диска удаляется до удаления из базы, надо наоборот.
https://github.com/V3N0m21/Uppu4/blob/master/app/Helper/FileHelper.php#L31
> $_POST['comment']
Этого тут быть не должно. Также, я бы подумал над заменой массива файла на отдельные параметры. Так будет универслаьнее.
https://github.com/V3N0m21/Uppu4/blob/master/app/Helper/Resize.php#L123
> throw new Exception("File '$savePath' not created", 1);
Сообщение можно написать лучше.
https://github.com/V3N0m21/Uppu4/blob/master/app/Helper/Resize.php#L138
> $scaleQuality = round(($imageQuality / 100) * 9);
У PNG нет фактора качества - это формат без потерь. непонятен смысл преобразования.
https://github.com/V3N0m21/Uppu4/blob/master/app/Helper/UserHelper.php#L12
Тут и во многих других местах нужны тайп хинты.
https://github.com/V3N0m21/Uppu4/blob/master/app/Helper/UserHelper.php#L34
> public function saveUser
Название неудачное, правильнее registerAnonymousUser или как-то так. Где проверка что пользователь анонимен и еще не ргеистрировался ?
Соль наверно логчинее генерировать в момент сохранения пароля, какой смысл в ней без самого пароля?
> https://github.com/V3N0m21/Uppu4/blob/master/app/Helper/UserHelper.php#L42
> $this->authenticateUser($postParams['login'], $postParams['password']);
Проверять пароль нет необходимости
https://github.com/V3N0m21/Uppu4/blob/master/app/Helper/UserHelper.php#L52
> public function getUser()
> public function getCurrentUserId()
Названия запутывают. Например первая создает пользователя при отстутсиви, а вторая нет, а в названии это не отражено.
> https://github.com/V3N0m21/Uppu4/blob/master/app/Helper/UserHelper.php#L76
> $this->responseCookies->set('token', $user->getToken(), '1 month');
> $this->responseCookies->set('hash', $user->getHash(), '1 month');
Почему для авторизованного пользователя ставится 2 куки? Надо написать комментарий. Также, в начале файла надо в 2 словах написать про виды пользователей и что с ними делается.
public function checkAuthorization()
Вместо null/true логичне вернуть false/true.
> $this->responseCookies->set('token', '');
Нет ли готовой функции удаления?
Также, у кук какой path выставляется? Посмотри в отладчике браузера на вкладке Network. Должен быть / иначе они будут не на всех страницах видны.
шаблоны и верстку не проверял.
https://github.com/V3N0m21/Uppu4/blob/master/users.sql#L47
Тут зачем-то добавляется 3 раза один и тот же индекс по id. Почему логин не объявлен уникальным?
https://github.com/V3N0m21/Uppu4/blob/master/comments.sql
Нет внешнего ключа на fileId. Также логично было бы добавить поле userId чтобы заполнять в том случае если комментарий оставил залогинившийся пользователь. Хотя непонятно что делать с полем user тогда.
> https://github.com/V3N0m21/Uppu4/blob/master/Uppu4.sql#L22
CREATE DATABASE лучше наверно не писать, а то нельзя например развернуть 2 версии сайта.
Также, у тебя в Uppu.sql нет внешних ключей. Вообще, почему там так много sql файлов? Оставь только те что правильные.
> https://github.com/V3N0m21/Uppu4/blob/master/app/bootstrap.php
Тут маленький совет - запихнуть файл в отдельный неймспейс либо перед функциями ставить префиксы (bootstrapGetCache), иначе допишешь где-то функцию getCache и вылетит ошибка.
> https://github.com/V3N0m21/Uppu4/blob/master/public/index.php#L31
> $app->response->cookies->set('urlRedirect', $app->request->getResourceUri(), '1 day');
Это нехорошо так как куки общие для всех вкладок браузера и потому не годятся для таких вещей. Тут логичнее указать URL в GET-параметрах в URL. Генерацию такого URL стоит вынести в функцию. При редиректе не забудь проверить что переданный URL ведет на твой, а не чужой сайт.
> && UPLOAD_ERR_OK == 0
Неправильная проверка. UPLOAD_ERR_OK это константа а не код ошибки.
> $app->response->cookies->set('urlRedirect', '');
Там нет команды удаления куки?
> $app->get('/logout'
Хорошо бы после логаута еще выводить сообщение «Вы вышли с сайта». ВОобще, на любое действие должна быть какая-то реакция. Сообщение проще всего сделать через GET параметр вроде ?notify=logged_out
> $app->get('/users/:id/', function ($id) use ($app) {
Нет проверки что id существует - это ок?
> $app->delete('/users/:id/', function ($id) use ($app) {
Это любой анонимус может так удалять пользователей?
> https://github.com/V3N0m21/Uppu4/blob/master/public/index.php#L144
> $user = $app->em->getRepository('Uppu4\Entity\User')->findOneById($file->getUploadedBy());
Мне кажется это неправильно, лучше сделать связь в доктрине и писать:
$user = $file->getUser(); (да, она так умеет)
> $app->delete('/view/:id/', function ($id) use ($app) {
Логичнее было бы назвать URL /file/:id, а то «delete view id» плохо читается. Также, нет проверки. Мне кажется для таких операций стоит сделать функцию или метод в каком-то классе, проверяющий полномочия. Например, удалять файл может только автор или админы. Также, метод проверяющий полномочия, пригодится в шаблоне: он может определять, показывать ли на экране кнопку удаления. Обычно такие методы называют вроде canDeleteFile().
> $validation = new \Uppu4\Helper\DataValidator;
> $commentHelper = new CommentHelper($app->em);
Стоит наверно сделать синглтоном Слима.
> $commentHelper->createComment($app->request->params('comment'), $parent, $file, $user);
> $comment = $commentHelper->comment;
вот это нехоршее усложнение. Почему не возвращать коммент сразу? В твоем варианте получается какой-то извращенный способ вернуть результат. Плюс можно сделать ошибку, прочитав поле comment и получив пустой ответ или старый результат.
> $comments = $app->em->getRepository('Uppu4\Entity\Comment')->findBy(array('fileId' => $id), array('path' => 'ASC'));
Возможно это стоит засунуть в отдельный метод коммент хелпера.
> https://github.com/V3N0m21/Uppu4/blob/master/app/Helper/CommentHelper.php#L15
Необязательные аргументы идут в конце списка
В этом хелпере есть 2 нехороших момента, усложняющих понимание кода и могущих привести к ошибке:
1) createComment не возвращает результат, а кладет его в поле.
2) commentSave не получает аргумент напрямую, а зачем-то берет из поля. А что если мы забыли положить его туда? И как вообще понять что надо что-то положить в поле перед тем как вызвать метод?
https://github.com/V3N0m21/Uppu4/blob/master/app/Helper/DataValidator.php
Тут вопрос - почему используется поле $error, а не возвращается список ошибок сразу? Есть ведь такие варианты:
$errors = validate($entity);
$result = validate($entity, &$errors);
причем $errors может быть массивом, а может быть и объектом. Ты явно смешал в одном классе хранение ошибок и функцию валидации.
> return $this->error['comment'] = "Comment should not be empty";
Это 2 действия и их надо писать в 2 строки.
> https://github.com/V3N0m21/Uppu4/blob/master/app/Helper/FileHelper.php#L21
Тут лучше макс. размер брать из поля класса где он и хранится.
https://github.com/V3N0m21/Uppu4/blob/master/app/Helper/FileHelper.php#L25
> public function fileSave(
Проблема: при ошибке запись в базу добавится, а файл на диске еще не сохранен. Надо бы завернуть в транзакцию вызов этой функции.
> public function fileDelete($id) {
Файл с диска удаляется до удаления из базы, надо наоборот.
https://github.com/V3N0m21/Uppu4/blob/master/app/Helper/FileHelper.php#L31
> $_POST['comment']
Этого тут быть не должно. Также, я бы подумал над заменой массива файла на отдельные параметры. Так будет универслаьнее.
https://github.com/V3N0m21/Uppu4/blob/master/app/Helper/Resize.php#L123
> throw new Exception("File '$savePath' not created", 1);
Сообщение можно написать лучше.
https://github.com/V3N0m21/Uppu4/blob/master/app/Helper/Resize.php#L138
> $scaleQuality = round(($imageQuality / 100) * 9);
У PNG нет фактора качества - это формат без потерь. непонятен смысл преобразования.
https://github.com/V3N0m21/Uppu4/blob/master/app/Helper/UserHelper.php#L12
Тут и во многих других местах нужны тайп хинты.
https://github.com/V3N0m21/Uppu4/blob/master/app/Helper/UserHelper.php#L34
> public function saveUser
Название неудачное, правильнее registerAnonymousUser или как-то так. Где проверка что пользователь анонимен и еще не ргеистрировался ?
Соль наверно логчинее генерировать в момент сохранения пароля, какой смысл в ней без самого пароля?
> https://github.com/V3N0m21/Uppu4/blob/master/app/Helper/UserHelper.php#L42
> $this->authenticateUser($postParams['login'], $postParams['password']);
Проверять пароль нет необходимости
https://github.com/V3N0m21/Uppu4/blob/master/app/Helper/UserHelper.php#L52
> public function getUser()
> public function getCurrentUserId()
Названия запутывают. Например первая создает пользователя при отстутсиви, а вторая нет, а в названии это не отражено.
> https://github.com/V3N0m21/Uppu4/blob/master/app/Helper/UserHelper.php#L76
> $this->responseCookies->set('token', $user->getToken(), '1 month');
> $this->responseCookies->set('hash', $user->getHash(), '1 month');
Почему для авторизованного пользователя ставится 2 куки? Надо написать комментарий. Также, в начале файла надо в 2 словах написать про виды пользователей и что с ними делается.
public function checkAuthorization()
Вместо null/true логичне вернуть false/true.
> $this->responseCookies->set('token', '');
Нет ли готовой функции удаления?
Также, у кук какой path выставляется? Посмотри в отладчике браузера на вкладке Network. Должен быть / иначе они будут не на всех страницах видны.
шаблоны и верстку не проверял.
Можно тут http://php.net/manual/ru/tutorial.php
Потом почитай про язык HTML в любом самоучителе. И комментарии к задаче про студентов.
>>613443
Все верно.
>>613460
Да, не нужны.
>>613606
>>613609
Приавльный ответ: по идее доктайп задает тип документа: что это за документ, какие теги и атрибуты в нем разрешены (вот пример ссылки где описаны в машинопонятном виде разрешенные теги: http://www.w3.org/TR/html4/strict.dtd ). Но браузеры все это не проверяют и используют доктайп только для одной цели: если в документе нет доктайпа, то это старый документ, написанный до 2000 года, и надо отображать его не по стандартам, а с отступлением от них. Потому доктайп надо ставить всегда, иначе может поплыть верстка.
>>613763
> Я многое делаю методом тыка пока что (знаю, что это неправильно, но ведь пока опыта просто нет), поэтому мне надо все проверять. Пока думаю, что вот так надо будет записать: "/^[\\-\\(\\)\\s]звёздочка$/ui".
Правильно. Это и есть любое число указанных символов, идущих подряд. Используй это для решения задачи на номера.
>>613924
У тебя там ошибка: PHP Notice: Undefined variable: paid in /home/jf4cUQ/prog.php on line 11
>>613979
Можно посчитать на сколько увеличился долг за месяц (процент + комиссия). Если это больше 5000 то анон никогда не выплатит долг.
>>614025
Тут проще сделать так:
- прибавляем проценты и комиссию к остатку долга (!не вычитаем ничего пока!)
- если остаток маленький, выплачиваем сколько осталось и уходим
- иначе платим 5000
«Платим» здесь значит уменьшаем долг и увеличиваем общую сумму выплаченного.
Считает верно.
Можно тут http://php.net/manual/ru/tutorial.php
Потом почитай про язык HTML в любом самоучителе. И комментарии к задаче про студентов.
>>613443
Все верно.
>>613460
Да, не нужны.
>>613606
>>613609
Приавльный ответ: по идее доктайп задает тип документа: что это за документ, какие теги и атрибуты в нем разрешены (вот пример ссылки где описаны в машинопонятном виде разрешенные теги: http://www.w3.org/TR/html4/strict.dtd ). Но браузеры все это не проверяют и используют доктайп только для одной цели: если в документе нет доктайпа, то это старый документ, написанный до 2000 года, и надо отображать его не по стандартам, а с отступлением от них. Потому доктайп надо ставить всегда, иначе может поплыть верстка.
>>613763
> Я многое делаю методом тыка пока что (знаю, что это неправильно, но ведь пока опыта просто нет), поэтому мне надо все проверять. Пока думаю, что вот так надо будет записать: "/^[\\-\\(\\)\\s]звёздочка$/ui".
Правильно. Это и есть любое число указанных символов, идущих подряд. Используй это для решения задачи на номера.
>>613924
У тебя там ошибка: PHP Notice: Undefined variable: paid in /home/jf4cUQ/prog.php on line 11
>>613979
Можно посчитать на сколько увеличился долг за месяц (процент + комиссия). Если это больше 5000 то анон никогда не выплатит долг.
>>614025
Тут проще сделать так:
- прибавляем проценты и комиссию к остатку долга (!не вычитаем ничего пока!)
- если остаток маленький, выплачиваем сколько осталось и уходим
- иначе платим 5000
«Платим» здесь значит уменьшаем долг и увеличиваем общую сумму выплаченного.
Считает верно.
Блиин, какое изящное решение.
У меня какое-то топорное, при этом полночи искал, как достать содержимое вложенного массива.
Сколько уже изучаешь РНР, бро?
Вот моё решение: https://ideone.com/Ju7Vjk
Там всё так же, кроме подсчёта тредов, я его функцией сделал, так мне кажется более правильным, что ли.
>>618059
Получается ещё и так можно использовать:
foreach ($variable[$key] as $value)
А потом можно доставать уже значения вложенного массива.
>>618310
>> http://ideone.com/8q8JVk - скрипт калькулятора Айпада
>Тут тоже повторяется выражение
>> ($creditBalance x $percent) + $servicePayment;
>попробуй убрать повторы. Так, считает верно.
Я далее убрал повторы, но почему считает верно? У меня же в этом варианте 7777 прибавляется к сумме долга, а потом проценты от 47777 тысяч уже отсчитываются, разве это правильно? Вот мой другой вариант, который, по идее, более верный: http://ideone.com/DK8ez3
Также вот сокращённый уже просто до минимума калькулятор кредита Айфона: http://ideone.com/7FJfGm
>Регулярка слишком громоздкая, надо упростить
>скрипт проверки телефона
Да, вроде бы упростил вот тут: http://ideone.com/wzPQ7W
>>618318
>> Я многое делаю методом тыка пока что (знаю, что это неправильно, но ведь пока опыта просто нет), поэтому мне надо все проверять. Пока думаю, что вот так надо будет записать: "/^[\\-\\(\\)\\s]звёздочка$/ui".
>Правильно. Это и есть любое число указанных символов, идущих подряд. Используй это для решения задачи на номера.
Да, так именно и сократил после, спасибо.
Спасибо, ОП и анончики.
Сегодня постараюсь домучить проверку текста на ошибки. Очень медленно иду, полночи искал, как правильно вытащить значения из глубоко вложенного массива...
Блиин, какое изящное решение.
У меня какое-то топорное, при этом полночи искал, как достать содержимое вложенного массива.
Сколько уже изучаешь РНР, бро?
Вот моё решение: https://ideone.com/Ju7Vjk
Там всё так же, кроме подсчёта тредов, я его функцией сделал, так мне кажется более правильным, что ли.
>>618059
Получается ещё и так можно использовать:
foreach ($variable[$key] as $value)
А потом можно доставать уже значения вложенного массива.
>>618310
>> http://ideone.com/8q8JVk - скрипт калькулятора Айпада
>Тут тоже повторяется выражение
>> ($creditBalance x $percent) + $servicePayment;
>попробуй убрать повторы. Так, считает верно.
Я далее убрал повторы, но почему считает верно? У меня же в этом варианте 7777 прибавляется к сумме долга, а потом проценты от 47777 тысяч уже отсчитываются, разве это правильно? Вот мой другой вариант, который, по идее, более верный: http://ideone.com/DK8ez3
Также вот сокращённый уже просто до минимума калькулятор кредита Айфона: http://ideone.com/7FJfGm
>Регулярка слишком громоздкая, надо упростить
>скрипт проверки телефона
Да, вроде бы упростил вот тут: http://ideone.com/wzPQ7W
>>618318
>> Я многое делаю методом тыка пока что (знаю, что это неправильно, но ведь пока опыта просто нет), поэтому мне надо все проверять. Пока думаю, что вот так надо будет записать: "/^[\\-\\(\\)\\s]звёздочка$/ui".
>Правильно. Это и есть любое число указанных символов, идущих подряд. Используй это для решения задачи на номера.
Да, так именно и сократил после, спасибо.
Спасибо, ОП и анончики.
Сегодня постараюсь домучить проверку текста на ошибки. Очень медленно иду, полночи искал, как правильно вытащить значения из глубоко вложенного массива...
Поверь, сжирать при компиляции 16 гиг оперы - не очень хорошо.
>Теперь для добавления нового вида генераторов нам мало сделать новый класс, мы должны еще и код править.
Не должны, если генератор будет наследовать PowerStation.
>Непонятно почему SolarPanel наследуется от PowerStation. Солнечная панель это улучшенная версия электростанции? А почему не наоборот?
Мне казалось это более логичным.
>Догадаешься где тут ошибка?
Нет.
с рутрецкера тоже качается только .txt с серийником какбы
>PhpStorm 10 activation
Уже. спасибо. Пока тред тонет спрошу ещё нубский вопрос: для того, чтобы сделать run написанного helloworld-а, насколько понимаю, надо ещё установить какой-то php-interpreterю Я правильно понимаю, что это союственно сама вещь, которая будет "читать" пхп-язык? А Phpstorm - только текстовый редактор? Если всё так, то откуда взять интерпретёра?
В плагинах активировать PHP.
Вот https://www.jetbrains.com/phpstorm/help/enabling-php-support.html
В плагинах стоит галочка, т.е. уже активирован. Блин, в чём загвоздка?
Покопался, походу надо правда устанавливать отдельно пхп-интерпретёра и прописывать путь к нему, почему ты сказал, что в шторме уже всё есть? Я вообще ничего не понимаюблядь
Саблаймом. Я на работе верстальщик-кодер-дизайнер. А тут дошел только до студентов и пока нет надобности в шторме.
>Вот моё решение:
Годнота.
>Там всё так же, кроме подсчёта тредов, я его функцией сделал
Ты даже лучше сделал.
>Сколько уже изучаешь РНР, бро?
Ну я периодами. В течение 2-3х лет тут появляюсь. Я из олдфагов, только я не так быстро учусь. Сейчас опять мотивация появилась, хочу больше зарплату. Вот задачу со студентами делаю. Сейчас работа, меньше времени остается.
>Получается ещё и так можно использовать:
Да.
Работаю в быдлоконторе, чаще верстка, иногда в php что-то. Обычная веб-студия. Учусь, чтобы устроиться на нормальную работу.
Оп, я разобрался кажется с автозагрузкой и пространствами имен. https://github.com/fxsloker/Student
Смотри обновленную версию. Что дальше делать? Все ли я правильно организовал?
Вожусь с функцией mb_substr, пытаюсь достать часть текста на 30 символов от ошибки и на 30 символов после ошибки.
Я вообще ведь неправильно так стал делать: $wrongText = mb_substr($coolStory, (preg_match($pattern, $coolStory)) -30, 30); - совершенно очевидно же, что у меня там берётся тупо 30 символов от конца текста и прибавляется 30 символов вперёд, к концу.
UPD: сейчас поменял немного - вообще толку нет. Там, наверное, как-то надо искать в этом случае, какой по счёту этот символ стоит в тексте, вот что.
Может, как-то по-другому надо разбивать строку? Например, с помощью функции preg_split?
Но как разбивать, от ошибки до ошибки?
Столкнулся уже с тем, что считает только одну ошибку в сочетании символов ",жы", то есть не воспринимает ошибку в "жи", воспринимает только ошибку в отсутствии пробела после запятой.
preg_match возвращает true или false. Ты это значение потом пытаешься использовать вместо номера начала строки. Вот у тебя получается везде true, т.е 1.
Ну ладно, вот тебе текст http://ideone.com/36xMZp
Задача: preg_match_all'ом поймать отсутствие запятых и записать в массив. В массиве должны быть вот такие значения. Задача решается в одну строчку. Тебе нужно лишь придумать правильную регулярку.
Интересно, если бы ты работал сантехником, ты бы спрашивал "ребята, а мне стоит обмазываться сопроматом и м-теорией, чтобы лучше постичь профессию?"?
нахуй не нужны все эти кресты, жыэсы, питоны, джавы-хуявы, это все для пидоров
хуячь гостевухи с менюхами как нормальный пыхыпыхер и не выйобуйся, сука бля
PHP - это не только сайтики. На этом языке немало работы, требующей квалификации повыше среднего уэб-мастера.
И у тебя ошибка в аналогии. Тут было бы уместнее привести в пример что-нибудь вроде сообщающихся сосудов и т. п. И да, сантехник с подобными знаниями (я про сосуды) определенно лучше своего коллеги без них.
Неплохо, но регулярка заточена на конкретный текст. Смотри, удалим одну ошибку и другую он уже не находит
http://ideone.com/kQoSiA
Или добавим еще одну ошибку, её скрипт не видит.
http://ideone.com/6H3Uaw
Будем считать, что я неправильно поставил условия задачи. Теперь я её усложняю. Сделай так, чтобы можно было добавить сколько угодно ошибок и он их нашел, или убрать.
Никогда не любил регулярки. Но знаю как сделать. Приеду домой напишу.
http://ideone.com/HBtO2S - вот мой вариант. Опять сталкиваюсь с тем, что при пересечения действия регулярок не видит ошибку.
вангую
Я другой анончик тот, который тупит постоянно и никак не доделает задачу про проверку ошибок
Только пересечение ошибок меня беспокоит.
Как от такого избавляться? Снова мудрить с массивами и циклами? Но у меня и с ними не работает при пересечении ошибок всё равно...
>>618702
Лучше на самого глупого, так у меня будет больше шансов на победу.
PHP конфа. Залетаем!
А я тот анон, который просил задачу, и случайно глянул твое решение, и мне стало не интересно.
Ну и нафиг нужна ваша конфа? Ньюфагам хоть помогаете?
А для него на инглише я уж сам найду гайды.
А, ты об этом. Особенности работы preg_match_all, я полагаю. Он начинает сравнивать текст с предыдущего вхождения регулярки, так что когда он нашел "слово а что текст", он добавляет в совпадение "слово а " и начинает следующее сравнение уже с "что текст".
А если сделать вот так (?<=(,жы))(?<=(жы))
Выглядит красиво. Мне стало интересно, я аж загуглить решил. Завтра потестирую.
Есть такая штука, что при не совпадении вернуться назад и ещё раз проверить по другой регулярке. А тут при совпадении вернётся ли он назад, не могу пока проверить.
>>614036
Лучше бы конечно без ухода в минус было сделать.
>>614053
> Сразу спрошу, почему не рботает /n как перенос строки?
Не /n, а \n. Не путай:
- слеш / используется в URL http://.../x/y/z, как знак деления, в путях на линуксе: /usr/bin
- бекслеш \ используется для вставки спецсимволов вроде \n, как разделитель неймспейсов \App\Class, и в путях на Windows: c:\temp\
>>header("Content-Type: text/plain; charset=utf-8");
> Куда втыкать?
В самое начало программы. Если не работает - покажи программу, что написано в адресной строке браузера и что на экране, разберемся.
> Задача на курс доллара
Молодец, все правильно.
> Игра в броски кубиков
Неплохо, пара замечаний:
- нет проверки на даблы
- не называй переменные с большой буквы, сбольшой буквы пишут классы и константы
> Рулеточка
Все верно, но пиши переменные с первой маленькой буквы.
> Айфон в кредит
Вот эти строки повторяются:
> $paymentTotal = $paymentTotal + $monthlyPayment;
> echo "{$month} месяц спустя: долг = {$creditBalance} руб,
Подумай как избавиться от повтора.
Ответ верный. Также, в программе что-то с отступами не то.
>>614112
Тебе нужна прокрутка тела таблицы с закреплением заголовка? Такого в HTML нет, нужен плагин на яваскрипте, который создаст копию заголовка, зафиксирует его и сделает прокрутку таблицы. Можно написать, если ты хорошо знаешь DOM, можно найти готовый плагин.
Кстати, может кто из анонов изучающих JS хочет такое сделать? Прокрутка тела таблицы если она выше размера окна. Будет много головной боли, придется наверно менять table-layout на fixed чтобы она не расползлась придется отслеживать изменение размера окна.
>>614127
У меня стоят Emmet, DocBlockr, AutoFilename (не пригодился), markdown editing (тормозит иногда). какой-то из плагинов роняет процесс с плагинами в саблайме при быстром наборе текста.
>>614036
Лучше бы конечно без ухода в минус было сделать.
>>614053
> Сразу спрошу, почему не рботает /n как перенос строки?
Не /n, а \n. Не путай:
- слеш / используется в URL http://.../x/y/z, как знак деления, в путях на линуксе: /usr/bin
- бекслеш \ используется для вставки спецсимволов вроде \n, как разделитель неймспейсов \App\Class, и в путях на Windows: c:\temp\
>>header("Content-Type: text/plain; charset=utf-8");
> Куда втыкать?
В самое начало программы. Если не работает - покажи программу, что написано в адресной строке браузера и что на экране, разберемся.
> Задача на курс доллара
Молодец, все правильно.
> Игра в броски кубиков
Неплохо, пара замечаний:
- нет проверки на даблы
- не называй переменные с большой буквы, сбольшой буквы пишут классы и константы
> Рулеточка
Все верно, но пиши переменные с первой маленькой буквы.
> Айфон в кредит
Вот эти строки повторяются:
> $paymentTotal = $paymentTotal + $monthlyPayment;
> echo "{$month} месяц спустя: долг = {$creditBalance} руб,
Подумай как избавиться от повтора.
Ответ верный. Также, в программе что-то с отступами не то.
>>614112
Тебе нужна прокрутка тела таблицы с закреплением заголовка? Такого в HTML нет, нужен плагин на яваскрипте, который создаст копию заголовка, зафиксирует его и сделает прокрутку таблицы. Можно написать, если ты хорошо знаешь DOM, можно найти готовый плагин.
Кстати, может кто из анонов изучающих JS хочет такое сделать? Прокрутка тела таблицы если она выше размера окна. Будет много головной боли, придется наверно менять table-layout на fixed чтобы она не расползлась придется отслеживать изменение размера окна.
>>614127
У меня стоят Emmet, DocBlockr, AutoFilename (не пригодился), markdown editing (тормозит иногда). какой-то из плагинов роняет процесс с плагинами в саблайме при быстром наборе текста.
Лучше бы в минус не уходить, а делать так:
- прибавляем проценты и комиссию к остатку долга (!не вычитаем ничего пока!)
- если остаток маленький, выплачиваем сколько осталось и уходим
- иначе платим 5000
>>614216
> Накопление процентов
> if ($startSumm >1000000) {
А если ровно миллион то не годится? По моему тут знак не совсем тот.
В остальном верно.
> Задача про рост
Все правильно.
> Ответ на любой вопрос
Замечательно, все работает.
> Генератор имён
> 1 => 'Бар',
> 2 => 'ки',
Мне кажется, что писать вручную номера, начиная с 1, утомительно. А что если надо вставить новый элемент в середину? Тут можно сделать либо так:
$letters = [1 => 'аа', 'бб', 'вв', ...]; // все элементы после первого пронумеруются автоматически
Либо же вообще не нумеровать, и переделать программу чтобы она брала индексы начиная с нуля.
В остальном верно.
> Доделай шифрование до нормального уровня
Праивльно.
> Доделай расшифровку зашифрованного текста.
Хорошо, работает.
>>614292
> Лев Толстой
Совет: не пиши номера цифрами, то есть лучше назвать переменные $randomWord1, $randomWord2, ... - так сразу видно что они относятся к одной вещи. Или можно использовать массив: $randomWords[1], $randowWords[2].
В остальном верно.
>Палиндром
Хотя и правильно, но после первого несовпадения можно выходить из цикла - зачем считать дальше?
> Ну как-бы смысл комментария ведь в этом. Чтобы после компиляции его не было видно.
Комментарий работает только внутри блока <?php. Вне его код не интерпетируется, а выводится как есть.
> C++ уровня школьника знаю. Но толком ничего серьёзного не писал. С# уровня "Написал лабу 3 раза".
Учись по нашим заданиям, мы тебя можем всерьез научить веб-программированию, у нас есть PHP включая продвинутые сложные задачи, JS, HTML/CSS, SQL. Но для начала конечно надо решить простые задачи из учебника. Хотя HTML ты можешь учить по задачам из ОП-поста параллеьно если есть время.
>>614338
> ( $startCredit x $percent ) + $commission;
Попробуй убрать повтор этого выражения.
> return $finalPayed;
> break;
return выходит из функции и из цикла, и break никогда не выполнится.
> ,5000
> 39999
Это надо выносить в переменные, а то менять не удобно.
Считает верно.
>>614341
Хорошо, все правильно.
Лучше бы в минус не уходить, а делать так:
- прибавляем проценты и комиссию к остатку долга (!не вычитаем ничего пока!)
- если остаток маленький, выплачиваем сколько осталось и уходим
- иначе платим 5000
>>614216
> Накопление процентов
> if ($startSumm >1000000) {
А если ровно миллион то не годится? По моему тут знак не совсем тот.
В остальном верно.
> Задача про рост
Все правильно.
> Ответ на любой вопрос
Замечательно, все работает.
> Генератор имён
> 1 => 'Бар',
> 2 => 'ки',
Мне кажется, что писать вручную номера, начиная с 1, утомительно. А что если надо вставить новый элемент в середину? Тут можно сделать либо так:
$letters = [1 => 'аа', 'бб', 'вв', ...]; // все элементы после первого пронумеруются автоматически
Либо же вообще не нумеровать, и переделать программу чтобы она брала индексы начиная с нуля.
В остальном верно.
> Доделай шифрование до нормального уровня
Праивльно.
> Доделай расшифровку зашифрованного текста.
Хорошо, работает.
>>614292
> Лев Толстой
Совет: не пиши номера цифрами, то есть лучше назвать переменные $randomWord1, $randomWord2, ... - так сразу видно что они относятся к одной вещи. Или можно использовать массив: $randomWords[1], $randowWords[2].
В остальном верно.
>Палиндром
Хотя и правильно, но после первого несовпадения можно выходить из цикла - зачем считать дальше?
> Ну как-бы смысл комментария ведь в этом. Чтобы после компиляции его не было видно.
Комментарий работает только внутри блока <?php. Вне его код не интерпетируется, а выводится как есть.
> C++ уровня школьника знаю. Но толком ничего серьёзного не писал. С# уровня "Написал лабу 3 раза".
Учись по нашим заданиям, мы тебя можем всерьез научить веб-программированию, у нас есть PHP включая продвинутые сложные задачи, JS, HTML/CSS, SQL. Но для начала конечно надо решить простые задачи из учебника. Хотя HTML ты можешь учить по задачам из ОП-поста параллеьно если есть время.
>>614338
> ( $startCredit x $percent ) + $commission;
Попробуй убрать повтор этого выражения.
> return $finalPayed;
> break;
return выходит из функции и из цикла, и break никогда не выполнится.
> ,5000
> 39999
Это надо выносить в переменные, а то менять не удобно.
Считает верно.
>>614341
Хорошо, все правильно.
Есть таблица. http://mydevice.io/devices/
Я советую выбрать 1-2 значения, чтобы было 2-3 варианта: смартфон/планшет/дескторп или смартфон/десктоп. Для смартфона можно выбрать условие < 480, для планшета < 960. «Лопаты» лучше наверно считать смартфонами, они не очень широкие.
>>614358
Числа верные
>>614359
По моему, нет, там комиссии нет же. В том-то и трюк что выгоднее добавить 7777 сразу чем платить по 1000 каждый месяц. Это типичный трюк банков - кажется что немного, а за год набегает уже 12000.
>>614360
Не хватает еще половины анона.
>>614369
Надо делать 2-3 варианта в зависимости от дизайна. Для некоторых простых сайтов хватит одного излома на ширине 600-700, для некоторых можно изламывать на 480 и 960.
> А под телефон нужно делать более крупные иконки и текст, т.к. все масштабируется.
да, либо картинки высокого разрешения либо вектор SVG.
>>614376
Третий банк по моему не самый дорогой. Там нет комиссии, отсюда экономия.
>>614391
Вордпресс очень примитивный уровень, это считай продвинутый верстальщик. Но лучше конечно иметь что-то чем ничего.
>>614403
То что ты сделал hello world не значит что ты знаешь фреймворк. Такое легко раскусить на собеседовании.
>>614409
Можно поискать в сети статьи типа «лучшие адаптивные сайты» и посмотреть как у них сделано.
>>614410
Это меньше чем комиссия за год.
>>614435
Скорее всего там null потому что ты передаешь null. Проверь нет ли опечаток в имени переменных.
>>614437
в базе надо хранить путь к файлу и может быть размеры картинки, они могут пригодиться при выводе HTML кода.
>>614514
Не закрыта скобка у function () { .... (а закрывающей нет). Исправь выравнивание в коде и сразу станет видно.
> кто знает как задача на палиндром без функции решается?
Идем циклом, сравнивая буквы с краев слова, если не совпали - значит не палиндром, если совпали - сравним следующие.
>>614599
> $strawberryBankTotal = calc($creditBalance, $monthlyPayment, 1.02, 0, 0) + 7777;
Неправильно так как 7777 надо добавить к долгу в самом начале чтобы проценты считались и от нее.
>>614643
NAT чтобы виртуалка могла выходить в сеть. Чтобы ты мог видеть виртуалку и она могла выходить в сеть, есть 2 варианта:
1) host -only network + в винде в свойствах твоей настоящей сетевой карты выбрать расшаривание интернета с виртуальной картой. IP задавать не надо, он определится автоматически (винда организует в виртуальной сети выдачу IP через DHCP).
2) сделать 2 карточки для виртуалки: NAT + host-only network с вручную заданным IP.
> И еще как узнать диапозон айпи локальной сети? "и настройка виртуального сетевого адаптера так чтобы его IP-адрес входил в диапазон адресов локальной сети."
Имеется в виду у виртуального адаптера должен быть серый адрес из диапазона 10.x.x.x, 192.168.x.x. или 169 что-то там еще.
Есть таблица. http://mydevice.io/devices/
Я советую выбрать 1-2 значения, чтобы было 2-3 варианта: смартфон/планшет/дескторп или смартфон/десктоп. Для смартфона можно выбрать условие < 480, для планшета < 960. «Лопаты» лучше наверно считать смартфонами, они не очень широкие.
>>614358
Числа верные
>>614359
По моему, нет, там комиссии нет же. В том-то и трюк что выгоднее добавить 7777 сразу чем платить по 1000 каждый месяц. Это типичный трюк банков - кажется что немного, а за год набегает уже 12000.
>>614360
Не хватает еще половины анона.
>>614369
Надо делать 2-3 варианта в зависимости от дизайна. Для некоторых простых сайтов хватит одного излома на ширине 600-700, для некоторых можно изламывать на 480 и 960.
> А под телефон нужно делать более крупные иконки и текст, т.к. все масштабируется.
да, либо картинки высокого разрешения либо вектор SVG.
>>614376
Третий банк по моему не самый дорогой. Там нет комиссии, отсюда экономия.
>>614391
Вордпресс очень примитивный уровень, это считай продвинутый верстальщик. Но лучше конечно иметь что-то чем ничего.
>>614403
То что ты сделал hello world не значит что ты знаешь фреймворк. Такое легко раскусить на собеседовании.
>>614409
Можно поискать в сети статьи типа «лучшие адаптивные сайты» и посмотреть как у них сделано.
>>614410
Это меньше чем комиссия за год.
>>614435
Скорее всего там null потому что ты передаешь null. Проверь нет ли опечаток в имени переменных.
>>614437
в базе надо хранить путь к файлу и может быть размеры картинки, они могут пригодиться при выводе HTML кода.
>>614514
Не закрыта скобка у function () { .... (а закрывающей нет). Исправь выравнивание в коде и сразу станет видно.
> кто знает как задача на палиндром без функции решается?
Идем циклом, сравнивая буквы с краев слова, если не совпали - значит не палиндром, если совпали - сравним следующие.
>>614599
> $strawberryBankTotal = calc($creditBalance, $monthlyPayment, 1.02, 0, 0) + 7777;
Неправильно так как 7777 надо добавить к долгу в самом начале чтобы проценты считались и от нее.
>>614643
NAT чтобы виртуалка могла выходить в сеть. Чтобы ты мог видеть виртуалку и она могла выходить в сеть, есть 2 варианта:
1) host -only network + в винде в свойствах твоей настоящей сетевой карты выбрать расшаривание интернета с виртуальной картой. IP задавать не надо, он определится автоматически (винда организует в виртуальной сети выдачу IP через DHCP).
2) сделать 2 карточки для виртуалки: NAT + host-only network с вручную заданным IP.
> И еще как узнать диапозон айпи локальной сети? "и настройка виртуального сетевого адаптера так чтобы его IP-адрес входил в диапазон адресов локальной сети."
Имеется в виду у виртуального адаптера должен быть серый адрес из диапазона 10.x.x.x, 192.168.x.x. или 169 что-то там еще.
Покажи твой код, напиши как запускаешь, что происходит, какая ошибка.
>>614696
Так и надо
>>614761
Открой отладчик в бразере Ctrl + sHift + I на вкладке Network и посмотри.
>>614808
7777 надо прибавлять к сумме долга в самом начале. Анон в любом случае сразу их выплатить не может.
>>614961
А ты клиентом mysql для командной строки умеешь пользоваться? Если нет то начни с него.
>>614967
Не, слишком длинная. Сделай проще: +7 или 8, за ними ровно 10 цифр между которыми любое число пробелов, минусов, скобок.
Также, проверь по большому списку номеров который есть где-то выше в районе 250-го поста.
> (\\s|\\-|\\(|\\))
Это лучше писать через квадратные скобки.
>>614973
Сокращать не надо. Я бы только заменил вопрос на звездочку, так как пробелов может быть и несколбько. В остальном верно.
>>614995
Просто уникальный номер соединения. Можно просмотреть все активные сеансы через SHOW FULL PROESSLIST и убить сеанс по номеру через KILL 123;
>>614997
Это (расположение файлов таблиц) задается в файле my.ini в папке с mySQL. И возможно выбирается при установке, не помню.
Покажи твой код, напиши как запускаешь, что происходит, какая ошибка.
>>614696
Так и надо
>>614761
Открой отладчик в бразере Ctrl + sHift + I на вкладке Network и посмотри.
>>614808
7777 надо прибавлять к сумме долга в самом начале. Анон в любом случае сразу их выплатить не может.
>>614961
А ты клиентом mysql для командной строки умеешь пользоваться? Если нет то начни с него.
>>614967
Не, слишком длинная. Сделай проще: +7 или 8, за ними ровно 10 цифр между которыми любое число пробелов, минусов, скобок.
Также, проверь по большому списку номеров который есть где-то выше в районе 250-го поста.
> (\\s|\\-|\\(|\\))
Это лучше писать через квадратные скобки.
>>614973
Сокращать не надо. Я бы только заменил вопрос на звездочку, так как пробелов может быть и несколбько. В остальном верно.
>>614995
Просто уникальный номер соединения. Можно просмотреть все активные сеансы через SHOW FULL PROESSLIST и убить сеанс по номеру через KILL 123;
>>614997
Это (расположение файлов таблиц) задается в файле my.ini в папке с mySQL. И возможно выбирается при установке, не помню.
ПХП конфа богов. Уже 13 юзеров. Рофлы, филиал /b, ценный джун из Германии с двух летним опытом пхп, джава даун, сисярп даун, выходцы из /b и т.д.
Ждёмс.
Ты ОП? Заходи в пхп конфу. Там сквозь 1к сообщений много вопросов по пхп проскакивает.
> 0 контента от самого
> пиздит на прон
Лил. Ну задавай вопрос про пых - тебе ответят знающие в конфе. Пока нет вопросов - можно и прон постить.
> > Игра в броски кубиков
> Неплохо, пара замечаний:
> - нет проверки на даблы
> - не называй переменные с большой буквы, сбольшой буквы пишут классы и константы
Исправил, надеюсь правильно понял условия. Не совсем понятно нужно ли прекращать игру когда выпал абл, или всё-равно побеждает сумма чисел?
https://ideone.com/BmoCvk
>Все верно, но пиши переменные с первой маленькой буквы.
Мне в треде уже сказали, исправляюсь. Спасибо.
>Подумай как избавиться от повтора.
Эм, они не повторяются, это разные строки с разными формулами.
>>618971
>А если ровно миллион то не годится? По моему тут знак не совсем тот.
А что ели >=
>>618971
Судя по алгоритму этой задачи, нет никакой разницы между серединой и концом(кроме конечнодополнительной работы если вставлять в середину, при генерации же - разницы нет). Всё-равно рандом.
Но таки да, если задача именно в универсальности - твой код намного лучше.
>$letters = [1 => 'аа', 'бб', 'вв', ...]
Крутая уличная магия!
Внедрил в код, можешь не смотреть, 1 строку всего поправил.
https://ideone.com/q09F2G
>не пиши номера цифрами, то есть лучше назвать переменные $randomWord1, $randomWord2
Так писать или не писать? Что-то не понял.
>после первого несовпадения можно выходить из цикла
Непонятно тут. А я разьве не так сделал? или break не прерывает цикл?
> > Игра в броски кубиков
> Неплохо, пара замечаний:
> - нет проверки на даблы
> - не называй переменные с большой буквы, сбольшой буквы пишут классы и константы
Исправил, надеюсь правильно понял условия. Не совсем понятно нужно ли прекращать игру когда выпал абл, или всё-равно побеждает сумма чисел?
https://ideone.com/BmoCvk
>Все верно, но пиши переменные с первой маленькой буквы.
Мне в треде уже сказали, исправляюсь. Спасибо.
>Подумай как избавиться от повтора.
Эм, они не повторяются, это разные строки с разными формулами.
>>618971
>А если ровно миллион то не годится? По моему тут знак не совсем тот.
А что ели >=
>>618971
Судя по алгоритму этой задачи, нет никакой разницы между серединой и концом(кроме конечнодополнительной работы если вставлять в середину, при генерации же - разницы нет). Всё-равно рандом.
Но таки да, если задача именно в универсальности - твой код намного лучше.
>$letters = [1 => 'аа', 'бб', 'вв', ...]
Крутая уличная магия!
Внедрил в код, можешь не смотреть, 1 строку всего поправил.
https://ideone.com/q09F2G
>не пиши номера цифрами, то есть лучше назвать переменные $randomWord1, $randomWord2
Так писать или не писать? Что-то не понял.
>после первого несовпадения можно выходить из цикла
Непонятно тут. А я разьве не так сделал? или break не прерывает цикл?
> ,5000
> 39999
>Это надо выносить в переменные, а то менять не удобно.
Наоборот! Если добавится ещё банк сразу есть местечко. Не придётся весь код переписывать, а только данные вбить.
Ответ уровня "мне несложно и копипастнуть 10 раз".
Лучше всегда использовать переменные для постоянных элементов.
Так ты и кэмл кейс можешь не использовать - писать переменные с заглавных букв, всё и так удобно и работает.
>Лучше всегда использовать переменные для постоянных элементов.
Но ведь он не постоянный. В 2 случаях он 0, в одном 7к.
Ты про плату за открытие счета говоришь, а я про вообще все переменные, они у тебя в функции просто цифрами стояли, насколько я помню.
>они у тебя в функции просто цифрами стояли
Вот мой код.
http://ideone.com/BqY2lL
Вот вызовы функций.
$homoCreditbankTotal=getTotalSum(1.04,500 ,0 ,5000,39999,0);
\t $softbankTotal=getTotalSum(1.03,1000,0 ,5000,39999,0);
$strawberryBankTotal=getTotalSum(1.02,0, 7777,5000,39999,0);
По моему если добавится 2chBank с комиссией 9001, проще допилить новый вызов функции,
$svachBankTotal=getTotalSum(1.01,0, 9000,5000,39999,0);
чем добавлять переменную и полностью перелопачивать код учитывая параметры двачебанка? Или я неправ?
Так анон как платил 5к, так и продолжит, его долг тоже остаётся прежним. Эти цифры и желательно сделать переменными. Надо максимально упрощать код таким вот образом.
Я понять не могу, каким макаром это упростит код? Введётся новая переменная его только усложнит, раз надо будет дополнительно и её обсчитывать.
Позор не читавшему оп-пост до конца.
Да, сразу ставь php 7.
А если увеличивается сумма кредита, то так же каждый раз подставлять её в каждую функцию?
Не проще ли ввести $creditBalance перед функциями, а потом там менять? То же самое и с платой анона в месяц, если она вдруг изменится.
А остальные значения уже различаются, там переменные и не нужны.
Оп сказал, что перекат завтра сделает.
Чёт не понимаю я тебя совсем. Ты код мой точно видел хоть?
$homoCreditbankTotal=getTotalSum(1.04,500 ,0 ,5000,39999,0);
\t $softbankTotal=getTotalSum(1.03,1000,0 ,5000,39999,0);
$strawberryBankTotal=getTotalSum(1.02,0, 7777,5000,39999,0);
Под твои параметры можно просто сделать так.
$plataAnona=5000;
$homoCreditbankTotal=getTotalSum(1.04,500 ,0 ,$plataAnona,39999,0);
\t $softbankTotal=getTotalSum(1.03,1000,0 ,$plataAnona,39999,0);
$strawberryBankTotal=getTotalSum(1.02,0, 7777,$plataAnona,39999,0);
Да, сейчас мне это очевидно. А сначала я думал, что там берётся одна часть и весь текст прогоняется по ней, когда функция у нас preg_match_all. Жаль, как-то это несуразно.
>>618880
>А если сделать вот так (?<=(,жы))(?<=(жы))
Не могу прочитать, что это означает? Не встречал таких регулярных выражений чего-то.
Если сделать именно регулярку для поиска ",жы", то сразу предчувствую, что ОП разнесёт всё в клочья, в пух и прах, а ещё и уничтожит на месте. Тогда ведь надо будет регулярку делать и для ",шы", для прочих подобных ошибок.
Думаю, что лучше как-нибудь циклом регулярки из массива подставлять. Чтоб одна регулярка полностью проходила по тексту, затем другая регулярка полностью проходила т.д. Только у меня так не получилось, я так и хотел же сделать с самого начала.
>>618889
>Есть такая штука, что при не совпадении вернуться назад и ещё раз проверить по другой регулярке.
Так звучит как-то сложно для меня. По идее просто же брать из массива регулярки и подставлять, каждый раз заново проверяя текст, - так ведь должно работать.
Это у меня было, когда я мутил цикл с $possibleErrors[$i]['pattern'] - вот так пытался подставлять регулярки. В принципе, это возможно, надо только разобраться.
Так и не сделал эту задачу.
А ты её решил как-нибудь, братишка? Я не встречал ещё пока чьего-либо решения в тредах. Моё было, когда я в регулярку подставил прибавление символов вперед и назад от ошибки, но это чушь.
О том и толкую. А ещё и переменную для 39999 рублей.
Так вернее и надёжнее будет - по-любому.
Других-то претензий и не было, кроме ухода в минус калькулятора.
>Не могу прочитать, что это означает? Не встречал таких регулярных выражений чего-то.
http://phpclub.ru/detail/article/regexp_2
>Чтоб одна регулярка полностью проходила по тексту, затем другая регулярка полностью проходила т.д.
А ты не так делал? Это же очевидно, вот он и выход.
Это было настолько очевидно, что я даже не понял сразу что ты именно это предлагаешь.
А ОП проверял-одобрял?
Тут уже сталкивались ведь с тем, что считали своё решение верным, а потом спустя 100500 постов получали по лбу с оттягом от ОПа.
ОП проверял и подтверждал. Я пороюсь попозже, где то может еще лежит решение. Даже больше года назад я это задание делал.
>А ты не так делал? Это же очевидно, вот он и выход
Ахаха, ну вот, а ты меня СОВРАТИЛ С ПУТИ ИСТИННОГО!!1
Это когда я стал через foreach делать и тупил долго.
Надо будет снова взяться, но пока отдыхаю.
Вот так у меня выглядело всё:
for ($i=0; $i < $number; $i++) {
\tif (preg_match($possibleErrors[$i]['pattern'], $matches[$i])) { /Достаём из массива регулярку, подставляем её в функцию, проверяем найденные ошибки в массиве $matches на соответствие/
\t\t$message = $possibleErrors[$i]['message']; /Выводим соответствующее правило из массива (содержание)/
\t\t$pattern = $matches[$i];
\t\techo "{$pattern} и {$message}\n";
}
Там только цикл надо ограничивать тогда не количеством ошибок, а количеством регулярок. Иначе, как подсказали, там начинают подставляться регулярки, которых нет, когда до седьмой доходит.
>Там только цикл надо ограничивать тогда не количеством ошибок, а количеством регулярок.
То есть ты будешь проверять только первые 7 ошибок? А остальные тупо проигнорируешь?
Там нужно одной регуляркой полностью весь текст проверить - на все ошибки, какие встретятся, с помощью preg_match_all.
И так каждой регуляркой.
Тогда такое вот пересечение ошибок, как ",жы", должно - по идее - уже не беспокоить.
Как-то так надо делать, наверное.
Аа, да, это я скопировал то, что у меня было в одном из первых вариантов.
Там неверно то, что для рассмотрения массив с ошибками берётся, там ведь нужно не только выводить ошибку и правило, но и кусок текста с ошибкой.
Всё равно цикл нужен внутри для рассмотрения уже текста и выискивания кусков с ошибками оттуда.
Ну или сделать выборку куска текста сразу с ошибкой прямо регуляркой, как я тут делал: ideone.com/BXho8s
Но я сначала попробую сделать так, как уже начал после твоих советов делать, с неразличением пересечения ошибок. Я уже не успокоюсь теперь ведь.
Ты уже знаешь, что такое ООП?
Ну это не в боди второй блок лежит. Короче структура такая:
боди>другой блок>блок с "ооо агросервис". У последних двух же нет никаких отступов, какого тогда хуя сверху там появляется отступ?
Короче вот по твоему вопросу как раз:
http://xiper.net/collect/html-and-css-tricks/content/img-in-the-block
боди>другой блок>>>>>>>>говно>>>>>>>>>>>>>>>>>>моча>>>>>>>>>>>>>>>>>>>>>>>>блок с "ооо агросервис"
не удержался
Такова структура шрифта ещё.
Если бы "АГРОСЕРВИС" был бы написан капсом, то было бы так же ровно, как и "ООО", безо всяких отступов.
Я на студентах сижу. И жду ответ ОПа, иногда делаю там что-то. Но я хочу геморойные задачи как раньше. По типу банкомата.
Так это не ко мне вопрос, мои-то задачи чтобы подтянуть знания анона, который застрял на регулярках, для тебя они будут элементарными. А тебе я бы посоветовал открыть учебник по жс, читать его и делать задачи оттуда, пока оп проверяет твоих студентов. Всяко полезнее будет.
Что никто не решил?
Я сам вкатываюсь и пока не смотрел, но вроде это что-то типа CMS, только надо ещё собирать сами модули. Пространство для внедрения разных штук больше, наверное. Можно самому решать, какие модули будут появляться, а какие нет. Я хз, короче, азаза))0)))
А задачу про проверку ошибок и исправление их ты сделал?
Покажи своё решение, быстро и решительно!
Мимо анончик с регулярками в жопе
Сделал, я делал больше года назад. Надо искать. Но и зачем скидывать готовое решение? Тебе будет уже не интересно решать.
Тогда это я у тебя задачи должен просить, а не наоборот.
Я работаю в веб-студии. Я делаю задачу со студентами, поэтому и сижу. Хочу нормальную работу найти.
А ОП был удовлетворён решением?
Мне всё равно интересно, я давно с ней вожусь.
Сейчас с телефона и отдыхаю, но всё равно к ней возвращаюсь мысленно.
Я же её решил говнокодом и копипастой, ОП пока не проверил решение, но там уже ясно, что ерунда.
Завидую белой завистью, бро, я не шучу.
Эх, буду работать и изучать, что ещё остаётся.
Кстати, другой бро, который придумывал задачки, вот моя поделка с копипастой на исправление текста: http://ideone.com/oHPNqU
Вставил туда сейчас ",жы" - всё исправляет благодаря тому, что регулярки по отдельности проходят по тексту.
Там можно и циклом это всё сделать, причём это всё просто даже для меня.
Я потом это применю для замены, пока надо сделать нормальный вывод.
Ну, я просто к тому, что всё работать будет с отдельным проходом регулярок, это уже ясно.
Нет, все.
Нет, дрочим.
Ценность Опа в том, что он может указать на явные косяки и направить в какую сторону копать. Ну и если тебя кажется что Оп не прав в каких то вопросах, выскажи иной вариант, только аргументированно.
А веб-студии вы чем занимаетесь? Я диванный, правда интересно. Почему не считаешь свою работу нормальной?
сервер отдает браузеру html документ. Все что ты делаешь в пхп сначала обрабатывает сервер и так сказать компилит хтмл страницу для браузера
Попробуй вместо <? require_once писать <?php require_once. Я вчера с подобной проблемой ебался когда переносил сайт с Денвера на поставленный руками сервер.
От требований заказчика зависит. Если хочет, то делаем, если нет, то не делаем.
Да, наизи.
$frase = "Hello!";
echo mb_substr($frase, 0, 3);
Выдаёт ошибку
Fatal error: Uncaught Error: Call to undefined function mb_substr()
в чём проблема?
в ideone.com всё работает нормально
А где это и как это делается? Заметил, что без "mb_" работает как надо. Зачем оно нужно?
Нет, все это наебалово, даже не пытайся.
Я знаю, но я могу себе позволить снимать квартиру и жить в свое удовольствие.
Оп исправил почти все твои замечания
http://integer64.github.io/site-layout/
Задача 10:
>>Почему width 100%?
Гугль дал такое решение для адаптивности картинок
Задача 11:
>>перемещаться с клавиатуры, клавишами Tab, Shift + Tab, стрелками, пробелом.
Реализовал, добавил для checkbox на :focus бордер тень,что бы было видно.
Задача 12:
Переделал, совсем без id у меня не получилось, надо было как то input с label связать. Может быть есть другое решение.
Связал вкладки и контент вкладок через data-атрибуты. Хотелось бы в CSS полноценные регулярные выражения, тогда решение было бы более эстетичное.
Возник вопрос по поводу длинны названия вкладки: три раза прочитал, так и не понял что требуется, разжуй пожалуйста, для самых глупеньких вроде меня.
Помогло, спасибо.
Решил несколько задач
Первая http://pastebin.com/Q5CLkzck
Вторая http://pastebin.com/6w0GqbWt
Третья http://pastebin.com/G4kUKzeL
Стоило ли их вообще тут постить, лол
Хотя нет, лол:
if ($anonSum > $compSum) {
echo "Победил анон";
}
if ($anonSum < $compSum) {
echo "Победил компьютер";
}
If ($anonSum == $compSum) {
echo "Ничья";
}
exit();
Как-то решил их и не оставил айдиона ссылки
Понял, спасибо
Это не маргин коллансинг (схлопывание границ)? Верхняя граница заголовка проникает сквозь границу родителя.
*502 ошибка
Но так не работает, не ищет так.
Далее попробую с помощью функций вывести кусок текста с ошибкой, а не с помощью регулярок.
>>619815
Сюка, аж в голос!... Действительно же, блиять...
Не стоит. Интеграция IDE с Php сервером нужна только для использования xdebug. А он жутко медленный, если trace включается с первой строчки кода
Тем, кому я не ответил, я все прочту и проверю в ближайшие дня 2-3. ОПу тоже ведь надо отдыхать иногда.
Тут такая вещь: когда ты делаешь какую-то фичу через аякс вместо традиционной отправки формы, ты лишаешь пользователя удобств которые дает браузер а именно:
- индикатор прогресса операции
- вывод сообщений об ошибках
- возможность повторить операцию
Сооветственно если ты что-то делаешь через аякс, теперь ты а не браузер обязан реализовать эти возможности. Любой аякс-запрос должен сопровождаться:
- индикацией прогресса. Пользователь должен иметь обратную связь и видеть состояние системы: идет обработка данных, успешно обработано, произошла ошибка. Ты можешь не показывать индикатор прогресса только в случаях когда обработка запроса происходит очень быстро (менее 150 мс) - тогда можно сразу показать сообщение с результатом операции.
- обработкой ошибок. Ошибки могут быть транспортного уровня (пропал интернет, сервер отдал код 500, пришел ответ не ожидаемого типа или формата), так и уровня приложения (сервер ответил что данные в форме заполнены неправильно)
- возможность при некоторых ошибках повторить запрос
- блокировка формы на время отправки данных для защиты от повторной отправки, некоторые люди например дважды кликают по кнопкам
- функцию отмены запроса, которая есть в браузере, делать не надо - я нигде не видел чтобы ее делали, да и обычно аякс-запрос занимает меньше секунды и пользователь не успеет ей воспользоваться
Теперь посмотри на свой код и проверь, есть это у тебя или нет.
>>615210
То что занимает 20 строк кода не требует MVC, но я плохо представляю что можно уложить в 20 строк. хелло ворлд?
Алсо судя по твоему посту ты плохо знаешь перечисленные тобой вещи раз не понимаешь зачем они нужны, почему придуманы и какие проблемы решают.
>>615422
Очень наивное рассуждение.
Тут такая вещь: когда ты делаешь какую-то фичу через аякс вместо традиционной отправки формы, ты лишаешь пользователя удобств которые дает браузер а именно:
- индикатор прогресса операции
- вывод сообщений об ошибках
- возможность повторить операцию
Сооветственно если ты что-то делаешь через аякс, теперь ты а не браузер обязан реализовать эти возможности. Любой аякс-запрос должен сопровождаться:
- индикацией прогресса. Пользователь должен иметь обратную связь и видеть состояние системы: идет обработка данных, успешно обработано, произошла ошибка. Ты можешь не показывать индикатор прогресса только в случаях когда обработка запроса происходит очень быстро (менее 150 мс) - тогда можно сразу показать сообщение с результатом операции.
- обработкой ошибок. Ошибки могут быть транспортного уровня (пропал интернет, сервер отдал код 500, пришел ответ не ожидаемого типа или формата), так и уровня приложения (сервер ответил что данные в форме заполнены неправильно)
- возможность при некоторых ошибках повторить запрос
- блокировка формы на время отправки данных для защиты от повторной отправки, некоторые люди например дважды кликают по кнопкам
- функцию отмены запроса, которая есть в браузере, делать не надо - я нигде не видел чтобы ее делали, да и обычно аякс-запрос занимает меньше секунды и пользователь не успеет ей воспользоваться
Теперь посмотри на свой код и проверь, есть это у тебя или нет.
>>615210
То что занимает 20 строк кода не требует MVC, но я плохо представляю что можно уложить в 20 строк. хелло ворлд?
Алсо судя по твоему посту ты плохо знаешь перечисленные тобой вещи раз не понимаешь зачем они нужны, почему придуманы и какие проблемы решают.
>>615422
Очень наивное рассуждение.
Я думаю, не надо искать те записи где около @ стоят пробелы, а то можно найти все что угодно.
> [a-z0-9_+.\\-]
В доменном имени не может быть знаков подчеркивания или плюсов.
В остальном все верно.
>>615605
> .{3,5}((ж|ш)ы)
Не найдет слово Жыр в самом начале текста.
> (\\,(а|но)
Надо искать, наоборот, отсутствие запятой перед союзами.
> [а-яё]
Лучше добавить сюда и латинские буквы.
> $textClean = preg_replace($regexpClean, "{$regexpClean1}", $text);
Вторым параметром указывется не регулярка, а текст в котором вместо $0 будет вставлена найденная фраза. Подробности в мануале.
>>615730
Да, а еще он сам ставит зависимости той библиотеки и настраивает подключение ее файлов и классов.
Также, это позволяет не выгружать сторонние библиотеки, когда ты выложишь код на гитхаб, а только свой код + файл composer.json.
>>615735
Массив вида
[
регулярка => пояснение,
регулярка => пояснение,
регулярка => пояснение,
...
]
>>615801
Тебе нужен один из готовых алгоритмов поиска пути: https://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%B8%D1%81%D0%BA_%D0%BF%D1%83%D1%82%D0%B8
Дейкстра довольно простой.
>>616189
Бекапить наверно лучше через mysqldump - она позволяет делать это при работающем сервере и формат получается читабельный.
>>616192
Те же замечания что к решению >>615605 + дополнительно:
Вместо того чтобы создавать кучу переменных с цифрами, можно сделать массив вида [ регулярка => замена ] и обходить его циклом. Не копипасть.
- $regexpClean = '/\\,/';
- $regexpClean1 = '/\\;/';
- $regexpClean2 = '/\\!/';
Это все можно объединить в одно выражение, а в выражении для замены использовать $0 .. $9 . Почитай мануал http://php.net/manual/ru/function.preg-replace.php
Также можно использовтаь массив регулярок и замен, подробности в мануале.
- $regexpClean5 = '/жы/ui';
- $regexpClean6 = '/шы/ui';
Это тоже можно объединить вместе.
Формы слова «зделал» тоже можно объединить.
> $regexpClean13 = '/\\s\\s/ui';
Тут лучше исправлять не ровно 2, а любое число пробелов.
>>616251
Я с ним не работал.
>>616334
Бессодержательный и бессмысленный пост.
>>616380
по моему в конфиге есть опция вроде 'debug' => true/false
Я думаю, не надо искать те записи где около @ стоят пробелы, а то можно найти все что угодно.
> [a-z0-9_+.\\-]
В доменном имени не может быть знаков подчеркивания или плюсов.
В остальном все верно.
>>615605
> .{3,5}((ж|ш)ы)
Не найдет слово Жыр в самом начале текста.
> (\\,(а|но)
Надо искать, наоборот, отсутствие запятой перед союзами.
> [а-яё]
Лучше добавить сюда и латинские буквы.
> $textClean = preg_replace($regexpClean, "{$regexpClean1}", $text);
Вторым параметром указывется не регулярка, а текст в котором вместо $0 будет вставлена найденная фраза. Подробности в мануале.
>>615730
Да, а еще он сам ставит зависимости той библиотеки и настраивает подключение ее файлов и классов.
Также, это позволяет не выгружать сторонние библиотеки, когда ты выложишь код на гитхаб, а только свой код + файл composer.json.
>>615735
Массив вида
[
регулярка => пояснение,
регулярка => пояснение,
регулярка => пояснение,
...
]
>>615801
Тебе нужен один из готовых алгоритмов поиска пути: https://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%B8%D1%81%D0%BA_%D0%BF%D1%83%D1%82%D0%B8
Дейкстра довольно простой.
>>616189
Бекапить наверно лучше через mysqldump - она позволяет делать это при работающем сервере и формат получается читабельный.
>>616192
Те же замечания что к решению >>615605 + дополнительно:
Вместо того чтобы создавать кучу переменных с цифрами, можно сделать массив вида [ регулярка => замена ] и обходить его циклом. Не копипасть.
- $regexpClean = '/\\,/';
- $regexpClean1 = '/\\;/';
- $regexpClean2 = '/\\!/';
Это все можно объединить в одно выражение, а в выражении для замены использовать $0 .. $9 . Почитай мануал http://php.net/manual/ru/function.preg-replace.php
Также можно использовтаь массив регулярок и замен, подробности в мануале.
- $regexpClean5 = '/жы/ui';
- $regexpClean6 = '/шы/ui';
Это тоже можно объединить вместе.
Формы слова «зделал» тоже можно объединить.
> $regexpClean13 = '/\\s\\s/ui';
Тут лучше исправлять не ровно 2, а любое число пробелов.
>>616251
Я с ним не работал.
>>616334
Бессодержательный и бессмысленный пост.
>>616380
по моему в конфиге есть опция вроде 'debug' => true/false
Если ты используешь алгоритм, стоит в комментарии писать его название и ссылку например на Википедию.
> $transportName[$paths[$path[$i]][$path[$i+1]]['by']]
Такие сложные выражения надо упрощать, например вынеся $path[$i] и $path[$i+1] в переменные.
> $i!=(count($path)-1)
Лучше использовать <, а то если $path пустой, будет бесконечный цикл.
Также, было бы хорошо собрать код инициализации (foreach($paths as $graph => $value) ... $time[$graph] = $inf;) тоже в отдельную функцию.
> $inf = 99999;
В PHP (и вообще в компьютерной математике) есть настоящая бесконечность: константа INF. Ее можно сравнивать с числами через < или >, нельзя только сравнивать 2 бесконечности между собой.
> foreach($time as $t => $value) {
> if(in_array($t, $visited)) {
> unset($time[$t]);
Чтобы найти элементы одного массива, которых нет в другом, есть функции array_diff и array_diff_key
> function Dijkstra($paths, $pos, $time, $visited, $start, $end, $path) {
> return Dijkstra($paths, $pos, $time, $visited, $start, $end, $path);
У тебя тут так назваемая хвостовая рекурсия, ее можно заменить на цикл while/for. Тогда алгоритм будет проще читать. И он будет ближе к оригиналу.
> foreach($paths[$pos] as $Graph => $value) {
> if($time[$pos] == $time[$Graph] + $value['time']) {
Тут очень ненадежно сдеално, а что если из узла выходит несколько связей с одинаковым временем? Ты не сможешь выбрать нужную. Чтобы запомнить оптимальный путь, надо сделать массив $next который хранит элементы вида [ вершина => предыдущая вершина ] и который меняется когда меняется массив $time (если мы нашли более оптимальный путь). По нему можно восстановить оптимальный путь.
Пока у тебя алгоритм восстановления пройденного пути некорректен.
Имена функций должны начинаться с глагола и с маленькой буквы. Имена переменных должны отражать то, что в них хранится, а вот тут понять что-то сложно:
> as $g => $v)
>>616427
Я думаю дело в том что empty это ключевое слово языка: http://php.net/manual/ru/reserved.keywords.php
>>616443
Не знаю.
>>616654
Я бы убрал core, и вместо одной папки models сделал разные папки для разных классов: для валидатров, сущностей, хелперов, классов работы с БД.
>>616711
Это скорее всего неправильно так как обычно неймспейс совпадает с именами папок.
Если ты используешь алгоритм, стоит в комментарии писать его название и ссылку например на Википедию.
> $transportName[$paths[$path[$i]][$path[$i+1]]['by']]
Такие сложные выражения надо упрощать, например вынеся $path[$i] и $path[$i+1] в переменные.
> $i!=(count($path)-1)
Лучше использовать <, а то если $path пустой, будет бесконечный цикл.
Также, было бы хорошо собрать код инициализации (foreach($paths as $graph => $value) ... $time[$graph] = $inf;) тоже в отдельную функцию.
> $inf = 99999;
В PHP (и вообще в компьютерной математике) есть настоящая бесконечность: константа INF. Ее можно сравнивать с числами через < или >, нельзя только сравнивать 2 бесконечности между собой.
> foreach($time as $t => $value) {
> if(in_array($t, $visited)) {
> unset($time[$t]);
Чтобы найти элементы одного массива, которых нет в другом, есть функции array_diff и array_diff_key
> function Dijkstra($paths, $pos, $time, $visited, $start, $end, $path) {
> return Dijkstra($paths, $pos, $time, $visited, $start, $end, $path);
У тебя тут так назваемая хвостовая рекурсия, ее можно заменить на цикл while/for. Тогда алгоритм будет проще читать. И он будет ближе к оригиналу.
> foreach($paths[$pos] as $Graph => $value) {
> if($time[$pos] == $time[$Graph] + $value['time']) {
Тут очень ненадежно сдеално, а что если из узла выходит несколько связей с одинаковым временем? Ты не сможешь выбрать нужную. Чтобы запомнить оптимальный путь, надо сделать массив $next который хранит элементы вида [ вершина => предыдущая вершина ] и который меняется когда меняется массив $time (если мы нашли более оптимальный путь). По нему можно восстановить оптимальный путь.
Пока у тебя алгоритм восстановления пройденного пути некорректен.
Имена функций должны начинаться с глагола и с маленькой буквы. Имена переменных должны отражать то, что в них хранится, а вот тут понять что-то сложно:
> as $g => $v)
>>616427
Я думаю дело в том что empty это ключевое слово языка: http://php.net/manual/ru/reserved.keywords.php
>>616443
Не знаю.
>>616654
Я бы убрал core, и вместо одной папки models сделал разные папки для разных классов: для валидатров, сущностей, хелперов, классов работы с БД.
>>616711
Это скорее всего неправильно так как обычно неймспейс совпадает с именами папок.
Судя по названию module.archive.gzip.php она пытается в памяти распаковать архив. Не передавай этой библиотеке архивы на распаковку либо посмотри опции, может есть опция запрещающая это.
>>616748
Считает-то непраивильно. Должно получиться 23. И ответ не пишется.
> echo " Ответ: $imput . $result";
Тут надо выходить из цикла. Алсо у тебя по моему написано iMput
> if($char == 'x' || $char == '+' || $char == '-' || $char == '=') {
Нет деления
> }if($op == '=') {
на равно надо реагировать сразу, а не на следующем знаке
> "$result"
Зачем кавычки?
> 1)Сложный цикл for для мышей где 4 направления-копипаста делать(он там закомментирован)?
Ради 4 направлений наверно не стоит.
> Метод класса Field areChoosenAnimalsNearTheCage использован в foreach не с координатами хода, а с координатами каждой мыши чтобы перебрать все варианты. Допустим у нас две мыши. Одна мышь найдет рядом другую, аналогично со второй.
> OneLine будет равно двум. А если их три, то результат будет равен трем (каждая мышь подтвердит факт наличия рядом с собой представителя своей породы).
Не соглашусь. Допустим у нас 4 мыши. 2 из них стоят парой в одном углу карты, 2 в другом. Что вернет твой алгоритм? Число 4. Что оно значит? Я думаю, надо просто сделать функцию, которая получаем координаты клетки, класс и возвращает число животных данного класса по соседству с клеткой.
> 3)>Попробуй использовать тут array_filter с анонимной функцией, мне кажется будет чуть проще.
> Я сделал это для мышей и собак, но в кошках у меня три условия для массива(рядом ли мышка? можно ли походить? можно ли съесть?). Делать ли отдельный метод который совместит ли эти три условия?
Нет, не требуется.
> 4) canIMoveTo у меня теперь с одним параметром содержащем две координаты, вместо двух наглядных параметров x и y, потому что не знаю как передать два параметра
Не стоило canIMove переделывать ради array_filter. Аргументы функции выбираются из логики, тут логично чтобы аргументами были (x, y), то есть даем координаты и получаем ответ. Для совместимости с array_filter можно либо сделать метод в Animal, либо использовать анонимную функцию (так даже наверно лучше):
array_filter($x, function (...) use (...) {
...
});
> 5)Правильно ли я передаю анонимные функции? array($this, "функций").
Правильно, но это не анонимная функция, а ссылка ан метод объекта. Анонимная функция это http://php.net/manual/ru/functions.anonymous.php
> 6)Как быть со свойствам символов и дальности обзора? Делать ли их через _construct или указывать в свойствах?
Символ через абстрактный метод, чтобы обязать классы-наследники его определить. Обзор можно так же, если это свойство обязано быть у всех животных.
> 1)В методе startGame во внутреннем цикле foreach у меня был баг. Если следующий элемент в цикле был съеден, он не ходит, однако не ходят и все следующие элементы за ним. Они будут ходить только в следующем ходу. Поэтому foreach я поменял на for с новым последовательным порядком индексов через функцию array_values.
Можно и так. А можно сделать метод у животного который говорит живо оно еще или уже нет.
> 2)Переделал функцию searchNearbyCorner. Теперь она называется countStepsToCorners и считает сумму свободного пространства.
ок.
Замечания по коду. В общем, все хорошо, остались небольшие улучшения кода.
> //Метод возвращения символа для вывода на карте
> public function getSymbol()
> {
> return $this->symbol;
У тебя это будет работать только если в классе-потомке определено значения поля symbol. Но где гарантия что его определят? Как сказать программисту что его надо определить?
Правильное решение тут - сделать абстрактный метод getSymbol в базовом классе. Тогда все классы-наследники обязаны будут его реализовать, и программист сразу увидит что он должен определить значок для животного.
И ситуация со сменой значка кошкой тоже будет решаться тогда более красиво.
> mt_rand(0, count($possibleMoves) - 1
Есть еще array_rand()
> protected function searchBestMove(array $foundAnimals, array $possibleMoves, callable $countPoints)
> $points = $countPoints($foundAnimals, $move);
Тут можно избавиться от аргумента foundAnimals - можно передавать его в функцию подсчета через use (если бы исплоьзовалась анонимная функция). Можно впрочем и не избавляться, логика тут есть, что лучший ход зависит от расположения других животных. Хотя мне кажется, без него будет красивее.
> public static $counterOfSymbols = 1;
Почему public?
> $this->vision = 4;
Можно также просто написать в классе protected $vision = 4; Это не ошибка.
> $arrows[] = new Move($this->x, $this->y - 1);
> $arrows[] = new Move($this->x + 1, $this->y);
Тут можно еще записать короче:
$moves = [
new ...,
new ...,
new ...
];
Можно конечно и как у тебя.
Также, для мышки надо рассматривать вариант «стоять на месте». Иногда стоять на месте может быть выгоднее чем сделать шаг навстречу кошке. Например когда мышка в углу и к ней с 2 сторон приближаются кошки.
То же самое для кошки - она может бояться сделать ход если рядом много собак.
> if (!count($foundAnimals["Cat"])) {
> throw new Exception("Ошибка. Должна быть как минимум одна кошка.");
Вот тут я все же не уверен что это правильно. Можно было бы в отстутсиве кошки оценивать ходы по другим факторам, вроде близости к углам. Хотя в твоей ситуации функция не будет вызвана если нет кошки, но так было бы надежнее.
> -abs(min($move->x - $nearbyEnemy->x, $move->y - $nearbyEnemy->y));
Неправильная формула. Надо брать min(abs) а не abs(min). Если dx = -4, а dy = 1 то она вернет 4.
> } while ($this->getAnimal($x, $y) || $i++ < 100);
При превышении числа попыток надо выдавать ошибку, а ты ставишь животное на занятую клетку.
> public function canIMoveTo(Move $move)
Мне кажется здесь лучше бы было аргуметами сделать x, y - чтобы не требовался объект Move. Этот объект, как мне кажется, нужен только внутри алгоритма выбора хода и незачем его вытаскивать в класс карты. да и функция получится более универсальная.
При удалении животного хорошо бы обнулять в нем ссылку на карту. Чтобы была симметрия с функцией addAnimal: одна функция добавляет ссылку, вторая удаляет.
> private function showField($turn)
Здесь не очень эффективно сделан вывод, ты для каждой клеточки делаешь вызов getAnimal. Лучше создать пустой двухмерный массив размером с карту, а затем обойти массив животных и каждое поставить в массив карты. И вывести этот массив через implode или цикл.
> //Так как в цикле foreach копия массива надо проверять данные с изменениями через ссылку
Можно так, а если бы при удалении животного в нем обнулялась ссылка на карту, можно было бы сделать у него метод isOnMap() и ходить только теми животными, которые все еще на карте.
> die("Конец игры.");
Лучше return
> array_key_exists($animalType = get_class($animal), $foundAnimals)
Это надо писать как 2 строки, 2 отдельных действия. Не объединяй присваивание значения с другими действиями, это затрудняет чтение кода.
> //Если обнаружили новый тип животных - добавляем его как ключ
> if (!array_key_exists($animalType = get_class($animal), $foundAnimals)) {
Вот это не очень надежно, мне кажется тут лучше в начале игры, где создаются животные просто сделать массив видов животных. Либо же переделать алгоритм чтобы он проверял есть ли в массиве такой ключ, перед тем как его использовать.
А то так нет никаких гарантий что в массиве есть данный ключ.
> $animal->getX() >= $x - $vision && $animal->getX() <= $x + $vision || $vision == INF
Тут нужны скобки иначе непонятен порядок выполнения операций
В общем, хорошо сделано, я думаю, осталось подправить мелкие замечания и все будет готово.
>>616782
Выглядит верно, пиши код, проверим. Для исправления возможно придется сделать отдельные регулякри, но если ты используешь те же что и для поиска, то это будет плюс.
> Как же мне не хватает соображения во всём этом и какого-нибудь хорошего наставник
Ты бы код запостил - получил бы советы. Тут ведь есть аноны которые решали эту задачу раньше.
>>616815
Основы языка PHP, простые задачки.
>>616870
Эти прочти для начала.
> 1)Сложный цикл for для мышей где 4 направления-копипаста делать(он там закомментирован)?
Ради 4 направлений наверно не стоит.
> Метод класса Field areChoosenAnimalsNearTheCage использован в foreach не с координатами хода, а с координатами каждой мыши чтобы перебрать все варианты. Допустим у нас две мыши. Одна мышь найдет рядом другую, аналогично со второй.
> OneLine будет равно двум. А если их три, то результат будет равен трем (каждая мышь подтвердит факт наличия рядом с собой представителя своей породы).
Не соглашусь. Допустим у нас 4 мыши. 2 из них стоят парой в одном углу карты, 2 в другом. Что вернет твой алгоритм? Число 4. Что оно значит? Я думаю, надо просто сделать функцию, которая получаем координаты клетки, класс и возвращает число животных данного класса по соседству с клеткой.
> 3)>Попробуй использовать тут array_filter с анонимной функцией, мне кажется будет чуть проще.
> Я сделал это для мышей и собак, но в кошках у меня три условия для массива(рядом ли мышка? можно ли походить? можно ли съесть?). Делать ли отдельный метод который совместит ли эти три условия?
Нет, не требуется.
> 4) canIMoveTo у меня теперь с одним параметром содержащем две координаты, вместо двух наглядных параметров x и y, потому что не знаю как передать два параметра
Не стоило canIMove переделывать ради array_filter. Аргументы функции выбираются из логики, тут логично чтобы аргументами были (x, y), то есть даем координаты и получаем ответ. Для совместимости с array_filter можно либо сделать метод в Animal, либо использовать анонимную функцию (так даже наверно лучше):
array_filter($x, function (...) use (...) {
...
});
> 5)Правильно ли я передаю анонимные функции? array($this, "функций").
Правильно, но это не анонимная функция, а ссылка ан метод объекта. Анонимная функция это http://php.net/manual/ru/functions.anonymous.php
> 6)Как быть со свойствам символов и дальности обзора? Делать ли их через _construct или указывать в свойствах?
Символ через абстрактный метод, чтобы обязать классы-наследники его определить. Обзор можно так же, если это свойство обязано быть у всех животных.
> 1)В методе startGame во внутреннем цикле foreach у меня был баг. Если следующий элемент в цикле был съеден, он не ходит, однако не ходят и все следующие элементы за ним. Они будут ходить только в следующем ходу. Поэтому foreach я поменял на for с новым последовательным порядком индексов через функцию array_values.
Можно и так. А можно сделать метод у животного который говорит живо оно еще или уже нет.
> 2)Переделал функцию searchNearbyCorner. Теперь она называется countStepsToCorners и считает сумму свободного пространства.
ок.
Замечания по коду. В общем, все хорошо, остались небольшие улучшения кода.
> //Метод возвращения символа для вывода на карте
> public function getSymbol()
> {
> return $this->symbol;
У тебя это будет работать только если в классе-потомке определено значения поля symbol. Но где гарантия что его определят? Как сказать программисту что его надо определить?
Правильное решение тут - сделать абстрактный метод getSymbol в базовом классе. Тогда все классы-наследники обязаны будут его реализовать, и программист сразу увидит что он должен определить значок для животного.
И ситуация со сменой значка кошкой тоже будет решаться тогда более красиво.
> mt_rand(0, count($possibleMoves) - 1
Есть еще array_rand()
> protected function searchBestMove(array $foundAnimals, array $possibleMoves, callable $countPoints)
> $points = $countPoints($foundAnimals, $move);
Тут можно избавиться от аргумента foundAnimals - можно передавать его в функцию подсчета через use (если бы исплоьзовалась анонимная функция). Можно впрочем и не избавляться, логика тут есть, что лучший ход зависит от расположения других животных. Хотя мне кажется, без него будет красивее.
> public static $counterOfSymbols = 1;
Почему public?
> $this->vision = 4;
Можно также просто написать в классе protected $vision = 4; Это не ошибка.
> $arrows[] = new Move($this->x, $this->y - 1);
> $arrows[] = new Move($this->x + 1, $this->y);
Тут можно еще записать короче:
$moves = [
new ...,
new ...,
new ...
];
Можно конечно и как у тебя.
Также, для мышки надо рассматривать вариант «стоять на месте». Иногда стоять на месте может быть выгоднее чем сделать шаг навстречу кошке. Например когда мышка в углу и к ней с 2 сторон приближаются кошки.
То же самое для кошки - она может бояться сделать ход если рядом много собак.
> if (!count($foundAnimals["Cat"])) {
> throw new Exception("Ошибка. Должна быть как минимум одна кошка.");
Вот тут я все же не уверен что это правильно. Можно было бы в отстутсиве кошки оценивать ходы по другим факторам, вроде близости к углам. Хотя в твоей ситуации функция не будет вызвана если нет кошки, но так было бы надежнее.
> -abs(min($move->x - $nearbyEnemy->x, $move->y - $nearbyEnemy->y));
Неправильная формула. Надо брать min(abs) а не abs(min). Если dx = -4, а dy = 1 то она вернет 4.
> } while ($this->getAnimal($x, $y) || $i++ < 100);
При превышении числа попыток надо выдавать ошибку, а ты ставишь животное на занятую клетку.
> public function canIMoveTo(Move $move)
Мне кажется здесь лучше бы было аргуметами сделать x, y - чтобы не требовался объект Move. Этот объект, как мне кажется, нужен только внутри алгоритма выбора хода и незачем его вытаскивать в класс карты. да и функция получится более универсальная.
При удалении животного хорошо бы обнулять в нем ссылку на карту. Чтобы была симметрия с функцией addAnimal: одна функция добавляет ссылку, вторая удаляет.
> private function showField($turn)
Здесь не очень эффективно сделан вывод, ты для каждой клеточки делаешь вызов getAnimal. Лучше создать пустой двухмерный массив размером с карту, а затем обойти массив животных и каждое поставить в массив карты. И вывести этот массив через implode или цикл.
> //Так как в цикле foreach копия массива надо проверять данные с изменениями через ссылку
Можно так, а если бы при удалении животного в нем обнулялась ссылка на карту, можно было бы сделать у него метод isOnMap() и ходить только теми животными, которые все еще на карте.
> die("Конец игры.");
Лучше return
> array_key_exists($animalType = get_class($animal), $foundAnimals)
Это надо писать как 2 строки, 2 отдельных действия. Не объединяй присваивание значения с другими действиями, это затрудняет чтение кода.
> //Если обнаружили новый тип животных - добавляем его как ключ
> if (!array_key_exists($animalType = get_class($animal), $foundAnimals)) {
Вот это не очень надежно, мне кажется тут лучше в начале игры, где создаются животные просто сделать массив видов животных. Либо же переделать алгоритм чтобы он проверял есть ли в массиве такой ключ, перед тем как его использовать.
А то так нет никаких гарантий что в массиве есть данный ключ.
> $animal->getX() >= $x - $vision && $animal->getX() <= $x + $vision || $vision == INF
Тут нужны скобки иначе непонятен порядок выполнения операций
В общем, хорошо сделано, я думаю, осталось подправить мелкие замечания и все будет готово.
>>616782
Выглядит верно, пиши код, проверим. Для исправления возможно придется сделать отдельные регулякри, но если ты используешь те же что и для поиска, то это будет плюс.
> Как же мне не хватает соображения во всём этом и какого-нибудь хорошего наставник
Ты бы код запостил - получил бы советы. Тут ведь есть аноны которые решали эту задачу раньше.
>>616815
Основы языка PHP, простые задачки.
>>616870
Эти прочти для начала.
> ini_set('display_errors', 1);
Вот такие вещи лучше бы задавать в php.ini или в конфиге виртуал хоста Апача. Или хотя бы в конфиге приложения сделать поле debug = true. А то ты или кто-то выгрузит этот код на боевой сервер.
По автозагрузчику, можно разбить имя класса по символу \ и сравнивать первый элемент с твоим неймспейсом.
Так, в общем у тебя код выглядт верно.
Если что, в стандарте PSR-4 есть образец автозагрузчика для изучения: http://www.php-fig.org/psr/psr-4/ru/examples/
https://github.com/fxsloker/Student/blob/master/app/config.php#L9
> 'prefix' => 'st_'
Советую не использовать префиксы. Они замусоривают код и их делали раньше для нищехостингов где не давали создать большо одной базы данных. Я думаю, не стоит ради такой сомнительной цели ухудшать код. Исходи из того что для твоего приложения нужна отдельная база данных.
https://github.com/fxsloker/Student/blob/master/app/Core/Route.php
Класс назван неудачно: должно быть Router, а Route это один маршрут.
Также, лучше отказаться от статических методов в Router. Не вижу от них выгоды, а с точки зрения ООП тут нужен обычный метод.
Ну и кстати роутер в студентах вообще не обязательно делать - можно просто для разных страниц сделать отдельные входные скрипты. Но можно и сделать, я не против.
Также, если твой роутер будет создавать и вызывать контроллер, а не просто анализировать URL то фактически это паттерн FrontController.
Также, в https://github.com/fxsloker/Student/blob/master/app/bootstrap.php надо убрать вызов фронт контроллера. Ведь bootstrap должен только инициализировать приложение, но не запускать обработку запроса.
use должен идти выше require если мне не изменяет память.
Алсо есть урок по композеру и автозагрузке https://github.com/codedokode/pasta/blob/master/php/autoload.md
> ini_set('display_errors', 1);
Вот такие вещи лучше бы задавать в php.ini или в конфиге виртуал хоста Апача. Или хотя бы в конфиге приложения сделать поле debug = true. А то ты или кто-то выгрузит этот код на боевой сервер.
По автозагрузчику, можно разбить имя класса по символу \ и сравнивать первый элемент с твоим неймспейсом.
Так, в общем у тебя код выглядт верно.
Если что, в стандарте PSR-4 есть образец автозагрузчика для изучения: http://www.php-fig.org/psr/psr-4/ru/examples/
https://github.com/fxsloker/Student/blob/master/app/config.php#L9
> 'prefix' => 'st_'
Советую не использовать префиксы. Они замусоривают код и их делали раньше для нищехостингов где не давали создать большо одной базы данных. Я думаю, не стоит ради такой сомнительной цели ухудшать код. Исходи из того что для твоего приложения нужна отдельная база данных.
https://github.com/fxsloker/Student/blob/master/app/Core/Route.php
Класс назван неудачно: должно быть Router, а Route это один маршрут.
Также, лучше отказаться от статических методов в Router. Не вижу от них выгоды, а с точки зрения ООП тут нужен обычный метод.
Ну и кстати роутер в студентах вообще не обязательно делать - можно просто для разных страниц сделать отдельные входные скрипты. Но можно и сделать, я не против.
Также, если твой роутер будет создавать и вызывать контроллер, а не просто анализировать URL то фактически это паттерн FrontController.
Также, в https://github.com/fxsloker/Student/blob/master/app/bootstrap.php надо убрать вызов фронт контроллера. Ведь bootstrap должен только инициализировать приложение, но не запускать обработку запроса.
use должен идти выше require если мне не изменяет память.
Алсо есть урок по композеру и автозагрузке https://github.com/codedokode/pasta/blob/master/php/autoload.md
Советую хотя бы пару дней из праздников посвятить изучению того, что тебе дали или например по симфони почитать что-нибудь.
>>617040
Учи ООП, фреймфорки, джумла это бесперспективно.
>>617181
>>617237
Можно получить список всех ключей в массиве с помощью array_keys.
>>617269
foreach не годится?
>>617252
Лучше array_keys наверно.
>>617463
>>617479
foreach почему не исплоьзуешь? По поводу массива регулярок, надо его обходить через foreach, будет в одной переменной регулярка, а в другой пояснение.
>>617528
Смотря на какую.
>>617529
Ну не может быть такое. Наверно ты либо по уровню не подходишь либо твой код им не нравится. Тебя на собеседования зовут, тестовые дают?
>>617622
ОП тоже хочет иногда отдохнуть.
>>617669
Если это какая-то моя задача на гитхабе и ты хочешь добавить туда советы или замечания - можешь отправить пулл-реквест с комментариями (залогиниваешься на гитхаб, открываешь задачу, жмешь иконку редактирования). Если это гист - можешь мне на почту (codedokode @ gmail.com) или в новый тред скинуть текст, я добавлю.
Советую хотя бы пару дней из праздников посвятить изучению того, что тебе дали или например по симфони почитать что-нибудь.
>>617040
Учи ООП, фреймфорки, джумла это бесперспективно.
>>617181
>>617237
Можно получить список всех ключей в массиве с помощью array_keys.
>>617269
foreach не годится?
>>617252
Лучше array_keys наверно.
>>617463
>>617479
foreach почему не исплоьзуешь? По поводу массива регулярок, надо его обходить через foreach, будет в одной переменной регулярка, а в другой пояснение.
>>617528
Смотря на какую.
>>617529
Ну не может быть такое. Наверно ты либо по уровню не подходишь либо твой код им не нравится. Тебя на собеседования зовут, тестовые дают?
>>617622
ОП тоже хочет иногда отдохнуть.
>>617669
Если это какая-то моя задача на гитхабе и ты хочешь добавить туда советы или замечания - можешь отправить пулл-реквест с комментариями (залогиниваешься на гитхаб, открываешь задачу, жмешь иконку редактирования). Если это гист - можешь мне на почту (codedokode @ gmail.com) или в новый тред скинуть текст, я добавлю.
https://github.com/MindiMakridi/filehosting/blob/master/public/index.php#L13
> "rootdirectory"
Надо бы слова разделять кемелкейсом или подчеркиванием.
https://github.com/MindiMakridi/filehosting/blob/master/public/index.php#L20
Длинные строки надо переносить. Ограничение 70-80 символов в строке. В данном случае можно аргументы конструктора PDO записать вертикально, PSR-1 или 2 это повзоляет, как именно, погугли.
> https://github.com/MindiMakridi/filehosting/blob/master/public/index.php#L60
> "token" => $app->getCookie('token')
Раз ты токен определяешь выше в файле, можно сохранить его в переменную и внедрить через use. А то если ты только выставил куку, может быть она не прочтется.
https://github.com/MindiMakridi/filehosting/blob/master/public/index.php#L66
> $path = $app->config("filesdirectory") . $id . $filename;
Получение пути к файлу должно быть в методе какого-нибудь хелпера а не размазано по коду. Это же касается генерации всяких URL и путей.
При генерации URL помни про неоьходимость кодировать спецсимволы в именах файлов процентным кодированием. Hello World -> .../Hello%20World/..
Урок https://github.com/codedokode/pasta/blob/master/network/urls.md
https://github.com/MindiMakridi/filehosting/blob/master/public/index.php#L70
> filename=" . $filename);
Нельзя в заголовках исплоьзовать что-то кроме ASCII (то есть латинницы). Убери это поле.
Есть новый стандарт (не поддерживаемый старыми браузерами) для кодирования любых символов в заголовках (англ): https://tools.ietf.org/html/rfc5987#section-3.2.2
Не знаю, на сколько он поддерживается. надо тестировать.
Вот ответ по теме на англ.: http://stackoverflow.com/questions/4400678/http-header-should-use-what-character-encoding/4410331#4410331
Тебе это не нужно так как у тебя имя файла содержится в URL.
https://github.com/MindiMakridi/filehosting/blob/master/public/index.php#L93
Загрузку файла наверно надо вынести в отдельные методы. Мне кажется, логично сделать 2 метода: валидация пришедших данных и сохранение.
Добавление комментария надо вынести на отдельный URL, сейчас у тебя POST / отвечает за 2 разных действия и это плохо. Также я не вижу валидации при добавлении комментария к файлу. Читал урок про работу с формами? Почему не по стандартному алгоритму делаешь?
Также, ты сначала вставляешь запись в БД, а потом сохраняешь файл. Значит, есть шанс что запись вставится, а файла не будет. Это непраивльно. Надо завернуть все это в транзакцию и коммитить транзакцию только при успешном перемещении файла.
https://github.com/MindiMakridi/filehosting/blob/master/models/File.php#L33
Интересные у тебя геттеры. Зачем это ты исключение выбрасываешь? Я не против, просто хочу понять заечм.
https://github.com/MindiMakridi/filehosting/blob/master/models/File.php#L38
> $name = preg_replace("/\.php|\.html|\.htaccess/", ".txt", $name);
А файл будет отдаваться с оригинальным именем при скачивании?
https://github.com/MindiMakridi/filehosting/blob/master/models/File.php#L60
> public function getFormattedSize()
Вот это можно бы вынести из файла. Ведь эта функция может тебе понадобиться например когда ты захочешь вывести максимальный допустимый размер.
Также, килобайт это 1024 а не 1000 байт.
https://github.com/MindiMakridi/filehosting/blob/master/models/File.php#L60
> public function isImage($path)
Эта функция не использует поля объекта, может она вообще должна быть в другом классе?
https://github.com/MindiMakridi/filehosting/blob/master/models/File.php#L127
> static function generateToken()
Это должно быть в другом классе.
https://github.com/MindiMakridi/filehosting/blob/master/models/FilesMapper.php#L50
> public function editFile($file)
Я думаю лучше передавать аргументами id и comment отдельно, нам ведь кроме них ничего не нужно.
https://github.com/MindiMakridi/filehosting/tree/master/models - мне кажется тут лучше сделать отдельные папки, отдельно для генератора превьюшек, это явно не модель, отдельно для хелперов.
https://github.com/MindiMakridi/filehosting/blob/master/templates/filePage.html#L10
> e("files/#{file.getId()}#{file.getfileName()}")
> <a href="/download/{{file.getId()}}/{{file.getfileName()}}"
генерация путей должна быть в методах, а не размазана по коду. Имя файла в ссылке не экранировано как требуется.
https://github.com/MindiMakridi/filehosting/blob/master/templates/filePage.html#L16
> <p>{{file.getComment()}}</p>
Переводы строк теряются (или ты это через CSS поправишь?).
> https://github.com/MindiMakridi/filehosting/blob/master/templates/filePage.html#L22
> {% if token==file.getToken()%}
Лучше бы {% if canEdit %} или {% if authHelper.canEditFile() %}, а то ты логику авторизации в шаблоны засовываешь.
https://github.com/MindiMakridi/filehosting/blob/master/templates/layout.html#L6
> viewport
О, ты решил адаптивную верстку сделать? Не забудь тогда проверить в режиме мобильного устройства в отладчике Хрома или на реальном устройстве, если есть.
> src="https://oss.maxcdn.com/h
Не советую подключать скрипты с внешних сайтов, это снижает надежность и отдает данные о пользователях. Лучше добавить эти скрипты в свой проект.
https://github.com/MindiMakridi/filehosting/blob/master/public/index.php#L13
> "rootdirectory"
Надо бы слова разделять кемелкейсом или подчеркиванием.
https://github.com/MindiMakridi/filehosting/blob/master/public/index.php#L20
Длинные строки надо переносить. Ограничение 70-80 символов в строке. В данном случае можно аргументы конструктора PDO записать вертикально, PSR-1 или 2 это повзоляет, как именно, погугли.
> https://github.com/MindiMakridi/filehosting/blob/master/public/index.php#L60
> "token" => $app->getCookie('token')
Раз ты токен определяешь выше в файле, можно сохранить его в переменную и внедрить через use. А то если ты только выставил куку, может быть она не прочтется.
https://github.com/MindiMakridi/filehosting/blob/master/public/index.php#L66
> $path = $app->config("filesdirectory") . $id . $filename;
Получение пути к файлу должно быть в методе какого-нибудь хелпера а не размазано по коду. Это же касается генерации всяких URL и путей.
При генерации URL помни про неоьходимость кодировать спецсимволы в именах файлов процентным кодированием. Hello World -> .../Hello%20World/..
Урок https://github.com/codedokode/pasta/blob/master/network/urls.md
https://github.com/MindiMakridi/filehosting/blob/master/public/index.php#L70
> filename=" . $filename);
Нельзя в заголовках исплоьзовать что-то кроме ASCII (то есть латинницы). Убери это поле.
Есть новый стандарт (не поддерживаемый старыми браузерами) для кодирования любых символов в заголовках (англ): https://tools.ietf.org/html/rfc5987#section-3.2.2
Не знаю, на сколько он поддерживается. надо тестировать.
Вот ответ по теме на англ.: http://stackoverflow.com/questions/4400678/http-header-should-use-what-character-encoding/4410331#4410331
Тебе это не нужно так как у тебя имя файла содержится в URL.
https://github.com/MindiMakridi/filehosting/blob/master/public/index.php#L93
Загрузку файла наверно надо вынести в отдельные методы. Мне кажется, логично сделать 2 метода: валидация пришедших данных и сохранение.
Добавление комментария надо вынести на отдельный URL, сейчас у тебя POST / отвечает за 2 разных действия и это плохо. Также я не вижу валидации при добавлении комментария к файлу. Читал урок про работу с формами? Почему не по стандартному алгоритму делаешь?
Также, ты сначала вставляешь запись в БД, а потом сохраняешь файл. Значит, есть шанс что запись вставится, а файла не будет. Это непраивльно. Надо завернуть все это в транзакцию и коммитить транзакцию только при успешном перемещении файла.
https://github.com/MindiMakridi/filehosting/blob/master/models/File.php#L33
Интересные у тебя геттеры. Зачем это ты исключение выбрасываешь? Я не против, просто хочу понять заечм.
https://github.com/MindiMakridi/filehosting/blob/master/models/File.php#L38
> $name = preg_replace("/\.php|\.html|\.htaccess/", ".txt", $name);
А файл будет отдаваться с оригинальным именем при скачивании?
https://github.com/MindiMakridi/filehosting/blob/master/models/File.php#L60
> public function getFormattedSize()
Вот это можно бы вынести из файла. Ведь эта функция может тебе понадобиться например когда ты захочешь вывести максимальный допустимый размер.
Также, килобайт это 1024 а не 1000 байт.
https://github.com/MindiMakridi/filehosting/blob/master/models/File.php#L60
> public function isImage($path)
Эта функция не использует поля объекта, может она вообще должна быть в другом классе?
https://github.com/MindiMakridi/filehosting/blob/master/models/File.php#L127
> static function generateToken()
Это должно быть в другом классе.
https://github.com/MindiMakridi/filehosting/blob/master/models/FilesMapper.php#L50
> public function editFile($file)
Я думаю лучше передавать аргументами id и comment отдельно, нам ведь кроме них ничего не нужно.
https://github.com/MindiMakridi/filehosting/tree/master/models - мне кажется тут лучше сделать отдельные папки, отдельно для генератора превьюшек, это явно не модель, отдельно для хелперов.
https://github.com/MindiMakridi/filehosting/blob/master/templates/filePage.html#L10
> e("files/#{file.getId()}#{file.getfileName()}")
> <a href="/download/{{file.getId()}}/{{file.getfileName()}}"
генерация путей должна быть в методах, а не размазана по коду. Имя файла в ссылке не экранировано как требуется.
https://github.com/MindiMakridi/filehosting/blob/master/templates/filePage.html#L16
> <p>{{file.getComment()}}</p>
Переводы строк теряются (или ты это через CSS поправишь?).
> https://github.com/MindiMakridi/filehosting/blob/master/templates/filePage.html#L22
> {% if token==file.getToken()%}
Лучше бы {% if canEdit %} или {% if authHelper.canEditFile() %}, а то ты логику авторизации в шаблоны засовываешь.
https://github.com/MindiMakridi/filehosting/blob/master/templates/layout.html#L6
> viewport
О, ты решил адаптивную верстку сделать? Не забудь тогда проверить в режиме мобильного устройства в отладчике Хрома или на реальном устройстве, если есть.
> src="https://oss.maxcdn.com/h
Не советую подключать скрипты с внешних сайтов, это снижает надежность и отдает данные о пользователях. Лучше добавить эти скрипты в свой проект.
начни с урока https://github.com/codedokode/pasta/blob/master/php/autoload.md
>>617907
Переменные только лучше переименовать:
foreach ($possibleErrors as $error) {
...
}
>>617946
Задача на тесты: https://gist.github.com/codedokode/8733007 - как тебе?
Если хочешь что-то попроще - сделай клон ютуба. видео надо будет перекодировать с помощью очереди задач, сделать регистрацию, загрузку, просмотр, лайканье, дислайканье и комментирование видео.
>>617950
Норм, для начала пойдет.
>>618030
Ответил тут >>621438
>>618198
Анализируй заголовки и ответ сервера. Можешь использовать другой HTTP клиент вроде guzzle или использовать Wireshark для анализа трафика. Скорее всего там защита от ботов.
>>618205
Если твоя программа чисто текстовая то PHP Cli, если это веб страница то PHP Web. А настройках наверно придется задать путь к PHP и папке Апача.
>>618360
> У меня же в этом варианте 7777 прибавляется к сумме долга, а потом проценты от 47777 тысяч уже отсчитываются, разве это правильно?
Так и надо.
> Вот мой другой вариант, который, по идее, более верный: http://ideone.com/DK8ez3
Нет, это как раз неверный.
> Также вот сокращённый уже просто до минимума калькулятор кредита Айфона: http://ideone.com/7FJfGm
Совет: длинные комментарии лучше писать над строкой, а не справа.
Ну ок, меня устраивает, а вот как можно было сделать еще короче:
- прибавляем проценты и комиссию к остатку долга (!не вычитаем ничего пока!)
- если остаток маленький, выплачиваем сколько осталось и уходим
- иначе платим 5000
>>скрипт проверки телефона
> Да, вроде бы упростил вот тут: http://ideone.com/wzPQ7W
Не, это недостаточно просто. Вот твою сложную последовательность символов можно заменить на:
любое число скобок, минусов, пробелов в любом порядке.
Подумай как такое написать.
Также, а ты проверял свою программу на большом списке телефонов?
начни с урока https://github.com/codedokode/pasta/blob/master/php/autoload.md
>>617907
Переменные только лучше переименовать:
foreach ($possibleErrors as $error) {
...
}
>>617946
Задача на тесты: https://gist.github.com/codedokode/8733007 - как тебе?
Если хочешь что-то попроще - сделай клон ютуба. видео надо будет перекодировать с помощью очереди задач, сделать регистрацию, загрузку, просмотр, лайканье, дислайканье и комментирование видео.
>>617950
Норм, для начала пойдет.
>>618030
Ответил тут >>621438
>>618198
Анализируй заголовки и ответ сервера. Можешь использовать другой HTTP клиент вроде guzzle или использовать Wireshark для анализа трафика. Скорее всего там защита от ботов.
>>618205
Если твоя программа чисто текстовая то PHP Cli, если это веб страница то PHP Web. А настройках наверно придется задать путь к PHP и папке Апача.
>>618360
> У меня же в этом варианте 7777 прибавляется к сумме долга, а потом проценты от 47777 тысяч уже отсчитываются, разве это правильно?
Так и надо.
> Вот мой другой вариант, который, по идее, более верный: http://ideone.com/DK8ez3
Нет, это как раз неверный.
> Также вот сокращённый уже просто до минимума калькулятор кредита Айфона: http://ideone.com/7FJfGm
Совет: длинные комментарии лучше писать над строкой, а не справа.
Ну ок, меня устраивает, а вот как можно было сделать еще короче:
- прибавляем проценты и комиссию к остатку долга (!не вычитаем ничего пока!)
- если остаток маленький, выплачиваем сколько осталось и уходим
- иначе платим 5000
>>скрипт проверки телефона
> Да, вроде бы упростил вот тут: http://ideone.com/wzPQ7W
Не, это недостаточно просто. Вот твою сложную последовательность символов можно заменить на:
любое число скобок, минусов, пробелов в любом порядке.
Подумай как такое написать.
Также, а ты проверял свою программу на большом списке телефонов?
>>Непонятно почему SolarPanel наследуется от PowerStation. Солнечная панель это улучшенная версия электростанции? А почему не наоборот?
> Мне казалось это более логичным.
Мне это не кажется логичным. Солнечная панель и электростанция не являются потомками друг друга. Я бы сделал так: сделал базовый класс ЭлементЭлектросети и наследовался всеми от него.
>> if(typeof obj[key] == "object"){
>> copy[key] = deepCopy(obj[key]);
>> }
>> else{
>> copy[key] = obj[key];
> Догадаешься где тут ошибка?
Ошибка в том что для объекта ты делаешь глубокое копирования элемента. Для массива ты не делаешь глубокого копирования, а копируешь ссылку. Если в массиве лежит объект, он не клонируется а просто копируется ссылка.
>>618562
Ответил тут >>>>621472 и в почте
>>618660
Хорошая задача.
>>618664
Дает. Но для этого надо очень хорошо знать Си.
>>618776
Можно сделать так:
1) использовать для каждого вида ошибок свою регулярку чтобы они не мешали друг другу
2) не захватыать сосединие с ошибкой символы регуляркой, а искать позицию ошибки в строке через mb_strpos и зная позицию, брать кусок строки вокруг ошибки.
>>618805
Ставится через какую-то систему пакетов, то ли homebrew то ли еще что-то. Также, в макбуке уже встроены и Апач, и PHP, правда старенькие и плохо годятся для обучения.
>>Непонятно почему SolarPanel наследуется от PowerStation. Солнечная панель это улучшенная версия электростанции? А почему не наоборот?
> Мне казалось это более логичным.
Мне это не кажется логичным. Солнечная панель и электростанция не являются потомками друг друга. Я бы сделал так: сделал базовый класс ЭлементЭлектросети и наследовался всеми от него.
>> if(typeof obj[key] == "object"){
>> copy[key] = deepCopy(obj[key]);
>> }
>> else{
>> copy[key] = obj[key];
> Догадаешься где тут ошибка?
Ошибка в том что для объекта ты делаешь глубокое копирования элемента. Для массива ты не делаешь глубокого копирования, а копируешь ссылку. Если в массиве лежит объект, он не клонируется а просто копируется ссылка.
>>618562
Ответил тут >>>>621472 и в почте
>>618660
Хорошая задача.
>>618664
Дает. Но для этого надо очень хорошо знать Си.
>>618776
Можно сделать так:
1) использовать для каждого вида ошибок свою регулярку чтобы они не мешали друг другу
2) не захватыать сосединие с ошибкой символы регуляркой, а искать позицию ошибки в строке через mb_strpos и зная позицию, брать кусок строки вокруг ошибки.
>>618805
Ставится через какую-то систему пакетов, то ли homebrew то ли еще что-то. Также, в макбуке уже встроены и Апач, и PHP, правда старенькие и плохо годятся для обучения.
Ты про XSS? Да, он.
>>618996
1) некогда, пишите в треде
2) деанон
>>619029
> Не совсем понятно нужно ли прекращать игру когда выпал абл
Нужно прекращать игру если и у человека и у робота выпали даблы, то есть 2 кубика с одинаковым числом. Если только у одного дабл то это не считается.
Ошибка:
> elseif ($manResult=$aIResult) {
Ты перепутал = и ==. = не проверяет на равенство, а присваивает переменной какое-то значение. Перечитай урок.
>>Подумай как избавиться от повтора.
> Эм, они не повторяются, это разные строки с разными формулами.
Они подозрительно похожи. Подумай как сделать, чтобы добавление процента и комиссии делалось только 1 раз.
>>А если ровно миллион то не годится? По моему тут знак не совсем тот.
> А что ели >=
Тогда правильно.
> Внедрил в код, можешь не смотреть, 1 строку всего поправил.
Теперь правильно. Но лучше привыкай к тому что массивы по умолчанию нумеруются с 0, а последний индекс равен count() - 1.
>>не пиши номера цифрами, то есть лучше назвать переменные $randomWord1, $randomWord2
> Так писать или не писать? Что-то не понял.
Не пиши $randomTwo, пиши $random2 или $random[2].
>>после первого несовпадения можно выходить из цикла
> Непонятно тут. А я разьве не так сделал? или break не прерывает цикл?
Если break есть то ок, я мог ошибиться
>>619032
Сумму долга (39999) и макс. платеж (5000) надо вынести в переменные чтобы легко было поменять их и посмотреь что получится. То, что разное у каждого банка - можно писать числами. Идея в том что одно число не должно быть скопипастено несколько раз.
>>619101
>>619191
5000 и 39999 надо сделать переменными чтобы было проще их поменять.
>>619172
Классы либо data-атрибуты.
>>619184
Пока не требуется.
>>619216
>>А если сделать вот так (?<=(,жы))(?<=(жы))
> Не могу прочитать, что это означает? Не встречал таких регулярных выражений чего-то.
Это утверждения, они проверяют наличие символов, но не захватывают их: http://php.net/manual/ru/regexp.reference.assertions.php
> Думаю, что лучше как-нибудь циклом регулярки из массива подставлять. Чтоб одна регулярка полностью проходила по тексту, затем другая регулярка полностью проходила т.д
Хорошая идея.
Ты про XSS? Да, он.
>>618996
1) некогда, пишите в треде
2) деанон
>>619029
> Не совсем понятно нужно ли прекращать игру когда выпал абл
Нужно прекращать игру если и у человека и у робота выпали даблы, то есть 2 кубика с одинаковым числом. Если только у одного дабл то это не считается.
Ошибка:
> elseif ($manResult=$aIResult) {
Ты перепутал = и ==. = не проверяет на равенство, а присваивает переменной какое-то значение. Перечитай урок.
>>Подумай как избавиться от повтора.
> Эм, они не повторяются, это разные строки с разными формулами.
Они подозрительно похожи. Подумай как сделать, чтобы добавление процента и комиссии делалось только 1 раз.
>>А если ровно миллион то не годится? По моему тут знак не совсем тот.
> А что ели >=
Тогда правильно.
> Внедрил в код, можешь не смотреть, 1 строку всего поправил.
Теперь правильно. Но лучше привыкай к тому что массивы по умолчанию нумеруются с 0, а последний индекс равен count() - 1.
>>не пиши номера цифрами, то есть лучше назвать переменные $randomWord1, $randomWord2
> Так писать или не писать? Что-то не понял.
Не пиши $randomTwo, пиши $random2 или $random[2].
>>после первого несовпадения можно выходить из цикла
> Непонятно тут. А я разьве не так сделал? или break не прерывает цикл?
Если break есть то ок, я мог ошибиться
>>619032
Сумму долга (39999) и макс. платеж (5000) надо вынести в переменные чтобы легко было поменять их и посмотреь что получится. То, что разное у каждого банка - можно писать числами. Идея в том что одно число не должно быть скопипастено несколько раз.
>>619101
>>619191
5000 и 39999 надо сделать переменными чтобы было проще их поменять.
>>619172
Классы либо data-атрибуты.
>>619184
Пока не требуется.
>>619216
>>А если сделать вот так (?<=(,жы))(?<=(жы))
> Не могу прочитать, что это означает? Не встречал таких регулярных выражений чего-то.
Это утверждения, они проверяют наличие символов, но не захватывают их: http://php.net/manual/ru/regexp.reference.assertions.php
> Думаю, что лучше как-нибудь циклом регулярки из массива подставлять. Чтоб одна регулярка полностью проходила по тексту, затем другая регулярка полностью проходила т.д
Хорошая идея.
Фреймворк Юи 2 или Slim.
>>619387
Каркас приложения, то есть набор готовых классов и компонент которые годятся для любого веб-приложения, а не заточены под конкретный сайт. Посмотри нашу задачу на файлообменник в ОП посте - там используется микрофреймворк Слим.
>>619416
Покажи код. Отладчиком в браузере смотрел?
>>619448
Есть задача на SPA в ОП-посте - ее несколько месяцев решать можно.
>>619465
Я в новом треде вроде проверял это или похожий код. Надо как минимум копипасту на цикл по массиву регулярок заменить.
>>619519
У тебя в PHP не установлен или не включен в php.ini модеуль mbstring где и находится эта функция.
>>619523
Есть урок по теме https://gist.github.com/codedokode/ff99e357e9860ea169b8
Фреймворк Юи 2 или Slim.
>>619387
Каркас приложения, то есть набор готовых классов и компонент которые годятся для любого веб-приложения, а не заточены под конкретный сайт. Посмотри нашу задачу на файлообменник в ОП посте - там используется микрофреймворк Слим.
>>619416
Покажи код. Отладчиком в браузере смотрел?
>>619448
Есть задача на SPA в ОП-посте - ее несколько месяцев решать можно.
>>619465
Я в новом треде вроде проверял это или похожий код. Надо как минимум копипасту на цикл по массиву регулярок заменить.
>>619519
У тебя в PHP не установлен или не включен в php.ini модеуль mbstring где и находится эта функция.
>>619523
Есть урок по теме https://gist.github.com/codedokode/ff99e357e9860ea169b8
>>>Почему width 100%?
> Гугль дал такое решение для адаптивности картинок
Мне не нравится то что с width 100% мы в теории можем получить ситуацию когда картинка будет увеличена. Надо бы посмотреть нельзя ли заменить это на max-width: 100%;
В остальном если ты исправил предыдущие замечания, то все ок.
> Задача 11:
>>>перемещаться с клавиатуры, клавишами Tab, Shift + Tab, стрелками, пробелом.
> Реализовал, добавил для checkbox на :focus бордер тень,что бы было видно.
Это хорошо, я вижу тень на нижнем переключателе. А на верхнем - нет. Нужен скриншот/гифка?
Также, я заметил что при клике по нижнему переключателю он обводится рамкой. А вот если сделать обычные чекбоксы https://jsfiddle.net/n6f37jna/1/ - то они обводятся рамкой только при навигации с клавиатуры, при клике не обводятся. Почему так? я решил сам разобраться, сделав такой пример:
https://jsfiddle.net/n6f37jna/3/
Тут в Хроме как при клике, так и при клавиатурной навигации чекбокс становится большим (то есть получает фокус). Но только в случае клавиатурной навигации появляется синяя рамка. Видимо дело в свойстве
:focus {
outline: -webkit-focus-ring-color auto 5px;
}
Которое встроено в браузер. Видимо этот focus-ring появляется только при навигации с клавиатуры. Соответственно у меня возникла мысль: нельзя ли сделать аналогично. То есть не ставить стили на фокус, а засунуть инпут под кнопку, чтобы при навигации с клавиатуры стала видна синяя рамка. Не знаю, можно ли такое реализовать и будет ли это работать не под вебкитом. Наверно, не стоит, пусть лучше тень остается.
Так, в общем хорошо сделано, надеюсь теперь ты научился делать простые виджеты на CSS3.
Задача 12
> Переделал, совсем без id у меня не получилось, надо было как то input с label связать. Может быть есть другое решение.
Можно через классы, можно через атрибуты. Без них можно таким интересным способом: http://chikuyonok.ru/2009/04/dl-tabs/ но он не поддерживает вывод заголовков вкладок в несколько рядов.
http://integer64.github.io/site-layout/exercise/exercise12.2/index.html
Это выглядит хорошо. Только с фоном страницы косяк - если сильно уменьшить масштаб или взять большой монитор то фон плохо стыкуется. Советую заменить фоновую картинку на CSS3 градиент, а то жалко хорошую работу таким багом портить.
> data-header="Tab 1"
Лучше наверно просто data-tab="1", зачем тут слово Tab?
Ну и если делать совсем идеально, я бы еще для имен классов применил БЭМ. Ну это не обязательно, меня и в нынешнем виде устраивает, хорошее решение. Старайся и дальше при верстке продумывать такие вещи как: независимость блоков (стили не должны конфликтовать с другими блоками страницы, блоки должны иметь возможность вкладываться друг в друга), слишком длинные или слишком короткие заголвоки, отображение на маленьких экранах.
>>>Почему width 100%?
> Гугль дал такое решение для адаптивности картинок
Мне не нравится то что с width 100% мы в теории можем получить ситуацию когда картинка будет увеличена. Надо бы посмотреть нельзя ли заменить это на max-width: 100%;
В остальном если ты исправил предыдущие замечания, то все ок.
> Задача 11:
>>>перемещаться с клавиатуры, клавишами Tab, Shift + Tab, стрелками, пробелом.
> Реализовал, добавил для checkbox на :focus бордер тень,что бы было видно.
Это хорошо, я вижу тень на нижнем переключателе. А на верхнем - нет. Нужен скриншот/гифка?
Также, я заметил что при клике по нижнему переключателю он обводится рамкой. А вот если сделать обычные чекбоксы https://jsfiddle.net/n6f37jna/1/ - то они обводятся рамкой только при навигации с клавиатуры, при клике не обводятся. Почему так? я решил сам разобраться, сделав такой пример:
https://jsfiddle.net/n6f37jna/3/
Тут в Хроме как при клике, так и при клавиатурной навигации чекбокс становится большим (то есть получает фокус). Но только в случае клавиатурной навигации появляется синяя рамка. Видимо дело в свойстве
:focus {
outline: -webkit-focus-ring-color auto 5px;
}
Которое встроено в браузер. Видимо этот focus-ring появляется только при навигации с клавиатуры. Соответственно у меня возникла мысль: нельзя ли сделать аналогично. То есть не ставить стили на фокус, а засунуть инпут под кнопку, чтобы при навигации с клавиатуры стала видна синяя рамка. Не знаю, можно ли такое реализовать и будет ли это работать не под вебкитом. Наверно, не стоит, пусть лучше тень остается.
Так, в общем хорошо сделано, надеюсь теперь ты научился делать простые виджеты на CSS3.
Задача 12
> Переделал, совсем без id у меня не получилось, надо было как то input с label связать. Может быть есть другое решение.
Можно через классы, можно через атрибуты. Без них можно таким интересным способом: http://chikuyonok.ru/2009/04/dl-tabs/ но он не поддерживает вывод заголовков вкладок в несколько рядов.
http://integer64.github.io/site-layout/exercise/exercise12.2/index.html
Это выглядит хорошо. Только с фоном страницы косяк - если сильно уменьшить масштаб или взять большой монитор то фон плохо стыкуется. Советую заменить фоновую картинку на CSS3 градиент, а то жалко хорошую работу таким багом портить.
> data-header="Tab 1"
Лучше наверно просто data-tab="1", зачем тут слово Tab?
Ну и если делать совсем идеально, я бы еще для имен классов применил БЭМ. Ну это не обязательно, меня и в нынешнем виде устраивает, хорошее решение. Старайся и дальше при верстке продумывать такие вещи как: независимость блоков (стили не должны конфликтовать с другими блоками страницы, блоки должны иметь возможность вкладываться друг в друга), слишком длинные или слишком короткие заголвоки, отображение на маленьких экранах.
> Первая http://pastebin.com/Q5CLkzck
Все правильно.
> Вторая http://pastebin.com/6w0GqbW
Тоже верно.
> Третья http://pastebin.com/G4kUKzeL
> if ($anonSum > $compSum) {
> if ($anonSum < $compSum) {
> If ($anonSum == $compSum) {
Тут лучше все ифы в программе объединить в один блок if ... elseif ... elseif .. .else чтобы было видно что возможен только один из 4 вариантов. А exit убрать за ненадобностью.
> Стоило ли их вообще тут постить,
Ну видишь, совет получил полезный.
>>619650
Код бы запостил.
>>619651
Отвечал вроде в новом треде - давай конкретные примеры.
>>619742
undefined index значит что ты пытаешься получить индекс массива котрого там нет, то есть не передан id. Надо переделать, чтобы обращаться к этому индексу только если он там есть.
Насчет 502 ошибки - не знаю, это что-то другое.
>>619807
Легко. Ищи случаи когда идет запятая, за ней слово но, за ним граница слова.
[^\\s] значит «один любой символ кроме пробела». Это наверно не то что требуется.
>>619816
Вроде в новом треде прокомментировал? Если нет, запости в новый тред.
> Первая http://pastebin.com/Q5CLkzck
Все правильно.
> Вторая http://pastebin.com/6w0GqbW
Тоже верно.
> Третья http://pastebin.com/G4kUKzeL
> if ($anonSum > $compSum) {
> if ($anonSum < $compSum) {
> If ($anonSum == $compSum) {
Тут лучше все ифы в программе объединить в один блок if ... elseif ... elseif .. .else чтобы было видно что возможен только один из 4 вариантов. А exit убрать за ненадобностью.
> Стоило ли их вообще тут постить,
Ну видишь, совет получил полезный.
>>619650
Код бы запостил.
>>619651
Отвечал вроде в новом треде - давай конкретные примеры.
>>619742
undefined index значит что ты пытаешься получить индекс массива котрого там нет, то есть не передан id. Надо переделать, чтобы обращаться к этому индексу только если он там есть.
Насчет 502 ошибки - не знаю, это что-то другое.
>>619807
Легко. Ищи случаи когда идет запятая, за ней слово но, за ним граница слова.
[^\\s] значит «один любой символ кроме пробела». Это наверно не то что требуется.
>>619816
Вроде в новом треде прокомментировал? Если нет, запости в новый тред.
Open Server, Sublime Text
Привет, анонимус, будет многобукв, очень надеюсь на помощь, потому что не знаю куда мне еще обратиться!
Я буду прям и краток, не вдаваясь в детали: уже несколько лет имеется магазин розничной торговли.
ВНЕЗАПНО захотелось автоматизировать некоторые процессы, потому что заебало писать всё на листках, и вообще работать вручную, а именно:
- вести учет товара на складе (поступления, продажи)
- автоматизировать выдачу договоров купли и пары других отчетов.
Я очень долго хотел (да и щас подумываю) реализовывать это в MS Access, однако внезапно вспомнил, что у меня есть говносайтик на ололо-CMS с бесплатным шаблоном (но который очень даже неплох - делал его давно, без знаний каких то ЯП, хотя и наебался со всякими css-ами, ну не суть).
И я подумал, что было бы неплохо сделать ИНТЕРНЕТ-МАГАЗИН вместо нынешнего "сайта-визитки-каталога".
Очевидно, что я лентяй и вообще тугодум, ввиду чего яро стал гуглить какие нынче CMS актуальны, какие из них наиболее подойдут для интернет-магазина. Какой, кстати самый менее ресурсотребовательный? Ололо-дешевый-хостинг.
В общем, анонимус, я тут подумал, и в своих фантазиях набросал такую схему:
Ставлю CMS для интернет-магазина, пополняю его, тем самым у меня решается проблема складского учета товара в наличии.
А затем, при помощи PHP (который я так яро настроен изучить) - взять и к той же CMS прикрутить функционал выдачи договоров и прочих отчетов для курьера/грузчика и тд. Насколько моя идея охуительна и реально ли такое реализовать одному?
И вообще, анонимус, что ты думаешь по поводу моей уёбищной ситуации?
В идеале, конечно же - было бы неплохо изучить MYSQL, создать базу (таблички) и написать самому какую нибудь "веб-морду" по управлению этой базой: то есть реализовать учет склада, отчеты и прочие махинации.
А потом залить эту базу на хостинг и создать уже самописный сайт, который будет обрщаться к моей охуительной базе и будет брать оттуда информацию о товарах, которые есть в наличии.
Пиздец, анон, сам не понимаю, чего хочу, прошу помочь с принятием решения.
Алсо - как долго нужно учить PHP?
Привет, анонимус, будет многобукв, очень надеюсь на помощь, потому что не знаю куда мне еще обратиться!
Я буду прям и краток, не вдаваясь в детали: уже несколько лет имеется магазин розничной торговли.
ВНЕЗАПНО захотелось автоматизировать некоторые процессы, потому что заебало писать всё на листках, и вообще работать вручную, а именно:
- вести учет товара на складе (поступления, продажи)
- автоматизировать выдачу договоров купли и пары других отчетов.
Я очень долго хотел (да и щас подумываю) реализовывать это в MS Access, однако внезапно вспомнил, что у меня есть говносайтик на ололо-CMS с бесплатным шаблоном (но который очень даже неплох - делал его давно, без знаний каких то ЯП, хотя и наебался со всякими css-ами, ну не суть).
И я подумал, что было бы неплохо сделать ИНТЕРНЕТ-МАГАЗИН вместо нынешнего "сайта-визитки-каталога".
Очевидно, что я лентяй и вообще тугодум, ввиду чего яро стал гуглить какие нынче CMS актуальны, какие из них наиболее подойдут для интернет-магазина. Какой, кстати самый менее ресурсотребовательный? Ололо-дешевый-хостинг.
В общем, анонимус, я тут подумал, и в своих фантазиях набросал такую схему:
Ставлю CMS для интернет-магазина, пополняю его, тем самым у меня решается проблема складского учета товара в наличии.
А затем, при помощи PHP (который я так яро настроен изучить) - взять и к той же CMS прикрутить функционал выдачи договоров и прочих отчетов для курьера/грузчика и тд. Насколько моя идея охуительна и реально ли такое реализовать одному?
И вообще, анонимус, что ты думаешь по поводу моей уёбищной ситуации?
В идеале, конечно же - было бы неплохо изучить MYSQL, создать базу (таблички) и написать самому какую нибудь "веб-морду" по управлению этой базой: то есть реализовать учет склада, отчеты и прочие махинации.
А потом залить эту базу на хостинг и создать уже самописный сайт, который будет обрщаться к моей охуительной базе и будет брать оттуда информацию о товарах, которые есть в наличии.
Пиздец, анон, сам не понимаю, чего хочу, прошу помочь с принятием решения.
Алсо - как долго нужно учить PHP?
Я когда-то делал отдачу генерируемого xls-файла таким образом:
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename="trulala.xls"');
$objWriter->save('php://output');
Я делаю точно так же, проблема с ответом, как его обработать когда его возвращает XmlHttpRequest
[code]
var items = sqlRequest(select * from items);
var html = '';
foreach item in items {
parse(item, parsed);
html+= "<h1>" + parsed[0] + "</h1><br>"
+ "<img src=\"" + parsed[1] + "\"><br>"
+ "Цена: " + parsed[2];
}
[/code]
И вообще, подобную хуйню надо знать фронтам?
В общем, preg_replace при попытке заменить одинарные или двойные кавычки (возможно, и некоторые другие символы), добавляет к изменённой подстроке один или обратных слеша \ соответственно.
Такое происходит даже если я пытаюсь заменить кавычки на пустую строку - вместо них просто появляются слеши.
Например:
>echo preg_replace('/"/', '', 'Станция "Петровско-Разумовская"')
выводит:
>Cтанция \\Петровско-Разумовская\\
Так вот, с какого хуя это происходит? Зачем и почему он это делает? И как это дерьмо исправить? Я уже заебался мозги ломать, уже бешусь от бессилия просто.
Я не особо опытен в таких вещах, но, как мне кажется, вытаскиванием инфы из SQL занимается как раз-таки бекенд. Фронтенд обычно хуярит AJAX-запросы к серверным приложениям, но не напрямую к БД.
Забей, в общем. Такие задачи будут ставить только в край неадекватные заказчики.
Покопайся в js страницы. Вероятно ты задаёшь адрес не самой страницы, а какой-нибудь заглушки, которая по тайм-ауту подгружает нужную страницу или редиректит на неё.
По крайней мере я бы копал именно в этом направлении.
А, всё, разобрался. На самом деле проблема была только в моём пиздоглазии, из-за которого в функцию передавалась строка уже со слешами.
<?php
error_reporting(-1);
$word1 = array('Чудесных', 'Суровых', 'Занятных', 'Внезапных');
$word2 = array('слов', 'зим', 'глаз', 'дней', 'лет', 'мир', 'взор');
$word3 = array('прикосновений', 'поползновений', 'судьбы явлений',
'сухие листья', 'морщины смерти', 'долины края', 'замены нету',
'сухая юность', 'навек исчезнув');
$word4 = array('обретаю', 'понимаю', 'начертаю', 'закрываю', 'оставляю',
'вынимаю', 'умираю', 'замерзаю', 'выделяю');
$word5 = array('очертания', 'безысходность', 'начертанья', 'смысл жизни',
'вирус смерти', 'радость мира');
echo "{$word1[mt_rand(1,4)]} {$word2[mt_rand(1,7)]} {$word3[mt_rand(1,9)]}\n
{$word1[mt_rand(1,4)]} {$word2[mt_rand(1,7)]} {$word3[mt_rand(1,9)]}\n
Я {$word4[mt_rand(1,9)]} {$word5[mt_rand(1,6)]} ";
?>
Уже не надо, разобрался, использовал "array_rand"
http://ideone.com/2CZC21
2) Генератор стихов:
http://ideone.com/Wqtqet
Иногда пропадают некоторые слова, как это пофиксить?
(Про array_rand из предыдущего поста не особо понял)
3) Про палиндром
http://ideone.com/myrecent
<?php
error_reporting(-1);
$anonDice1 = mt_rand(1,6);
$anonDice2 = mt_rand(1,6);
$compDice1 = mt_rand(1,6);
$compDice2 = mt_rand(1,6);
/
echo "($anonDice1) и ($anonDice2) \n ($compDice1) и ($compDice2) \n"
$lastDigit = $number % 10
$anonSum = ($anonDice1 + anonDice2);
$compSum = ($compDice1 + compDice2);
if (($anonDice1 == $anonDice2) && ($compDice1 == $compDice2)) {
echo
exit();
}
/?????????/
\t$headCount = 0;
\t$flipCount = 0;
\twhile ($headCount < 3) {
\t\t$flip = rand(0,1);
\t\t$flipCount ++;
\t\tif ($flip){
\t\t\t$headCount ++;
На пикрелейтед код и его результат.
У меня вопросы:
1) Почему количество коинов каждый раз меняется - то 3, то 27, то ...;
2) Почему $headCount и $flipCount имеют 0?
3) Что делает $flip = rand(0,1) и $flipCount ++?
1)Создать страницу, на которой есть возможность просмотра видео.
2)На этой странице есть возможность залить видео. После заливки видео обрабатывается(обрезается на половину(тут по подробней распишите, пожалуйста, если можете)). Не знаю куда заливать, посоветовали бесплатное амазноновское хранилище. После заливки идет запись в БД о том, куда залито обработанное видео и есть возможность на странице воспроизвести это видео. Добра вам сразу!
пока монет меньше 3 делать (
флип = рандомом 1 или 0
флипкаунт + 1
Если флип =\= 0 тогда (
монет + 1
)
)
1) их будет сколько угодно от 3 и далее из-за алгоритма
2) начальные условия, 0 решек, 0 сбросов
3) $flip = rand(1,0) присваивает $flip 0 или 1 рандомно. $flipcount++ делает inc($flipcount) или $flipcount = $flipcount + 1
В целях обучения, делаю галлерею в сайт. Хочу чтобы фотографии в ней доставались из базы данных.
Я сделал локальный сервер на Денвере, табличку для галлереи создалю И тут возникли вопросы:
1 Как лучше сохранять картинки в этой базе данных?
2 Как их лучше вызывать? Чтобы они отображались хорошо
3 Нормально ли я придумал таким образом делать галлерею? или можно как-то лучше?
Тащемта секретов тут нет, просто берешь и пишешь код.
я в базе хранил названия пикч с серва и тянул где надо в духе
<img src="/img/<?= $name ?>.png" >
<?php
error_reporting(-1);
$randomMan1 = mt_rand(1, 6);
$randomMan2 = mt_rand(1, 6);
$randomRobot1 = mt_rand(1, 6);
$randomRobot2 = mt_rand(1, 6);
$randomManSum = ($randomMan1 + $randomMan2);
$randomRobotSum = ($randomRobot1 + $randomRobot2);
echo "БРОСАЕМ..! Получили: {$randomMan1} и {$randomMan2}, итого {$randomManSum}!";
echo "\n";
echo "БРОСАЕТ РОБОТ..! Получили: {$randomRobot1} и {$randomRobot2}, итого {$randomRobotSum}!";
if ($randomManSum > $randomRobotSum) {
echo "Ура! Ты победил!";
} elseif ($randomManSum == $randomRobotSum) {
echo "Победила дружба!;"
} else {
echo "Победил робот!";
}
?>
Код парсера:
<?php
//error_reporting();
@ini_set('max_execution_time', 0);
echo "<title>Парсер YouTube V2.1 (с) by Gogres</title>";
echo "<form method = \"POST\" >";
echo "Кейворды (по одному на строку):
медвед
креветка
<br><br>";
echo "<textarea name=\"keys\" cols=\"70\" rows=\"10\"></textarea><br>";
echo "<input name=\"page\" size=5 type=\"text\" value=\"1\"> :Количество страниц<br>";
echo "<input type=\"submit\" value=\"Click & Parse\">";
echo "</form>";
$data=fopen('data.txt','a');
if ($_POST['page']) $pages=$_POST['page']; else $pages=1;
if ($_POST['keys']){
$filename=$_POST['filename'];
$papkaname=$_POST['papkaname'];
$keys=split("\n", $_POST['keys']);
foreach ($keys as $k=>$key){
$key=trim($key);
$reskey=$key;
$key=urlencode($key);
$key=str_replace("%20", "+", $key);
for($i=0; $i<$pages; $i++)
{
$pageparse=file_get_contents("http://www.youtube.com/results?search_type=videos&search_query=".$key."&page=".$page);
if(strpos($pageparse, "/watch?v=")!=false)
{
$matches=array();
$pattern = "/href=\"\/watch\?v=([^\"]*)\"/sU";
preg_match_all($pattern, $pageparse, $matches);
$resultmovies=implode(" ", $matches[1]);
$resultmovies=str_replace("&hd=1", "", $resultmovies);
$resultmovies=str_replace("&feature=browch", "", $resultmovies);
$resultmovies=explode(" ", $resultmovies);
$resultmovies=array_unique($resultmovies);
$moviescount=count($resultmovies);
//$query="http://www.youtube.com/watch?v=".$resultmovies;
foreach($resultmovies as $movielink)
{
$link = trim($movielink);
if ($link!="EMPTY")
{
\t$text='<object width="425" height="350">';
\t$text.='<param name="movie" value="http://www.youtube.com/v/'.$link.'"></param>';
\t$text.='<param name="wmode" value="transparent"></param>';
\t$text.='<embed src="http://www.youtube.com/v/'.$link.'"';
\t$text.='type="application/x-shockwave-flash" wmode="transparent"';
\t$text.='width="425" height="350"></embed></object>';
fwrite($data, $text."\n");
\t}
}
sleep(1);
}
} }
}
fclose($data);
?>
Код парсера:
<?php
//error_reporting();
@ini_set('max_execution_time', 0);
echo "<title>Парсер YouTube V2.1 (с) by Gogres</title>";
echo "<form method = \"POST\" >";
echo "Кейворды (по одному на строку):
медвед
креветка
<br><br>";
echo "<textarea name=\"keys\" cols=\"70\" rows=\"10\"></textarea><br>";
echo "<input name=\"page\" size=5 type=\"text\" value=\"1\"> :Количество страниц<br>";
echo "<input type=\"submit\" value=\"Click & Parse\">";
echo "</form>";
$data=fopen('data.txt','a');
if ($_POST['page']) $pages=$_POST['page']; else $pages=1;
if ($_POST['keys']){
$filename=$_POST['filename'];
$papkaname=$_POST['papkaname'];
$keys=split("\n", $_POST['keys']);
foreach ($keys as $k=>$key){
$key=trim($key);
$reskey=$key;
$key=urlencode($key);
$key=str_replace("%20", "+", $key);
for($i=0; $i<$pages; $i++)
{
$pageparse=file_get_contents("http://www.youtube.com/results?search_type=videos&search_query=".$key."&page=".$page);
if(strpos($pageparse, "/watch?v=")!=false)
{
$matches=array();
$pattern = "/href=\"\/watch\?v=([^\"]*)\"/sU";
preg_match_all($pattern, $pageparse, $matches);
$resultmovies=implode(" ", $matches[1]);
$resultmovies=str_replace("&hd=1", "", $resultmovies);
$resultmovies=str_replace("&feature=browch", "", $resultmovies);
$resultmovies=explode(" ", $resultmovies);
$resultmovies=array_unique($resultmovies);
$moviescount=count($resultmovies);
//$query="http://www.youtube.com/watch?v=".$resultmovies;
foreach($resultmovies as $movielink)
{
$link = trim($movielink);
if ($link!="EMPTY")
{
\t$text='<object width="425" height="350">';
\t$text.='<param name="movie" value="http://www.youtube.com/v/'.$link.'"></param>';
\t$text.='<param name="wmode" value="transparent"></param>';
\t$text.='<embed src="http://www.youtube.com/v/'.$link.'"';
\t$text.='type="application/x-shockwave-flash" wmode="transparent"';
\t$text.='width="425" height="350"></embed></object>';
fwrite($data, $text."\n");
\t}
}
sleep(1);
}
} }
}
fclose($data);
?>
>>627770
>>627804
>>627952
>>628218
>>628256
>>628298
>>629026
Анончики, это старый тред, созданный еще в 2015. Мы с 8 января сидим в новом (и кстати он тоже уже переполнен и завтра мы перекатимся из него в еще более новый, но еще дня 3 будем поддерживать старый): >>619873 (OP)
Ссылка в ньюфаг-треде как всегда устарела.
Двачую, практически везде после авторизации страница перезагружается
Вы видите копию треда, сохраненную 25 января 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.