Сохранен F 527
https://2ch.hk/pr/res/309587.html
Был обновлён парсер тредов Двача, просим анонов обращать внимание и сообщать об аномалиях с содержанием сохраняемых тредов.
!xnn2uE3AU. Срд 14 Авг 2013 12:19:22  #1 №309587 
1376468362825.png

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

Для удобства читателей архивы уроков по PHP выложены по адресу http://archive-ipq-co.narod.ru

Требуемые знания: умение включить компьютер и пользоваться браузером. Если вы читаете этот текст, они у вас, скорее всего, уже есть. Устанавливать и скачивать пока что ничего не требуется, разве что редактор кода вроде Notepad++ или Sublime (необязательно).

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

Предыдущий тред: >>304582

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

Оформляй код правильно!!! например пропусти через phpformatter.com

Сайт опять упал!!!!! Не паникуй, а открой http://rghost.net/45000175

Где архивы предыдущих тредов? Известно, где, на mediafire: http://www.mediafire.com/?vz0z5134irhn2zl (треды 1-10, 160 Мб) http://www.mediafire.com/?3zxb19z9j2q5gf2 (11-19, 74 Мб) и на дропбоксе: https://www.dropbox.com/sh/4sb69jrx9qwrpcw/-nY5ia__VC (ок, он иногда не работает)

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

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

Куда постить код Удобнее всего на ideone. Пости ссылку на ideone, код копипастить не надо. Еще, говорят, модно постить на instacode. HTML, CSS и JS постят на jsbin.com

Как привести код в аккуратный вид? Закачай его на phpformatter.com, робот его выровняет как надо.

Решил задачу, но ничего не понял? Попроси еще пару для закрепления знаний.

В общем, хватит разговоров, давайте начинать уже!

Loading...
Клуб любителей PHP и HTML #9 !xnn2uE3AU. Срд 14 Авг 2013 12:21:03  #2 №309589 
1376468463296.png

У нас есть задачки не только на PHP, но и на знание и изучение HTML, CSS, JS. Самые простые задачи — на картинке, более сложные — по запросу (я их пока не нарисовал, но уже есть задачка из яндексовского задания и есть задачка на кнопки-переключатели на CSS3).

Для тех, кому нужны теория и мануалы, ссылки:

HTML/CSS
htmlbook.ru/samhtml
htmlbook.ru/samcss
softwaremaniacs.org/blog/category/primer/
pepelsbey.net/
clubs.ya.ru/ui/

JS
learn.javascript.ru

SQL
Для любителей изучать MySQL есть http://mysqlru.com/ (ок, там так себе описано), есть учебник по SQL http://www.opennet.ru/docs/RUS/rusql/ Тренироваться можно на кошках и на специальном сайте http://sqlfiddle.com/ слева вводишь команды CREATE TABLE, создаешь базу, справа пишешь запросы like a boss.

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

Клуб любителей PHP и HTML #9 !xnn2uE3AU. Срд 14 Авг 2013 12:21:47  #3 №309591 
1376468507031.png

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

Если тебе лень выравнивать код руками, закачай его на http://beta.phpformatter.com/ и нажми «format». Робот исправит выравнивание и отступы в мгновение ока.

Самый распространенный стандарт оформления — это Zend Coding Guides (http://framework.zend.com/manual/1.12/en/coding-standard.html — на англ. яз.), вот их суть:

- переменные и функции пишутся с маленькой буквы, _ не используется, используется camelCase, пример: $x, $numberOfPeople, printResults()
- Название функции начинается с глагола, в стиле «сделайЧтоТо»
- в именах классов используется CamelCase, первая буква большая, «_» может использоваться
- мы предпочитаем подстановку переменных вместо конкатенации строк: "I am $age years old" — хорошо, 'I am ' . $age . ' years old' — плохо
- мы используем для отступов 4 пробела (можно настроить редактор, чтобы при нажатии Tab он вставлял 4 пробела)
- скобки в for и if/else ставятся так:


if (...) {
// ...
} else {
// ...
}

for (...) {
// .....
}


- у определений функций и классов так:


function makeMeFeelGood(...)
{
// ...
}


В общем, пиши как на картинке, и проблем не будет.
!xnn2uE3AU. Срд 14 Авг 2013 12:24:56  #4 №309593 

Анон с геокодером, просивший задачку, ответы тебе в предыдущем треде: >>309569 >>309584

Анон с задачками про одноклассников, ответ тебе тоже там: >>309586

Аноним Срд 14 Авг 2013 12:50:25  #5 №309597 

>>309591
Анон, юзаю phpDesigner, вот скажи, во всех этих IDE ежели табами делать отступы, они так же будут выглядеть везде?
Проверял PSPadом и ZEND studio, вроде всё норм.

!xnn2uE3AU. Срд 14 Авг 2013 13:27:51  #6 №309605 

>>309597

В настройках IDE найди пункт «заменять табы на пробелы», и выставь 4 пробела. Тогда при нажатии Tab будет вставляться 4 пробела и проблем не будет. По крайней мере в новых файлах.

Аноним Срд 14 Авг 2013 13:32:56  #7 №309608 

>>309605
Ок, сенкс, там это установил.
Алсо, спасибо, ОПушка, у меня вчера закончился испытательный срок. Я у мамы теперь Жуниор-ПХП девелопер, был строителем, начал изучать в /Б/ зимой. Добра и няш тебе :З

!xnn2uE3AU. Срд 14 Авг 2013 13:43:44  #8 №309611 

>>309608

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

Аноним Срд 14 Авг 2013 13:57:45  #9 №309614 

>>309608
Так расскажи же: город, что знал, что спрашивали на собедедовании и прочее.

Аноним Срд 14 Авг 2013 14:11:15  #10 №309621 

>>309614
1. Харьков

2. Знал PHP на уровне "написать плагинчик для Жумлы/сбацать сайтик с фреймворком", Зенд чуток, ЖабаСкрипт еще меньше, КСС - в пределах "поменять шрифт, поправить див, прилепить меню", ООП - по сути только принципы, Мускуль - несложные запросы но не хелловорлдовского уровня.

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

4. Месяц испыталки, зарплата такая же 650 баксов обещали повысить со следующего месяца, алсо меня кажись малость наебали. Контора аутсорсом занимается. Коллектив - человек 20.

Аноним Срд 14 Авг 2013 14:19:37  #11 №309623 

>>309614
Ах, да, если кому интересно, и раз уж я себя сдиванонил и так по-полной: мне 27, вышки нет работать пошел, нищеброды мы, сходил за неделю на 4 собеседования, взяли везде - выбирал.
Но у нас даже самому звонить не нужно - резюме оставил, и телефон сами оборвут. Впрочем, может так везде.

Аноним Срд 14 Авг 2013 15:14:31  #12 №309646 

>>309621
>>309623
Добра тебе, няша!

Аноним Срд 14 Авг 2013 15:34:54  #13 №309648 

>>309623
Хуй там, в Днц не так.

Аноним Срд 14 Авг 2013 15:47:24  #14 №309656 

Как правильно организовывать запись в БД? Делать функцию, в которой открывать соединение и все запросы, или прямо посреди кода? Или может еще как?

Аноним Срд 14 Авг 2013 15:49:04  #15 №309657 

>>309656
Класс-синглтон.

Аноним Срд 14 Авг 2013 15:50:30  #16 №309659 

>>309621
Вряд ли наебали. Сосед устроился на жабу жуниором в харькове, начальная ставка была 300 вечнозеленых, правда после по +50вечнозеленых каждый месяц было.

Аноним Срд 14 Авг 2013 15:53:53  #17 №309661 

>>309593
Отличная задача, например! Как раз по моим слабым местам, т.к. я все еще не разобрался ни с фреймворками, ни с MVC, и html использовать я не умею. Буду тебя спамить вопросами наверное. Начну:
>Надо сделать бекенд на PHP и базу данных
что значит сделать бекенд на PHP?

!xnn2uE3AU. Срд 14 Авг 2013 16:09:05  #18 №309669 

>>309656

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

function getPdo() {
static $pdo = null;
if (!$pdo) {
$pdo = new PDO(.....);
}

return $pdo;
}

При таком подходе содеинение открывается только при первом вызове функции getPdo(). PDO — это стандартная PHP-библиотека для работы с базами данных, если что.

Аноним Срд 14 Авг 2013 16:13:10  #19 №309671 

>>309669
>в старом добром процедурном стиле
Поправил.

!xnn2uE3AU. Срд 14 Авг 2013 16:15:17  #20 №309672 

>>309656

А если говорить о «правильно», то это все давно придумано, надо использовать ООП и паттерны вроде TableGateway, ActiveRecord, DataMapper.

>>309661

В данном случае фронтенд = HTML + JS код, то что работает в браузере, бекенд — то что на сервере, PHP + MySQL.(учти, иногда еще фронтендом и бекендом называют компоненты, работающие на сервере, например бекенд — сервера с хранилищем данных, фронтенд — сервера с PHP-скриптами, но это не наш случай).

Аноним Срд 14 Авг 2013 16:41:48  #21 №309683 

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

!xnn2uE3AU. Срд 14 Авг 2013 16:46:59  #22 №309684 

>>309683

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

Аноним Срд 14 Авг 2013 16:49:37  #23 №309686 

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

Аноним Срд 14 Авг 2013 16:50:51  #24 №309689 

А чем плохи mysql_conenct/mysql_query и т.п.?
Я пока слабо представляю суть ООП, может есть у кого знакомая статейка, где бы ёмко и подробно, начиная с азов, рассказывалось об этом? Предвидя поливания говном и посылы в гугл, скажу так: я нагуглил много чего и уже почитываю, но что-то всё не то. Мне бы хотелось о самой сути узнать, миновав 500-страничные книги. Хотя и о популярных реализациях на практике тоже бы почитал

!xnn2uE3AU. Срд 14 Авг 2013 17:03:35  #25 №309694 

>>309686

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

>>309689

mysql_* устарели, их не поддерживают и они могут быть в будущем удалены из PHP. PDO — более продвинутая и современная библиотека и ты рискуешь остаться в прошлом с таким подходом.

> Я пока слабо представляю суть ООП
У меня есть урок, но там именно самое начало. Вот он: http://pastebin.com/14jj6uUc

Если задача из урока слишком проста, есть задачка посложнее про кошек-мышек: >>304841 (кстати, где-то тут анон, который ее делал-делал и не доделал)

Дальше можно почитать официальный сайт PHP: http://www.php.net/manual/ru/language.oop5.php и книгу Объектно-ориентированное программирование на PHP, Мэтт Зандра

Еще дальше можно попросить у меня задачу про калькулятор работающий на recursive descent. Там тоже нужен ООП.

Аноним Срд 14 Авг 2013 18:29:56  #26 №309723 

>>309587
Оп, скажи, а зашквар в 27 быть джуниором как >>309623
Просто мне 25, смогу я вообще вырости до сеньйора если сейчас пойду джуном? Кстати, ты кто по иерархии?

sageАноним Срд 14 Авг 2013 18:33:32  #27 №309724 

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

Аноним Срд 14 Авг 2013 18:35:48  #28 №309725 

>>309724
Чего ты такой злой? Я не имел в виду карьерный рост, я имел в виду профессионализм как таковой.

Аноним Срд 14 Авг 2013 18:36:29  #29 №309726 

>>309725
Короче не поздно ли в 25 идти в профессию, во.

sageАноним Срд 14 Авг 2013 18:37:20  #30 №309727 

>>309723
ты должен полностью отказаться от своей личности, заменить её стремлениями (if any) своих начальников!

sageАноним Срд 14 Авг 2013 18:37:55  #31 №309728 

>>309723
ПРИШЛО ВРЕМЯ ОСТАВАТЬСЯ ПОСЛЕ РАБОТЫ
SLA САМО НЕ ВЫПОЛНИТСЯ
ВЫПОЛНИ ЕГО, ВЫПОЛНИ ЕГО ЕЩЁ РАЗ
ЗАЧЕМ МНЕ НУЖНА СВОБОДА, У МЕНЯ ВСЁ РАВНО НЕТ УВЛЕЧЕНИЙ
ЛУЧШЕ Я ЕЩЕ ЕЩЁ РАЗ ОСТАНУСЬ ПОСЛЕ РАБОТЫ
Я ОСТАЮСЬ ПОСЛЕ РАБОТЫ КАЖДЫЙ ДЕНЬ
КАЖДАЯ ПЕРЕРАБОТКА ЗАНИМАЕТ 3 ЧАСА
Я ЖИВУ АКТИВНОЙ И ПОЛНОЦЕННОЙ ЖИЗНЬЮ
Я УСПЕШЕН И ПОЭТОМУ ВЕСЬ ДЕНЬ ЗАДРАЧИВАЮСЬ В ОФИСЕ
А ПОСЛЕ ЭТОГО ЖДУ ЧТО МЕНЯ ПОВЫСЯТ
ТУПЫЕ ПОХАПИДОРЫ ОДЕРЖИМЫ ФРИЛАНСОМ И УДАЛЁНКОЙ
А Я СВОБОДНЫЙ ОТ ДОШИРАКА ЧЕЛОВЕК
СКОЧАТЬ СПРИНГ В ДЕЙСТВИИ ТРЕТЬЕ ИЗДАНИЕ ПЕРЕВЕДЁННОЕ
КРЯК УЛЬТИМАТ КЕЙГЕН ДЛЯ INELIJ-IDEA
ЛУЧШЕ Я ОСТАНУСЬ ПОСЛЕ РАБОТЫ ЕЩЁ РАЗ
И ДОДЕЛАЮ ВСЁ ДО ДЕДЛАЙНА, ОТДЫХ НЕ НУЖЕН
Я НЕ ОСТАВАЛСЯ ПОСЛЕ РАБОТЫ УЖЕ НЕДЕЛЮ
ПОЙДУ ОСТАНУСЬ
В JIRA ВСЕ ПРОСТО И ПОНЯТНО
МОИ ПРОСРОЧЕННЫЕ ЗАДАЧИ CRITICAL BLOCKER. ЭТО ЖЕ ОЧЕВИДНО КАК ЭТО РЕШИТЬ
ПРИШЛО ВРЕМЯ ЗАДЕРЖАТЬСЯ НА РАБОТЕ
ККОКОКОКОКОКОКО
ПОХАПЭ ДОШИРАК ГОСТЕВУХИ
КОКОКОКОКОКОКО

Аноним Срд 14 Авг 2013 18:38:29  #32 №309730 

>>309727
>>309724
Блядь, ну что за толстота.

Аноним Срд 14 Авг 2013 18:42:04  #33 №309733 

У меня довольно общий странный вопрос. Смотрите есть html страница которая отображается корректно, при разбивке её на несколько частей и подключением с помощь <?php include($subview.'.php');?> начинаются странные траблы, наприемр везде начинает проседать подвал из-за того, что обертка wrapper не на всю длину? У кого-нибудь есть предположения почему так? Страницы полностью идентичны, это было проверено ни раз, после сбора из разобранной снова одной все равно все было норм

Аноним Срд 14 Авг 2013 18:45:24  #34 №309735 

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

Аноним Срд 14 Авг 2013 18:49:02  #35 №309738 

>>309735
>пустых строк в конце файла
Конечно же.

Аноним Срд 14 Авг 2013 18:50:24  #36 №309740 

>>309728
Будто возвращаться каждый вечер к той жирухе такая радость.
Сегодня тоже до 21.

Аноним Срд 14 Авг 2013 19:48:43  #37 №309776 

>>309735
В принклюженных файлах только хтмл разметка, в этом и загадка

Аноним Срд 14 Авг 2013 19:51:23  #38 №309777 

>>309776
>$subview.'.php
Ты издеваешься, няша?

sageАноним Срд 14 Авг 2013 20:07:56  #39 №309782 
[url]

>>309694
> калькулятор работающий на recursive descent
мне как раз такое (кажется) задали писать
поскажите няши как добавить приоритеты операций
http://ideone.com/2S9sMN

sageАноним Срд 14 Авг 2013 20:18:50  #40 №309789 

Привет неймфаг,
нашел себе лалку, которая заливку картинок за тебя написала?

!xnn2uE3AU. Срд 14 Авг 2013 20:20:16  #41 №309791 

>>309782

Гугли либо обратную польскую нотацию и алгоритм сортировочной станции, либо AST + recursive descent.

!xnn2uE3AU. Срд 14 Авг 2013 20:20:46  #42 №309792 

>>309789

Хочешь заняться написанием?

sageАноним Срд 14 Авг 2013 20:21:27  #43 №309794 

>>309792 хуй тебе в рот

Аноним Срд 14 Авг 2013 20:24:32  #44 №309796 

>>309777
Ну так устроен фреймворк, это не мои наработки, да и вообще, что тут неадекватного?

Аноним Срд 14 Авг 2013 20:31:09  #45 №309801 

>>309792
Братишка, ну ответь на вопрос 25-лет-куна.

Аноним Срд 14 Авг 2013 20:36:54  #46 №309807 

>>309796
Это пиздец. Щитоу за фрейворк?

Аноним Срд 14 Авг 2013 21:12:36  #47 №309827 

>>309807
Почему пиздец? Ахуенный фрейм, на русском только вот статья http://habrahabr.ru/post/178899/ хуй знает чем тебе неугодило такой подключение, может просто потому что НИАКАДЕМИЧНО, если ты думаешь что эта старая фича с php-shel-om тут прокатит, то нет, в остальном он сделан прекрасно, понятный код который расширяется в пару минит из микрофреймворков - лучший

Аноним Срд 14 Авг 2013 21:14:15  #48 №309829 

http://habrahabr.ru/post/178833/#first_unread вот еще обзор нашел

Аноним Срд 14 Авг 2013 21:36:59  #49 №309842 

>>309827
Сплюнь. Проглотил? Ну ладно...

Аноним Срд 14 Авг 2013 21:57:22  #50 №309850 
1376503042347.jpg

>>309782
Используй parsec, бака~. Он офигенен.

Аноним Срд 14 Авг 2013 22:06:39  #51 №309854 

>>309592
>Задача про айфон
Спасибо, Ананас! Исправил: http://ideone.com/gvteCs
>заводишь переменную, присваиваешь ей значение 0 и...
Oh shi~...Genius!
Получилось, спасибо!
http://ideone.com/AiCIed

Аноним Срд 14 Авг 2013 22:27:04  #52 №309861 

>>309801
Удваиваю вопрос

Аноним Срд 14 Авг 2013 22:36:14  #53 №309862 

>>309723
Зашквары только в вашей голове.

!xnn2uE3AU. Срд 14 Авг 2013 22:39:44  #54 №309864 

>>309861
>>309801

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

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

!xnn2uE3AU. Срд 14 Авг 2013 22:45:09  #55 №309865 

Алсо, прочитал на ЦП, что в том же гугле стажер (то есть студентота без опыта работы) зарабатывает больше, чем у нас в старне профессиональный разработчик. Забавно: http://www.siliconrus.com/2013/06/stazhyoryi-google-zarabatyivayut-bolshe-vas-vseh/

!xnn2uE3AU. Срд 14 Авг 2013 22:48:30  #56 №309867 

>>309854

Все хорошо, но вот эта формула:

> $credit*$percent)+$servicePayment

скопипастена 3 раза подряд, копипаста — зло, надо от нее избавиться. Уверен, это не составит для тебя труда.

Задача про одноклассников решена верно.

И да, if не стоит писать с большой буквы, операторы в PHP принято писать маленькими буквами (хотя работает и с большими, но смотрится неаккуратно).

Аноним Срд 14 Авг 2013 23:34:24  #57 №309882 

>>309865
А "профессиональный разработчик" в этой стране знает ли больше, чем "студентота без опыта работы", изучавшая computer science в США и прошедшая собеседование в Гугл?

Аноним Чтв 15 Авг 2013 03:15:09  #58 №309935 

Начал решать задачки и сразу возникла проблема - у меня почему-то не работает \n. Просто не переносит строку, хоть убей. Поэтому, я использую тег <br> вместо \n. Не обоссут ли меня за это крутые кодеры?

!xnn2uE3AU. Чтв 15 Авг 2013 09:02:28  #59 №309960 

>>309935

Если ты не запускаешь программу в консоли (или на ideone что то же самое), а открываешь страницу браузером на локалхосте, то ситуация немного другая. По умолчанию браузер воспринимает то, что выводит скрипт, как HTML-код (а не простой текст). В HTML \n не делает переноса строки (а также, например, несколько пробелов подряд выводятся как один).

Решение с br конечно не годится, это костыль. Вместо этого
поставь в самое начало программы строчку:

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

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

Аноним Чтв 15 Авг 2013 10:54:22  #60 №309982 

Простите за платину. Что должен знать пхп жуниор для работы с cms?

!xnn2uE3AU. Чтв 15 Авг 2013 11:11:56  #61 №309984 

>>309982

Что значит «для работы с cms»? Чтобы пользовться CMS (ты не написал кстати какой?) достаточно зайти в админку, ввести логин и пароль и нажимать там кнопочки. Ну в крайнем случае почитать мануал к этой CMS, хотя обычно и так все понятно.

Аноним Чтв 15 Авг 2013 11:15:09  #62 №309985 

>>309984
Согласен, криво спросил. Имел в виду, чтобы написать тему, плагин етс. на для того же вп.

Аноним Чтв 15 Авг 2013 12:46:54  #63 №310011 

Как правильно создавать объект класса?
$var = new Classname();
или
$var = new Classname;

!xnn2uE3AU. Чтв 15 Авг 2013 13:17:39  #64 №310022 

>>309985

1) Знание основ PHP, HTML, возможно CSS/JS если нужна верстка и яваскрипт
2) Открыть и прочесть документацию или найти статью «как сделать плагин/тему для %cms%»

!xnn2uE3AU. Чтв 15 Авг 2013 13:20:13  #65 №310025 

>>310022

p.s. Основы при усердии и старании учатся за 3 недели. Ссылки есть в первых постах треда.

>>310011

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

Вообще, скобки обязательны когда передаются какие-то параметры в конструктор (что такое конструктор? читай мануал по PHP):

$x = new Classname(1, 2, 3);

Аноним Чтв 15 Авг 2013 13:20:49  #66 №310026 

Аноны, нужная такая вещь. Есть контент, который прикрепляется на страницу аяксом. Нужно сделать следующее.
Взять все эти элементы, типо $('.post').find(); далее отправить их аяксом на сервер. Далее там как-то распарсить и вывести на печать автоматически, подскажите как это лучше делать, есть ли какой-то хаголовок при отправке которого браузер предлагает напечатать содержимое?

!xnn2uE3AU. Чтв 15 Авг 2013 13:24:40  #67 №310028 

>>310026

Чтобы распечатать что-то из браузера, делай так:

открой новую страницу с текстом который надо напечатать (можешь для начала просто написать там hello world). На этой странице в самый конец перед </body> поставь

<скрипт>
window.print();
</скрипт>

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

Аноним Чтв 15 Авг 2013 14:29:31  #68 №310044 

>>310022
Благодарю за ответ няшаоп.

Аноним Чтв 15 Авг 2013 14:40:27  #69 №310049 

Посоны, как сделать аналог docpad, только на php.

школьник

Аноним Чтв 15 Авг 2013 14:40:49  #70 №310050 

>>310049
?*

Аноним Чтв 15 Авг 2013 14:46:54  #71 №310053 

>Надо проверить номер на правильность и привести любой номер к единому формату 89114044411 (то есть, заменить +7 на 8 и выкинуть весь мусор вроде пробелов, скобок и минусов, кроме цифр)
http://ideone.com/gqbhNF

>Автозамена. Напиши скрипт, заменяющий определенное слово на другое
http://ideone.com/clone/N6YuRt
Для того, чтобы сделать правильный регистр первой буквы я придумал вариант с проверкой символов перед словом. В случае, если ничто, или всё, кроме букв и запятой, то первая буква выводится в верхнем регистре. Может есть менее наркоманский вариант?

Аноним Чтв 15 Авг 2013 15:32:58  #72 №310068 

>>310053
Ой, ко второй задаче правильная ссылка - http://ideone.com/XE6iMV

Аноним Чтв 15 Авг 2013 15:54:00  #73 №310080 
1376567640507.jpg

>>310028
Не понял мотив выкидывания ДЖАКВЕРИ, у меня страница где с помощью фильтра с аякс запросом к серверу совершается выборка постов по определнным характеристикам. Терь нужно эти посты взять, отправить серверу на распечатку и усе (делать костыли типо НО ПРИНТ считаю неразумным).
Про скрипт спасибо, случайно не знаешь как распарсить на сервере и вывести на страницу jQuery массив что я описал, типа $('.post').find(); ? Я конечно документацию гляну, но мб уже сталкивался кто.

Аноним Чтв 15 Авг 2013 16:32:15  #74 №310096 

>Напиши скрипт, выводящий все email, встречающиеся в этом тексте
http://ideone.com/ruHnTP

!xnn2uE3AU. Чтв 15 Авг 2013 18:13:12  #75 №310174 

>>310053

Номера не совсем так решено, надо принимать только номера, в которых нет никакого лишнего текста (только номера вида 8 (911) 911-9-009).

Также, регулярка слишком длинная. Вместо копипасты надо использовать повторение, например с помощью конструкции (...){N}

Задача про автозамену

Твой скрипт слишко всеяден, например слово депутат ему чем-то не нравится: http://ideone.com/A8Elu0

Мотто ганбатте кудасай не?

!xnn2uE3AU. Чтв 15 Авг 2013 18:19:59  #76 №310177 

>>310080

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

>>310096

http://ideone.com/5Hux14 — находит только часть email

Если понимаешь английский, есть годная статья на тему регулярки для емейлов: http://www.regular-expressions.info/email.html

!xnn2uE3AU. Чтв 15 Авг 2013 18:32:45  #77 №310185 

>>310053

Насчет букв, чтобы сохранять регистр первой буквы слова при замене, надо использовать более мощную функцию preg_replace_callback, примерно так:


// Заменим слово аббат на слово вагон
$text = preg_replace_callback("/аббат/ui", function ($m) {
//получаем первую букву найденного слова
$firstLetter = mb_substr($m[0], 0, 1);
if ($firstLetter == 'А') {
return 'Вагон';
} else {
return 'вагон';
}
}, $text);


Как работает эта функция, ты можешь попытаться прчоесть в мануале. Для каждого найденного соответствия шаблону она вызывает твой код, и твой код может решить с помощью разных проверок, на что его заменить. Таким образом, можно делать замену с учетом каких-то дополнительных условий.
Аноним Чтв 15 Авг 2013 19:02:53  #78 №310195 

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

>перед тем, как платить, надо проверять, сколько осталось долга, и если он меньше 5000, то платить только остаток и завершать цикл через break

Окей, я пишу в условии:

if($creditBalance < 5000)

Но что дальше? Как сделать так, чтобы программа высчитала только остаток?

!xnn2uE3AU. Чтв 15 Авг 2013 19:13:44  #79 №310200 

>>310195

Можно завести дополнительную переменную например:

Если (долг большой) {
плачуВЭтомМесяце = 5000;
} иначе же {
плачуВЭтомМесяце = сколькоОсталось;
}

Аноним Чтв 15 Авг 2013 19:19:32  #80 №310202 

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

Аноним Чтв 15 Авг 2013 19:26:15  #81 №310204 

>>310200
Спасибо, сейчас попробую.

Chip Чтв 15 Авг 2013 19:45:06  #82 №310207 

>>310202
Мухахаха 3 месяца аж развеселил...
Чтоб на достойном уровне (допустим что с алгоритмикой и абстракно-логическим мышлением у тебя в порядке изначально) ну может годика 3-5 уложишься. И то очень нужна практика и серьезная практика. А не эти задачи про айфоны у школьника.

Аноним Чтв 15 Авг 2013 19:53:52  #83 №310210 

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

Аноним Чтв 15 Авг 2013 21:04:22  #84 №310230 

>>310210
>Я у мамы теперь Жуниор-ПХП девелопер, был строителем, начал изучать в /Б/ зимой.
>Знал PHP на уровне "написать плагинчик для Жумлы/сбацать сайтик с фреймворком", Зенд чуток, ЖабаСкрипт еще меньше, КСС - в пределах "поменять шрифт, поправить див, прилепить меню", ООП - по сути только принципы, Мускуль - несложные запросы но не хелловорлдовского уровня.
из постов свыше

Аноним Чтв 15 Авг 2013 21:14:26  #85 №310235 

>>310177
>http://ideone.com/5Hux14 — находит только часть email
За ссылку спасибо. Но там всё то же: универсальные регулярные выражения - это миф, лучше не пытайтесь.
Немного поправил свою, в 5 строке вместо "?" нужен "*". Хотел, чтобы все части домена раскидывались по карманам, но моя регулярка не совсем верна для этого, но адреса то ловит!
http://ideone.com/Zi89hc

>Номера не совсем так решено, надо принимать только номера, в которых нет никакого лишнего текста (только номера вида 8 (911) 911-9-009).
http://ideone.com/fIiuIM

>Твой скрипт слишко всеяден, например слово депутат ему чем-то не нравится
"Депутат рак" -- "Бака". В-воркин ез интендед, ня?!
Попробую сделать в полном объеме, чтобы всё заменял правильно.

Аноним Чтв 15 Авг 2013 21:18:32  #86 №310238 

ололо

!xnn2uE3AU. Чтв 15 Авг 2013 21:36:35  #87 №310247 

>>310202

Если ты действительно знаешь Java, то PHP освоишь быстро, у него ООП с Явы скопирован (хотя он гораздо слабее по возможностям). Ну и с JS разберешься, изучи JS/jQuery/lodash/Backbone/Angular, этого хватит.

!xnn2uE3AU. Чтв 15 Авг 2013 21:43:11  #88 №310248 

>>310210

Он тебя троллит.

>>310235

> Но там всё то же: универсальные регулярные выражения - это миф, лучше не пытайтесь.
Именно так.

Поиск email Теперь email программа находит правильно.

Задача про номера программа видит номера даже там, где их нет: http://ideone.com/Ql5JJM

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

!xnn2uE3AU. Чтв 15 Авг 2013 21:44:25  #89 №310250 

>>310235

Также, программа обработки телефонного номера должна искать только один номер, а не сколько угодно.

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

Аноним Чтв 15 Авг 2013 22:05:13  #90 №310256 

>>310250
Ох, мне неловко от своей невнимательности.
http://ideone.com/wt94Pd

!xnn2uE3AU. Чтв 15 Авг 2013 22:14:49  #91 №310259 

>>310256

Лишний текст все равно пропускает http://ideone.com/a9fLbU

Аноним Чтв 15 Авг 2013 22:24:47  #92 №310263 

>>310259
http://ideone.com/3mobqG

!xnn2uE3AU. Чтв 15 Авг 2013 22:27:10  #93 №310264 

>>310263

Теперь все верно.

Аноним Птн 16 Авг 2013 16:12:08  #94 №310436 

>Исправить текст так, чтобы все предложения в нем начинались с большой буквы, а после знаков запятая, точка, восклицательный и вопросительный знак стоял ровно один пробел (а перед ними — ни одного).
http://ideone.com/tE28c3

Аноним Птн 16 Авг 2013 16:33:34  #95 №310442 
1376656414272.png

Я не понимаю, как можно выровнять примечания.
http://jsbin.com/ajajud/14/

Аноним Птн 16 Авг 2013 17:04:50  #96 №310456 

ОП, подскажи как сейчас обстоит ситуация с использование MySQL хранимок через PDO в PHP - bad practice или нет? Хостеры предоставляют последние версии MySQL (собственно в которых ХП уже более менее работоспособны), и позволяют ли разоварчивать базы на InnoDB (хотет транзации). Сорри, что я такой слоупок, и что вопрос немного не в тему...

!xnn2uE3AU. Птн 16 Авг 2013 17:16:56  #97 №310462 

>>310436

Программа работает почти верно, но если идет несколько вопросительных знаков подряд, она их разбивает пробелами — это так и задумано или баг: http://ideone.com/CcPbeE ?

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

По оформлению: у нас принято писать имена переменных не через подчеркивания, а в camelCase (у нас — не только у нас в треде, но и в самых распространенных стилях оформелния кода Zend и PEAR coding guide). Исправлять это не надо, но вдруг ты пришел с какого-то другого языка с другими правилами оформления и не знал.

Также, в некоторых местах код можно записать короче:

> $spaces_regexp = '/\\s\\s+/';
> $line = preg_replace($spaces_regexp, " ", $line);
Это можно написать проще, для такой простой регулярки нет смысла заводить отдельную переменную:
$line = preg_replace('/\\s+/', " ", $line);

> $raw_lines
Это надо было назвать $sentences.

> function mb_ucfirst ($subj)
Тут тоже можно написать короче, убрав временные переменные (они только создают визуальный шум и снижают читабельность):

return mb_strtoupper(...) . mb_strtolower(....);

!xnn2uE3AU. Птн 16 Авг 2013 17:19:43  #98 №310463 

>>310456

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

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

!xnn2uE3AU. Птн 16 Авг 2013 17:44:04  #99 №310470 

>>310442

>Я не понимаю, как можно выровнять примечания
Есть 2 варианта. Первый — использовать right: 100%, left: auto, margin-left, чтобы прижать к правому краю. Второй — использовать text-align: right и фиксированную ширину

Другие замечания:

Также, на плашке с картинкой надо сделать верхнюю и нижнюю строки ближе друг к другу, а серые буквы крупнее, посмотри на скриншот. Надпись «is in the picture» также надо чуть-чуть сдвинуть вправо, чтобы она лучше выравнивалась относительно верхней.

> p { line-height: 1.5; position: relative; }
Зачем это? Поскольку это учебное задание, то вариант «поставлю на всякий случай, кому это мешает?» не подходит.

И почему для всей страницы задана одна line-height, а для тега p — другая? зачем так сложно?

> .figure { position: relative; width: 100%;
Нет, 100% не пойдет (наверно, я плохо это объяснил в задании). Ширина блока с картинкой должна определяться так:

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

Твой код картинку шириной 150 px растягивает до 400 px: http://jsbin.com/ajajud/16 Увеличивать растровые картинки абсолютно недопустимо, это грубая ошибка.

> width: 100%;
> box-sizing: border-box;
Для AP надо просто использовать left: 0, right: 0, она сама растянется до нужной ширины.

> font-size: 12px;
Если задаешь font-size, всегда надо рядом задавать line-height так как сама она себя не задаст.

> bottom: 4px;
Это же костыль, правда? Да еще и зависящий от размера шрифта. Нехорошо. Чтобы побороть отступ под картинкой, можно использовать либо свойство vertical-align, либо display: block. Как мы видим, это задание среди прочего выявляет знание особенностей выравнивания inline-элементов.

!xnn2uE3AU. Птн 16 Авг 2013 17:54:17  #100 №310475 

>>310470

Ой, ошибочка!

> Первый — использовать right: 100%, left: auto, margin-right,

Аноним Птн 16 Авг 2013 18:03:02  #101 №310478 

>Программа работает почти верно, но если идет несколько вопросительных знаков подряд, она их разбивает пробелами — это так и задумано или баг: http://ideone.com/CcPbeE ?
>Также, замену пробелов до и после знаков можно бы сделать одним выражением, а не двумя. Если у тебя есть желание улучшить программу, попробуй исправить.

http://ideone.com/clone/kVnOds

Спасибо, дельные замечания.

Аноним Птн 16 Авг 2013 18:03:49  #102 №310479 

>>310478
Приложил не ту ссылку, вот правильная http://ideone.com/Q6WeKO

Аноним Птн 16 Авг 2013 18:08:54  #103 №310482 

>>310463
Но ведь есть и другой подход, когда вся логика манипуляции данными реализуется исключительно на уровне БД, а приложение только отображает данные пользователю и транслирует действия пользователя в вызовы соответсвующих хранимок... Но это все риторика, конкретно моя проблема - клеить в php текст запроса с джоином 8-и таблиц, и возвращающим около 20-и полей - как-бы не очень удобно, нет форматирования, проверки синтаксиа, оперативной возможности проверки правильности исполнения, да и просто тупо начинаешь в кавычках путаться... Как обычно такие проблемы в php обходятся, кроме как перехода на хранимки?

!xnn2uE3AU. Птн 16 Авг 2013 18:14:33  #104 №310487 

>>310479

По-прежнему ломаются несколько вопросов подряд: http://ideone.com/m9Cf4H

Мне кажется, надо упростить выражение и просто искать по шаблону:

(пробелы)(знаки в любом количестве)(пробелы)

и заменять его на

(ничего)(знаки)(1 пробел)

Аноним Птн 16 Авг 2013 18:16:38  #105 №310488 
1376662598492.jpg

Опушка, помоги пожалуйста с задачкой про нахождение кратчайшего пути.
http://ideone.com/CNhx9X
Суть в том, что пропускается предпоследний узел кратчайшего пути(пока заметил только на одном маршруте), хотя время выводится корректно.

!xnn2uE3AU. Птн 16 Авг 2013 18:21:59  #106 №310492 

>>310482

> когда вся логика манипуляции данными реализуется исключительно на уровне БД

Да ну, при использовании MVC и классов-моделей обычно получается неудобно, так как например у тебя есть условие «при изменении поля photo_id удалить старый файл с фото с диска». Как ты это условие вставишь в хранимку? А если надо что-нибудь более хитрое сделать?

И я не понимаю, какой смысл отказываться от языка с ООП и мощным синтаксисом в пользу допотопного PL/SQL или что там используют.

> Но это все риторика, конкретно моя проблема - клеить в php текст запроса с джоином 8-и таблиц, и возвращающим около 20-и полей - как-бы не очень удобно, нет форматирования, проверки синтаксиа, оперативной возможности проверки правильности исполнения, да и просто тупо начинаешь в кавычках путаться... Как обычно такие проблемы в php обходятся, кроме как перехода на хранимки?

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

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

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

Аноним Птн 16 Авг 2013 18:40:08  #107 №310507 

>>310487
Спасибо, вот http://ideone.com/KHzvsX

Аноним Птн 16 Авг 2013 18:58:25  #108 №310519 

>>310492
>Да ну, при использовании MVC и классов-моделей обычно получается неудобно
Я не говорю, что этот подход однозначно лучше какого-то другого, но в зависимости от цели и задачи его применение вполне оправдано. Например при построении сложных отчетов.
>И я не понимаю, какой смысл отказываться от языка с ООП и мощным синтаксисом в пользу допотопного PL/SQL или что там используют.
Но ведь ты не будешь выбирать все записи из таблицы и писать на PHP цикл внутри которого проверяются некие условия по определенным полям, пусть даже эти условия будут очень сложные.
>Генерация запросов автоматически из описания структуры данных.
Не получится, запросы зачастую совсем нетривиальные.
>Также, делать джойн большого количества таблиц на MySQL — верный способ отхватить проблемы с производительностью.
Ну главное план выполнения смотреть, чтобы оптимизатор не напортачил. А так ничем не отличается от 8 запросов из одной таблицы.
>У нас принято проектировать БД так, чтобы джойнить столько таблиц не требовалось.
Ну вот такая вот сложная сущность, со множеством составных атрибутов, которые никак в одну таблицу не уложить. Да и денормализация - вещь не очень хорошая. Хотя иногда да, ее применение конечно может быть оправдано.

!xnn2uE3AU. Птн 16 Авг 2013 19:19:02  #109 №310534 

>>310488

Я попробовал сдампить рaсчет пути: http://ideone.com/YAXTlI

На первом шаге он у тебя выбирает:

> Route from 0 to 9
> int(12)
Что неправильно, из точки 12 (Сенная Площадь) не попасть в 9 (Новая Голландия) одним шагом. Значит, матрица $interimStep заполнена неверно.

Возможно, проблема в том, что сначала заполняешь $interimStep значениями INF, что значит «из любой точки в любую можно пройти потратив 1 шаг».

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


$paths = array(
'pet' => array(
'chk' => canGet(10, BUS),
'gor' => canGet(3, SUBWAY)
),

'chk' => array(
'pet' => canGet(10, BUS),
'spo' => canGet(3, SUBWAY)
),


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

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

Во-вторых, твои массивы не-человеко-читабельны. Что это за хрень?

> 9 => array(
> 4 => 11,
> 8 => 5,
> 10 => 7
> ),

Одни цифры обозначают номера точек, другие — время и попробуй-ка по памяти сказать, какие именно каким точкам соответствуют? Я не робот, я не могу запомнить номера 16 станций.

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

define('P_PET', 0);
define('P_CHK', 1);

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

Также, в $interimPath надо использовать не INF, а другую константу, например, UNKNOWN, так как INF у тебя используется в $paths

Исправь эти недостатки, а потом посмотрим дальше.

Аноним Птн 16 Авг 2013 19:47:47  #110 №310549 

Йода говорит http://ideone.com/2TdFIq

!xnn2uE3AU. Птн 16 Авг 2013 20:35:24  #111 №310566 

>>310549

Хорошо, но надо не в случайном порядке слова переставлять, а в обратном. И запятая не разделяет предложения, предложения разделяют только 3 знака: .!?

Аноним Птн 16 Авг 2013 20:52:34  #112 №310572 

>>310566
Как в задании: http://ideone.com/ZtMmBZ

!xnn2uE3AU. Птн 16 Авг 2013 21:03:17  #113 №310576 

>>310572

Теперь правильно.

Аноним Птн 16 Авг 2013 21:03:20  #114 №310577 

А здесь все верно или я накосячил где-то?
http://codepad.org/ZXsFu7OX

!xnn2uE3AU. Птн 16 Авг 2013 21:08:16  #115 №310580 

>>310577

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

Аноним Птн 16 Авг 2013 21:43:30  #116 №310584 

>>310580
Блин, точно же. Спасибо.
Это оно?
http://codepad.org/TqrnxxbN

Аноним Птн 16 Авг 2013 21:52:49  #117 №310587 
1376675569016.jpg

Коты верстаные.
http://jsbin.com/ajajud/19/

!xnn2uE3AU. Птн 16 Авг 2013 22:12:36  #118 №310595 

>>310587

Почти идеально, но посмотри, как располагаются строчки «A cut cat» «is in the picture» друг над другом у тебя и на картинке. У тебя «is in» слишком сильно уехала влево (или буква «A» уехала вправо) , надо чуть подвинуть.

> line-height: 0;
Не очень хорошо, это выглядит как хак, лучше бы img поставил vertical-align:bottom или display: block;

В остальном, замечаний нет.

Хочешь еще посложнее задачу на HTML + CSS? Я попробую сегодня тогда ее написать.

>>310584

Все верно.

Аноним Птн 16 Авг 2013 22:24:20  #119 №310599 

>>310595
>Хочешь еще посложнее задачу на HTML + CSS? Я попробую сегодня тогда ее написать.
Спасибо, но сперва хочу дорешать задачи по php.

Аноним Суб 17 Авг 2013 00:41:44  #120 №310631 

>>310534
http://ideone.com/sFOrpI
Вот переделал все, но мне таки удобнее, когда пути цифрами обозначаются, их проще запомнить.
> Также, в $interimStep надо использовать не INF, а другую константу, например, UNKNOWN, так как INF у тебя используется в $paths
Сделал, но ничего не изменилось. Не знаю, что не так, вроде, никаких подводных камней в алгоритме не было описано.

!xnn2uE3AU. Суб 17 Авг 2013 02:37:30  #121 №310648 

>>310631

Анон, будь ты неладен, час угробил на поиск ошибки, наконец нашел статью:

http://habrahabr.ru/post/105825/

там есть формуля для расчета матрицы п(ij) (твой interimStep). Ошибка в этой строке:

> $interimStep[$i][$j] = $k;

Должно быть не k а interimStep[j][k]

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

Также, вместо того, чтобы замусоривать матрицу paths, заведи для хранения расстояний отдельный массив, например, pathCost. Вот этого вот: $paths[$i][$j]['time'] = INF; быть не должно, не засоряй справочник путей, а сделай отдельный массив.

Также, в этом массиве для маршрута из самой в себя надо прописать время = 0.

Также, эта строчка непрваильная: if ($interimStep[$start][$end] == INF) , в interimStep не может быть INF. Также, вместо NULL надо возвращать пустой массив.

Также, условие while ($temp != UNKNOWN) {надо поменять на то-нибудь другое.

> if (isset($paths[$i][$j]['time']) == NULL) {
isset возвращает true/false а не null, потому надо писать:
if (!isset($paths[$i][$j]['time']))

Исправляйся.

Аноним Суб 17 Авг 2013 08:22:37  #122 №310678 

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

!xnn2uE3AU. Суб 17 Авг 2013 14:26:40  #123 №310732 

>>310678

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

> Можно ли сделать аяксом вывод изображений на страницу до загрузки их на сервер?
> аяксом
> до загрузки на сервер

Ты наркоман, анон? Аякс — это вообще-то и есть технология отправки запросов на сервер и получения на них ответа. Потому «сделать аяксом» подразумевает отправку запроса на сервер. Но если написать твой вопрос правильно:

> Можно ли на стороне клиента при выборе картинки для загрузки сразу же выводить ее уменьшенную копию?
То да, можно, либо средствами HTML5 в современных браузерах, либо средствами флеша или ява в старых. Была где-то статья на Хабре. Но я бы советовал тебе не страдать фигней и вот почему:

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

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

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

Я бы тебе советовал сделать другую вещь:
1) поддержку выбора и загрузки сразу нескольких файлов для новых браузеров
2) загрузку файлов перетаскиванием в окно браузера
3) не задавать по 100500 раз дурацкие вопросы и подтверждения, а точно ли вы хотите загрузить или удалить файл? Это бесит, когда тебе надо удалить или загрузить много файлов сразу.

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

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

Есть два вопроса Аноним Суб 17 Авг 2013 15:47:45  #124 №310751 

Добрый анон, два несложных вопроса к тебе.
1) Использовать на сервере (apache) планировщик задач, запускающий определенный небольшой php скрипт раз в несколько минут, это совсем быдлокод? Не веселья ради, токмо для оптимизации. И что для этого использовать, если это норма, cron? Есть какие-то годные мануалы по таким вещам? Пока в шинде.
2) Погружаюсь в php, прочитал пару книг, хочу идти дальше. План такой:
Сначала
Котеров,Костарев - PHP 5.2 наиболее полное руководство
Затем
объекты, шаблоны и методики программирования.
Всё правильно делаю?

!xnn2uE3AU. Суб 17 Авг 2013 15:58:30  #125 №310752 

>>310751

>Использовать на сервере (apache) планировщик задач, запускающий определенный небольшой php скрипт раз в несколько минут, это совсем быдлокод?

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

> И что для этого использовать, если это норма, cron? Есть какие-то годные мануалы по таким вещам? Пока в шинде.
В винде запускаешь ручками из командной строки, в Линуксе делаешь cron.sh или cron.php и добавляешь этот скрипт в крон. Как добавлять скрипты в крон — читай мануалы по крону.

> книги
Да, хороший подход. Советую однако не ограничиваться чтением теории, а решать задачки, изучать фреймворки вроде Yii и ZF

!xnn2uE3AU. Суб 17 Авг 2013 16:00:21  #126 №310753 

>>310751

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

Аноним Суб 17 Авг 2013 16:34:11  #127 №310766 

>>310752
ты имеешь ввиду, что именно эти книги хорошие, или просто сам факт их чтения - это хорошо, лол?
Да, я собирался планировку для почти таких же задач использовать.
>>310753
спасибо за совет, но критичных скриптов там не будет, это я понимаю.

Аноним Суб 17 Авг 2013 17:06:13  #128 №310777 
1376744773092.gif

http://ideone.com/Vn6R1Y
Чому-то твориться содомия, мышь откуда-то появляется. Коты после еды не отдыхают (хотя раньше все нормально было) Я еще не сделал все, что ты советовал в прошлом, но ведь даже так должно работать.
Правильно ли я понял и сделал ту штуку с векторами?

Аноним Суб 17 Авг 2013 17:20:27  #129 №310782 

Котаны есть вопрос, в php.ini стоит memory_limit = -1. Когда я пытаюсь с помощью магенто апи выкачать список заказов оно посылает меня нахуй мол недостаточно памяти. memory_get_usage выдает 0.13MB использовано всего лишь. Памяти много свободной, ах да если имеет значение использую SOAP v.1 для магенто апи.

Аноним Суб 17 Авг 2013 18:41:33  #130 №310805 
1376750493912.png

Числа прописью
http://ideone.com/kL1Paw

Аноним Суб 17 Авг 2013 18:51:43  #131 №310808 

>>310805
Поправил вывод при нулевой сумме
http://ideone.com/YyJNdh

Аноним Суб 17 Авг 2013 20:24:36  #132 №310836 
1376756676387.jpg

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

sageАноним Суб 17 Авг 2013 21:52:36  #133 №310900 

>>310805
>На вашем счету тринадцать миллиона девяносто тысяч четыреста девяносто (13,090,490) рублей

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

Аноним Суб 17 Авг 2013 22:23:29  #134 №310920 

>>310900
Спасибо, что сказал.
>Вся суть похапы быдла
Нет, ну а чо?

http://ideone.com/Otmh3p

!xnn2uE3AU. Вск 18 Авг 2013 01:39:11  #135 №310958 

Аноны, аноны, ideone лежит, как оживет, проверю задачки.

>>310782

Настройки php могут быть переопределены в htaccess или в каком-нибудь скрипте. Может, в этом проблема?

>>310836

Увы, от второго левела пока только это: http://pastebin.com/14jj6uUc Хотелось бы, конечно, его сделать но все некогда было.

>>310900

Так, не ругайся, у нас тут добротред. Анон пока начинающий, когда-нибудь и до тестов дорастет.

Аноним Вск 18 Авг 2013 01:46:33  #136 №310959 

>>310958
>>310766
бро,
>ты имеешь ввиду, что именно эти книги хорошие, или просто сам факт их чтения - это хорошо, лол?
Если второе, то посоветуй что-то более хорошее.
Взял на заметку, после теории иду изучать фреймворки, одновременно с теорией решаю задачки.

Аноним Вск 18 Авг 2013 02:27:34  #137 №310964 

ОП, нафига ты это делаешь? Альтруист дохуя?

!xnn2uE3AU. Вск 18 Авг 2013 03:47:24  #138 №310970 

>>310959

Та, которая Метт Зандра, неплохая, Котерова не читал.

Аноним Вск 18 Авг 2013 06:17:11  #139 №310974 

Пытался решить с помощью циклов - не получилось. Тогда решил так, как решают ГУМАНИТАРИИ:
http://codepad.org/GMgOJnnC
Так допустимо?

Аноним Вск 18 Авг 2013 07:49:23  #140 №310982 

>>310958
в htaccess не прописан лимит памяти, проверил это сразу же.
>>310782 кун

Аноним Вск 18 Авг 2013 07:50:19  #141 №310983 

>>310958
по тестам запили годное что нибудь же.

Аноним Вск 18 Авг 2013 11:24:23  #142 №311005 

>>309593
Наконец смог вернуться к пхп. И сразу же вопрос. Где в MVC следует делать соединение с базой, именно new PDO все дела? Нужно ли соединение выносить в отдельный класс, например синглтон?

Аноним Вск 18 Авг 2013 12:19:03  #143 №311012 

Калькулятор
http://ideone.com/3tkcNY

Аноним Вск 18 Авг 2013 12:38:43  #144 №311024 

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

Аноним Вск 18 Авг 2013 12:45:13  #145 №311028 

>>311024
>Когда мы создаем новый объект, всем его полям присваивается значение null. Потому наши объекты пусты. Обратиться к полю объекта можно с помощью оператора «->», напоминающего стрелочку. Слева пишется переменная, хранящая объект, а справа — имя поля.
Из пасты опа http://pastebin.com/14jj6uUc

Аноним Вск 18 Авг 2013 12:52:24  #146 №311035 

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

Аноним Вск 18 Авг 2013 12:54:49  #147 №311037 

>>311028
Благодарю няша

Аноним Вск 18 Авг 2013 12:57:23  #148 №311041 

Поделюсь с аноном ВИДЕОКУРСОМ. Имхо отличное дополнение к урокам ОПа и вроде затрагиваются темы 2го левела.
http://www.youtube.com/watch?v=l21g8dJmD7U&list=PL21E20F9A122DC853

!xnn2uE3AU. Вск 18 Авг 2013 13:02:14  #149 №311044 

>>310777

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

> Trying to get property of non-object in /home/z4Nu4B/prog.php on line 85
Это потому, что у тебя в списке объектов присутствует null для удаленных с карты мышек

> Creating default object from empty value in /home/z4Nu4B/prog.php on line 44
Это еще хуже, ты создаешь пустой объект, возможно из-за этого появилась мышка на карте

Исправь все варнинги без исключения.

> коты не отдыхают
Ты код move() посмотри и посмотри что в конце стоит hungry = 1

Насчет алгоритма у мышки, вот тут сомнительное место:

> if ($x < $vectorX * (-1)) {
Почему vectorX сравнивается с x? Разве его не надо сравнивать с нулем? Этот вектор же не привязан к конкретной координате а просто указывает направление.


Также, у тебя чем дальше кошка, тем она сильнее влияет на вектор:
> $vectorX = $vectorX + ($field->cats[$i]->x - $this->x);
Это неправильно. При расчете потенциального поля наибольшее влияние оказывает та кошка, что ближе к мышке (так как она опаснее) а не дальше. Для этого надо делить ($field->cats[$i]->x - $this->x) на R в квадрате, где R — расстояние между кошкой и мышкой.

Что касается свойств объектов: их все надо сделать private и protected, а не public. Я вижу, что ты по-прежнему лезешь напрямик к свойствам одного объекта из другого, это нехорошо, сделай свойства закрытыми и обращайся к ним только через методы объекта.

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

!xnn2uE3AU. Вск 18 Авг 2013 13:09:23  #150 №311048 

>>310920

Программа неплохая, но пока есть баги на некоторых числах. Анон, в числах вроде «100 000 017» не надо писать «ноль тысяч»: http://ideone.com/anrqVQ

Должно быть:

> На вашем счету сто миллионов семнадцать (100,000,017) рублей

Насчет тестов, про которые говорил анон, если есть желание, можешь их прикрутить, если нет, то не надо. Суть в том, что ты делаешь массив с вариантами чисел и правильными вариантами письменных форм, например, такой:

$testCases = array(
100000017 => 'На вашем счету сто миллионов семнадцать (100,000,017) рублей',
6 => 'На вашем счету шесть (6) рублей'
....
);

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

!xnn2uE3AU. Вск 18 Авг 2013 13:13:03  #151 №311050 

>>310964

Интересно же

>>310974

Нормально. Чтобы с делать с циклом, надо сначала собрать все варианты слов в массив (получится массив массивов):

$wordSets = array(
$word1,
$word2,
$word3,
$word1,
$word2,
$word3
...
);

И пройтись циклом по массиву, но не уверен, будет ли это проще, чем твой вариант?

!xnn2uE3AU. Вск 18 Авг 2013 13:44:55  #152 №311056 

>>310983

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

>>311005

А, это задача на ООП и архитектуру.

Вопрос, где хранить объект PDO (и другие объекты, которые могут понадобиться в приложении), уже давно волнует умы архитекторов. Вот например огромная статья (читать не надо) от Мартина Фаулера, с обзором способов: http://martinfowler.com/articles/injection.html#UsingAServiceLocator

Тут можно использовать паттерн SeviceLocator: делаем класс ServiceLocator, у него метод getDbAdapter(), который будет создавать либо возвращать сохраненный ранее экземпляр PDO:

...
$pdo = $locator->getDbAdapter();
...

Сам объект $locator мы можем создавать где-нибудь в начале работы приложения. Потом в locator можно будет добавить и другие get* методы если понадобится.

Хочу сразу предупредить. В MVC запросы в базу данных надо отправлять не из любого места, а только из определенных классов (которые иногда не совсем правильно называют моделями). Есть несколько подходов, самый простой — паттерн TableGateway. При его использовании мы делаем для каждой таблицы свой класс для работы с ней и в нем методы для добавления/удаления/поиска записей.

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

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

!xnn2uE3AU. Вск 18 Авг 2013 18:05:31  #153 №311170 

>>311012

Все верно сделано, ни одной ошибки не нашел.

>>311024

Он применяется в ООП, для обращения к полям и методам объектов. Если тебе интересна эта тема, можешь почитать например тут http://www.php.net/manual/ru/language.oop5.php

>>311035

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

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

!xnn2uE3AU. Вск 18 Авг 2013 18:19:15  #154 №311182 

>>311041

Кстати, интересно, я не знал, что в сети столько видеокурсов, жаль большинство на английском. Например, перейдя по твоей ссылке, наткнулся на другое, годное, видео: http://www.youtube.com/watch?v=h2Nq0qv0K8M

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

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

Аноним Вск 18 Авг 2013 19:22:09  #155 №311216 
1376839329773.jpg

>>311048
http://codepad.org/pG9rHz2m
Какая-то ерунда получилась, но работает правильно.
Надо бы переделать вывод при нуле, но неохота снова копаться в этой гадости.

Аноним Вск 18 Авг 2013 19:29:59  #156 №311223 
1376839799473.jpg

>>310648
Спасибо, опушка, добра.
Теперь все правильно выводит.
http://ideone.com/757ifw
Ошибка была в том, что если делать так:

$interimStep[$i][$j] = $k;
то в interimStep[$i][$j] будет не именно предпоследний узел кратчайшего пути, а просто какой-то промежуточный, путь таки можно было восстановить.

!xnn2uE3AU. Вск 18 Авг 2013 20:26:26  #157 №311242 

>>311216

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

> $number = number_format($number);
> $numberSplit = preg_split('/,/', $number);

> $number = intval($number);

Нехорошо. С числами надо работать математическими операциями, а не такими костылями. Можно использовать floor($x / 1000) чтобы получить первые цифры числа и $x % 1000 чтобы взять последние.

Также, функция smallNumberToText() мне не нравится, я насчитал там 5 вложенных друг в друга if. 5 — слишком много, не пойдет, надо сделать не больше 3 уровней вложенности. Почему? Потому, что чем больше вложенности, тем труднее понять код.

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

Мне кажется, там можно все упростить до 2-3 невложенных друг в друга if.

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

!xnn2uE3AU. Вск 18 Авг 2013 20:29:49  #158 №311244 

>>311223

Теперь все верно работает. Хорошо, что ты умеешь сам найти подходящий алгоритм и применить его к задаче. Хотя, конечно, на практике для поиска пути лучше бы использовать более оптимальные алгоритмы, так как алгоритм Флойда-Уоршелла самый медленный из всех (сложность O(N^3)).

Но для учебной задачи из 20 точек это сойдет.

Аноним Вск 18 Авг 2013 21:11:59  #159 №311261 

>>311056
Доброкун, а как тебе код показать-то? Там же неск-ко файлов.

!xnn2uE3AU. Вск 18 Авг 2013 21:16:55  #160 №311262 

>>311261

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

А пока можешь открыть gist.github.com (без регистрации и смс), перетащить файлы на страницу и нажать кнопку внизу.

Аноним Вск 18 Авг 2013 21:35:34  #161 №311267 

>>311262
Чейт не идет. Нажал кнопку и загрузка идет уже минут 30. Но там все равно ничего показывать, были одни вопросы. Копипастил по-маленьку http://habrahabr.ru/post/150267/ - статья крайне простая, но все равно есть вопросы.

Аноним Вск 18 Авг 2013 21:45:36  #162 №311270 

>>311267
Завтра куда-нить залью

!xnn2uE3AU. Вск 18 Авг 2013 22:00:34  #163 №311274 

>>311267

А, видимо что-то глючит. Надо заходить не на http, а на https://gist.github.com . Ну хорошо, завтра так завтра, но вообще можешь просто какой-то файл пока на pastebin залить.

Статья подойдет как отправная точка.

Аноним Вск 18 Авг 2013 22:01:33  #164 №311275 

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

Аноним Вск 18 Авг 2013 22:16:39  #165 №311281 

>>311274
О, спасиб, заработало! Ну собс-но вот https://gist.github.com/anonymous/9069b80459332ae30ff9 Код пока совсем не работает, т.к.в MainController я пока ничего не написал, но сложность в том что я не понимаю как в templateViews попадает $contentView, параметр для function generate класса View

Аноним Вск 18 Авг 2013 22:20:37  #166 №311283 

>>311281
Ммм, нужно сказать что кода весь код в одном месте, многое становиться понятным, лол. Теперь вижу, что include делается в методе, где есть та самая переменная.

!xnn2uE3AU. Вск 18 Авг 2013 22:39:45  #167 №311293 
1376851185121.jpg

>>311275

Молодец, правильное решение. Я всегда рад в этом помочь. У меня есть:

— пикча как установить PHP
— паста «Как установить Апач» https://gist.github.com/anonymous/1c8c4c8a13c2c5547dc4
— паста, как пользоваться командной строкой https://gist.github.com/anonymous/9378956452c8e4a72ac8

!xnn2uE3AU. Вск 18 Авг 2013 22:40:44  #168 №311294 
1376851244871.jpg

← продолжение

Аноним Вск 18 Авг 2013 22:43:38  #169 №311297 

>>311275
Рекомендую всё самому разобрать, это очень увлекательно и весело, не поленись.
Сам использую VirtualBox + Ubuntu Server Debian, но Ubuntu Server для начала, думаю, будет чуть проще.

Полезные ссылки:
1) http://christophermaier.name/blog/2010/09/01/host-only-networking-with-virtualbox - настройка сети между хостом и гостевой системой, для доступа к виртуалке/серверу/сайтам по айпи или именам
2) https://help.ubuntu.com/community/ApacheMySQLPHP - очень полезный мануал по установке и настройке связки

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

После установки я делаю следующее (очень опционально)
Всё нижеуказанное подходит только для локального сервера под разработку.
1) изменить php.ini для отображения ошибок
2) включить в файле сайта (то, что подразумевается под апачевским Virtual Hosts, см. wiki убунты) поддержку .htaccess (<code>AllowOverride All</code>)
Изменяю пользователя и группу, владеющих Apache на локальные, посредством редактирования переменных <code>APACHE_RUN_USER</code> и <code>APACHE_RUN_GROUP</code> в файле <code>/etc/apache2/envvars</code>.
Дальше можно, например, отредактировать файл сайта: указать ServerName (и добавить необходимые записи в /etc/hosts или виндовый аналог), изменить директорию сайта.

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

!xnn2uE3AU. Вск 18 Авг 2013 23:00:38  #170 №311300 

>>311293

Та паста про Апач неправильная, возьми эту, улучшенную и исправленную: https://gist.github.com/anonymous/631b5480bbf6fa0eb752

Аноним Вск 18 Авг 2013 23:03:36  #171 №311302 
1376852616602.jpg

>>311300
>Вопрос контрастнее ответа

!xnn2uE3AU. Вск 18 Авг 2013 23:12:34  #172 №311304 

>>311302

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

Аноним Вск 18 Авг 2013 23:17:21  #173 №311309 

>>311293
>>311297
>>311300
Благодарю, завтра разберусь. А то надоел уже такой пробел в знаниях.

Аноним Вск 18 Авг 2013 23:27:08  #174 №311318 

>>311304
#### Q. Как менять настройки PHP?
A. Соснуть хуйца и сделать бочку.

!xnn2uE3AU. Вск 18 Авг 2013 23:29:32  #175 №311319 

>>311281

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

Замечания:

Код инициализации БД (create table) надо убрать из конструктора. Во-первых, не очень хорошо в конструкторе делать какие-то сложные вещи (не помню почему), и тем более нехорошо при попытке просто создать объект создавать таблицы. Лучше сделать отдельный скрипт install.php для этой цели и вызывать его явно.

А еще лучше вынести SQL код в отдельный db.sql файл, так будет читабельнее.

Организация кода:

— Файл config.php логичнее назвать boostrap.php. config — это файл с настройками, а не с кодом.
— класс надо назвать не Route (маршрут) а Router (маршрутизатор), хотя по идее это так называемый front controller
— Файлы с классами логично называть, как и классы, с большой буквы, так делают в фреймворках ZF/Yii
— каждый класс должен быть в своем файле. В файле с классом не должно быть другого кода (это я про DBConnect). Имя класса должно соотноситься с именем файла. Тут есть такие варианты

1) валим все в одну папку, класс MyController идет в файл MyController.php
2) используем стуктуру с папками, например так: класс Controller_Board хранится в Controller/Board.php (эта схема используется в ZF)
3) придумываем свой странный велосипед

> Route::error404();
Хорошо бы в эту функцию передавать причину вызова, например «No controller named 'xyz'», так тебе же будет проще искать ошибку.

> static function start(){
Поскольку это учебная задача, давай стараться использовать статические методы как можно реже, а не везде. Router, думаю, можно сделать не-статическим.

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

Исключение - паттерны вроде Singleton и utility-классы с именами вроде Util_*

!xnn2uE3AU. Вск 18 Авг 2013 23:30:56  #176 №311320 

>>311318

Да, можно и так, только букву A убрать еще.

Аноним Вск 18 Авг 2013 23:31:51  #177 №311321 

>>311304
Заголовок на странице -- «Вопросы» же.
Еще меня умиляет
>Те, кто использует сборки вместо хардкорной самостоятельной установки, становятся на шаг ближе к блондинкам. Так что иди и удали денвер.
В контексте установки бинарников Apache и PHP в Windows.

Установил-виртуалку-с-линуксом-я-у-мамы-молодец-кун

!xnn2uE3AU. Вск 18 Авг 2013 23:41:33  #178 №311326 

>>311321

Контрастная (более читабельняя, но менее няшно выглядящая, увы) версия: https://gist.github.com/anonymous/946f4f1830be3955fe17

В Windows сложнее ставить, так как в том же дебиане достаточно набрать apt-get install (в Убунте по моему даже через GUI можно), а тут еще голову поломать надо.

Аноним Пнд 19 Авг 2013 00:07:13  #179 №311335 

>>311326
Ничто не мешает собрать самому же.

!xnn2uE3AU. Пнд 19 Авг 2013 00:10:25  #180 №311336 

>>311335

Не вижу особого смысла, чем плох тот что уже собран?

Аноним Пнд 19 Авг 2013 00:21:11  #181 №311338 

>>311336
Ничем. Но и это не мешает собрать самому же.

Аноним Пнд 19 Авг 2013 02:13:08  #182 №311358 
1376863988688.jpg

>>311242
>А чтобы не испытывать ненависть к коду, старайся делать его как можно более стройным, логичным и красивым. Тогда ты будешь смотреть на него с гордостью, как мастер на свою работу, а не отвращением.
Ладно. Всё, я кончил: http://ideone.com/BEmWdy

Аноним Пнд 19 Авг 2013 03:33:05  #183 №311362 

>>309867
Добавил ещё одну переменную:
http://ideone.com/gvteCs
Правильно сделал? Или есть ещё какой-то обход копипасты?

Аноним Пнд 19 Авг 2013 08:14:12  #184 №311378 

Сап, анон.
Скажи как работать с XML файлом в gz архиве?

!xnn2uE3AU. Пнд 19 Авг 2013 09:53:39  #185 №311392 

>>311378

Если файл маленький, то прочитать его file_get_contents и распаковать с помощью zlib_decode.

Еслди файл огромный и надо читать его поточно, то можно использовать это: http://www.php.net/manual/ru/wrappers.compression.php и читать файл с помощь. fopen("compres.zlib://..."). В таком случае PHP будет на ходу распаковывать файл по мере чтения. Этот вариант, наверно, сложен для тебя.

!xnn2uE3AU. Пнд 19 Авг 2013 10:30:10  #186 №311400 

>>311358

Теперь все хорошо сделано.

>>311362

Так сойдет, хорошо. Теперь все правильно.

Аноним Пнд 19 Авг 2013 11:05:04  #187 №311412 

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

Аноним Пнд 19 Авг 2013 11:21:37  #188 №311415 

>>311412
Суть веб розроботки - делать приложения сайты, доступ к которым осуществляется с помощью браузера.
Что и как мы используем - вопрос личных предпочтений.
В некоторых случаях использование определенных инструментов диктуется невозможностью реализовать иначе.
Можно использовать похапэ, руби, питон и более серьезные языки в бекенде. Можно использовать хтмл, ксс, js во фронтенде.
Странный вопрос.

!xnn2uE3AU. Пнд 19 Авг 2013 11:28:46  #189 №311417 

>>311412

> Должны ли мы разрабатывать дизайн сайта самостоятельно или есть шаблоны
Если в компании все грамотно сделано, то это выглядит так:

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

Они делают HTML + CSS верстку на основе дизайна, добавляют на страницу JS скрипты для интерактивности и анимаций (чтобы все двигалось, разворачивалось и прыгало как задумано).

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

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

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

То есть, сайт — это продукт, над которым работает несколько человек. Это если компания большая.

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

> Мы используем фрейворк с помощью которого пишем скрипты
Неправильно. Скрипты пишет не фреймворк, а программист (то есть ты?). Но при этом программист может не писать весь код с нуля, а использовать код фреймворков, библиотек, CMS.

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

> Где конкретно используется js?
js — это язык программирования, который умеет исполнять браузер. Ты можешь встроить в страницу JS-скрипт, например чтобы при нажатии кнопки или наведении мыши он запускался и что-то делал, например открывал окошко или выводил какую-нибудь надпись, или двигал картинку по странице, или менял цвет элемента, что угодно.

Аноним Пнд 19 Авг 2013 11:32:03  #190 №311419 

>>311415
Это понятно, меня больше интересует вопрос как связаны бэкэнд и фронтэнд, генерят ли фронтэнд фреймворки? Есть ли шаблоны? В общем их взаимодействие не уложилось в цельную картинку в голове. Спасибо за ответ, анон

!xnn2uE3AU. Пнд 19 Авг 2013 12:29:30  #191 №311433 

>>311419

Шаблоны делает верстальщик и подключает к фреймворку программист (иногда программист и верстает сам). Чтобы разбираться в фреймворках, надо чначала изучить Php, ООП и MVC. Без этого их не понять.

Аноним Пнд 19 Авг 2013 12:38:33  #192 №311437 

>>311433
Лол, с этим проще я учил джаву и гвидон на уровне лаба1, но вопрос веб-программирования был для меня закрыт. Спасибо анон

Аноним Пнд 19 Авг 2013 12:39:23  #193 №311438 

>>311417
Благодарю анон, все очень понятно

Аноним Пнд 19 Авг 2013 13:44:50  #194 №311455 

ОПчик, дай, пожалуйста, задачку на HTML+CSS без JS пока не осилил уровня PHP junior.
И еще, есть ли подводные камни в использовании CoffeeScript вместо обычного JS?

Аноним Пнд 19 Авг 2013 14:08:43  #195 №311461 
1376906923349.jpg

>>311455
>задачку на HTML+CSS
>уровня PHP junior
Пикрелейтед

Сделал >>309589 ?

Аноним Пнд 19 Авг 2013 14:09:47  #196 №311462 

Задача про банкомат

http://ideone.com/eVngEn

Аноним Пнд 19 Авг 2013 14:43:28  #197 №311483 

>>311461
А что не так? PHP деволоперам часто дают верстать или доделовать макет под себя.

Аноним Пнд 19 Авг 2013 14:50:22  #198 №311489 

>>311392
$linkToXmlFile = 'compress.zlib://eve-blueprints-en-US.xml.gz';
$xml = new XMLReader();
echo $xml->open($linkToXmlFile);

Нашел такой способ, но я думаю что php полностью грузит файл в память и если файл ООЧЕНЬ большой то хост убьет скрипт.

Аноним Пнд 19 Авг 2013 14:58:30  #199 №311494 
1376909910104.jpg

Делюсь годнотой, для тех кто ищет книги по html/css/js: www.frontbooks.ru

Аноним Пнд 19 Авг 2013 16:31:37  #200 №311549 

>>311483
Все так. Это тонкий сарказм же.

Аноним Пнд 19 Авг 2013 17:07:37  #201 №311562 

>>311319
Доброкун, сегодня взялся за код, а браузер мне пишет что Firefox определил, что сервер перенаправляет запрос на этот адрес таким образом, что он никогда не завершится. Значит ли это что для 404 тоже нужно писать свой контроллер?

Аноним Пнд 19 Авг 2013 17:09:31  #202 №311565 

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

!xnn2uE3AU. Пнд 19 Авг 2013 17:57:36  #203 №311585 
1376920656647.png

>>311455

> дай, пожалуйста, задачку на HTML+CSS без JS
Простые задачи 1-10 из второго поста в треде делал?
Задачу про верстку текста с котом (номер 11, картинка тут >>310442 HTML тут http://pastebin.com/s1P96nVA ) делал?

Если да, то держи задачу 12:

> Сверстай форму как на картинке. Форма расположена по центру страницы.

> Ширина диалога 400px на широкой странице, на узкой — сколько есть места, такая и ширина. Можно использовать bootstrap.css, но только если это не приведет к каше в коде и куче костылей.


> есть ли подводные камни в использовании CoffeeScript вместо обычного JS?
Есть. Кофескрипт - это всего лишь синтаксис для JS. Если ты не изучив как следует JS (замыкания/прототипы/области видимости, все что есть на learn.javascript.ru) берешься за кофескрипт, получается, ты не знаешь, ни того, ни другого.

Если же ты хорошо знаешь JS, то проблем нет.

Аноним Пнд 19 Авг 2013 18:08:51  #204 №311590 

Доброкун, вопрос намбер некст. Как оформить добавление записи, я имею ввиду визуально? css и html почти не знаю, поэтому думаю просто добавить в MainView ссылку типа "добавить тред" или что-то в этом духе. Как следует делать? В http://jsbin.com/asamex/1 вообще нет возможности добавлять тред.

!xnn2uE3AU. Пнд 19 Авг 2013 18:12:05  #205 №311591 

>>311489

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

>>311462

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

> return "$result";
Кавычки тут не нужны, значит, не надо их ставить.

> $errors = checkPaymentPossibility($amount, $billSum);
Логичнее бы чтобы checkPaymentPossibility сама вызывала getBillSum().

Анон, а не хочешь решить усложненную версию? Допустим, что у нас кроме банкнот в 5000, 1000, 500, 100 есть еще банкноты номиналом 200 и 2000. Попробуешь сделать?

!xnn2uE3AU. Пнд 19 Авг 2013 18:26:01  #206 №311596 

>>311590

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

Вот, добавил ссылку, замаскированную под кнопку: http://jsbin.com/asamex/3/

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

Аноним Пнд 19 Авг 2013 19:46:28  #207 №311605 

>>311585
http://jsbin.com/ibibUYU/3
Осталось сделать вертикальное выравнивание, кнопку закрытия и разобраться с длиной полей ввода.

Нагуглил много вариантов вертикального выравнивания блока. Обычно предлагают обернуть блоком и потом менять тип на таблицу+ячейку и все в подобном духе. Что посоветуешь, ОП?

!xnn2uE3AU. Пнд 19 Авг 2013 20:02:26  #208 №311609 

>>311605

display: table вполне подойдет. Увы, в CSS нет нормального вертикального выравнивания без хаков и исхитрений.

Надо, чтобы окно не висело само по себе на сером фоне, а висело поверх страницы (как на картинке). Страницу можно заполнить квадратами 300×300, например.

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

Насчет инпутов, гугли свойство box-sizing. Если ты пишешь width:100% то ты задаешь внутреннюю ширину, а к ней добавляется еще бордер и паддинг. Задать display: block и width: auto не выйдет, так как инпут — это так называемый replaced element и у него width: auto просто ставит какую-то фисированную ширину (в отличие от блочных элементов, которые при width: auto растягиваются под ширину родителя).

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

Аноним Пнд 19 Авг 2013 20:08:10  #209 №311613 

>>>311591Анон, а не хочешь решить усложненную версию? Допустим, что у нас кроме банкнот в 5000, 1000, 500, 100 есть еще банкноты номиналом 200 и 2000. Попробуешь сделать?
А в чем подвох? Добавил 2 записи в массив http://ideone.com/QLncGJ

!xnn2uE3AU. Пнд 19 Авг 2013 20:12:40  #210 №311617 

>>311613

Подвох тут в том, что есть интересные комбинации денег вроде этой: http://ideone.com/8jZ8Fp (заметь твоя программа выдала человеку 1500 вместо 1600 как ни в чем не бывало, сто рублей видимо банк оставил себе на пропитание).

Подвох в том, что если выдать 500-ю банкноту то ничего не выйдет, так как надо выдать 1×1000 3×200

Аноним Пнд 19 Авг 2013 20:16:09  #211 №311622 

>>311617
Н-ну банкомат то рассейский, воркин эз интендед!!

Аноним Пнд 19 Авг 2013 20:24:17  #212 №311629 
1376929457935.jpg

>>311622
П-погоди!! Пикрелейтед же!
Мои банкоматы честнее ваших.>>311617

Аноним Пнд 19 Авг 2013 20:27:07  #213 №311632 

>>311629
Все, понял, дело в оставшихся купюрах.

!xnn2uE3AU. Пнд 19 Авг 2013 20:28:12  #214 №311634 

>>311629

Как он мог выдать 1×100 когда в нем нет 100-рублевых купюр? Твой банкомат еще более жульнический. Алсо, на скриншоте можно что угодно нарисовать. Ты код покажи.

Аноним Пнд 19 Авг 2013 20:38:34  #215 №311642 

Доброкун, а имеет ли вообще смысл писать в MVC CREATE POST и тд., т.е. создавать структуру таблицы? Только что открыл для себя phpmyadmin, очевидно что через него проще и удобнее делать таблицы, а в коде можно кидать только запросы. Или я чет упустил?

!xnn2uE3AU. Пнд 19 Авг 2013 20:40:40  #216 №311644 

>>311642

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

!xnn2uE3AU. Пнд 19 Авг 2013 20:42:40  #217 №311645 

>>311642

Ой, я не так тебя понял.

Ты можешь создавать таблицы через phpMyAdmin а потом их сдампить (он это умеет) в SQL файл и этот файл добавить в проект, чтобы я например мог увидеть какая у тебя структура БД. При этом SQL код ты должен понимать, и понимать что значат все эти create table primary key not null default.

Аноним Пнд 19 Авг 2013 20:48:24  #218 №311649 

>>311645
Ммм, ясно. А идеологически что правильнее? Строчить структуру в пхп или через спец. приложения?

Аноним Пнд 19 Авг 2013 21:08:26  #219 №311656 

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

Аноним Пнд 19 Авг 2013 21:58:47  #220 №311674 

>>311656
выкладывай свой код сюда же http://jsbin.com/
>блок сам уменьшался
читай про max-width/min-width

!xnn2uE3AU. Пнд 19 Авг 2013 22:03:09  #221 №311675 

>>311656

Если ты про задачу 2, то она на знание свойств margin и max-width и поведение элементов с display: block и width:auto. Почитать можно тут: http://softwaremaniacs.org/blog/2005/08/27/css-layout-flow/

Если по-прежнему непонятно, пости код, подскажу еще.

!xnn2uE3AU. Пнд 19 Авг 2013 22:03:34  #222 №311676 

>>311649

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

!xnn2uE3AU. Пнд 19 Авг 2013 22:04:05  #223 №311677 

>>311674

Молодец, анон, правильно подсказываешь.

Аноним Пнд 19 Авг 2013 22:09:34  #224 №311678 

http://ideone.com/pI3w2S
Надо бы чуть по-другому сделать, чтобы поменьше перебирал, но я хочу спать.

Аноним Пнд 19 Авг 2013 22:22:52  #225 №311680 

>>311678
кокой умный!
а я никак не вразумею.

Аноним Пнд 19 Авг 2013 22:30:23  #226 №311683 

Задача 6 http://jsbin.com/exILOyu/1/edit
Кнопка неправильной высоты получается и текст в самой кнопке по вертикали криво лежит.
ЧЯДНТ?

Аноним Пнд 19 Авг 2013 23:14:08  #227 №311685 
1376939648344.png

>>311683
Так же годно как ОП я не обьясню, но суть следующая:
Смотри на пикчу: та высота и ширина, которую ты указываешь свойствами, влияет на размер области content. А реальный размер = border + padding + content. Это надо учитывать. Или же использовать свойство box-sizing. Есть и исключения, например у кнопок свойства height и width указывают конечный размер.
Если что-то смущает - сразу включай developer tools и инспектируй это.

Аноним Пнд 19 Авг 2013 23:38:05  #228 №311695 

>>311685
Спасибо, понял.

!xnn2uE3AU. Втр 20 Авг 2013 00:56:33  #229 №311713 

>>311683

Анон тебе дал картинку. У инпутов по умолчанию height/width задают внутреннюю ширину (content-box), а у кнопок — внешнюю (border-box). Потому если писать и там и там 30, высота получается разная. Задача как раз и придумана для проверки этих знаний.

Также, вот это вот:

* { margin: 0; padding: 0;}

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

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

я всегда был противником всех этих ресетов, и наконец-то западные верстальщики тоже поняли, что это плохо и перешли с reset.css на normalize.css: http://necolas.github.io/normalize.css/ Это уже лучше чем ресет, но все равно мне не нравится

!xnn2uE3AU. Втр 20 Авг 2013 00:57:47  #230 №311714 

>>311683

Также, border: 2 писать нельзя. Советую открыть htmlbook.ru и почитай там про свойство border (там все на русском и понятно).

Аноним Втр 20 Авг 2013 01:26:06  #231 №311717 

ОП, ты не чем еще пишешь/любишь писать?

Аноним Втр 20 Авг 2013 01:47:13  #232 №311722 

Начал копаться в Yii и у меня возник глупый вопрос, который не дает мне спать. Почему во всех файлах нет закрывающего тега "?>"?

!xnn2uE3AU. Втр 20 Авг 2013 01:54:54  #233 №311724 

>>311722

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

>>311717

Я только на PHP/JS/HTML/CSS пишу, некоторые другие языки я немного знаю, но денег за них не платят, а просто так писать как-то некогда.

!xnn2uE3AU. Втр 20 Авг 2013 01:58:33  #234 №311725 

>>311678

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

Аноним Втр 20 Авг 2013 02:02:14  #235 №311727 
1376949734429.jpg

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

Аноним Втр 20 Авг 2013 05:26:35  #236 №311734 

ОП, пытался подрубить пхп 5.5.2 к апачу 2.4.6, тред сейф, все по инструкции, но апач ругается, что не может грузануть php5apache2_4.dll. Не знаешь, что делать?

Аноним Втр 20 Авг 2013 08:43:58  #237 №311745 

>>311727
Хочешь куда-нибудь сходить?
Хочу, но не с тобой.

!xnn2uE3AU. Втр 20 Авг 2013 09:55:12  #238 №311752 

>>311734

Пожалуйста, напиши в какой папке установлен Апач, в какой PHP, какой код ты добавил в httpd.conf и есть ли библиотека php5apache... по тому пути, который ты прописал в конфиге.

Я когда-то сталкивался с такой же проблемой, но не помню, как решал.

>>311727

Читал статьи тут?

pepelsbey.net/
chikuyonok.ru/category/markup/
www.artlebedev.ru/tools/technogrette/
www.html5rocks.com/ru/resources (так как сайт нерусский, то статьи на русском там надо еще найти)
clubs.ya.ru/ui/
speedupyourwebsite.ru/books/speed-up-your-website/ (это про клиентскую оптимизацию, но тоже очень полезно)
+ периодически на Хабре появляются статьи про HTML5/CSS3
+ можно наткнуться на что-то интересное листая тот же MDN
+ можно наткнуться на что-то интересное, читая спецификации HTMl/CSS (увы, только на английском)

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

Также, если ты хочешь расти дальше, то осваивай JS (learn.javascript.ru), DOM, Backbone, Angular. Ибо сейчас все больше и больше нужно верстать не просто страницы, а интерфейсы и сложные яваскрипт-приложения (а не просто натыкать на страницу плагинов от jQuery). Если ты не умеешь это делать, то будешь все менее и менее востребован.

!xnn2uE3AU. Втр 20 Авг 2013 09:56:00  #239 №311753 

>>311745

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

!xnn2uE3AU. Втр 20 Авг 2013 10:23:29  #240 №311759 

Прочел на реддите: http://www.reddit.com/r/webdev/comments/1kow2z/resources_for_a_django_dev_transitioning_to/

> I'm a freelancer with a fair amount of experience with Django, but I've been trying to get more into the PHP side of Wordpress lately since it seems like that's where most of the work is.

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

Так-то! Аноны, идите к нас изучать PHP вместо Питона и Хаскелла шучу, изучайте, Питон годный язык, хотя плохо что в нем нет проверки типов и меня бесит что там излишне часто используют try .. except вместо if. Это ненормально

Аноним Втр 20 Авг 2013 10:28:30  #241 №311760 

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

Аноним Втр 20 Авг 2013 10:31:11  #242 №311763 
1376980271483.jpg

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

Аноним Втр 20 Авг 2013 10:49:15  #243 №311767 

>>311759
> нет проверки типов
И зачем это нужно в динамическом языке?

Аноним Втр 20 Авг 2013 10:50:35  #244 №311768 

>>311753
Судя по тому, как она на него смотрит - они, вероятно, друзья.
Судя по тому, что у нее в руках - они, вероятно, вместе учатся.
И, вероятно, через 10+ лет она будет вспоминать эту ситуацию и жалеть, что сказала нет.

Аноним Втр 20 Авг 2013 10:52:19  #245 №311769 

>>311714
лол, это уже какой-то другой анон написал. я дал ссылку в режиме редактирования

!xnn2uE3AU. Втр 20 Авг 2013 10:56:36  #246 №311770 

>>311760

> то питон никогда не стал бы популярным.
Я бы не сказал, что он популярен (популярность языка на где-нибудь Хабре не соотносится с рыночной долей). PHP повсеместно используется в вебе, Java с C# − в серьезных больших приложениях, С++ для высокопроизводительных вещей. А все эти Python, Ruby, node пока имеют небольшую долю.

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

На Питоне с его динамичностью, я бы вообще побоялся что-то огромное писать.

PHP плохо выглядит только если смотреть на него как на ООП-язык. Если хочется программировать веб-приложения процедурно, то он легко бьет и Руби, и Питон по простоте. Не надо ни фреймворков, ничего, взял HTML, добавил несколько строчек кода и у тебя уже выводятся данные из таблицы. Плюс, освоить его очень просто, разработчиков толпы. Самое то для нижнего сегмента рынка.

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

Алсо, я когда-то тоже пытался написать свой мини-фреймворк на функциях (я знал про ООП и MVC, но хотел поискать альтернативы). Я бросил это дело, когда дошел до реализации форм, ибо не понял, как их сделать без ООП и что должна возвращать функция createForm(). Друпаловцы эту проблему решили — хранят форму в огромном нетипизированном массиве с 100500 полей

!xnn2uE3AU. Втр 20 Авг 2013 10:59:57  #247 №311773 

>>311767

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

function saveChanges(change) {
assert(change instanceof Change);
this.changes.push(change);
}

Если бы в JS были type hints как в PHP я бы просто написал

function saveChange(Change change) {
this.changes.push(change);
}

Второй вариант на мой взгляд в разы лучше.

!xnn2uE3AU. Втр 20 Авг 2013 11:01:00  #248 №311774 

>>311769

Жми кнопочку lock revision в следующи раз.

!xnn2uE3AU. Втр 20 Авг 2013 11:07:05  #249 №311775 

>>311768

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

> и жалеть, что сказала нет.
О чем жалеть, что она не стала встречаться с парнем, который ей не нравится? Скорее, она про него и не вспомнит.

!xnn2uE3AU. Втр 20 Авг 2013 11:08:17  #250 №311776 

>>311768

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

Аноним Втр 20 Авг 2013 11:09:19  #251 №311777 

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

Аноним Втр 20 Авг 2013 11:09:27  #252 №311778 

>>311713
Благодарю за развернутый ответ. У меня все получилось с box-sizing: border-box; . Но в огнелисе это по-другому работает -moz-box-sizing и -webkit-box-sizing для сафари.

!xnn2uE3AU. Втр 20 Авг 2013 11:15:09  #253 №311783 

>>311778

Ты код пость. Может там еще косяки есть.

>>311777
> количество неочевидных и нелогичных моментов больше, чем где бы то ни было.
Это только у тех, кто приходит с других языков и ждет что в PHP все будет так же, или кто не читает мануал (кстати, очень хороший и подробный), а книги 10-летней давности. Я практически никогда с этим не сталкивался.

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

Аноним Втр 20 Авг 2013 11:22:09  #254 №311785 

>>311776
"Клеить" можно и знакомую девушку же, не?
>клоун
Ну вот, пошли ярлыки.
>если они друзья, она вряд ли просто откажет одним словом
Как вариант, может это нет - означает "нет вслух, да в уме, уговори меня". Ох уж эти ваши 3д девушки.

Аноним Втр 20 Авг 2013 11:26:42  #255 №311788 

>>311783
http://jsbin.com/iXAJefE/1/edit?html,css,output так правильно?

!xnn2uE3AU. Втр 20 Авг 2013 11:30:24  #256 №311789 

>>311785

Просто он не следовал советам мастера пикапа.

Аноним Втр 20 Авг 2013 11:31:55  #257 №311790 

>>311788
>-moz-box-box-sizing
-moz-box-sizing

Аноним Втр 20 Авг 2013 11:34:34  #258 №311791 

>>311790
О, боги! А ведь у меня дофига чего сломалось ранее из-за такой идиотской невнимательности.

Аноним Втр 20 Авг 2013 11:36:37  #259 №311792 

>>311773
> function saveChanges(change) {
> assert(change instanceof Change);
> this.changes.push(change);
> }
Ты просто не понимаешь сути динамических языков и duck typing.

С твоим type hinting один хуй ошибки валятся в рантайме.
Если же я случайно передам параметр неправильного типа, то это все равно всплывет, когда я буду "использовать" этот самый параметр. Например:


class Bar:
def f(self):
return 1

def foo(bar):
return bar.f()

Если я в foo передам не инстанс Bar, то есть 2 варианта:
1) у bar есть метод f, и все заебись
2) иначе, и программа крашится по AttributeError.
Аноним Втр 20 Авг 2013 11:36:58  #260 №311793 

>>311791
Там же умный редактор, выделяет красным цветом ошибочные куски.

!xnn2uE3AU. Втр 20 Авг 2013 11:38:49  #261 №311794 

>>311788

Совет, не используй id в верстке. Почему? Потому, что тогда эту форму нельзя будет посместить на странице в 2 местах.

Также, в задаче была ширина 400 а не 200 px, невнимателен. Также, промежуток не равен 10px: http://jsbin.com/iXAJefE/2/?html,css,output

Также, цвет и граница кнопки и инпута не как на картинке.

!xnn2uE3AU. Втр 20 Авг 2013 11:50:47  #262 №311797 

>>311792

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

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

Вспомнил хороший пример, когда duck typing не работает: если мы в JS передаем случайно вместо массива строк строку. Например, так:

function doSomething(list) {
for (var i = 0; i < list.length; i++)
var item = list;
}

Суть в том, что в JS со строкой можно работать как с массивом символов, и если мы в функцию вместо массива строк передаем одну строку, то ничего не падает, но вот данные заносятся неправильные. Как-то обжегся на этом, теперь всюду пишу assert(isArray(x))

Аноним Втр 20 Авг 2013 11:52:49  #263 №311798 

>>311794
http://jsbin.com/iXAJefE/4/edit?html,css,output
там padding: 10px; не помещается в кнопке. Или надо как-то по-другому?

!xnn2uE3AU. Втр 20 Авг 2013 11:53:11  #264 №311799 

>>311797

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

Аноним Втр 20 Авг 2013 11:54:25  #265 №311801 

>>311792
>Если же я случайно передам параметр неправильного типа, то это все равно всплывет, когда я буду "использовать" этот самый параметр.
Суть динамических питушков - если я засуну себе в жопу дилду с гвоздями - то это всё равно всплывёт. Вариант сделать так, чтобы дилду с гвоздями себе в жопу засунуть нельзя было в принципе питушки воспринимают как ограничение ональных свобод. По факту динамические языки подходят только для всяких мелких поделок, ждать пока что-то "всплывёт" в серьезном проекте с зиллионами строк, потом фиксить это и ждать пока всплывёт что-то еще - слишком накладно.

Аноним Втр 20 Авг 2013 11:59:52  #266 №311803 

>>311797
> Не понимаю. По моему это метод программирования на авось, авось не сломается.
Это вся суть динамических языков, епта. Как будто в пхп не так. Хочешь надеждности - пиши на хаскелл.
> Неудивительно, что в Питоне все пишут тесты
Охуеть, ты так говоришь, что это что-то плохое. Как я понял, в пхп не пишут тесты?

> function doSomething(list) {
> for (var i = 0; i < list.length; i++)
> var item = list;
> }
Что это за хуйня? Ты length раз присваиваешь item=list?

Аноним Втр 20 Авг 2013 12:00:29  #267 №311804 

>>311801
Тебе наверное и ява нравится.

!xnn2uE3AU. Втр 20 Авг 2013 12:04:28  #268 №311805 

>>311803

вакабаразметка же
item = list [ i ]

!xnn2uE3AU. Втр 20 Авг 2013 12:08:05  #269 №311807 

>>311798

Как не помещяется? Не понял тебя. Алсо: http://jsbin.com/iXAJefE/5/edit — кнопка и инпут не выровнены вертикально. Алсо, цвета не те.

Аноним Втр 20 Авг 2013 12:08:38  #270 №311808 

задача 3 http://jsbin.com/aNURAQO/2/edit?html,css,output
как смог не знаю, как уменьшить блок до размера текста

!xnn2uE3AU. Втр 20 Авг 2013 12:14:21  #271 №311811 

>>311808

Серую рамку вокруг делать не надо, это как бы границы окна браузера.

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

Блоки выровнены не как на картинке: http://jsbin.com/aNURAQO/2/edit?html,css,output

Расстояние между блоками больше 10px (сравни с паддингом слева от первого блока).

> не знаю, как уменьшить блок до размера текста
Может, height: auto?

Алсо, вот это: width: auto; писать не надо, она по умолчанию и так auto, и значит незачем это писать.

Аноним Втр 20 Авг 2013 12:19:08  #272 №311813 

>>311807
> помещяется

Аноним Втр 20 Авг 2013 13:01:07  #273 №311824 

>>311609
http://jsbin.com/ibibUYU/15
Оп, подскажи, где ошибка?
Подозреваю, что связано с высотой блока .login-parent.
Но если увеличить её до 100%, тогда вся форма растягивается.

Аноним Втр 20 Авг 2013 13:13:46  #274 №311826 

>>311591
>Анон, а не хочешь решить усложненную версию? Допустим, что у нас кроме банкнот в 5000, 1000, 500, 100 есть еще банкноты номиналом 200 и 2000. Попробуешь сделать?
Реквестирую подсказку.

!xnn2uE3AU. Втр 20 Авг 2013 13:21:14  #275 №311829 

>>311826

http://informatics.mccme.ru/moodle/mod/book/view.php?id=815

Разберешься? Я мельком посмотрел, вроде то, но если будут сложности, пиши, посмотрим вместе.

!xnn2uE3AU. Втр 20 Авг 2013 13:24:14  #276 №311830 

>>311824

Чтобы выровнять диалог по центру, он должен быть не ячейкой (table-cell) а блоком внутри ячейки. Наверно, надо еще одну обертку добавить.

Также, width: 100%; bottom: 0; left: 0; — тут одно свойство явно лишнее.

!xnn2uE3AU. Втр 20 Авг 2013 13:27:34  #277 №311832 

>>311824

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

display: table-cell;
margin: x;

то это ошибка так как у table-cell нет margin, есть только padding.

Аноним Втр 20 Авг 2013 13:38:54  #278 №311834 

>>311832
http://jsbin.com/ibibUYU/17

>>311829
А то!

!xnn2uE3AU. Втр 20 Авг 2013 14:12:52  #279 №311851 

>>311834

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

!xnn2uE3AU. Втр 20 Авг 2013 14:15:36  #280 №311853 
1376993736041.png

>>311834

Также, вот как выглядит у меня кнопка «Забыл Пароль». Хром, Windows, классическая тема с серыми кнопками.

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

!xnn2uE3AU. Втр 20 Авг 2013 14:16:30  #281 №311856 

>>311834

Также, пароль показывается при вводе. Нехорошо.

!xnn2uE3AU. Втр 20 Авг 2013 14:23:12  #282 №311864 

>>311834

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

<strong class="login-title-text"> — для заголовка семантичнее использовать заголовок, h3 или h4

Заметил, что у кнопок margin: 5px. Это конечно, мой косяк, кнопки должны были быть выровнены по то же линии, как и инпуты, раз уж я так криво нарисовал, пусть останется, но вообще знай что обычно кнопки выравнивают по одной линии с другими элементами.

Аноним Втр 20 Авг 2013 14:39:10  #283 №311878 

>>311864
http://jsbin.com/ibibUYU/24

!xnn2uE3AU. Втр 20 Авг 2013 14:59:03  #284 №311885 

>>311878

Прокручивается страница вместе с диалогом: http://jsbin.com/ibibUYU/25

Аноним Втр 20 Авг 2013 15:05:00  #285 №311889 

>>311885
Вроде делал <code>position: fixed</code>, может потом зачем-то поменял.
ОП, а что следует знать о z-index?
Например, в данном случае имеет смысл его использовать, или все и так будет хорошо?

Аноним Втр 20 Авг 2013 15:08:43  #286 №311891 

3.3 Сделай нормальную рулетку, то есть генерируется 6-значный номер поста, и, в зависимости от последней цифры, что-то пишется.

Что-то это рандомная хуита?

!xnn2uE3AU. Втр 20 Авг 2013 15:10:26  #287 №311893 

>>311889

Знать надо для чего он нужен, как работает, к каким элементам его можно применять и что такое stacking context. Этого хватит.

!xnn2uE3AU. Втр 20 Авг 2013 15:11:06  #288 №311895 

>>311891

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

!xnn2uE3AU. Втр 20 Авг 2013 15:12:34  #289 №311896 

>>311889

А, и еще хорошо бы знать порядок прорисовки: в каком порядке рисуется фон, бордеры, дочерные элементы с положительным, отрицательным и нулевым z-index.

Аноним Втр 20 Авг 2013 20:00:34  #290 №312018 

>>311319
ДК, а при перетаскивании на Gists копируются только названия файлов, или должно еще и содержимое? У меня только названия, формы после перетаскивая пустые

Аноним Втр 20 Авг 2013 20:03:13  #291 №312019 

>>312018
Еще вопрос. Ты говоришь подцепить файл БД чтобы видеть как че там. Создал базу руками, не через пхпадмин, теперь в папке с мускулем лежит папка в которой есть файлы OPT и FRM. Это оно?

Аноним Втр 20 Авг 2013 20:18:53  #292 №312027 

>>312018
О! Иногда сразу код закидывается.

Аноним Втр 20 Авг 2013 20:53:26  #293 №312031 

https://gist.github.com/anonymous/2cec8213ef06f06ac6e3 Кажется процедурно это сделать проще, я уже запутался во всех этих контроллерах, моделях, представлениях, лол.

Аноним Втр 20 Авг 2013 21:21:19  #294 №312037 

>>312031
Понял где косячу. Пока отставлю задачу и подучу PDO и MySQL.

Аноним Втр 20 Авг 2013 21:35:32  #295 №312042 

>>311783
>Также, мне не нравится, что PHP умирает после запроса
А есть такие что не умирают?

Аноним Втр 20 Авг 2013 21:52:20  #296 №312049 

>>311752
Поправил ту дрянь, теперь пхп грузится, но скрипты не работают. И никаких ошибок еррор лог не записывает.

!xnn2uE3AU. Втр 20 Авг 2013 22:00:57  #297 №312056 

>>312019

Нет.

Дамп базы — это файл в формате SQL. Его можно получить консольной командой mysqldump (гугли-гугли), либо программами вроде phpMyAdmin или любой другой программой для работы с базой.

Это текстовый файл с SQL-командами внутри.

!xnn2uE3AU. Втр 20 Авг 2013 22:02:28  #298 №312058 

>>312049

Скрипты что-то пишут или просо показывается исходник скрипта? Что в адресной строке браузера? Также, можешь попробовать поставить в php.ini display_errors = On.

Аноним Втр 20 Авг 2013 22:05:52  #299 №312060 

>>312058
Не пишут и исходник не показывается, сам скрипт просто echo "Hello!"; для проверки. Вообще я это только что решил тем, что index.html, в котором это было, в index.php переименовал, теперь работает, однако на денвере и в html можно было пхп код вставлять и он работал, как-нибудь можно это настроить тут?

!xnn2uE3AU. Втр 20 Авг 2013 22:11:28  #300 №312062 

>>312031

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

Аноним Втр 20 Авг 2013 22:13:13  #301 №312064 

>>312060
>пхп код вставлять и он работал, как-нибудь можно это настроить тут?
Apache > mod_mime > AddHandler

!xnn2uE3AU. Втр 20 Авг 2013 22:13:37  #302 №312065 

>>312060

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

Аноним Втр 20 Авг 2013 22:15:00  #303 №312067 

>>312064
не, не AddHandler, а AddType, ошибся

Аноним Срд 21 Авг 2013 05:23:03  #304 №312122 

>>312062
Может быть, но тут трудность еще в том что постоянно думаю о том, как бы не нарушить принципы MVC. Смотри, у меня есть MainController, использующий модель MainModel, есть MainView. В MainModel есть метод get_data который вернет надеюсь все записи из таблицы post - там хранятся все треды. Но может же быть что у меня в таблице еще ничего нет. Как тогда быть с MainView? Сейчас MainView это html куда вставлен php в небольшом объеме. Но чтобы правильно отработать два возможных вида, придется же html пихать внутрь php, и наверное делать еще доп. вьюхи, которые будут цепляться в зависимости от того есть че или нет. Так можно делать, это не нарушает MVC?

Аноним Срд 21 Авг 2013 05:34:56  #305 №312124 
1377048896517.png

>>311044
>>309587
>>309591
Сделал на php http://ideone.com/NEpcRq, у меня видно, как через ходов 20 мыши разбегаются от котов и стремятся зажаться в углы. Кошки вышли достаточно тупыми, потому просто идут навстречу любой мышке. Единственное что не сделал из условия - мыши не защищают друг-друга.

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

Аноним Срд 21 Авг 2013 05:46:38  #306 №312125 

>>312124
ОП, как бы ты посоветовал решить эту задачку с точки зрения АРХИТЕКТУРЫ? Какие классы создавать и какие свойства?

!xnn2uE3AU. Срд 21 Авг 2013 10:12:41  #307 №312159 

>>312122

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

> Но может же быть что у меня в таблице еще ничего нет. Как тогда быть с MainView?

Пишешь прямо в шаблоне:

<?php if (empty($threads)): ?>
<p>Нет ни одного треда. Хотите (ссылка) создать первый тред? </p>
<?php else: ?>
выводим треды
<?php endif ?>

Кстати, надо писать не get_data, а getData. А если подумать еще немного, то не getData, а getAllPosts или getAllThreads, чтобы название функции имело какой-то смысл. Переименуй-ка пока не поздно (кстати, для переименования функций, очень полезна функция поиска по файлам, например, в Sublime жмешь Ctrl + Shift + H, вводишь что найти, где искать и он ищет).

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

Алсо, раз уж речь зашла о правильных решениях. Гонять туда-суда массивы данных, конечно, нехорошо. Надо наверно будет сделать модельки-объекты для постов, тредов и прочих сущностей, то есть class Post, class Thread и может что-то еще и пусть тогда getAllPosts возвращает не массив массивов, а масссив объектов Post. Но это, наверно, лучше сделать потом.

!xnn2uE3AU. Срд 21 Авг 2013 12:56:48  #308 №312189 

>>312124

Во-первых, в начале надо писать error_reporting(-1) а не 0. Ошибки надо исправлять, а не отключать их вывод. Вот, держи правильную версию твоего кода: http://ideone.com/9XbQP2

Насчет архитектуры, я тебя (или не тебя?) просил в прошлый раз заменить все public свойства на protected и private (и таким образом ты не сможешь писать ). Также, вместо одного класса field должны быть классы для отдельных сущностей: Field (или Map), Animal, Cat, Mouse. Иначе если все писать в один класс, это не отличается от обычного процедурного подхода, тут нет никакого ООП.

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

То есть, класс field не должен решать, как ходит та или иная мышка, он должен спрашивать это (вызывая метод) у класса Mouse. Если ты тот же анон, что написал предыдущую версию, то предыдущая версия была в этом плане лучше.

Код, который работает с $mouse_sight_zones, вообще тяжело читать, какие-то массивы вложены в массивы, при этом абсолютно не понятно, что такое например $arr[2]. Третий элемент какого-то массива? Я конечно, могу это понять, расшифровав алгоритм, но знаешь, если бы вместо $arr[2] было что-то вроде $sightZoneRadius, было бы гораздо проще.

> Мне не очень понравилось, что код получился большим (200 строк)
Это нормально, если один класс меньше 500 строк — это очень хорошо, часто бывает больше. А вот функцию из 100 строк надо разбивать на более маленькие.

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


class Field
{
public function createField()
{
...
}
}


> my_array_diff
Никогда не называй функции или классы my*. Надо придумать хорошее название, а не писать $myVariable = MyClass::myStaticMethod($myArgument);

> foreach($cat_sight_zones as $arr){
Логичнее писать foreach ($catSightZones as $zone)

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

В общем, этот код требует серьезного рефакторинга, анон, он годится чтобы оценить работу алгоритма, но не более.
!xnn2uE3AU. Срд 21 Авг 2013 12:59:35  #309 №312190 

>>312124

Что касается вот этого кода:

$f = new field;
$f->create_field();
$f->add_animals();
$f->move(23);
$f->show();

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

$f = new Game;
$f->createField();
$f->addAnimals();
$f->makeMoves(23);
$f->show();

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

Аноним Срд 21 Авг 2013 15:09:22  #310 №312217 

>>312190
Я не тот анон, что писал выше, у нас псто как-то совпали названия переменных. Спасибо за советы, пока буду пилить, как сделать так, чтобы на ideone табуляции были не такими большими, а то код разносит? У анона выше всё аккуратнее.

Аноним Срд 21 Авг 2013 15:09:55  #311 №312218 

>>312217
>псто
просто

!xnn2uE3AU. Срд 21 Авг 2013 15:56:52  #312 №312232 

>>312217

Настрой редактор, чтобы он заменял табы на 4 пробела. Во всех нормальных редакторах, кроме блокнота, такая настройка есть.

Аноним Срд 21 Авг 2013 16:00:00  #313 №312233 
1377086400223.jpg

Доброкун, что можешь сказать за видеокурсы Специалист. Основы PHP? Я себе вот скачал с торрентов, посмотрел 8 часов уже, порешал, попробовал - вроде норм, но может ты больше в теме. Знаю, что видел как кто-то задавал этот вопрос, но тогда не посмотрел ответы, а сейчас пролистал тред и не нашел, может и вовсе в предыдущем это было?

!xnn2uE3AU. Срд 21 Авг 2013 16:03:30  #314 №312236 

>>312233

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

Аноним Срд 21 Авг 2013 16:07:41  #315 №312237 

>>312233
Смотрел, там очень хорошие 2-я и 3-я части, про ООП отличный урок. Вообещ специалист это самые лучшее, что есть из русских видеокурсов по PHP. Но качай только те, где читает Борисов - очень годный в плане лектора чувак, доставляет манерой преподавания и адекватным взглядом на веб-разработку.

Аноним Срд 21 Авг 2013 16:11:09  #316 №312241 

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

Аноним Срд 21 Авг 2013 16:47:17  #317 №312261 

>>312241
вот например его голос
http://www.youtube.com/watch?v=_LMR16XlYds

Аноним Срд 21 Авг 2013 17:25:06  #318 №312273 

>>312261
Ну, вроде бы его курсы. На трубе голос коненчо глуховатый, но манера говорить та же.

Аноним Срд 21 Авг 2013 17:29:27  #319 №312277 

>>312273
В описании торрента пишут лектора. Я слушал от разных авторов - разница очень существенна.

Аноним Срд 21 Авг 2013 19:21:41  #320 №312291 

>>312159
Доброкун, не очень удобно на гихаб перетаскивать по одному файлу папку перетащить не получается может я архивы буду делать?

Аноним Срд 21 Авг 2013 19:52:18  #321 №312299 

>>312291
Вобщем вот http://rghost.ru/48275069 БД ммммаксимум примитивная. Встал в тупик, как показать коменты к тредам? Очевидно нужно сделать еще одну модель ComentModel и инклюдить ее в MainController т.к. в роутере я только одну модель могу заинклюдить. А как потом во вьюху как отдавать?

Аноним Срд 21 Авг 2013 19:56:55  #322 №312301 

>>312299
Кстати-кстати, а в главном виде должен отображаться только последний комент или как на дваче? Если последний, то это проще.

!xnn2uE3AU. Срд 21 Авг 2013 19:59:54  #323 №312303 

>>312291

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

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

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

!xnn2uE3AU. Срд 21 Авг 2013 20:00:30  #324 №312304 

>>312301

Да, конечно, N последних комментов.

!xnn2uE3AU. Срд 21 Авг 2013 20:02:24  #325 №312305 

>>312299

> т.к. в роутере я только одну модель могу заинклюдить.
Не надо инклюдить модели в роутере. Модели надо инклюдить в контролллере столько сколько нужно:

require_once ...
require_once ...

$this->commentsModel = ...
$this->postsModel = ....

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

!xnn2uE3AU. Срд 21 Авг 2013 20:04:06  #326 №312306 

>>312299

Чтобы не писать всюду require_once, советую почитать в мануале PHP про автолоадинг. Если использовать схему именования классов как Some_Class_Name то вообще подключается в несколько строчек, стандартным автолоадером.

Аноним Срд 21 Авг 2013 20:16:15  #327 №312311 

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

!xnn2uE3AU. Срд 21 Авг 2013 20:27:29  #328 №312314 

>>312311

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

Аноним Срд 21 Авг 2013 20:49:45  #329 №312322 

>>312305
А все таки, как 2 модели могут в одну вьюху отдавать данные?

!xnn2uE3AU. Срд 21 Авг 2013 21:12:30  #330 №312338 

>>312322

Не знаю, как в твоем велосипеде, в случае с Zend_View ( http://framework.zend.com/manual/1.12/ru/zend.view.introduction.html ) это делается так:

(в контроллере пишем)
$view = new Zend_View();
$view->posts = ...;
$view->comments = ...;
$view->somethingElse = ...;
$view->render('template.phtml');

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

Аноним Срд 21 Авг 2013 21:20:27  #331 №312343 

>>312338
Ясно-понятно. Видимо http://habrahabr.ru/post/150267/ это сильно учебный пример и делать на нем что-то реальное не варик. Буду думать. Впринципе, легко в MainModel можно к результату подцеплять комменты, без какие либо моделей, но это уже наверное точно нарушение MVC.

!xnn2uE3AU. Срд 21 Авг 2013 21:27:16  #332 №312345 

>>312343

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

!xnn2uE3AU. Срд 21 Авг 2013 21:29:17  #333 №312346 

>>312343

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

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

Аноним Срд 21 Авг 2013 23:46:46  #334 №312413 

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

!xnn2uE3AU. Чтв 22 Авг 2013 00:18:19  #335 №312415 

>>312413

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

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

Аноним Чтв 22 Авг 2013 00:55:59  #336 №312427 

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

!xnn2uE3AU. Чтв 22 Авг 2013 01:52:45  #337 №312440 

>>312427

6 месяцев — это реальный срок, при серьезном отношении. Список технологий можно посмотреть на моем сайте (ссылка в первом посте) в разделе «Что дальше». Надо хотя бы основы изучить.

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

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

!xnn2uE3AU. Чтв 22 Авг 2013 01:54:34  #338 №312441 

>>312427

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

!xnn2uE3AU. Чтв 22 Авг 2013 01:55:52  #339 №312442 

>>312427

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

Аноним Чтв 22 Авг 2013 02:47:31  #340 №312449 

>>312442
Что скажешь про книгу "Профессиональное программирование на PHP" от Колисниченко? Она устарела уже и пользы не несет или еще можно почитать? А то начал ее читать, вроде нравится, потом посмотрел на год, и такие дела.

Аноним Чтв 22 Авг 2013 09:28:58  #341 №312479 

>>312449
Рекомендую обратить взор на "PHP 5. Наиболее полное руководство в подлиннике (2-е издание)"
Вполне годная, относительно актуальная, описано не только написание скриптов на PHP, но и полезные основы, например, устройство работы сети, протокола HTTP; установка веб-сервера Apache (хотя зело рекомендуется Денвер, что не удивительно, ведь один из авторов его и написал).

Аноним Чтв 22 Авг 2013 09:43:17  #342 №312484 
1377150197490.jpg

Оригинал

Аноним Чтв 22 Авг 2013 09:43:41  #343 №312485 
1377150221072.jpg

Анон, поясни за imagecreatefrom.., почему проебуются цвета? И жипег и пенге.
Оригинал: 312484
Пикрилейтед - загрузил и сразу сохранил.

Код Аноним Чтв 22 Авг 2013 10:43:38  #344 №312498 

>>312485
list($img_width,$img_height) = getimagesize('1.jpg');
$im = @imagecreatetruecolor($img_width, $img_height);
$img_source = imagecreatefromjpeg('1.jpg');
imagecopyresampled($im, $img_source, 0, 0, 0, 0, $img_width, $img_height,
$img_width, $img_height);
imagepalettecopy($im, $img_source);
imagejpeg($im, '2.jpg', 100);

Аноним Чтв 22 Авг 2013 10:59:42  #345 №312506 

>>312498 блядь даже так
$img_source = imagecreatefromjpeg('1.jpg');
imagejpeg($img_source,null,100);
тоже херятся цвета. Хуле?

!xnn2uE3AU. Чтв 22 Авг 2013 10:59:47  #346 №312507 
1377154787668.png

>>312498

JPG — формат сжатия с потерями. Если ты сохраняешь в JPG, ты теряешь качество. У тебя исходная картинка весит 750 Кб, результат 250, ты же не думаешь, что можно сжать картинку в 3 раза без потерь?

Сохраняй в PNG и тогда потерь при сохранении не будет. Минусы: PNG очень тяжелые, и обычно оно того не стоит.

Также, можно использовать вместо gd для работы с картинками расширение Imagick. Оно вроде более качественно сохраняет JPG.

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

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

Аноним Чтв 22 Авг 2013 11:17:04  #347 №312529 
1377155824576.jpg

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

!xnn2uE3AU. Чтв 22 Авг 2013 11:23:00  #348 №312531 

>>312529

Анон, ты опять скинул JPEG, как по нему можно что-то сравнивать, если он с потерями качества?

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

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

Аноним Чтв 22 Авг 2013 11:32:05  #349 №312537 

>>312531 ага блядь, ну точно, в профилях дело! Благодарю за наводку, теперь понятно как действовать дальше (забить на проблему хуй).

!xnn2uE3AU. Чтв 22 Авг 2013 13:10:00  #350 №312561 

>>312537

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

Или может есть какой-то способ не терять профиль при преобразованиях, но я о нем не знаю.

Аноним Чтв 22 Авг 2013 13:28:16  #351 №312564 

>>312507
>можно сжать картинку в 3 раза без потерь
Можно.

!xnn2uE3AU. Чтв 22 Авг 2013 13:57:41  #352 №312571 

>>312564

Ту, что предоставил анон? Сожмешь?

Аноним Чтв 22 Авг 2013 19:19:30  #353 №312673 

Ньюфаг итт. Читаю про классы, и чего-то у меня в голове не укладывается это: "$this->". Когда читаю в книжке - более-менее понятно, а когда нужно самому сделать - торможу. Как-то запутанно выглядит. У меня раньше такой ступор был с циклом со счетчиком, сейчас даже странно почему так было, ибо всё просто оказалось
И вообще, почему $this, а не $anus, это принципиально?
Тут со стрелочкой еще понятно, когда вызывается функция из объекта:

$object->function();

А когда нужно к свойствам обратиться - не пойму. Вот хочу я сделать так, поясните чому не работает:
class Test {
var $var;
function lol() {
echo "yoba";
}
}
$obj = new Test;
$obj->$var = "allo"; // Так не работает
$obj->lol(); // А так работает

Еще бы хотелось услышать, в каком порядке продуктивнее изучать всё это дело. Может сначала нужно одно понять, потом другое? Вот интересует что за чем познавать. И еще реквестирую что почитать по MVC для понимания сути, желательно не длинное и для ньюфагов, можно на ингрише
Аноним Чтв 22 Авг 2013 19:23:47  #354 №312678 

>>312673
>$obj->$var = "allo"; // Так не работает
$obj->var

Аноним Чтв 22 Авг 2013 19:25:31  #355 №312679 

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

Аноним Чтв 22 Авг 2013 19:25:42  #356 №312680 
1377185142792.jpg

>>312678

Аноним Чтв 22 Авг 2013 19:33:01  #357 №312681 

>>312679
А чо там настраивать то?
http://try.github.io

Аноним Чтв 22 Авг 2013 19:38:08  #358 №312683 

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

!xnn2uE3AU. Чтв 22 Авг 2013 19:40:59  #359 №312685 

>>312673

$this можно использовать только внутри метода (метод — это функция, объявленная в классе). $this — это объект, на котором вызван метод.

Пример (класс Test возьмем из твоего кода):
class Test {
var $var;
function lol() {
$this->var = 1;
}
}

$a = new Test();
$b = new Test();
$c = new Test();

У нас есть 3 объекта, $a, $b и $c. Если мы пишем

$a->lol();

то внутри функии lol() в этот момент $this указывает на $a, и соответственно $this->var = 1 выставит в единицу свойство var у объекта $a (то есть $this->var =1 равносильно $a->var = 1).

Если мы теперь напишем

$c->lol();

то в этом случае внутри lol $this будет равно $c.

То есть, $this это способ узнать, на каком объекте был вызван метод и что-нибудь с ним сделать, получить его свойство, присвоить ему какое-то значение или вызвать другой метод этого же объекта.

Алсо, твой код написан на PHP4. Эа версия устарела 100 лет назад и ты с таким кодом будешь выглядеть, например, на собеседовании как лох. Лучше почитай про PHP5 тут: http://www.php.net/manual/ru/language.oop5.php

В PHP5 ООП сильно изменился в сравнении с PHP4.

Что почитать? Читай мануал, также у меня есть урок про основы ООП. Вот он: http://pastebin.com/14jj6uUc

Если задача из урока слишком проста, есть задачка посложнее про кошек-мышек: >>304841 (кстати, где-то тут анон, который ее делал-делал и не доделал)

Дальше можно почитать книгу Объектно-ориентированное программирование на PHP, Мэтт Зандра

Изучать надо так: ООП → MVC

Про MVC ты можешь почитать тут (осторожно! код не идеален): http://habrahabr.ru/post/150267/
http://habrahabr.ru/post/31270/

Но лучше бы изучить Yii или Zend Framework и посмотреть как MVC реализован там. Знание этих фреймворков тебе пригодится, их сейчас много где используют.

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

!xnn2uE3AU. Чтв 22 Авг 2013 19:42:18  #360 №312686 

>>312683

Что пишет при попытке сделать push? Может ты какой-нибудь ssh ключ не скопировал или еще что-нибудь такое?

Аноним Чтв 22 Авг 2013 19:47:04  #361 №312688 

>>312683
Что значит "ничего не выходит", ты программист али ламер какой? Какая "табличка" выскакивает, чо пишет?
https://help.github.com/articles/set-up-git и https://help.github.com/articles/create-a-repo - это самый простой мануал по "установить гит и залить файлы в репозиторий".

!xnn2uE3AU. Чтв 22 Авг 2013 19:47:59  #362 №312689 

>>312681

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

Аноним Чтв 22 Авг 2013 19:52:58  #363 №312691 

>>312689
>в моей Опере
Твои позиции в моем сердце пошатнулись, ОП.

!xnn2uE3AU. Чтв 22 Авг 2013 20:08:56  #364 №312701 

>>312691

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

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

Также, в Опере можно держать 50 открытых вкладок и компьютер не зависнет. Попробуй-ка открой 50 вкладок в хроме.

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

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

!xnn2uE3AU. Чтв 22 Авг 2013 20:10:24  #365 №312702 

>>312691

В общем, наверно стоит добавить,что я не пользуюсь браузером по принципу «открыл, почитал %site% и закрыл», а пользуюсь по принципу «месяцами не закрываю некоторые вкладки».

Аноним Чтв 22 Авг 2013 20:19:23  #366 №312705 

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

Аноним Чтв 22 Авг 2013 20:29:35  #367 №312707 

>>312685

function createQuestions()
{
$questions = array();
$q = new Question;
$q->text = "Какая планета располагается четвертой по счету от Солнца?";
$questions[] = $q;

$q = new Question;
$q->text = "Какой город является столицей Великобритании?";
$questions[] = $q;

$q = new Question;
$q->text = "Кто придумал теорию относительности?";
$questions[] = $q;

return $questions;
}

$questions = createQuestions();
$a = $questions[0]->text;
var_dump($a);

Короче, я какую-то хуиту намудрил. Поясни, что ты ожидал увидеть в этой функции? Пока я всё равно не вижу преимуществ ООП, ведь это же без классов проще делается. Никак не пойму сути
Аноним Чтв 22 Авг 2013 20:44:22  #368 №312712 

>>312686
Вот так сейчас обстоят дела https://github.com/serrufAAA/HelloWorld не смотри историю коммитов, я там пытался через Git GUI делать и в комментариях писал все подряд Как для view использовать две модели так и не смог придумать.

!xnn2uE3AU. Чтв 22 Авг 2013 21:00:14  #369 №312717 

>>312707

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

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

вариант 1, ООП
function doDomething(Question $q)
.....
$q->text= '...';
.....
}
сразу видно, $q это объект класса Question, я могу открыть класс (в IDE это делается в 1 клик) и посмотреть что за класс, зачем он нужен, какие свойства у него есть и какие методы я могу вызвать. И может быть, комментарий, что это за класс и что делает. Если я в Ide начну печатать

$q->

то она покажет выпадающий список свойств и методов и мне даже не надо их помнить. Офигенно удобно.

вариант 2, на массивах без ООП:
function doDomething(array $q)
.....
$q['text'] = '...';
.....

Я смотрю на код, и вижу что $q — это массив. Какие у него могут быть поля? Как указать сколько баллов стоит этот вопрос — фиг его знает, надо рыть код, искать где этот массив создается, где он используется и как, разбираться. Представь, что у тебя не программа из 200 строчек, а приложение из 200 файлов и тебе надо перерыть их, чтобы найти нужное место.

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

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


Подход с массивами работает хорошо только пока код умещается в одном файле и у него один автор. Естественно, код реальных сайтов и приложений — не 200 строчек, это минимум десятки файлов, а если проект писало 3 года 10 человек — то это тысячи файлов. И если эта тысяча файлов состоит из ста тысяч функций, работающих с 5 000 видов массивов, то работая с таким кодом можно сойти с ума, взять воображаемый шотган и пойти убивать своих коллег, которые это написали.

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

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

!xnn2uE3AU. Чтв 22 Авг 2013 21:09:26  #370 №312723 

>>312712

Папку core в фреймворках обычно называют lib или library.

Из конструктора контроллера лучше бы убрать $this->model = new model и перенести это в метод action.

> Как для view использовать две модели так и не смог придумать.
Переделать класс view. Вариант 1:
$view = new View();
$view->data1 = $data1;
$view->data2 = $data2;
$view->render('someview.php');

Вариант 2:
$view = new View();
$view->render('someview.php', array(
'data1' => $data1,
'data2' => $data2
));

!xnn2uE3AU. Чтв 22 Авг 2013 21:10:25  #371 №312724 

>>312707

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

!xnn2uE3AU. Чтв 22 Авг 2013 21:19:13  #372 №312733 

>>312712

> get_data()
> function Add(){
Пожалуйста, приведи название к нормальному виду, с маленькой буквы, кемелкейсом, это делать 2 минуты через поиск-замену.

> if($_SERVER['REQUEST_METHOD'] == 'POST'){
Грубейшая ошибка, грубее не придумаешь. Модель не должна лезть в GET, POST, COOKIE и любые другие перемнные, связанные с внешней средой. Она должна быть изолирована, все нужные данные ты передаешь ей снаружи. Даже time() лучше бы не вызывать.

Работа с GET, POST, COOKIE, REQUEST, SERVER ведется только в контроллерах.

Также, хотелось бы, чтобы get_data была переименована в getPosts и возвращала не массив массивов, а массив объектов класса Post и Comment. У нас же ООП, а не техники программирования 10-летней давности.

Соответственно, PostModel::add должна принимать на вход Post. Добавление поста может выглядеть как-то так:

$post = new Post();
$post->title = '...';
$post->text = '...';
$postModel->add($post);

Также, надо будет подумать про валидацию, но это потом.

Базовый класс Model надо сделать абстрактным и убрать из него бессмысленную функцию get_data.

Файлы надо назвать точно та же, как и классы в них, с учетом больших букв (я про файл controller.php). Имя файла BDClient не соответствует названию класса в нем.

Также, надо настроить и подключить автозагрузку классов (autoloading).

Аноним Чтв 22 Авг 2013 21:30:14  #373 №312744 

Я вижу, что не совсем верно, но в общих чертах задачу про номера так нужно делать?
http://ideone.com/m5ZE3t

Алсо, не понимаю, как задать программе искать полностью слитый номер(например89113063066). Если я задаю искать дужки-дефис-пробел, то она такие номера перестает за номера считать.

!xnn2uE3AU. Чтв 22 Авг 2013 21:32:05  #374 №312747 

>>312712

А, и еще. Опять про названия. Классы вроде PostsModel названы не совсем верно. Модель поста — это объект класса Post, у которого есть свойства title, text, date, а твой класс PostsModel — это класс для сохранения и поиска постов в базе.

В яве, например такие классы назвают PostsDao (DAO = Data Access Object, объект для доступа к данным). Вот пример статьи с кодом: http://www.tutorialspoint.com/design_pattern/data_access_object_pattern.htm

Мне кажется, логично было бы переименовать PostsModel в PostsDao. Хотя, как я сказал, в некоторых фреймворках эти понятия перепутаны.

!xnn2uE3AU. Чтв 22 Авг 2013 21:40:02  #375 №312759 

>>312744

Нужно использовать такое выражение:

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

Также, замечание:

[(| |-]

в квадратных скобках знак | обозначает не «или», а просто вертикальную черту. Он не нужен. Если ты хочешь искать например «скобка, пробел или минус» то пишешь просто:

[( \\-] (минус экранирован бекслешами, так как он может обозначать диапазон в выражении вроде 0-9)

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

> Если я задаю искать дужки-дефис-пробел, то она такие номера перестает за номера считать.
Используй квантификаторы (знаки, задающие число повторений), например:

[( \\-]* — от 0 до бесконечности скобок, пробелов, минусов
[( \\-]? — ноль или одна скобка, пробел или минус
[( \\-]{10,20} — от 10 до 20 подряд идущих символов

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

Аноним Чтв 22 Авг 2013 22:17:42  #376 №312774 

>>312759
Как-то так?
http://ideone.com/F3cq8L

!xnn2uE3AU. Чтв 22 Авг 2013 23:44:21  #377 №312800 

>>312774

Ты движешься в правильном направлении, но не для всех номеров твоя регулярка работает, например: http://ideone.com/eweJzY

Также, скобки не всегда включают ровно 3 цифры, бывает префикс из 4 цифр например +7 (8542) 300-300

Аноним Чтв 22 Авг 2013 23:59:28  #378 №312810 

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

Аноним Птн 23 Авг 2013 01:49:31  #379 №312878 

>>312810
Формально "завтра" уже наступило, поэтому я превозмог себя, немного погуглилподумал и выдал это чудовищно длинное выражение. Зато оно работает! Теперь цифры в номере можно разбивать как угодно, сколько угодно, где угодно, чем угодно; даже небом, даже Аллахом.

http://ideone.com/zAhY0l

!xnn2uE3AU. Птн 23 Авг 2013 02:37:42  #380 №312896 

>>312878

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

Предлагаю упростить выражение:

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

(+7 или 8) и затем 10 раз (любые знаки + цифра)

Аноним Птн 23 Авг 2013 02:52:43  #381 №312899 

>>312896
Оп, твой сайт упал, что делать?

Аноним Птн 23 Авг 2013 05:43:37  #382 №312918 
1377222217990.jpg

Аноша, такой дело, подкинул мне оч хороший человек делать сайт на Zend2, дал достаточно времени, но проблема в том, что человек хороший, опытный программист, а я на зенде еще ни разу не писал. На yii писал пару раз, много раз на silex, кароче суть фреймворков понимаю, подскажи годной рускоязычной документации именно по 2 зенду, в инетах так и не нашел. И еще желательно какой-нить манифест по традициям коддинга на зенде.

Аноним Птн 23 Авг 2013 08:27:44  #383 №312924 

Анон, подскажи, так правильно делать:
http://ideone.com/6z8qTG

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

Аноним Птн 23 Авг 2013 08:45:05  #384 №312926 

>>312899
>что делать?
Удваиваю.

Аноним Птн 23 Авг 2013 10:34:29  #385 №312942 
1377239669822.jpg

>>312926>>312899
Спросите себя: что бы сделал Иисус.
Он бы сперва прочитал первый пост в этом треде и увидел бы:
>Сайт опять упал!!!!! Не паникуй, а открой http://rghost.net/45000175

Аноним Птн 23 Авг 2013 12:19:24  #386 №312952 
1377245964876.jpg

>>312942
>что бы сделал Иисус

!xnn2uE3AU. Птн 23 Авг 2013 12:30:20  #387 №312953 

>>312899

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

sageАноним Птн 23 Авг 2013 12:44:18  #388 №312956 

>>312942
>что бы сделал Иисус
И шобы таки сделал этот евrей?

!xnn2uE3AU. Птн 23 Авг 2013 12:44:56  #389 №312957 

>>312953

Алсо, доброанон держит зеркало по адресу http://webmacaque.tk/ но это зеркало неофициальное.

Аноним Птн 23 Авг 2013 12:48:02  #390 №312958 

>>312953
Было бы неплохо иметь репозиторий на гитхабе со всеми уроками, это одновременно доступ ко всем урокам, архив, возможность получения фидбека|дополнения|исправления.
Мечты вслух

Аноним Птн 23 Авг 2013 12:51:54  #391 №312962 

>>312956
http://en.wikipedia.org/wiki/What_would_Jesus_do%3F
В американской культуре часто обыгрывается это выражение.

!xnn2uE3AU. Птн 23 Авг 2013 13:55:16  #392 №312977 

>>312918

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

http://www.zfconf.ru/2012/talks/
https://groups.google.com/forum/#!forum/ru-zend-framework
http://habrahabr.ru/post/166657/

В общем, используй гугл. Запрос «Zend Framework 2 русский». Если в Гугле нет — я ничем помочь не смогу, сам пользуюсь английской версией. Уж Reference Guide можно хоть гуглотранслейтом перевести.

> И еще желательно какой-нить манифест по традициям коддинга на зенде.
Если про оформление кода, то Zend Coding Guide, если кратко, используем 4 пробела, имена кемелкейсом без подчеркиваний, скобки ставим так:

if () {

} else {

}

phpformatter как раз в таком стиле код форматирует.

Если про архитектурный подход, то надо читать мануал, в ZF2 там хитрая система модулей, Dependency Injection, достаточно замудрено если не сталкивался.

!xnn2uE3AU. Птн 23 Авг 2013 14:16:19  #393 №312980 

>>312924

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

1) Класс Blueprint который просто содержит информацию о проекте, геттеры-сеттеры и не содержит кода работы с БД
2) Класс BlueprintDao, который содержит методы для работы с БД, поиска Blueprint по разным условиям, добавления новых, удаления.

А не сваливают все в кучу, как у тебя. Вот как может выглядеть BleprintDao:

class BlueprintDao
{
public function findById($id) {} // ищет по id и возвращает объект Blueprint
public function findByName($name) {} // ищет по имени
public function add(Blueprint $blueprit) {} // делает INSERT
public function deleteById($id) {} // делает DELETE
}

Суть методов думаю понятна из названия.

!xnn2uE3AU. Птн 23 Авг 2013 14:17:16  #394 №312981 

>>312958

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

Аноним Птн 23 Авг 2013 14:25:18  #395 №312982 

>>312980
Собственно вопрос, в том что правильно ли статическим методом класса проверять некоторые условия, а если условия выполняются этим же методом создавать и вернуть класс?

!xnn2uE3AU. Птн 23 Авг 2013 14:36:59  #396 №312985 

>>312982

Почему нет?

Просто, если речь идет о работы с Бд, то лучше бы ты почитал и использовал например паттерн DAO, а не городил велосипеды.

Аноним Птн 23 Авг 2013 14:37:07  #397 №312986 
1377254227413.jpg

>>309587
Анонизмусы подскажите есть какойнибудь скрипт на лису для одновременного нажатия на разных страницах нескольких java кнопок? Я тут тупой и объяснил как смог, задавай вопросы попробую лучше объяснить.

!xnn2uE3AU. Птн 23 Авг 2013 15:18:34  #398 №312994 

>>312986

1) Селениум.
2) userscript

Аноним Птн 23 Авг 2013 15:28:06  #399 №312996 

>>312896
Написал такое выражение, но оно позволяет пользователю вводить номер абсолютно любой длинны.
http://ideone.com/F1mWo1

Пофиксил регулярку вот так:
$regexp = '/^8|\+7[\-() ]*\d{10}$/';
но она не работает. Чувствую, что не вижу очевидного.

Аноним Птн 23 Авг 2013 15:32:42  #400 №312999 

>>312996
Экранируй бекслеши, Люк!
И рекомендация - вместо пробелов советую "\s", так проще воспринимать на глаз.

sageАноним Птн 23 Авг 2013 15:36:44  #401 №313002 

>*, Люк!
Пришло время пересмотреть Трилогию!

!xnn2uE3AU. Птн 23 Авг 2013 15:40:02  #402 №313003 

>>312996

\\d{10,} значит «10 или больше цифр подряд», без знаков между ними. Конечно, это не сработает.

> $regexp = '/^8|\+7[\-() ]*\d{10}$/';
так тут знак | разбивает ее на две вот примерно так (получается не то, что ты задумал):

/ (^8) | (\+7[\-() ]*\d{10}$) /

Надо поставить скобки.

Аноним Птн 23 Авг 2013 15:53:19  #403 №313006 

>>313003
>\\d{10,} значит «10 или больше цифр подряд»
это я понял, я так сделал, потому что без запятой оно вообще не работает. И я не понимаю, почему.

>Надо поставить скобки.

/^(8|\+7)([\-()\s]*\\d{10})$/

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

Аноним Птн 23 Авг 2013 16:09:26  #404 №313008 

>>313006
удобный сервис для проверки регулярок
http://regexpal.com/?flags=gm&regex=^%288|\%2B7%29%28[\-%28%29\s]*\d{10}%29%24&input=%2B71231234567

Аноним Птн 23 Авг 2013 16:13:12  #405 №313009 

>>313008
Спасибо!

!xnn2uE3AU. Птн 23 Авг 2013 17:13:43  #406 №313027 

>>313006

> отому что без запятой оно вообще не работает. И я не понимаю, почему.
Потому, что у тебя была вертикальная черта | без правильно расставленных скобок.

> /^(8|\+7)([\-()\s]*\\d{10})$/

Вначале: 8 или +7
Затем: любое число знаков
затем: 10 цифр подряд

Твое выражение не допускает знаков между цффрами. \\d{10} значит 10 цифр подряд.

Алсо, пиши 2 бекслеша, \\d, \\s, \\- и так далее. А то вдруг нарвешься на то, что строка будет понята не так (хотя, это надо проверить, может так и можно но я предпочитаю не рисковать).

!xnn2uE3AU. Птн 23 Авг 2013 17:17:14  #407 №313028 

>>313027

Поясню дополнительно. Если ты пишешь например:

abc\\d{10} то {10} относится только к \\d, то есть это можно представить как:

abc\\d{10} = abc(\\d{10})

То же и с квадратными скобками. abc[0-9]{10} равносильно abc([0-9]{10}) то есть {10} относится только к квадратным скобкам, а не всему, что перед ними.

Если тебя это не устраивает, ставь круглые скобки например

(abc[0-9]){10}

Аноним Птн 23 Авг 2013 17:32:59  #408 №313032 

Автор, дорогой, спасибо тебе, благодаря тебе начал изучать программирование, сегодня 3-й день и 3-й урок!

Проверь пожалуйста мои выполненные задания по 3 уроку.

3.1 - http://ideone.com/sPGUsj
3.2 - http://ideone.com/oBs76V
3.3 - http://ideone.com/zPg7L9

!xnn2uE3AU. Птн 23 Авг 2013 17:46:47  #409 №313035 

>>313032

3.1 Все верно.
3.2 Хорошо сделано.
3.3 — все правильно.

Есть только одно маленькое замечание. Если ты делаешь строку из нескольких строчек, вот так:
$x = "строка1
строка2";

то \n писать не надо — перенос строки уже есть (он не отображается, но он там есть иначе бы строка не была разорвана на 2 части). \n пишут в такой ситуации:

$x = "строка1\nстрока2";

В общем, либо ставь \n и пиши в одну строчку, либо пиши в несколько строчек и не ставь \n. А у тебя получилось 2 переноса строки подряд. Это исправлять не надо, просто учти на будущее.

Аноним Птн 23 Авг 2013 17:50:40  #410 №313036 

>>313035
Спасибо! Я просто хотел чтобы все смотрелось не слитно, а строка через строку, но обратил внимание, что после переноса и \n получается как через две строки. В общем очень благодарен, буду знать.

Если я буду делать по одному занятию в день, освою ли я за месяц php?

Аноним Птн 23 Авг 2013 17:58:56  #411 №313042 

>>312723
>Переделать класс view.
Тересна. Почтитал в Zend про render, там конечно дико навороченно, но суть кажется уловил. По хардкору: реднер инклюдит переданную ему вьюху, в которой используются переменные объекта View. Все верно?

Аноним Птн 23 Авг 2013 18:00:01  #412 №313043 

>>313028
Спасибо огромное за ангельское терпение, Оп. Посмотри, пожалуйста:
http://ideone.com/LCMABJ

Аноним Птн 23 Авг 2013 18:12:50  #413 №313050 
1377267170913.jpg

http://jsbin.com/uzaLOlo/1/edit
Опушка, проверь, пожалуйста. Добра.
Алсо, в одном из прошлых тредов ты кидал пикчу с видами шрифтов, но я забыл схоронить, вбрось еше раз.

Аноним Птн 23 Авг 2013 18:21:57  #414 №313056 

Котаны, принимайте новенького.
Потихоньку читаю сайт, ОП, огромное тебе спасибо. Проверьте задачку про айпад, пожалуйста. Вроде правильно считает, но не уверен.
http://ideone.com/qfB8d4

Аноним Птн 23 Авг 2013 18:39:51  #415 №313066 

>>313050
http://jsbin.com/uzaLOlo/3/edit
Немного переделал, думаю, так будет лучше.

Аноним Птн 23 Авг 2013 19:20:14  #416 №313078 

>>313066
Таки наоборот все испортил. Первый вариант лучше.

!xnn2uE3AU. Птн 23 Авг 2013 20:55:18  #417 №313106 

>>313036

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

Список технологий, в которых должен разбираться профессиональный разработчик есть на сайте в разделе «Что дальше».

!xnn2uE3AU. Птн 23 Авг 2013 21:06:40  #418 №313108 
1377277600028.png

>>313050

Шрифты. Учти, что это лишь разделение шрифтов с точки зрения стандарта CSS (то есть, CSS делит все шрифты на serif, sans-serif, cursive, monotype).

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

Если тебе будет более интересно, какие бывают виды шрифтов, чем именно они различаются, откуда и когда они появились, я советую книжку А. Корольковой «Живая типографика», зеленая такая. В ней все это просто и понятно разъясняется. Ну или хотя бы википедию почитать.

Аноним Птн 23 Авг 2013 21:08:16  #419 №313109 

Добро-кун, ты же не только в пхп можешь?

Есть .cap файл. Есть даже TCP Stream в wireshark'e который содержит судя по всему русские буквы utf8. Как мне прочитать их?

>>313106
Пиздешь, я в этом треде с зимы, так и нихуя не умею. :3

!xnn2uE3AU. Птн 23 Авг 2013 21:14:28  #420 №313113 

>>313042

Да, ты можешь обращаться к свойствам из шаблона через $this->property. Zend_View конечно покруче, он еще и хелперы например поддерживает, но тебе пока можно и по-простому сделать.

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

>>313043

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

!xnn2uE3AU. Птн 23 Авг 2013 21:20:10  #421 №313118 

>>313050

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

Поскольку это учебная задача, то тут недопустимы лишние или бессмысленные свойства или свойства поставленные «на всякий случай». Каждое свойство должно быть обосновано. Потому вопрос: зачем это тут указано, и почему именно 31% ? Откуда это число взялось? Я не понимаю:

.box { margin-right: 31%; }

!xnn2uE3AU. Птн 23 Авг 2013 21:31:06  #422 №313126 

>>313056

Заходи, устраивайся поудобнее. Новеньким тут рады.

По задаче, увы, пока не все хорошо.

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

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

Чтобы вернуть 2 значения из функции (сумму и время) ты можешь использовать массив в return:

return array(
'time' => ...,
'cost' => ...
);

> $homoCredit=array(0.04, 500);
Вот это нехорошо, так как непонятно, что такое 0.04 и 500, они же не подписаны никак.

> $HomoCreditPayment=credit($homoCredit[0], $homoCredit[1], $moneyOwed, $monthPayment);
Здесь лучше сразу подставить конкретные цифры, то есть:

$homoCreditCost = credit(0.04, 500, $moneyOwed, $monthPayment);
Тогда если посмотреть определение функции, видно, что 0.04 — это $percent, а 500 — это $commission.

Также, обрати внимание на ошибку:

> PHP Notice: Undefined variable: totalPayment in /home/cMJWmG/prog.php on line 9
Ты должен в начале функции присвоить переменной какое-то значение, например, 0, и только потом использовать.

!xnn2uE3AU. Птн 23 Авг 2013 21:34:02  #423 №313131 

>>313109

Если проблема в том, что WireShark не поддерживает utf-8 то может быть можно сдампить интересующие тебя пакеты/потоки в текстовый файл и открыть его редактором? Я,увы, с WireShark плохо знаком.

Аноним Птн 23 Авг 2013 21:40:33  #424 №313132 

>>313113
Но я все равно дичайше туплю. https://github.com/serrufAAA/HelloWorld почему-то названия в core не все поменялись. Не могу понять, как потом тогда это все увязать с temlateView. Как вставить в <body> </body> контент, если он может быть разный? Все равно же там должна быть только одна переменная! Вобщем посмотри пожалуйста https://github.com/serrufAAA/HelloWorld/blob/master/application/controllers/MainController.php, я все еще использую generate, но подругому. Сканает? Правда теперь в MainView мясо. Post из модели уберу завтра.

Аноним Птн 23 Авг 2013 21:46:33  #425 №313133 

>>313113
Еще вопрос. Про
>Переделать класс view. Вариант 1:
$view = new View();
$view->data1 = $data1;
$view->data2 = $data2;
$view->render('someview.php');
Получается мы должны заранее знать какие данные могут приходить в view и всех их уже в классе View описать как свойства? Понятно если код учебный, как у меня, а если это что-то реальное? Там же придется пилить сотню свойств. Не круто. Или может в пхп есть какая-нить фишка, с помощью которой можно делать свойства налету, что-нить типа __autoload, только для свойств?

!xnn2uE3AU. Птн 23 Авг 2013 21:52:56  #426 №313134 

>>313132

> я все еще использую generate, но подругому. Сканает?
Ну пусть пока так будет.

> Как вставить в <body> </body> контент, если он может быть разный? Все равно же там должна быть только одна переменная!
Почему? У тебя в templateView есть строчка:

<?php include 'application/views/'.$contentView; ?>

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

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

И с автолоадингом разберись уже.

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

Аноним Птн 23 Авг 2013 21:54:35  #427 №313136 

>>313134
Обижашь, автолоадинг запилил, удобная штука.

!xnn2uE3AU. Птн 23 Авг 2013 22:01:25  #428 №313140 

>>313133

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

class Test() {}
$a = new Test();
var_dump($a); // нет свойств
$a->prop1 = 1;
$a->prop2 = 2;
var_dump($a); // появилось 2 свойства


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

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


public function __set($key, $val)
{
if ('_' != substr($key, 0, 1)) {
$this->$key = $val;
return;
}

require_once 'Zend/View/Exception.php';
$e = new Zend_View_Exception('Setting private or protected class members is not allowed');
$e->setView($this);
throw $e;
}



Что это за магический метод __set, ты можешь почитать в мануале по PHP если не в курсе.
Аноним Птн 23 Авг 2013 22:03:37  #429 №313141 

>>313134
А, еще давно хотел спросить, ты нигде не хранишь старые треды? Не те, что уровня /b, а с /pr?

Аноним Птн 23 Авг 2013 22:17:34  #430 №313149 

Долго мучался с банкоматом. Я совсем тупой, и максимум, что у меня получилось - http://ideone.com/0Uds1T
Надо бы доделать до рабочего состояния, но уже нет сил.

!xnn2uE3AU. Птн 23 Авг 2013 22:18:38  #431 №313151 

>>313136

По автолоадингу.

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

То есть, класс Board_Controller_Main лежит в Board/Controller/Main.php

- В мануале написано: http://php.net/manual/ru/language.oop5.autoload.php

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

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

Статья на хабре (тоже немного запутанная): http://habrahabr.ru/post/136761/

!xnn2uE3AU. Птн 23 Авг 2013 22:19:24  #432 №313152 

>>313141

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

!xnn2uE3AU. Птн 23 Авг 2013 22:26:01  #433 №313156 

>>313149

Тогда отдохни и допили потом. Наверно, там надо как-то return приделать еще и вывод результата. Также, замечу:

> (isset($billUsed[$billValue]) && $billUsed[$billValue] == TRUE)

Можно написать !empty($billUsed[$billValue]), она проверяет что в массиве есть элемент и что он не пуст (пуст — это 0, false, "", "0", array(), null и наверно еще что-то).

С виду, алгоритм выглядит правдоподобно.

Аноним Птн 23 Авг 2013 22:32:40  #434 №313160 

>>313152
Вышли, будь добр. Хочу старые решения подправить. С этим MVC кода-то почти и не пишу.

Аноним Птн 23 Авг 2013 22:48:22  #435 №313172 

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

Аноним Птн 23 Авг 2013 23:37:46  #436 №313191 

>>313108
>>313118
Спасибо.
> зачем это тут указано, и почему именно 31%
Ну, на картинке указан отступ 34% - 10px. Ширина рамки - 350px

1% - 3,5px
34% - 119px
119px - 10px = 109px
109px / 3.5 = 31.14 => 109px - 31%

Как-то так. Сейчас я понял, что отступ справа у обоих блоков не нужны. Просто, на пикче размер отступа указан именно справа, да и я не совсем понимал, как работают эти отступы, поэтому указал их справа и слева.
Вот переделал: http://jsbin.com/uzaLOlo/13/edit
Аноним Птн 23 Авг 2013 23:58:44  #437 №313199 

>>313172
http://ideone.com/7dMJJJ
Не понимаю, почему массив $tempResult получается кривой.
Надеюсь, идея понятна?

!xnn2uE3AU. Суб 24 Авг 2013 00:53:17  #438 №313227 

>>313191

> Ширина рамки - 350px
Нет, рамка — это как я сказал, как бы окно браузера и ширина может быть любой (учти это в следующих задачах).

Но я вижу, ты убрал 31%. Теперь почти все хорошо, но надо бы еще убрать float: right. Не понимаю, зачем он тут нужен.

!xnn2uE3AU. Суб 24 Авг 2013 00:54:16  #439 №313230 

>>313191

> на пикче размер отступа указан именно справа, да и я не совсем понимал, как работают эти отступы, поэтому указал их справа и слева.
Задача как раз на знание margin и width.

!xnn2uE3AU. Суб 24 Авг 2013 00:56:56  #440 №313232 

>>313199

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

function test($x) { $x = 100; }
$x = 1;
test($x);
var_dump($x); // 1

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

Аноним Суб 24 Авг 2013 01:31:28  #441 №313242 

>>313227
Я не понял, 31% нужно убрать вообще или только у первого блока? Если вообще и без float, то как сделать смещение у второго блока?

!xnn2uE3AU. Суб 24 Авг 2013 01:39:13  #442 №313244 

>>313242

Как в этой статье описано, за счет только width и margin: http://softwaremaniacs.org/blog/2005/08/27/css-layout-flow/


!xnn2uE3AU. Суб 24 Авг 2013 01:40:11  #443 №313245 

>>313242

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

Аноним Суб 24 Авг 2013 11:23:52  #444 №313322 

>>313245
http://jsbin.com/uzaLOlo/19/edit
Исправил, 34%-10px сбивает с толку.

Аноним Суб 24 Авг 2013 12:06:17  #445 №313331 

>>313232
>костыль
Ну так и я инвалид!
http://ideone.com/3R3wj0

Аноним Суб 24 Авг 2013 12:07:09  #446 №313332 

>>313331
правильная ссылка: http://ideone.com/ZxzA5J

!xnn2uE3AU. Суб 24 Авг 2013 14:39:38  #447 №313347 

>>313322

Теперь все верно.

>>313332

Программа считает хорошро. Но я все же нашел комбинацию, при которой банкомат сходит с ума: http://ideone.com/vQtXpe

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

По коду:

- Вот тут:

$l = $k - 1;
$tempResult[$billKeys[$l]] -= 1;
$amount += $billKeys[$l];

Если я правильно понял алгоритм и тут надо взять самое последнее значение из массива, то надо делать проще:

$lastBill = array_pop($billKeys);
$tempResult[$lastBill] --;
....

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

- Вот тут:

$billPaymentAmount = floor($amount / $billValue);

if ($billPaymentAmount == 0) {
continue;
}

if ($billPaymentAmount > $billAmount) {
$billPaymentAmount = $billAmount;
}

Этот if можно заменить функцией min и комментарием:

// Мы не можем взять больше банкнот чем есть
$billPaymentAmount = min(floor($amount / $billValue), $billAmount);

- И хорошо бы переделать функцию на возврат массива через return, а не использование &. Ведь никто не мешает нам в функции просто возвращать $tempResult. А вывод этот массива в виде 1x500 2x200 можно перенести куда-нибудь в другое место.

!xnn2uE3AU. Суб 24 Авг 2013 17:32:41  #448 №313380 

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

Но автоматизированное тестирование, конечно же, нужно. Вот, прочел статью на Хабре — там как раз минимальное автоматизированное тестирование без необходимости писать юниты. Вполне годно: http://habrahabr.ru/post/191210/

Мне больше всего нравится идея «один раз настроил и забыл».

Аноним Суб 24 Авг 2013 18:05:24  #449 №313398 

>>313347
>Программа считает хорошро. Но я все же нашел комбинацию, при которой банкомат сходит с ума: http://ideone.com/vQtXpe
Как минимум, нужно сделать раздельную проверку для сотен/тысяч и т.д.

Аноним Суб 24 Авг 2013 21:52:35  #450 №313463 

Оп, делаю задачу на циклы.

Скажи пожалуйста, в задаче 5.1 нужно всего лишь заменить

if ($creditBalance < 0)

на

if ($creditBalance < 5000)

?

И задача 5.2 - http://ideone.com/AnF9W0 правильно ли я сделал?

!xnn2uE3AU. Суб 24 Авг 2013 23:03:58  #451 №313484 

>>313463

> в задаче 5.1 нужно всего лишь заменить
Нет, там надо еще пару строчек исправить и пару дописать. Ты можешь легко проверить программу на таких данных:

Если сумма кредита = 1000, анон платит 2030 за 1 мес
Если 4000, анон платит 6123 за 2 мес.

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

> задача 5.2

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

Аноним Вск 25 Авг 2013 00:06:53  #452 №313510 

>>313484
Оп, я не совсем понимаю где тут загвоздка, сижу почти час, и не пойму.

Он взял кредит в 40000.
Сумма кредита возрастает ежемесячно на 3%, плюс ежемесячно сверху доплата - 1000.
Каждый месяц он отдает 5000.

Считаю так, как и было у тебя -

$creditBalance = $creditBalance * $percent + $servicePayment;
$creditBalance = $creditBalance - $monthlyPayment;
$paymentTotal = $paymentTotal + $monthlyPayment;

Сумму кредита определяем так - сумма кредита, умноженная на процент (3%) и плюс 1000 - ежемесячная комиссия.

Берем полученную сумму кредита, и вычитаем из нее 5000, которые вносятся каждый месяц.

Значит $paymentTotal у нас равняется 5000 + 5000 каждый месяц. Все это пропускаем через цикл, пока вложенное в него условие не определит, что осталось внести менее 5000, и прерываем цикл.

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

!xnn2uE3AU. Вск 25 Авг 2013 02:41:25  #453 №313526 

>>313510

Если у тебя нет идей, то можно сделать такой код:

Цикл {
В начале месяца, добавляем процент и комиссию.
Смотрим, чему равен долг
Если долг большой, платим 5000, если маленький, то платим сколько осталось.
Если все выплачено — выходим из цикла.
}

Если есть еще какие-то сомнения, покажи код, посмотрим.

Аноним Вск 25 Авг 2013 13:21:00  #454 №313575 

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

!xnn2uE3AU. Вск 25 Авг 2013 13:41:43  #455 №313586 

>>313575

Если они правильны, покажи код и тогда посмотрим.

Аноним Вск 25 Авг 2013 13:46:22  #456 №313587 

>>313586
Я вот так решил, по другому не понимаю. http://ideone.com/aAytdq

!xnn2uE3AU. Вск 25 Авг 2013 13:58:03  #457 №313591 

>>313587

Код работает для больших сумм, но на маленьких уходит в минус: http://ideone.com/r147zf

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