Двач.hk не отвечает.
Вы видите копию треда, сохраненную 19 сентября 2014 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
33 Кб, 500x500
Клуб любителей изучать PHP #30 !xnn2uE3AU. #377570 В конец треда | Веб
Всем привет. В этом официальном ИТТ треде мы все еще изучаем PHP (и некоторые другие языки для веба вроде JS), решаем задачки и даже делаем простые сайты! Зачем? Кто-то хочет научиться программировать, кто-то хочет изучить этот язык, кто-то хочет просто размять мозги и заняться чем-то полезным.

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

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

Предыдущий тред был тут: >>369682

У нас есть уроки по основам PHP, они собраны и выложены по адресу http://archive-ipq-co.narod.ru Если ты ньюфаг, просто решай задачки оттуда, они там реально простые, и пости сюда ссылки на решения, мы посмотрим и скажем, правильно или нет и дадим совет, если можно что-то улучшить. Если не совсем ньюфаг, напиши, что ты знаешь, что нет, что хочешь изучить, я дам тебе какую-нибудь задачку посложнее. После прохождения учебника напиши, ОП даст тебе более сложные задания.

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

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

Оформляй код аккуратно!!! например пропусти через phpformatter.com . Также, если ты пользуешься IDE вроде PhpStorm, Netbeans, Eclipse, то в них эта опция встроена, подробнее: https://gist.github.com/codedokode/8759492

Что почитать?

Мануал по PHP — http://www.php.net/manual/ru/langref.php
Начинающим: Никсон Р. - Создаем динамические веб-сайты с помощью PHP (аноны говорят, она не очень хорошая)
Сайт phptherightway
По PHP: Профессиональное программирование на PHP Джордж Шлосснейгл
По PHP: Мэтт Зандстра — PHP: Объекты, шаблоны, методики программирования
JS: learn.javascript.ru
Позиционирование в CSS: http://softwaremaniacs.org/blog/category/primer/ (снизу вверх).
MySQL: https://gist.github.com/codedokode/10539213

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

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

Где архивы предыдущих тредов? Известно, где, на mediafire: http://www.mediafire.com/download/gza5360wdzqd743/threads-archive-pr-1..17.zip (189Мб, треды 1-17 из pr), http://www.mediafire.com/download/kgzl1f9366gc6ed/threads-archive-11..20.zip (72 Мб, треды 11-20 из b). Также один анон выложил все на дропбокс: https://www.dropbox.com/sh/4sb69jrx9qwrpcw/-nY5ia__VC (ок, он иногда не работает)

Как начать пользоваться командной строкой — gist.github.com/anonymous/9378956452c8e4a72ac8

Расскажи про поиск работы, фриланс etc Информация о фрилансе есть в /wrk . Также, походи по сайтам вроде hh.ru, hantim.ru, geekjob, fl.ru, посмотри, поизучай ситуацию. Имей в виду, кроме фриланса, где ты 2 дня ищешь заказ, полдня обсуждаешь за бесплатно суть работы, день делаешь и еще 2 дня слушаешь от заказчика что он о тебе думает, есть удаленная работа — продаешься в рабство, и занимаешься только программированием, задачи тебе будут подкидывать наготово. Ищется по слову «удаленно» на перечисленных сайтах. Зарплата на удаленной работе может быть меньше чем в офисе в столице, но больше чем в твоей деревне.

В общем, давайте начинать уже!
56 Кб, 500x644
Пиши красиво !xnn2uE3AU. #2 #377571

> Предыдущий тред был тут


На самом деле тут >>373424 — но никто и не заметил

Побежал писать код? Стой, прочти сначала этот пост.

Как и чем отформатировать код

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

Не бойся, сделать код аккуратным совсем не сложно. Самый универсальный способ — вставить его на сайт http://phpformatter.com и нажать кнопку Format. Робот сам выровняет твой код в лучших традициях.

Если ты используешь для редактирования кода IDE, то все еще проще (а если не используешь, то почему бы не начать?):

- Eclipse PDT — жми Ctrl + Shift + F для автоматического форматирования кода.
- Netbeans for PHP — жми Alt+Shift+F
- Zend Studio — жми Ctrl + A (выделить все), затем Ctrl + Shift + F
- PhpStorm — жми Ctrl+Alt+L
- PHPDesigner — поищи нужную опцию в меню, она там есть. Или жми Ctrl + Shift + F1
- Komodo IDE — правая кнопка -> Format Using...

Вот так, нажатием одной кнопки ты можешь сделать жизнь гораздо проще.

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

Основные правила

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

скобки в for и if/else ставятся так (египетские скобки):


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


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


function bakeCookies(...)
{
// ...
}


Официальные ссылки

В PHP есть система стандартов с названием PSR. Вот стандарты, относящиеся к оформлению кода:

http://www.php-fig.org/psr/psr-1/
http://www.php-fig.org/psr/psr-2/
56 Кб, 500x644
Пиши красиво !xnn2uE3AU. #2 #377571

> Предыдущий тред был тут


На самом деле тут >>373424 — но никто и не заметил

Побежал писать код? Стой, прочти сначала этот пост.

Как и чем отформатировать код

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

Не бойся, сделать код аккуратным совсем не сложно. Самый универсальный способ — вставить его на сайт http://phpformatter.com и нажать кнопку Format. Робот сам выровняет твой код в лучших традициях.

Если ты используешь для редактирования кода IDE, то все еще проще (а если не используешь, то почему бы не начать?):

- Eclipse PDT — жми Ctrl + Shift + F для автоматического форматирования кода.
- Netbeans for PHP — жми Alt+Shift+F
- Zend Studio — жми Ctrl + A (выделить все), затем Ctrl + Shift + F
- PhpStorm — жми Ctrl+Alt+L
- PHPDesigner — поищи нужную опцию в меню, она там есть. Или жми Ctrl + Shift + F1
- Komodo IDE — правая кнопка -> Format Using...

Вот так, нажатием одной кнопки ты можешь сделать жизнь гораздо проще.

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

Основные правила

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

скобки в for и if/else ставятся так (египетские скобки):


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


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


function bakeCookies(...)
{
// ...
}


Официальные ссылки

В PHP есть система стандартов с названием PSR. Вот стандарты, относящиеся к оформлению кода:

http://www.php-fig.org/psr/psr-1/
http://www.php-fig.org/psr/psr-2/
#3 #377579
Поигрался со Slim, и теперь хочу перейти на что-то более серьёзное.
Так вот, Yii 1, Yii 2 или Symphony2?
Правильно ли я нагуглил, что вторым юйем мало кто ещё пользуется?

Во, и еще вопрос: что делает кеширование в Twig?
Делает статичной ту небольшую часть логики, что есть в шаблоне (циклы там, условия) и в результате мы обрабатываем как обычно - сперва скрипт с логикой для страницы, потом шаблон, но вместо пересчитывания циклов и условий в Twig-шаблоне мы отдаём статическую страничку из кеша и при необходимости перезагружаем кеш?
#4 #377589
>>377564
На php делал все задания по ООП, на мышах застрял, ну и я пообещал себе сделать позже, т.к. js для работы нужен больше.
#5 #377590
>>377570
Вот, задача про компанию вектор.
В принципе все готово за исключением вывода таблицы, но пока делать не стал так как кажется что некоторые вещи надо бы иначе написать, а как хз. В частности мне не нравится то что я в конструкторе использую свойства которые появятся только в подклассах, но и не копировать же 4 раза 1 и тот конструктор.
http://ideone.com/7Cmtbr
#6 #377593
http://ideone.com/7Q6avv

Задачка на функцию и банки. У меня в процессе возникло затруднение некоторое. В пхп якобы нельзя работать внутри функции с глобальными переменными, так? То есть если мне нужно в функции передавать какую-нибудь глобальную переменную, то мне нужно в описание функции добавить еще 1 переменную и глобальную передавать уже в неё при вызове функции?
#7 #377600
>>377557

>искать надо не в check, а в накопленном к данному моменту пути, то есть видимо path.


Ну так check это и есть массив накопленного пути, а в path у нас записаны все точки.
#8 #377622
ОП, ты как-то скидывал вот этот отзывчивый макет http://rghost.net/57060607. Так вот, пара вопросов по нему:

Там есть видео, я так понимаю его вставлять с помощью тега <video>? Также там на видео какие-то навороченные штучки(кнопка воспроизведения, полоса с продолжительностью) - это с помощью jQuery делается? Но я в него пока не умею.

Как можно сделать двойную тень?

И да, что вообще меняется при отзывчивой верстке? Сначала пишем html-код для компьютера, потом пишем css-код для мобильных(ненужным блоком просто устанавливаем display: none;, например?), потом уже пишем css для компьютеров?
33 Кб, 120x120
#9 #377628
Ананасы, фреймворки нужны или нет?
#10 #377630
>>377628
Да, и нужно в них разбираться.
#11 #377633
>>377546
Вот код 12 задачи, там только свойства посмотри.

>> Правильно ли я понимаю, когда мы пишем что-то подобное: Hamburger.type[Hamburger.SIZE_SMALL] у конструктора Hamburger появляется объект type с свойством-объектом SIZE_SMALL?



>Нет. Ничего само не появляется. Если ты ранее явно не создал свойство type то Hamburger.type вернет undefined



Надо писать сначала Hamburger.type ={}, потом Hamburger.type[Hamburger.SIZE_SMALL] = {}? Ну а в таком случае что произойдет? Создается объект type у конструктора, потом мы кладем в свойство этого объекта другой объект SIZE_SMALL и ему задаем свойства. В таком случае Hamburger.type[Hamburger.SIZE_SMALL] как-то связан с константой SIZE_SMALL?
#12 #377634
>>377633
Код отклеился - http://jsbin.com/lubewuqa/2/edit
!xnn2uE3AU. #13 #377647
>>377579

Да, верно, Юи 2 малораспространен, хотя он лучше в том плане, что там код приведен к общепринятым стандартам, и меньше велосипедов.

> Так вот, Yii 1, Yii 2 или Symphony2?


Yii, а за ним Symfony 2.

> Во, и еще вопрос: что делает кеширование в Twig?


Когда ты пытаешься вывести шаблон, происходит следующее:

- разбор шаблона и преобразование его в PHP-файл (очень медленно)
- выполнение этого php-файла (быстро)

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

Или ты про какое-то другое кеширование говорил? Приведи ссылочку тогда.

>>377589

Ок, хорошо

>>377590

> if ($isChief == 1) {


> $this->coffeeConsumption *= 2;


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

Ну и мне кажется, надо сделать добавление шефа по-другому:

$chief = new Engineer(3);
$department->setChief($chief);

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

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

> public function __construct ($name, $employees)


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

> class Employee


Надо добавить abstract. Чтобы запретить создавать объекты Employee и показать что это лишь базовй класс для других.

Вместо 0/1 удобнее испольовать true/false для isChief: http://php.net/manual/ru/language.types.boolean.php (да, они не описаны в учебнике, я знаю).

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


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

Также, по возможности используй тайп хинты: http://php.net/manual/ru/language.oop5.typehinting.php — они делают код лучше
!xnn2uE3AU. #13 #377647
>>377579

Да, верно, Юи 2 малораспространен, хотя он лучше в том плане, что там код приведен к общепринятым стандартам, и меньше велосипедов.

> Так вот, Yii 1, Yii 2 или Symphony2?


Yii, а за ним Symfony 2.

> Во, и еще вопрос: что делает кеширование в Twig?


Когда ты пытаешься вывести шаблон, происходит следующее:

- разбор шаблона и преобразование его в PHP-файл (очень медленно)
- выполнение этого php-файла (быстро)

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

Или ты про какое-то другое кеширование говорил? Приведи ссылочку тогда.

>>377589

Ок, хорошо

>>377590

> if ($isChief == 1) {


> $this->coffeeConsumption *= 2;


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

Ну и мне кажется, надо сделать добавление шефа по-другому:

$chief = new Engineer(3);
$department->setChief($chief);

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

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

> public function __construct ($name, $employees)


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

> class Employee


Надо добавить abstract. Чтобы запретить создавать объекты Employee и показать что это лишь базовй класс для других.

Вместо 0/1 удобнее испольовать true/false для isChief: http://php.net/manual/ru/language.types.boolean.php (да, они не описаны в учебнике, я знаю).

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


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

Также, по возможности используй тайп хинты: http://php.net/manual/ru/language.oop5.typehinting.php — они делают код лучше
!xnn2uE3AU. #14 #377649
>>377593

> В пхп якобы нельзя работать внутри функции с глобальными переменными, так?


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

> То есть если мне нужно в функции передавать какую-нибудь глобальную переменную, то мне нужно в описание функции добавить еще 1 переменную и глобальную передавать уже в неё при вызове функции?


Да.

Сделай еще чтобы функция не выводила сразу ответ через echo а возвращала через return сколько всего выполчено. А то может мы хотим что-то с этим результатом сделать, например, сравнить где выгоднее (кстати, допиши-ка чтобы он писал какой банк выгоднее).
!xnn2uE3AU. #15 #377650
>>377600

Ответил уже тут >>377641

>>377622

> Там есть видео, я так понимаю его вставлять с помощью тега <video>? Также там на видео какие-то навороченные штучки(кнопка воспроизведения, полоса с продолжительностью) - это с помощью jQuery делается? Но я в него пока не умею.


Можешь пока картинку поставить, а кнопки просто неподвижными элементами сверстать.

> Как можно сделать двойную тень?


И box-shadow и text-shadow позволяют указать несколько теней: http://htmlbook.ru/css/box-shadow

> И да, что вообще меняется при отзывчивой верстке?


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

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

http://habrahabr.ru/post/119127/
http://habrahabr.ru/post/144003/

> Сначала пишем html-код для компьютера, потом пишем css-код для мобильных(ненужным блоком просто устанавливаем display: none;, например?), потом уже пишем css для компьютеров?


Можно в любом порядке, это непринципиально. Мне удобнее для больших экранов сначала сверстать а потом для маленьких. Но есть принцип mobile first когда сначала делают мобильную верисю.
!xnn2uE3AU. #16 #377651
>>377628

Да.

>>377633

> Надо писать сначала Hamburger.type ={}, потом Hamburger.type[Hamburger.SIZE_SMALL] = {}?


Да

> Создается объект type у конструктора


Да. Только правильнее «добавляется свойство type у конструктора Hamburger, в которое помещается пустой объект».

> потом мы кладем в свойство этого объекта другой объект SIZE_SMALL и ему задаем свойства.


Нет, мы добавляем свойство с именем, которое хранится в Hamburger.SIZE_SMALL (а там хранится 'SMALL').

Hamburger.SIZE_SMALL — это не объект, а просто строка 'SMALL'. Имя свойства может быть только числом или строкой, а не объектом.

> В таком случае Hamburger.type[Hamburger.SIZE_SMALL] как-то связан с константой SIZE_SMALL?


Никак не связан. Сравни:

> x['y'] = 1;


> В таком случае x['y'] как-то связан со строкой 'y'?



>>377634

То, что в Hamburger.type, Hamburger.filling, Hamburger.additive сделано верно.
!xnn2uE3AU. #16 #377651
>>377628

Да.

>>377633

> Надо писать сначала Hamburger.type ={}, потом Hamburger.type[Hamburger.SIZE_SMALL] = {}?


Да

> Создается объект type у конструктора


Да. Только правильнее «добавляется свойство type у конструктора Hamburger, в которое помещается пустой объект».

> потом мы кладем в свойство этого объекта другой объект SIZE_SMALL и ему задаем свойства.


Нет, мы добавляем свойство с именем, которое хранится в Hamburger.SIZE_SMALL (а там хранится 'SMALL').

Hamburger.SIZE_SMALL — это не объект, а просто строка 'SMALL'. Имя свойства может быть только числом или строкой, а не объектом.

> В таком случае Hamburger.type[Hamburger.SIZE_SMALL] как-то связан с константой SIZE_SMALL?


Никак не связан. Сравни:

> x['y'] = 1;


> В таком случае x['y'] как-то связан со строкой 'y'?



>>377634

То, что в Hamburger.type, Hamburger.filling, Hamburger.additive сделано верно.
#17 #377667
Пытаюсь использовать file_get_contents на сайт с https и вот что мне пишет:
Warning: file_get_contents() [function.file-get-contents]: Unable to find the wrapper "https" - did you forget to enable it when you configured PHP?
Как это исправить, где что включить?
!xnn2uE3AU. #18 #377668
>>377667

http://stackoverflow.com/questions/1975461/file-get-contents-with-https

Тут пишут надо расширение openssl включить.
#19 #377669
>>377668
Расскоментировал extension=php_openssl.dll, перезагрузил сервер. Все равно не работает. Расришерине лежит в папке.
#20 #377681
>>377669
Может у тебя не шиндошс?
#21 #377682
>>377669
Может еще не тот конфиг редактируешь, проверь php_ini_loaded_file()
#22 #377685
>>377649

http://ideone.com/7Q6avv

подправил задачку.
#23 #377686
>>377682
В смысле не тот? php.ini, который у меня в папке шиндовс лежит. Нашел чувака, у которого такая же проблема, ему посоветовали какую-то программу скачать.
!xnn2uE3AU. #24 #377696
>>377669

Сделай файл с кодом

<?php phpinfo();

Запусти его в браузере и посмотри что там пишется в разделе stream wrappers и extensions

>>377685

Ок, все верно
#25 #377700
>>377696

>Ок, все верно



как тебе то что я вывожу имя банка через кейс? По другому не додумался как можно сделать кроме как сравнивая переменные с самими же собой.
7 Кб, 674x172
#26 #377701
>>377696
Всё, что нашло по stream wrapper
!xnn2uE3AU. #27 #377704
>>377700

По другому можно

if ($bank1 < $bank2 && $bank1 < $bank3) {
банк 1 выгоднее
}

Или положить цены в массив и найти наименьшую.

Твой вариант тоже норм.

>>377701

Ищи по слову openssl. У меня есть заголовок openssl, под ним написано

OpenSSL supportenabled

И этот код работает:

error_reporting(-1);
$d = file_get_contents('https://www.google.com/');
var_dump($d);

Ты сервер перезапустил кстати?
#28 #377706
>>377704
OpenSSL disabled. строку расскоментировал, сервер перезапускал.
!xnn2uE3AU. #29 #377707
>>377706

А ты в том ли файле раскомментировал строчку? Тут http://stackoverflow.com/questions/14291151/you-must-enable-the-openssl-extension-to-download-files-via-https пишут что например у WAMP свой конфиг.

Что у тебя за сборка кстати?

http://php.net//manual/ru/openssl.installation.php

Тут написано dll-ка должна быть доступна.
!xnn2uE3AU. #30 #377708
>>377706

И кстати, имей в виду, сборки предназначены для экономии времени опытных разработчиков. Начинающим лучше ставить все самому.
#31 #377709
>>377708
>>377707
У меня стоит Апач, и путь к пхх я вроде как добавлял, как в мануале на пхпмайадмин написано.
#32 #377713
>>377708

помоги расшифровать регулярку

( [^,\s=\{\}]+ ( =\{ [^\}]+ \} | [^,\{\}]+ ) )+
!xnn2uE3AU. #33 #377716
>>377709

Ты читал ссылку? http://php.net//manual/ru/openssl.installation.php

Там надо чтобы библиотека ssleay.dll была доступна. Посомтри, где она у тебя хранится и чему равна PATH (посмотреть можно в свойствах системы вызываемых по Win + Pause (или Break?) -> дополнительно -> переменные среды).

Посомтри нет ли чего в логе ошибок (в папке Апача logs/error.log)
#34 #377718
>>377709
Ты же заменил слово disabled на enabled в конфиге, да?
#35 #377722
>>377716
Теперь всё работает, по крайней мере пишет SSL enabled. У меня оказывается не был прописан путь к пхп, хотя я его туда добавлял, когда устанавливал, мамой клянусь.
Протестил на https://google.ru, он работает, а этот тред нет.
[function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 503 Service Temporarily Unavailable
Так и должно быть?
#37 #377735
>>377722
Да, тут же какая-то клаудфлаерская антиддос-хуита
#38 #377736
ОП, прокомментируй пожалуйста решение задачи на функцию.
http://ideone.com/natdNO
!xnn2uE3AU. #39 #377739
>>377722

Двач за клаудфлеар, там защита от ботов.

>>377726

А почему латинницей? Рубипроблемы какие-то?

>>377736

> ($creditSumm * $percent) + $commission


Скопировано 3 раза. Попрбуй избавиться от копипасты.

У if скобка пишется на той же строке:

if (...) {
...
}

В остальном, все хорошо.
#40 #377749
>>377739

> Скопировано 3 раза. Попрбуй избавиться от копипасты.


Поправил. Норм?
http://ideone.com/uIH6Xr
#41 #377757
ОПа, ответь за тот тред:

>while/endwhile применяется в шаблонах. 5000 надо выносить в переменную. Код лучше бы постить на ideone так как непонятно что он выодит и работает ли вообще.


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

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


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

>Прекрасно состоавлено (ну ок может и не очень).


Я тебе на пальцах объяснил почему задача некорректна, ты зачем такой сложный?

>Там в предыдущей более простой задаче (которую ты пропустил? зря) пояснено, что эти проценты добавляются к остатку кредита каждый месяц + добавляется фиксированная комиссия.


Какой предыдущей? Я эту задачу с джпега взял.
#42 #377758
>>377739

> Рубипроблемы


Есть некоторые ПРОБЛЕМЫ в движке и стандарте, когда ты с языками, отличными от английского работаешь, но там скорее косметически неприятно. В данном случае проблемы нет и работать будет хоть с муслимскими иероглифами.

мимо-рубипроходил
#43 #377759
ОП, решил малость оптимизировать свой файлообменник.
Нормально ли доверять $_FILES['userfile']['type'] и при скачивании файла записывать этот mimetype в заголовок или сначала проверять в скрипте (всякие getImageSize для проверки на изображение)?
#44 #377763
ОП, дай советов по слайдеру - https://github.com/infinitecats/slider. Второй день изучаю события и пока что вот так. Дай советов по js-Коду. Что там можно изменить? У меня там кроссбраузерность сильно хромает.

И да, на каком этапе нужно переходить на jQuery? Я просто видел, что ты в прошлом треде писал, что стоит сначала пописать на чистом js, а потом перекатываться на jQuery/
#45 #377767
>>377763
Что-то я какой-то косноязычный. Извиняй за кривой слог.
#46 #377769
И еще вопрос. Почему крупные компании(Яндекс, Сбербанк) не используют на своих сайтах отзывчивый дизайн? У них просто разный код для разных устройств?
!xnn2uE3AU. #47 #377774
>>377763

Ну задумка такая, что надо сначала решить все задачки на DOM — а потмо переходить к jQuery. По нему я правда пока еще задачек не придумал.

>>377749

Ок, теперь верно. Хотя я бы не заводил переменную newSumm, а использовал creditSumm

>>377757

> Вайл/ендвайл я применял вместо скобок, нахуй скобки, когда можно словами написать.


Не любишь скобки — пиши на другом языке.

> Зачем 5000 выносить в переменную, если это фиксированный ежемесячный платеж.


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

> Ладно еще в константу.


Константы не для этого используются.

> Ты про арифметику остатков не слышал да?


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

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

> Я тебе на пальцах объяснил почему задача некорректна, ты зачем такой сложный?


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

> Какой предыдущей? Я эту задачу с джпега взял.


А не надо было учебник с середины проходить.
!xnn2uE3AU. #47 #377774
>>377763

Ну задумка такая, что надо сначала решить все задачки на DOM — а потмо переходить к jQuery. По нему я правда пока еще задачек не придумал.

>>377749

Ок, теперь верно. Хотя я бы не заводил переменную newSumm, а использовал creditSumm

>>377757

> Вайл/ендвайл я применял вместо скобок, нахуй скобки, когда можно словами написать.


Не любишь скобки — пиши на другом языке.

> Зачем 5000 выносить в переменную, если это фиксированный ежемесячный платеж.


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

> Ладно еще в константу.


Константы не для этого используются.

> Ты про арифметику остатков не слышал да?


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

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

> Я тебе на пальцах объяснил почему задача некорректна, ты зачем такой сложный?


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

> Какой предыдущей? Я эту задачу с джпега взял.


А не надо было учебник с середины проходить.
#48 #377778
Почему одни выбирают CMS, а другие фреймворки?
#49 #377779
>>377778
А что такое фреймворки и кмс? Набор библиотек или что?
#50 #377780
>>377759
Переделал чуток.
Сделал проверки для миниатюрного изображения и аудио-плеера, игнорируя $_FILES['userfile']['type'].
Чуток почитал статьи, там указывают тип "application/octet-stream" при скачивании, сделал также. Отдаю файлы через апачевский XSendFile, правда XSenfFilePath никак не хочет указывать разрешённые директории.
#51 #377781
>>377779
Ну типа того, удобно всё слепленное в кучу
!xnn2uE3AU. #52 #377784
>>377759

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

> и при скачивании файла записывать этот mimetype в заголовок


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

>>377769

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

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

Ну и немного он адаптируется — попробуй поменять ширину окна, он тянется. То же и с яндекс-авто, маркетом.

Гитхаб тоже кстати на UA смотрит.

Сбербанк не регирует ни на ширину, ни на юзер-агент, ну видимо им это не надо.

>>377763

Тебе бы надо сделать github pages — чтобы страницу можно было на гитхабе просматривать.

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

<скрипт src="код"></скрипт>
<скрипт>
var gallery = new GalleryWidget({
root: someElement
});
</скрипт>
Число и размеры картинок не должны быть жестко заданы в коде.

classList — часть HTML 5, ты в курсе? Как и query selector кстати.

> var slide2 = document.querySelector('.slider .images > li:nth-child(2)');


> var slide3 = document.querySelector('.slider .images > li:nth-child(3)');


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

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

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

При клике несколько раз по кнопке значок на ней выделяется и появляется синяя полоска. Надо либо использовать css-свойство запрещающее выделять текст либо отменять событие onselectstart или как-то так.

> class="hide"


> class="ahead"


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

> width: 500px;


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

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

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

Ну и я не уверен, что это хорошо ставить все img прямо в коде. Это вызовет загрузку всех картинок, даже если пользователь их не будет смотреть. Лучше подгружать только текущую картинку и 2-3 следующих, а адреса картинок передавать в параметрах виджета. Правда, в этом случае мы не сможем для браузеров без JS отобразить картинки списком (а также поисковые системы их не проиндексируют) — но что поделать, для них можно оставить только первую картинку в виде img.
!xnn2uE3AU. #52 #377784
>>377759

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

> и при скачивании файла записывать этот mimetype в заголовок


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

>>377769

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

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

Ну и немного он адаптируется — попробуй поменять ширину окна, он тянется. То же и с яндекс-авто, маркетом.

Гитхаб тоже кстати на UA смотрит.

Сбербанк не регирует ни на ширину, ни на юзер-агент, ну видимо им это не надо.

>>377763

Тебе бы надо сделать github pages — чтобы страницу можно было на гитхабе просматривать.

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

<скрипт src="код"></скрипт>
<скрипт>
var gallery = new GalleryWidget({
root: someElement
});
</скрипт>
Число и размеры картинок не должны быть жестко заданы в коде.

classList — часть HTML 5, ты в курсе? Как и query selector кстати.

> var slide2 = document.querySelector('.slider .images > li:nth-child(2)');


> var slide3 = document.querySelector('.slider .images > li:nth-child(3)');


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

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

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

При клике несколько раз по кнопке значок на ней выделяется и появляется синяя полоска. Надо либо использовать css-свойство запрещающее выделять текст либо отменять событие onselectstart или как-то так.

> class="hide"


> class="ahead"


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

> width: 500px;


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

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

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

Ну и я не уверен, что это хорошо ставить все img прямо в коде. Это вызовет загрузку всех картинок, даже если пользователь их не будет смотреть. Лучше подгружать только текущую картинку и 2-3 следующих, а адреса картинок передавать в параметрах виджета. Правда, в этом случае мы не сможем для браузеров без JS отобразить картинки списком (а также поисковые системы их не проиндексируют) — но что поделать, для них можно оставить только первую картинку в виде img.
!xnn2uE3AU. #53 #377785
>>377778

CMS рассчитаны на создание сайтов без кодинга, через админку. Фреймворки на написнаие кода.
#54 #377794
>>377785
А нахуя в некоторых вакансиях от кодеров требуют знания кмс?
#55 #377804
>>377794
Потому что это вакансия для "Веб-мастера", а не кодера.
#56 #377805
>>377804

>веб-мастер


>не умеет кодить


Какой он к хуям мастер тогда?
#57 #377905
>>377805
Ну я работаю веб-мастером получается. Joomla и Webasyst теперь знаю вдоль и поперек. Но кодить все равно приходится, но по мелочи. Чаще для упрощения себе жизни, работая с огромным количеством файлов или товаров например.
35 Кб, 203x236
#58 #378040
Где можно скачать мускул беспатно без смс?
#59 #378072
>>378040
http://dev.mysql.com/downloads/
MySQL Server - сама СУБД.
MySQL Workbench - удобный графический интерфейс к ней.
39 Кб, 738x481
#61 #378075
>>378072
Посмотри позязя, я правильный перечень установил?
В самоучителе по пхп еще написано, что для запуска нужно создать файл с расширением бат и прописать адрес: start c:\Home_server\mysql\bin\mysqld-nt.exe -u root
-standalone
exit
Но в папке бин папки Мускул Сервер 5.6 нет такого файла.
#62 #378077
>>377774
Придурок, ты хоть знаешь что такое нечеткая логика? Короче, ясно все с тобой, я не буду тебе ничего доказывать, так как твоя глупость и упертость безгранична.
#63 #378090
ой, какие дебильные задачи в факью, такое ощущение будто для школьника-дауна писали. ИИ И ШКАЛЬНИК ИГРАЮТ В КУБИКИ ...(ТУТ БУДЕТ МНОГО НАХУЙ НЕ НУЖНЫХ СЛОВ) УГАДАЙ В КАКИЕ КУБИКИ))) Бесит такой слащавый многословный тон, есть нормальные формальные задачи, с нормально поставленным заданием и решением в конце?
#64 #378091
Вопрос по Битриксу, не бейте тапками. Краткая суть проблемы: надо было зафигачить почтовый шаблон, сам я жуткий ньюфаг в PHP и особенно 1С. Копипастнул код в нужный файл отсюда: http://blog-o-bitrix.ru/bitrix/otpravka-pisma-polzovatelyu-pri-smene-statusa-ego-zakaza-bitriks/ Потом прочёл здесь http://www.cyberforum.ru/1c-bitrix/thread449213.html что класс надо было переименовать. Сижу теперь с ошибкой в панели Администрирования и не знаю, как всё исправить, потому что доступ к серверу у одной жадной московской фирмы, а почтовую поебень мой работодатель теребит с меня. Fatal error: include_once(): Cannot redeclare class mail in /home/bitrix/www/bitrix/modules/main/classes/general/module.php on line 305 Как достать эту заразу? Помогите, умоляю.
#65 #378099
>>378090
http://archive-ipq-co.narod.ru/l1/mou-ikkai.html
Ну раз крутой такой что вах вах решай эти. Ну или вот на ооп задачки внизу страницы имеются
http://archive-ipq-co.narod.ru/l1/pasta.html
#66 #378111
>>378099
ой зевать аж начинаю. пойду попью кофе, покурю, сделаю копирайт и спать.
53 Кб, 480x350
#67 #378113
>>378111
Смотрю у тебя очень интересная и насыщенная жизнь, не жалко тратить свое время на постинг унылой ерунды в треде где такие клоуны как ты только вызывают улыбки у тутошних обитателей?
#68 #378124
>>378074
Хочу уже взяться за задачу с кошками мышками, но ума не приложу с чего начать. пока что только создал массив $field['x'] = 100, $field['y'] = 100 и решил что вроде как тут 3 класса. Поле, кошка и мышка.
#69 #378127
>>378124
Сам будто не тоже самое сделал.
21 Кб, 910x487
#70 #378138
Почему у меня БД не создается? Скачал, установил и подклчил мускул (написано подключилось успешно), а бд не создается чому?
#71 #378140
>>377568
Я тут исправляю сейчас по твоим замечаниям. Возник вопрос.

>Я тут еще подумал, а в чем смысл в раздельном логине для студентов и преподавателей?


Там ведь есть еще логин через социальные сети. Так вот если человек не зарегистрирован в системе и пытается залогиниться через них, я его не логиню, а сначала регистрирую. И если сделать страницу логина общей для всех пользователей, то я не смогу определить, кто это, преподаватель или студент. Соответственно не смогу назначить нужный тип в базе.
Самая адекватная идея, которая пришла мне в голову, спрашивать у пользователя кто он, когда при oauth регистрации мы выводим форму с просьбой указать групп(у/ы). Что скажешь?
#72 #378154
И библиотека GD тоже не работает, хотя кавычки по инструкции в пхп.ини убрал, что ж такое?
#73 #378155
>>378138
Какая версия php? И вообще: http://php.net//manual/ru/function.mysql-create-db.php
#74 #378156
29 Кб, 818x479
#75 #378160
>>378155
Отказывает в доступе. Я правда бат. в мускуле не создал, поэтому?
#76 #378162
>>378160
Для того, чтобы подключиться, нужно указать в майскуэле коннекте логин и пароль. Ты его полюбому должен был создавать при установке майскуэля. Если нет, то погугли как создать нового пользователя.
И mysql_* не используются сейчас, возьми учебник поновее.
57 Кб, 483x604
#77 #378167
Анончики, посоветуйте годной литературы по php/html/js.
#78 #378173
>>378162
Бляя, я забыл их.
#79 #378174
>>378173
о, так там пользователь root по умолчанию стояла. Какой я тупой.
#80 #378176
>>378174
да что за хуйня только что успешно создал ДБ, а теперь опять фейл!
7 Кб, 640x400
#81 #378200
Кортошки, тут верстальщиков полон тред, может кто подскажет - есть одна страница на бутстрампе с пикрилейтеда, нужно сделать колонки md-* до низа страницы, а контент в них - прокручиваемый отдельным скроллом.
фреймы и js не предлагать
#83 #378210
>>378208
Таких компонентов тьма, да и стандартный owerflow:auto работает.
Ресь о том, как сделать колонку до низа страницы без указания факсированного размера, предварительно вычисляя его JS.
!xnn2uE3AU. #84 #378211
>>377780

Ну хорошо конечно, но ты бы мог еще и ссылочку на гитхаб скинуть, а то трудно что-то прокомментировать.
#85 #378213
>>378200
size:100% ?
#86 #378214
>>378213
Т.е. height:100%
!xnn2uE3AU. #87 #378215
>>378074

> function addEmployees($employees)


Тут можно было добавить type hint: array $employees

> return count($this->employees) + 1;


Правильнее бы проверить есть ли шеф и если нет то не добавлять 1

> return round($employeesSalary);


Лучше возвращать число как есть, а округлять уже при выводе

> $total['employeesCount'][] = $employeesCount;


А зачем массив? Сразу складывай числа.

> foreach ($total as $value) {


> echo padLeft(array_sum($value), $columnWidth);


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

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

>>378075

По моему, ты установил кучу ненужной фигни.

> В самоучителе по пхп еще написано, что для запуска нужно создать файл с расширением бат


Если ты установил MySQL как сервис в систему, то запустить его можно через окно управления сервисами (пуск -> services.msc) или командой net start mysql

Учти, что у денвера есть свой mysql, если тот запущен то он займет порт 3389 и второй mysql будет не запустить.

>>378090

http://codeforces.ru/
http://algolist.manual.ru/olimp/
http://acmp.ru/?main=tasks
!xnn2uE3AU. #87 #378215
>>378074

> function addEmployees($employees)


Тут можно было добавить type hint: array $employees

> return count($this->employees) + 1;


Правильнее бы проверить есть ли шеф и если нет то не добавлять 1

> return round($employeesSalary);


Лучше возвращать число как есть, а округлять уже при выводе

> $total['employeesCount'][] = $employeesCount;


А зачем массив? Сразу складывай числа.

> foreach ($total as $value) {


> echo padLeft(array_sum($value), $columnWidth);


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

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

>>378075

По моему, ты установил кучу ненужной фигни.

> В самоучителе по пхп еще написано, что для запуска нужно создать файл с расширением бат


Если ты установил MySQL как сервис в систему, то запустить его можно через окно управления сервисами (пуск -> services.msc) или командой net start mysql

Учти, что у денвера есть свой mysql, если тот запущен то он займет порт 3389 и второй mysql будет не запустить.

>>378090

http://codeforces.ru/
http://algolist.manual.ru/olimp/
http://acmp.ru/?main=tasks
!xnn2uE3AU. #88 #378218
>>378091

> Cannot redeclare class mail


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

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

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

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

>>378124

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

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

>>378140

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


Да, ты прав.

> Самая адекватная идея, которая пришла мне в голову, спрашивать у пользователя кто он, когда при oauth регистрации мы выводим форму с просьбой указать групп(у/ы). Что скажешь?


Раз уж ты выводишь диалог то да, можно там и справшивать. Одна страница входа все же лучше чем две.

>>378154

Где подробности? Что phpinfo() показывает? Что в php.ini? сервер перезапускал?
!xnn2uE3AU. #88 #378218
>>378091

> Cannot redeclare class mail


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

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

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

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

>>378124

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

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

>>378140

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


Да, ты прав.

> Самая адекватная идея, которая пришла мне в голову, спрашивать у пользователя кто он, когда при oauth регистрации мы выводим форму с просьбой указать групп(у/ы). Что скажешь?


Раз уж ты выводишь диалог то да, можно там и справшивать. Одна страница входа все же лучше чем две.

>>378154

Где подробности? Что phpinfo() показывает? Что в php.ini? сервер перезапускал?
!xnn2uE3AU. #89 #378219
>>378167

В ОП-посте есть немного.

По js — learn.javascript.ru

>>378200

Таблицей через display: table попробуй. Вообще, по моему тут нужен либо flexbox либо JS, средствами CSS так просто это не сделать.

Еще есть единица измерения wh (или vh?) — проценты от высоты окна, но она не везде работает.

>>378210

Выичслять через JS дурацкая идея так как размер не будет сам пересчитываться при изменении размеров окна или масштаба (это можно исправить) и при изменениях на странице (а это - нет).

>>378214

height 100% работает только если у родителя и всех предков стоит высота в пикселях или процентах, а не auto.
#90 #378238
Оп, что нужно, чтобы сайт работал на телефоне, вернее выглядел в должном виде? Есть что-нибудь универсальное, что захватит большинство телефонов? Можешь ссылок кинуть. Как раз вот на работе на днях нужно будет проверить список сайтов на работоспособность на телефонах и исправить в случае чего. Все сайты с фиксированной шириной обычно.
#91 #378245
>>378238
гугли адаптивную вёрстку.
#92 #378262
>>377570
Анончики, самая первая попытка кодить после паскаля в школе и дельфи универа.
Нормально оформлено?

http://ideone.com/AtZzFp
#93 #378265
>>378262
if (condition) {
бла бла бла;
}

for (bla; bla; bla) {
бла бла бла;
}

function getName()
{
return blabla;
}

class Name
{
public bla;
}

Ну и твое должно выглядеть так
if ($humanSum>$robotSum) {
echo "\nЧеловеки победили! \n";
} elseif ($humanSum==$robotSum) {
echo "\nНичья! \n";
} else {
echo "\nПобеда роботов! \n";
}


В общем у ифов и циклов открывающая фигурная на одной строке, а у функций и классов на следующей.
#93 #378265
>>378262
if (condition) {
бла бла бла;
}

for (bla; bla; bla) {
бла бла бла;
}

function getName()
{
return blabla;
}

class Name
{
public bla;
}

Ну и твое должно выглядеть так
if ($humanSum>$robotSum) {
echo "\nЧеловеки победили! \n";
} elseif ($humanSum==$robotSum) {
echo "\nНичья! \n";
} else {
echo "\nПобеда роботов! \n";
}


В общем у ифов и циклов открывающая фигурная на одной строке, а у функций и классов на следующей.
#94 #378273
>>378265
То есть, для "ифов" вот так? Выглядит кашей, пмсм.

http://ideone.com/HwXDmj
#95 #378276
>>378273
ideone.com/VaRInh
#96 #378294
>>378276
Ппонял, спасибо. Попробую привыкнуть.
#97 #378299
Посоветуйте сайт (буржуйский если у нас аналогов нет), где много заданий для фрилансеров (на php соответственно) и можно мб хоть какую-то копеечку заработать или хотя бы задания оттуда поделать и понять, за что сколько платят.
#98 #378308
>>378265
Ящитаю лучше так:
if ($humanSum>$robotSum) {
echo "\nЧеловеки победили! \n";
}
elseif ($humanSum==$robotSum) {
echo "\nНичья! \n";
}
else {
echo "\nПобеда роботов! \n";
}
#99 #378319
Правильное решение? Можно ли через массив сделать?
Определить достоинство игральных карт по номеру
Игральным картам присвоены следующие порядковые номера в зависимости от их достоинства: "валет" - 11, "дама" - 12, "король" - 13, "туз" - 14. Порядковые номера остальных карт соответствуют их названиям("семерка", "восмерка" и т. д.). Вам нужно разработать программу, которая выводила достоинство карты по заданному номеру, который будет вводит пользователь.
<?php
$number=7;
switch ($number):
case 6:
echo "Шестерка";
break;
case 7:
echo "Семерка";
break;
case 8:
echo "Восьмерка";
break;
case 9:
echo "Девятка";
break;
case 10:
echo "Десятка";
break;
default:
echo "Неправильный номер карты";
endswitch;
#100 #378341
Итак, php-кун, у меня тут появились кое-какие опасения над своим кодом. Работаю уже около полугода в одной конторе. Фреймворки здесь не используются, ООП по минимуму. Меня уже заебало получать json аяксом и парсить его. Хотелось бы повысить навыки. Итак правильно ли использовать такую хуйню:
В цикле var tmp += '<div><span>'+someValue+'</span></div>' и потом jQuery('#id').html(tmp).
В php у меня трудно с файлами, урлами, курлы не пользую и не знаю для чего это, ооп и фреймворки тоже.
Минимум знаний о протоколах, http, например, посылаемых заголовках и т.д., а именно как это можно использовать на практике.
Хочу узнать о модных js фишках, и я не имею ввиду jQuery().slideDown(). Вот о прототипах я не знаю. В общем необходимо узнать нахуя это нужно на практике.
#101 #378351
>>378308
мб так даже - http://ideone.com/IqW7KD
>>378319
вот так ещё можно - http://ideone.com/PiWfG3
#102 #378353
>>378219
Flexbox тоже много где не работает. А где работает, то работает по-разному.
#103 #378355
>>378215

>Учти, что у денвера есть свой mysql,


А как отключить майсокл в денвере. Я еще посмотрел, у меня и в пхп есть папочка с мускулом.
#104 #378400
Госпади, ну чомуя такой тупой. Ну нахуя я по сто раз эту датабазу создаю, если я ее уже один раз создал, конечно, будет ошибка. Чому я дебил?
#106 #378413
>>378409
Ничего не понял про стректрейс, про ошибки. Ну да ладно.
#107 #378414
Нахуя нужен быдлонедоязык пхп когда есть православный шарп ибущий мамок пхп-обезьянок в рот и в жопу?
#108 #378422
>>377564
http://jsbin.com/hekole/10/edit?js,console

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

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

Что лучше, создать объект Houses, в котором рандомно вычисляется количество домов и рандомно в каждом квартир, или создать рандомное количество объектов House, где в каждом рандомное количество квартир. Что будет быстрее и производительнее?

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

Ну и так погуляй по коду, посмотри что не так.
#109 #378428
Я пролистывал мимо этот тред сотню раз и каждый раз я думал, что его название созвучно словосочетанию: "Педрильный клуб любителей пощекотать очко". Теперь и вы об этом знаете. У меня всё, спасибо за внимание.
!xnn2uE3AU. #111 #378446
>>378238

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

position fixed элементы могут работать не так.

Все, что основано на hover (наведении мыши), работать не будет.

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

Флеша нет.

Не css-анимации могут тормозить.

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

>>378262

После if фигурные скобки не так поставлены. Пропусти код например через phpformatter.com — он тебе его поправит.

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

>>378299

fl.ru, weblancer, odesk.

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


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

>>378308

Нет, это не по стандартам. Вот пример из стандарта PSR-2: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md#11-example

>>378351

> мб так даже


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

>>378319

Можно,

$cards = array(
6 => 'Шестерка',
7 => ....
);
!xnn2uE3AU. #111 #378446
>>378238

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

position fixed элементы могут работать не так.

Все, что основано на hover (наведении мыши), работать не будет.

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

Флеша нет.

Не css-анимации могут тормозить.

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

>>378262

После if фигурные скобки не так поставлены. Пропусти код например через phpformatter.com — он тебе его поправит.

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

>>378299

fl.ru, weblancer, odesk.

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


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

>>378308

Нет, это не по стандартам. Вот пример из стандарта PSR-2: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md#11-example

>>378351

> мб так даже


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

>>378319

Можно,

$cards = array(
6 => 'Шестерка',
7 => ....
);
#112 #378448
http://jsbin.com/kamiy/6/edit?html,js,console

removeClass не работает. Почему?
!xnn2uE3AU. #113 #378449
>>378341

> В цикле var tmp += '<div><span>'+


Это лапша. Для этого лучше использовать шаблонизаторы. Есть такие:

- мощные handlebars (наследник mustache js)
- простенький JSRender как плагин jQuery, который наверно тут подойдет больше учиытвая что шаблон простой: http://habrahabr.ru/post/148573/
- microtemplating (который я бы поостергся использовать): http://ejohn.org/blog/javascript-micro-templating/
- сайт помогающий выбрать: http://garann.github.io/template-chooser/

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

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


У меня есть урок по ООП для полных нулей в этом, не хочешь глянуть? http://archive-ipq-co.narod.ru/l1/pasta.html

Фреймворки — это вроде библиотек, содержащих готовый каркас приложения.

> Минимум знаний о протоколах, http, например, посылаемых заголовках и т.д., а именно как это можно использовать на практике.


Это проще всего в википедии почитать, описания кодов состояния и заголовков:

https://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%B7%D0%B0%D0%B3%D0%BE%D0%BB%D0%BE%D0%B2%D0%BA%D0%BE%D0%B2_HTTP
https://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%BA%D0%BE%D0%B4%D0%BE%D0%B2_%D1%81%D0%BE%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D1%8F_HTTP

Там часто используемых не так и много.

> Вот о прототипах я не знаю


Они нужны так как на них делается ООП, в jQuery кстати тоже.

> Хочу узнать о модных js фишках,


Ты бы сначала сам jS изучил. Не хочешь простые задачки порешать? https://gist.github.com/codedokode/ce30e7a036f18f416ae0

А так — это Require.JS/AMD, Backbone, underscore, Angular.
!xnn2uE3AU. #113 #378449
>>378341

> В цикле var tmp += '<div><span>'+


Это лапша. Для этого лучше использовать шаблонизаторы. Есть такие:

- мощные handlebars (наследник mustache js)
- простенький JSRender как плагин jQuery, который наверно тут подойдет больше учиытвая что шаблон простой: http://habrahabr.ru/post/148573/
- microtemplating (который я бы поостергся использовать): http://ejohn.org/blog/javascript-micro-templating/
- сайт помогающий выбрать: http://garann.github.io/template-chooser/

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

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


У меня есть урок по ООП для полных нулей в этом, не хочешь глянуть? http://archive-ipq-co.narod.ru/l1/pasta.html

Фреймворки — это вроде библиотек, содержащих готовый каркас приложения.

> Минимум знаний о протоколах, http, например, посылаемых заголовках и т.д., а именно как это можно использовать на практике.


Это проще всего в википедии почитать, описания кодов состояния и заголовков:

https://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%B7%D0%B0%D0%B3%D0%BE%D0%BB%D0%BE%D0%B2%D0%BA%D0%BE%D0%B2_HTTP
https://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%BA%D0%BE%D0%B4%D0%BE%D0%B2_%D1%81%D0%BE%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D1%8F_HTTP

Там часто используемых не так и много.

> Вот о прототипах я не знаю


Они нужны так как на них делается ООП, в jQuery кстати тоже.

> Хочу узнать о модных js фишках,


Ты бы сначала сам jS изучил. Не хочешь простые задачки порешать? https://gist.github.com/codedokode/ce30e7a036f18f416ae0

А так — это Require.JS/AMD, Backbone, underscore, Angular.
!xnn2uE3AU. #114 #378450
>>378355

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

>>378409

> this.checkType(this.size);


Это лучше делать сразу в конструкторе. Иначе если getCost не вызвывать то ошибка не обнаружится.

> if (this.extended[m] == this.extended[m - 1]) {


А это там, где добавляется добавка

А так, в остальном норм.

>>378413

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

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

>>378422

> или создать рандомное количество объектов House,


Это конечно. Дома же разные бывают. Для каждого дома — свой объект.

> Что будет быстрее и производительнее?


Тут надо сделать правильнее, а не производительнее

> Что лучше:


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

setPower надо вообще выпилить, это что-то непонятное.

Делай все как принято в ООП:

PowerUnit, есть метод посчитать вклад в энергетический баланс (аргумент: днем или ночью), который переопределен во всех потомках
Дом, есть свойство — число квартир
Солнечная панель, свойство — мощность
и так далее.
!xnn2uE3AU. #114 #378450
>>378355

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

>>378409

> this.checkType(this.size);


Это лучше делать сразу в конструкторе. Иначе если getCost не вызвывать то ошибка не обнаружится.

> if (this.extended[m] == this.extended[m - 1]) {


А это там, где добавляется добавка

А так, в остальном норм.

>>378413

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

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

>>378422

> или создать рандомное количество объектов House,


Это конечно. Дома же разные бывают. Для каждого дома — свой объект.

> Что будет быстрее и производительнее?


Тут надо сделать правильнее, а не производительнее

> Что лучше:


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

setPower надо вообще выпилить, это что-то непонятное.

Делай все как принято в ООП:

PowerUnit, есть метод посчитать вклад в энергетический баланс (аргумент: днем или ночью), который переопределен во всех потомках
Дом, есть свойство — число квартир
Солнечная панель, свойство — мощность
и так далее.
!xnn2uE3AU. #115 #378452
>>378429

У тебя в switch если ни один из вариантов не сработает происходит выход из функции без return

> if (!(typeof(type) in DefaultTypes)) {


Этот if надо перевернуть:

if (.. in defaultTypes) {
return ...;
}

> if (typeof(type) === 'object' && type.length)


Это неправильно, надо еще проверять что в length неотрицательное число и что есть свойства 0 ... length -1

>>378448

У тебя вообще почему-то слово klass добавляется: http://jsbin.com/kafiweyavoza/1/edit

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

> removeClass не работает. Почему?



Потому что

> node.className.split(' ', classes1);


Второй аргумент зачем?
!xnn2uE3AU. #115 #378452
>>378429

У тебя в switch если ни один из вариантов не сработает происходит выход из функции без return

> if (!(typeof(type) in DefaultTypes)) {


Этот if надо перевернуть:

if (.. in defaultTypes) {
return ...;
}

> if (typeof(type) === 'object' && type.length)


Это неправильно, надо еще проверять что в length неотрицательное число и что есть свойства 0 ... length -1

>>378448

У тебя вообще почему-то слово klass добавляется: http://jsbin.com/kafiweyavoza/1/edit

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

> removeClass не работает. Почему?



Потому что

> node.className.split(' ', classes1);


Второй аргумент зачем?
#116 #378453
>>378452
http://jsbin.com/kafiweyavoza/3/edit?js,console

Чем удобнее? Мне с регулярками вот совсем не удобно работать. Да и забываться начали.
#117 #378454
>>378450

>Это лучше делать сразу в конструкторе.



Как?
#118 #378455
>>378453
Кстати как-то через json еще делают. Но я не вникал пока что.
!xnn2uE3AU. #119 #378457
>>378454

function Hamburger(size...) {
this.checkSize(size);
....
}

>>378453

Забылись — вспоминай. Способ со split не такой и плохой, но с регуляркой будет короче.

Ну и исправь там чтобы один класс по много раз не доабвлялся.
#120 #378458
>>378457
http://jsbin.com/bowix/8/edit?js,console

Остальное завтра доделаю.
#121 #378460
Анон, зделол я задачки с narod.ru. Куда дальше топать?
#123 #378471
>>378461
Немного не то, что я хотел.
Воннаби #124 #378498
http://ideone.com/jPWFK5

Можно прокомментировать вот это решение задачи?
#125 #378505
>>378498
Норм. Я тупо сравнение для трех зделол после запила функции, а ты запилил для n-го кол-ва.
#126 #378506
>>378457
http://jsbin.com/kafiweyavoza/5/edit?js,console

Ну вот.

На jquery более сложная функция: http://jsbin.com/mapute/3/edit?js,console
#128 #378511
>>378450
PowerUnit - это PowerGrid по моему, да?

От isDay зависят не все классы.

>То же отсноистя и к остальным случайным числам.



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

>который переопределен во всех потомках



http://jsbin.com/hekole/14/edit?js,console

Значит нужен миксин? А пока свойства не копируются.
#129 #378536
>>378215
http://ideone.com/lbr6yq

Нужна помощь с задачей про коше мышек, вообще не могу представить какие у кого должны быть свойство и как вообще все это дело писать. Непонимать абсолютно.
class Field
public $x = N;
public $y = N;

abstract class Animal
public $name;
public $x;
public $y;

class Cat extends Animal

class Mouse extends Animal
!xnn2uE3AU. #130 #378554
>>378460

Решать дополнительные задания, смотри сколько их у нас:

— на работу с датами: https://gist.github.com/codedokode/10539805
— по основам JS/DOM: https://gist.github.com/codedokode/ce30e7a036f18f416ae0
— сделать игру на JS: https://gist.github.com/codedokode/9933897
— по основам MySQL: https://gist.github.com/codedokode/10539213
— задача сделать клон rghost на фреймворке: https://gist.github.com/codedokode/9424217 (требуется знание MySQL, основ HTML/CSS)
— задача сделать борду, верстка уже сделана: https://github.com/codedokode/board-markup

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

У тебя вообще как с HTML/CSS? Изучал? не изучал? У меня в учебнике вроде есть 10 простых заданий на CSS.

Ну и стоило бы решения задач показать, может у тебя там ошибки есть? По ООП по крайней мере, это важная тема.
#131 #378562
>>378554
Оп, а я первую зарплату получил на работе благодаря тебе.
!xnn2uE3AU. #132 #378563
>>378458

Я сейчас посмотрел, checkType не защищает от того например что мы поменяем местами size и filling или попробуем добавить в качестве добавки Hamburger.TYPE_SMALL. Надо бы это исправить.

Ну и это:

> if (arguments == arguments[i - 1])



ненадежная проверка. Надо сделать по-другому:

if (arrayContains(this.extended, arguments)) {
throw...
}

>>378498

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

В строках 27-31 функция расползлась. Если вызов функции не помещяется в строчку, аргументы можно писать вертикально с отступом, как тут: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md#46-method-and-function-calls

Настрой IDE чтобы при нажатии Tab вставлялось 4 пробела, а не таб (такая настройка есть в любом нормальном редакторе, кроме блокнота). А то твой код будет разваливаться и разъезжаться в разных редакторах.

> payment = $debtAmount < $monthlyPayment ? $debtAmount : $monthlyPayment;


Используй min(). И обычно при переносе строк знак остается на первой строке:


$x = $y ?
$z :
$w;


А тут вообще все можно было в 1 строчку записать.
!xnn2uE3AU. #132 #378563
>>378458

Я сейчас посмотрел, checkType не защищает от того например что мы поменяем местами size и filling или попробуем добавить в качестве добавки Hamburger.TYPE_SMALL. Надо бы это исправить.

Ну и это:

> if (arguments == arguments[i - 1])



ненадежная проверка. Надо сделать по-другому:

if (arrayContains(this.extended, arguments)) {
throw...
}

>>378498

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

В строках 27-31 функция расползлась. Если вызов функции не помещяется в строчку, аргументы можно писать вертикально с отступом, как тут: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md#46-method-and-function-calls

Настрой IDE чтобы при нажатии Tab вставлялось 4 пробела, а не таб (такая настройка есть в любом нормальном редакторе, кроме блокнота). А то твой код будет разваливаться и разъезжаться в разных редакторах.

> payment = $debtAmount < $monthlyPayment ? $debtAmount : $monthlyPayment;


Используй min(). И обычно при переносе строк знак остается на первой строке:


$x = $y ?
$z :
$w;


А тут вообще все можно было в 1 строчку записать.
12 Кб, 370x147
#133 #378567
Анон, мне нужна помощь. Я хочу научиться писать на PHP, но не знаю как мне быть - учить самому по книжкам\гуглу или топать сюда http://web.xxi.kiev.ua/programming?_ga=1.94106397.1677494808.1374923540. Проблема в том что полтора года назад я ходил в это место на курсы вэбдиза и верстки и они мне не дали больше\понятнее чем гугл\курсы специалиста. Реально ли выучить ПХП самому?
!xnn2uE3AU. #134 #378570
>>378506

О, теперь более-менее нормально.

> if (!node.className && !hasClass(node, klass)) {


Вторая проверка hasClass зачем?

http://jsbin.com/rucarugafuce/1/edit — не добавляется класс add

Имена CSS классов чувствительны к регистру (вопрос на SO: http://stackoverflow.com/a/12533957 ). Использовать флаг i для регулярки нельзя.

> node.className = '';


> node.className += newClasses.trim();


Зачем += ? Почему нельзя сразу записать newClasses в className?

Ну и функция String.prototype.trim() появлилась только в ES5, то есть в IE8 ее нет, так что напиши пожалуйста и ее заменитель. Тебе наверно эта задача уже поднадоела, но я думаю, что исправив эти замечания, с ней можно будет закончить.

> На jquery более сложная функция


О, это очень хорошо что ты исходники jQuery читаешь. Продолжай их дальше читать.

Только у тебя по моему какой-то старый код. Новый на гитхабе: https://github.com/jquery/jquery/blob/master/src/attributes/classes.js#L55

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

Также, объект jQuery содержит коллекцию DOM элементов и может удалять классы у них всех сразу, что видно из этого:

> for ( i = 0, l = this.length; i < l; i++ ) {


> elem = this[ i ];



this — это ссылка на объект jQuery, который в ключах 0, 1, ... length - 1 хранит дом-элементы (то есть объект jQuery напоминает псевдомассив, если ты разберешь функцию его создания, то увидишь). Соответственно, в цикле мы удаляем классы у всех хранящихся в нем элементов.

И вместо регулярок там используется обычное удаление подстроки — возможно, ради оптимизации (так как генерация регулярного выражения занимает какое-то время, пусть и маленькое). Но видишь, там приходится использовать while так как если ты передаешь в replace строку вместо регулярки, то она заменяется только первый раз (из-за отсутствия флага g, который в JS сделан очень неудачно на мой взгляд, так как его все время забываешь поставить). И приходится заменять прбельные символы (табы, переводы строк) на пробелы этим выражением:

replace( rclass, " " )

чтобы поиск по строке работал.

Заметь также, вот это место:

> if ( elem.className !== finalValue ) {


> elem.className = finalValue;


Мы не записываем назад строку если она не поменялась — чтобы не запустить пересчет css-значений и перерисовку и вообще, чтобы поменьше обращаться к DOM. Я правда это не тестировал, но тоже слышал, что какие-то браузеры могут запустить пересчет css значений или перерисовку при записи в DOM.
!xnn2uE3AU. #134 #378570
>>378506

О, теперь более-менее нормально.

> if (!node.className && !hasClass(node, klass)) {


Вторая проверка hasClass зачем?

http://jsbin.com/rucarugafuce/1/edit — не добавляется класс add

Имена CSS классов чувствительны к регистру (вопрос на SO: http://stackoverflow.com/a/12533957 ). Использовать флаг i для регулярки нельзя.

> node.className = '';


> node.className += newClasses.trim();


Зачем += ? Почему нельзя сразу записать newClasses в className?

Ну и функция String.prototype.trim() появлилась только в ES5, то есть в IE8 ее нет, так что напиши пожалуйста и ее заменитель. Тебе наверно эта задача уже поднадоела, но я думаю, что исправив эти замечания, с ней можно будет закончить.

> На jquery более сложная функция


О, это очень хорошо что ты исходники jQuery читаешь. Продолжай их дальше читать.

Только у тебя по моему какой-то старый код. Новый на гитхабе: https://github.com/jquery/jquery/blob/master/src/attributes/classes.js#L55

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

Также, объект jQuery содержит коллекцию DOM элементов и может удалять классы у них всех сразу, что видно из этого:

> for ( i = 0, l = this.length; i < l; i++ ) {


> elem = this[ i ];



this — это ссылка на объект jQuery, который в ключах 0, 1, ... length - 1 хранит дом-элементы (то есть объект jQuery напоминает псевдомассив, если ты разберешь функцию его создания, то увидишь). Соответственно, в цикле мы удаляем классы у всех хранящихся в нем элементов.

И вместо регулярок там используется обычное удаление подстроки — возможно, ради оптимизации (так как генерация регулярного выражения занимает какое-то время, пусть и маленькое). Но видишь, там приходится использовать while так как если ты передаешь в replace строку вместо регулярки, то она заменяется только первый раз (из-за отсутствия флага g, который в JS сделан очень неудачно на мой взгляд, так как его все время забываешь поставить). И приходится заменять прбельные символы (табы, переводы строк) на пробелы этим выражением:

replace( rclass, " " )

чтобы поиск по строке работал.

Заметь также, вот это место:

> if ( elem.className !== finalValue ) {


> elem.className = finalValue;


Мы не записываем назад строку если она не поменялась — чтобы не запустить пересчет css-значений и перерисовку и вообще, чтобы поменьше обращаться к DOM. Я правда это не тестировал, но тоже слышал, что какие-то браузеры могут запустить пересчет css значений или перерисовку при записи в DOM.
#135 #378571
>>378562
Делись кулстори, вдохнови тех кто еще в процессе учебы.
#136 #378572
>>378570
Я пришел к выводу, что 1.8.2 самый оптимальный, т.к. на другие IE у меня по-крайней мере начинает ругаться.
!xnn2uE3AU. #138 #378575
>>378508

Ну так ты сам написал:

> default:


> return 'undefined';


Вот он и возвращает 'undefined'

Посмотри, что дает toString.call() для дом-объекта и исправляй логику. Она у тебя неправильная.

>>378511

> От isDay зависят не все классы.


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

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


Не, ты не так понял (или я плохо объяснил), мощность панели каждый день постоянна, просто бывают панели разных мощностей.

> Значит нужен миксин?


Не нужен.

> А пока свойства не копируются.


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

> var structure = {


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

>>378536

> вообще не могу представить какие у кого должны быть свойство и как вообще все это дело писать.



Очевидно, что у мышек и кошек есть много общего - их можно поместить на карту и двигать по ней. Логично сделать их наследниками общего класса Животное (или Юнит или Персонаж).

Свойства животных — координаты, у кошек добавляется сонливость. Должны быть методы перемещения по карте, у кошки еще метод «съесть мышку». Должен быть метод «сделать ход», который будет вызваться каждый ход.

Свойство карты — это массив находящихся на ней животных. Должны быть методы добавления и удаления с карты.

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

То, что у тебя написано, подойдет как основа.

По ООО вектор:

> $chief->isChief = true;


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

> public function setChief(Employee $chief)


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

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

> $employeesSalary += $this->chief->getSalary();


Тут надо сначала проверять, а есть ли шеф.

В остальном, все хорошо.
!xnn2uE3AU. #138 #378575
>>378508

Ну так ты сам написал:

> default:


> return 'undefined';


Вот он и возвращает 'undefined'

Посмотри, что дает toString.call() для дом-объекта и исправляй логику. Она у тебя неправильная.

>>378511

> От isDay зависят не все классы.


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

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


Не, ты не так понял (или я плохо объяснил), мощность панели каждый день постоянна, просто бывают панели разных мощностей.

> Значит нужен миксин?


Не нужен.

> А пока свойства не копируются.


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

> var structure = {


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

>>378536

> вообще не могу представить какие у кого должны быть свойство и как вообще все это дело писать.



Очевидно, что у мышек и кошек есть много общего - их можно поместить на карту и двигать по ней. Логично сделать их наследниками общего класса Животное (или Юнит или Персонаж).

Свойства животных — координаты, у кошек добавляется сонливость. Должны быть методы перемещения по карте, у кошки еще метод «съесть мышку». Должен быть метод «сделать ход», который будет вызваться каждый ход.

Свойство карты — это массив находящихся на ней животных. Должны быть методы добавления и удаления с карты.

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

То, что у тебя написано, подойдет как основа.

По ООО вектор:

> $chief->isChief = true;


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

> public function setChief(Employee $chief)


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

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

> $employeesSalary += $this->chief->getSalary();


Тут надо сначала проверять, а есть ли шеф.

В остальном, все хорошо.
!xnn2uE3AU. #139 #378583
>>378562

Молодец, что. Вдохнови тогда других анонов, а то некоторые не верят, что в нашем треде можно чему-то научиться.

>>378567

Реально, другие аноны изучали. Насчет книг, 2 хороших, годных книги (Зандстра и Шлосснейгл) указаны в ОП-посте, но чтобы за них взяться, надо сначала изучить основы HTML и PHP по любой другой книге.

Если уровень курсов тебе не понравился, то второй раз наверно не стоит идти.

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

>>378572

Да, в версии 2 перестали поддерживать IE8: http://jquery.com/browser-support/

Версия 1 в отдельной ветке: https://github.com/jquery/jquery/tree/1.x-master — но в ней вроде код тот же самый: https://github.com/jquery/jquery/blob/1.x-master/src/attributes/classes.js#L11

>>378574

> if (node.className.search(new RegExp('(\\s+|^)' + klass + '(\\s+|$)', 'g')) == -1) {


А что не hasClass? Короче бы вышло и читабельнее. И флаг g не нужен тут.

> node.className = '';


> node.className += newClasses.trim();


Зачем тут 2 строки когда можно написать одну?

> return (' ' + node.className + ' ').indexOf(' ' + klass + ' ') > -1;


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

class1\tclass2
class1\nclass2

Надо бы их заменять на пробел (можно сделать замену \s+ -> ' ').
!xnn2uE3AU. #139 #378583
>>378562

Молодец, что. Вдохнови тогда других анонов, а то некоторые не верят, что в нашем треде можно чему-то научиться.

>>378567

Реально, другие аноны изучали. Насчет книг, 2 хороших, годных книги (Зандстра и Шлосснейгл) указаны в ОП-посте, но чтобы за них взяться, надо сначала изучить основы HTML и PHP по любой другой книге.

Если уровень курсов тебе не понравился, то второй раз наверно не стоит идти.

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

>>378572

Да, в версии 2 перестали поддерживать IE8: http://jquery.com/browser-support/

Версия 1 в отдельной ветке: https://github.com/jquery/jquery/tree/1.x-master — но в ней вроде код тот же самый: https://github.com/jquery/jquery/blob/1.x-master/src/attributes/classes.js#L11

>>378574

> if (node.className.search(new RegExp('(\\s+|^)' + klass + '(\\s+|$)', 'g')) == -1) {


А что не hasClass? Короче бы вышло и читабельнее. И флаг g не нужен тут.

> node.className = '';


> node.className += newClasses.trim();


Зачем тут 2 строки когда можно написать одну?

> return (' ' + node.className + ' ').indexOf(' ' + klass + ' ') > -1;


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

class1\tclass2
class1\nclass2

Надо бы их заменять на пробел (можно сделать замену \s+ -> ' ').
!xnn2uE3AU. #140 #378586
#141 #378604
>>378583
Буду пытаться учиться с вами, господа. Сейчас вспоминаю HTML\CSS, а то как-то было не до этого.
#142 #378608
>>378571
Было сильное желание заработать денег, т.к. жил в нищите. Случайно наткнулся на этот тред. Загорелся, решил научиться. Это было где-то в феврале 2013 года, точно не помню. Думал быстро научусь за пару месяцев, хотел все и сразу. Первые задачи сам делал, в тред не выкладывал, т.к. быстро решались и был уверен в правильности.

Старые решенные задачи еще даже сохранились. Сейчас смешно смотреть на тот стиль написания.

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

Во всех задачах ОПа самая решающая задача и поворотная - наверное про сдачу, где очень хорошо нарабатывается опыт.

Попутно с мая этого года я искал работу, побывал во всех студиях мухосранска, ждал заказы на фрилансе. И вот в начале июля мне позвонили и сказали подойти на собеседование. Спросили, что знаю и умею, а я ответил, CSS и HTML, а PHP и JS в процессе изучения. Ну меня и взяли. Теперь у меня собственное рабочее место, отличный коллектив, и рутинная работа лол.

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

Такие дела, анончики.
#143 #378609
>>378608
Лол, а у меня с банкоматом и прописью довольно легко вышло, буквально за день решил, а вот с кругом и считалочкой было сложнее, и я уже неделю застрял на задаче с поиском пути.
#144 #378612
>>378608
А какие-нибудь проверочные задания тебе давали? По теории спрашивали?
Олсо, какая з/п?
#145 #378613
>>378608
Больной для меня вопрос: сколько лет тебе?
30-летний-старикан-кун
!xnn2uE3AU. #146 #378617
>>378609

А там усложненная версия есть, где добавлены купюры по 200 и 2000, вряд ли ты ее за день решишь.
#147 #378618
>>378612
Ничего не давали и теорию не спрашивали. З/п 20к сейчас, что для меня большие деньги лол по сравнению с былыми временами, когда жил на 100р в день. Через год думаю устраиваться в более крупную компанию на более крупную з/п, но уже с опытом.

>>378613
21лвл. В 30 легко устроиться также, нет разницы.
#148 #378624
>>378618
Чем конкретно на работе занимаешься? Какие задачи тебе ставят?
Первые дни как вникал в проект? Сидел сам разбирался?
#149 #378635
>>378624
Joomla, Webasyst, MODX, Wordpress, самописные движки. Верстаю сайты, запиливаю интернет магазины для местных барыг, иногда не только местных. Разбираюсь с джумлой, простые модули вроде получается писать. Мелкие задачи с js: кнопка вверх, плавная прокрутка, открывашка картинок и т.д. Разные задачи, хотя многое мне еще не доверяют, особенно касаемо php.
#150 #378643
>>378635

>Joomla, Webasyst, MODX, Wordpress, самописные движки.


Да ты же контент-менеджер
!xnn2uE3AU. #151 #378645
Аноны, кто решает задачки на JS, обязательно используйте strict mode:

http://learn.javascript.ru/strict-mode
http://habrahabr.ru/post/118666/
#153 #378655
>>378563
Как это организовать?

Что-то вроде Hamburger.price.size[Hamburger.TYPE_SMALL], но так не работает.
!xnn2uE3AU. #155 #378658
>>378655

Что организовать? Проверку что размер правильный? Можно сделать массив возможных размеров:

Hamburger.sizes = [Hamburger.SIZE_SMALL, ...];

И проверять что size в нем есть. Можно еще как-то.
#156 #378704
>>378645
какой-то хуй сказал что надо использовать стрикт и все понеслись? сила интерпретатора в том чтобы не маяться хуйней с проверкой типов
#157 #378734
http://jsbin.com/hezewa/3/edit?js,console

Оп, я твое задание невнимательно прочитал и создал такое вот поле. Интересно можно ли сократить код как-нибудь?
!xnn2uE3AU. #159 #378778
>>378734

> Интересно можно ли сократить код как-нибудь?


Конечно, можно. Надо цвет ячейки задавать в том же цикле, где и создается таблица. Вычислить его нетрудно зная i и n

Цвет ячейки гораздо умнее задавать с помощью класса.

Алсо, где реакция на нажатие?

>>378657

> else if (typeof(type) === 'object' && type.length >= 0 && type[0]) {


Надо бы сделать нормальную проверку. type[0] не годится так как если там хранится false то это не сработает.

Надо проверять что length неотрицательное число и что есть свойства от 0 до length -1.

То, что в default, лучше вынести за switch, а default убрать — тогда отступов будет меньше. А то как-то многовато кода внутри switch

>>378650

> node.className = (node.className).replace(/\s+/g, ' ');


Вот это плохо. Лучше сохранять это в новую переменную, так как запись в className может вызвать пересчет css-свойств (reflow) и перерисовку (repaint), а функция проверки наличия класса не должна вызвать таких эффектов.

Пруф: открой инспектор в Хроме прямо на этой странице, там введи код:

function upd() { document.body.className += ' '; }

Затем перейди на вкладку Timeline и нажми запись (кружочек внизу), и выполни в консоли upd(). затем останови запись — там будет recalculate styles и layout. То есть при добавлении пробела к className происходит пересчет стилей, довольно тяжелый, так как страница большая (у меня 127 ms вышло).

Более того, пересчет стилей запускается даже если сделать

document.body.className += '';

то есть просто записать в className старое значение. Так-то!
!xnn2uE3AU. #159 #378778
>>378734

> Интересно можно ли сократить код как-нибудь?


Конечно, можно. Надо цвет ячейки задавать в том же цикле, где и создается таблица. Вычислить его нетрудно зная i и n

Цвет ячейки гораздо умнее задавать с помощью класса.

Алсо, где реакция на нажатие?

>>378657

> else if (typeof(type) === 'object' && type.length >= 0 && type[0]) {


Надо бы сделать нормальную проверку. type[0] не годится так как если там хранится false то это не сработает.

Надо проверять что length неотрицательное число и что есть свойства от 0 до length -1.

То, что в default, лучше вынести за switch, а default убрать — тогда отступов будет меньше. А то как-то многовато кода внутри switch

>>378650

> node.className = (node.className).replace(/\s+/g, ' ');


Вот это плохо. Лучше сохранять это в новую переменную, так как запись в className может вызвать пересчет css-свойств (reflow) и перерисовку (repaint), а функция проверки наличия класса не должна вызвать таких эффектов.

Пруф: открой инспектор в Хроме прямо на этой странице, там введи код:

function upd() { document.body.className += ' '; }

Затем перейди на вкладку Timeline и нажми запись (кружочек внизу), и выполни в консоли upd(). затем останови запись — там будет recalculate styles и layout. То есть при добавлении пробела к className происходит пересчет стилей, довольно тяжелый, так как страница большая (у меня 127 ms вышло).

Более того, пересчет стилей запускается даже если сделать

document.body.className += '';

то есть просто записать в className старое значение. Так-то!
!xnn2uE3AU. #160 #378781
>>378777

> newCell.style.borderWidth = '1px';


Это надо делать через css. Я бы еще border-collapse добавил.

> Не работает.


Посмотри отладчиком или сдампь что там в переменной e (точнее e.target) приходит.

Алсо, не вешай события через onclick (почему? потому что так ты затираешь предыдущий обработчик), onclick используется только в html-коде, а тут надо использовать addEventListener/attachEvent.
#161 #378785
>>378781
Ох лол, почему-то имя тега прописными буквами приходит ('TD').
#163 #378818
>>378802
http://jsbin.com/datan/11/edit?js,console

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

Оп, а мои функции addClass, removeClass, hasClass уже можно применять открыто вместо jQuery'вских, или еще можно как-то оптимизировать, сделать совершенней?

А то получилась бы моя библиотека по работе с классами.
#164 #378821
>>378818
А можно сделать, чтобы при зажатой клавише мышки окрашивались квадратики на которых падает указатель? Можно было бы создать холст для рисования с маленькими ячейками. А также чтобы количество ячеек увеличивалось по размерам окна и уменьшалось соответственно. Подобие canvas получится.
!xnn2uE3AU. #165 #378826
>>378818

> Оп, а мои функции addClass, removeClass, hasClass уже можно применять открыто


Можно, только положи их в объект например dom (или любой другой) чтобы глобальные переменные не засорять:

var dom = {};
dom.addClass = function () ...

>>378821

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


Конечно, можно. Вместо click надо обрабатывать mousedown, mousemove и mouseup. Причем обрабатывать аккуратно: пока ты движешься по клеточке, mousemove может придти несколько раз, но перкрашивать ее надо один раз.

>>378818

> <a id="changeColor">


В задании требуется сделать кнопку, а для кнопок есть button type="button". Ссылка — это то, что куда-то ведет и есть href.

> if (document.addEventListener) {


Хорошая новость: attachEvent нужен только в ИЕ8 и ниже, так что скоро он перестанет быть нужен вообще.

> removeClass(target, 'white');


> addClass(target, 'black');


Достаточно только класса black вообще-то

> target.className == 'white')


Ненадежно, надо использовать hasClass а то если мы добавим еще какие-то классы, все сломается

Смену цветов при нажатии кнопки надо сделать без циклов. Подсказка: попробуй просто добавлять/убирать класс на самой таблице.

Кстати, сделай-ка еще функцию toggleClass которая либо убирает (если он уже есть) либо добавляет класс — она тут пригодится.
!xnn2uE3AU. #165 #378826
>>378818

> Оп, а мои функции addClass, removeClass, hasClass уже можно применять открыто


Можно, только положи их в объект например dom (или любой другой) чтобы глобальные переменные не засорять:

var dom = {};
dom.addClass = function () ...

>>378821

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


Конечно, можно. Вместо click надо обрабатывать mousedown, mousemove и mouseup. Причем обрабатывать аккуратно: пока ты движешься по клеточке, mousemove может придти несколько раз, но перкрашивать ее надо один раз.

>>378818

> <a id="changeColor">


В задании требуется сделать кнопку, а для кнопок есть button type="button". Ссылка — это то, что куда-то ведет и есть href.

> if (document.addEventListener) {


Хорошая новость: attachEvent нужен только в ИЕ8 и ниже, так что скоро он перестанет быть нужен вообще.

> removeClass(target, 'white');


> addClass(target, 'black');


Достаточно только класса black вообще-то

> target.className == 'white')


Ненадежно, надо использовать hasClass а то если мы добавим еще какие-то классы, все сломается

Смену цветов при нажатии кнопки надо сделать без циклов. Подсказка: попробуй просто добавлять/убирать класс на самой таблице.

Кстати, сделай-ка еще функцию toggleClass которая либо убирает (если он уже есть) либо добавляет класс — она тут пригодится.
#166 #378857
Первое жс задание на DOM http://jsfiddle.net/zqvyte8q/
Воннаби #167 #378878
http://ideone.com/CvTFln

первая задачка на регэкспы
#168 #378888
http://ideone.com/5QXknw
Вот как мне записать в $pathDone весь проделанный путь? В промежуточных циклах функция вызывает саму себя и ничего не возвращает, как из неё извлечь данные? Переменные, которые я там создам все равно будут локальными.
#169 #378889
>>378888
Код не смотрел. static/global.
#170 #378891
>>378889
Такого больше нет в пхп. Только массив всех переменных $GLOBALS, но он мне не подходит, по понятным причинам.
#171 #378893
>>378891
Как это нет?
#172 #378894
Анон, насколько имеет смысл учить связку PHP/JS?
Есть желание пополам с необходимостью уехать из своих пердей с безработицей и нищетой в происках лучшей жизни. Судя по вакансиям, от начинающих макак требуют вообще знание пыхи+js+html+css. Хочу учить все это чтобы иметь больше шансов трудоустроиться на новом месте года через два-три.
Такой вот хитрый план. Ну, что скажешь?
#173 #378900
>>378894
Нормально. Такой же план.
#174 #378902
ОП, делаю твой макет с отзывчивостью - https://github.com/infinitecats/infinitecats.github.io. Там пока сделано мало, но думаю, что косяков уже куча.

Там в макете есть шрифты, которых я не нашел(google.com/fonts, typekit.com, webfont.ru/). Я заменил Lucida Sans на Roboto, Segoe WP на OpenSans. А Lao UI - я так понимаю встроенный?

Как там делать картинки в топ-меню? Псевдоклассами? Спрайтщм можно? Или лучше по отдельности?

Там у мобильной версии у верхний части есть тенюшка. Лучше в один блок засунуть left-column и top-menu? Чтобы тень норм была. А то когда по отдельности видно разделение.

Правильно ли я делаю когда пишу в body font-size: 100% или лучше в px? И как сделать так, чтобы по уменьшению размера экрана уменьшался шрифт, И нужно ли вообще так делать, Или размер шрифта должен быть неизменным?
#175 #378903
>>378888
Так, все оказалось ещё хуже, чем я думал. Я попробовал вбить маршрут с василеостровской до петроградской, чтобы не было зацикливания (так как соединяющие их точки -первые элементы соответствующих массивов) и она все равно не работает. Так что дело не только в зацикливании пути, но видимо функция еще и не вызывает саму себя больше одного раза, то-ли просто не может вытащить значение из вложенных функций в самую первую.
#176 #378908
>>378826
http://jsbin.com/datan/17/edit?js,console

Все-таки класс .white может нужен? Что-то не выходит.
#177 #378913
>>378778

>свойства от 0 до length -1



Я вот честно не знаю как это проверить. Разве что type[type.length - 1];
#178 #378930
>>377651
Это вроде бы победа - http://jsbin.com/lubewuqa/3/edit
#179 #378937
О, круто, только увидел задачи по DOM. Буду делать. После них я уже буду на достаточном уровне, чтобы переходить на jQuery?
#180 #378941
Вторая жс задача про DOM http://jsfiddle.net/c98x5dud/
#181 #378944
>>378937
Я думаю да. На jQuery будет тоже самое только написанное все за тебя.
!xnn2uE3AU. #182 #378947
>>378857

> if(!('className' in node)){


Для чего эта проверка?

Удаление классов нормально не работает: http://jsfiddle.net/j4p618cc/

> node.className.split(' ').indexOf(klass) > -1;


Тут пара моментов:

1) классы могут быть разделены не только пробелом, но и табом \t или переводом строки \n. Это редко, но бывает.
2) indexOf для массива появилась только в версии ES5 (то есть в новых браузерах, а мы пишем в этой задачке кроссбраузерные функции). Раз ты ее используешь, то напиши вместо этого метода свою функцию.

>>378878

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

Но ты правильно решил сделать список. Только его надо чуть улучшить.

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

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

Вот список номеров:

Правильные: array('84951234567', '+74951234567', '8-495-1-234-567', ' 8 (8122) 56-56-56', '8-911-1234567', '8 (911) 12 345 67', '8-911 12 345 67', '8 (911) - 123 - 45 - 67', '+ 7 999 123 4567', '8 ( 999 ) 1234567', '8 999 123 4567');

Неправильные: array('02', '84951234567 позвать люсю', '849512345', '849512345678',
'8 (409) 123-123-123', '7900123467', '5005005001', '8888-8888-88',
'84951a234567', '8495123456a',
'+1 234 5678901', // неверный код страны
'+8 234 5678901', // либо 8 либо +7
'7 234 5678901' // нет +
);

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

Еще, по моему тут слишком сложно:

> (\s?-?\s?[(]?\s?\d\s?[)]?\s?-?\s?)


Вместо того чтобы подбирать комбинации символов, проще использовать вариант «любое число скобок, пробелов, минусов».
!xnn2uE3AU. #182 #378947
>>378857

> if(!('className' in node)){


Для чего эта проверка?

Удаление классов нормально не работает: http://jsfiddle.net/j4p618cc/

> node.className.split(' ').indexOf(klass) > -1;


Тут пара моментов:

1) классы могут быть разделены не только пробелом, но и табом \t или переводом строки \n. Это редко, но бывает.
2) indexOf для массива появилась только в версии ES5 (то есть в новых браузерах, а мы пишем в этой задачке кроссбраузерные функции). Раз ты ее используешь, то напиши вместо этого метода свою функцию.

>>378878

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

Но ты правильно решил сделать список. Только его надо чуть улучшить.

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

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

Вот список номеров:

Правильные: array('84951234567', '+74951234567', '8-495-1-234-567', ' 8 (8122) 56-56-56', '8-911-1234567', '8 (911) 12 345 67', '8-911 12 345 67', '8 (911) - 123 - 45 - 67', '+ 7 999 123 4567', '8 ( 999 ) 1234567', '8 999 123 4567');

Неправильные: array('02', '84951234567 позвать люсю', '849512345', '849512345678',
'8 (409) 123-123-123', '7900123467', '5005005001', '8888-8888-88',
'84951a234567', '8495123456a',
'+1 234 5678901', // неверный код страны
'+8 234 5678901', // либо 8 либо +7
'7 234 5678901' // нет +
);

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

Еще, по моему тут слишком сложно:

> (\s?-?\s?[(]?\s?\d\s?[)]?\s?-?\s?)


Вместо того чтобы подбирать комбинации символов, проще использовать вариант «любое число скобок, пробелов, минусов».
!xnn2uE3AU. #183 #378949
>>378888

> Вот как мне записать в $pathDone весь проделанный путь?


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

А ты вместо этого делаешь что-то странное:

> $container=oneStep($paths, $paths[$point][$key1], $paths[$point][$key1]['time'], $key1, $target);



Не очень понятно зачем ты передаешь $paths[$point][$key1] в качестве $pathDone — там же должен идти массив пройденных точек, а не это.

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


Передаешь в функцию через аргументы, возвращаешь через return. Этого достаточно. Если надо вернуть несколько значений — возвращай массив.

Ну и может тебе стоит еще почитать про другие алгоритмы? Там может оказаться что-то попроще: https://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%B8%D1%81%D0%BA_%D0%BF%D1%83%D1%82%D0%B8

>>378889

Не смотрел — не советуй.

>>378891

Не надо искать костыли когда можно сделать нормально.
#184 #378950
>>378949
http://ideone.com/zYW3cL
Я вроде немного продвинулся вперёд, но все равно $pathDone придётся переделывать, как я понял.
!xnn2uE3AU. #185 #378956
>>378894

Если будешь хорошо стараться, то быстрее чем за «два-три» года выучишь. Смысл имеет так как php/js/html/sql/css — очень востребованный набор. Посмотри hh.ru b проверь сам.

В нашем треде кстати есть задачки на все эти технологии.

>>378902

Что-то я потерял макет. Ты можешь его куда-нибудь закачать?

> Там в макете есть шрифты, которых я не нашел


Ну если нет таких, то замени на похожие по внешнему виду и стилю.

Вот список web safe шрифтов, то есть которые скорее всего установлены:
http://sawarogu.3neko.ru/articles/spisok-bezorasnykh-shriftov-web-safe-fonts/

> Я заменил Lucida Sans на Roboto,


Lucida Sans поставляется вместе с Windows и маком если я не путаю. Только она там называется Lucida Sans Unicode (на маке — Lucida Grande). Если я не путаю ее с другим шрифтом.

> Segoe WP на OpenSans


Segoe UI — входит в Windows начиная с висты. По поводу WP в вики написано:

> Segoe WP is the Windows Phone 7 specific version of Segoe. The Segoe WP family is distributed with Microsoft Visual Studio 2010.



Версия доработанная в честь выхода Windows Phone. Думаю, можно заменить на Segoe UI с фоллбеком на OpenSans (хотя я не уверен, что у них размеры и пропорции букв совпадают).

> А Lao UI - я так понимаю встроенный?


Вряд ли, это как раз какой-то нестандартный.

> Как там делать картинки в топ-меню? Псевдоклассами? Спрайтщм можно? Или лучше по отдельности?


Если это иконки то да, спрайтами и псевдоэлементы after/before можно использовать, они вроде даже в IE8 работают.

> Лучше в один блок засунуть left-column и top-menu? Чтобы тень норм была. А то когда по отдельности видно разделение.


Видимо, да.

> Правильно ли я делаю когда пишу в body font-size: 100% или лучше в px?


100% от чего? Нет смысла это писать. лучше наверно в px.

> И как сделать так, чтобы по уменьшению размера экрана уменьшался шрифт,


Не надо. По идее в CSS есть например миллиметры и сантиметры (а в CSS3 и проценты от ширины окна), но ты ведь должен не только размер шрифта менять, но и всех элементов, картинок, а это очень заморочно. Плюс, как-то сделать чтобы шрифт не стал нечитаемым. Потому лучше использовать пиксели и неизменный шрифт размером как на макете.
!xnn2uE3AU. #185 #378956
>>378894

Если будешь хорошо стараться, то быстрее чем за «два-три» года выучишь. Смысл имеет так как php/js/html/sql/css — очень востребованный набор. Посмотри hh.ru b проверь сам.

В нашем треде кстати есть задачки на все эти технологии.

>>378902

Что-то я потерял макет. Ты можешь его куда-нибудь закачать?

> Там в макете есть шрифты, которых я не нашел


Ну если нет таких, то замени на похожие по внешнему виду и стилю.

Вот список web safe шрифтов, то есть которые скорее всего установлены:
http://sawarogu.3neko.ru/articles/spisok-bezorasnykh-shriftov-web-safe-fonts/

> Я заменил Lucida Sans на Roboto,


Lucida Sans поставляется вместе с Windows и маком если я не путаю. Только она там называется Lucida Sans Unicode (на маке — Lucida Grande). Если я не путаю ее с другим шрифтом.

> Segoe WP на OpenSans


Segoe UI — входит в Windows начиная с висты. По поводу WP в вики написано:

> Segoe WP is the Windows Phone 7 specific version of Segoe. The Segoe WP family is distributed with Microsoft Visual Studio 2010.



Версия доработанная в честь выхода Windows Phone. Думаю, можно заменить на Segoe UI с фоллбеком на OpenSans (хотя я не уверен, что у них размеры и пропорции букв совпадают).

> А Lao UI - я так понимаю встроенный?


Вряд ли, это как раз какой-то нестандартный.

> Как там делать картинки в топ-меню? Псевдоклассами? Спрайтщм можно? Или лучше по отдельности?


Если это иконки то да, спрайтами и псевдоэлементы after/before можно использовать, они вроде даже в IE8 работают.

> Лучше в один блок засунуть left-column и top-menu? Чтобы тень норм была. А то когда по отдельности видно разделение.


Видимо, да.

> Правильно ли я делаю когда пишу в body font-size: 100% или лучше в px?


100% от чего? Нет смысла это писать. лучше наверно в px.

> И как сделать так, чтобы по уменьшению размера экрана уменьшался шрифт,


Не надо. По идее в CSS есть например миллиметры и сантиметры (а в CSS3 и проценты от ширины окна), но ты ведь должен не только размер шрифта менять, но и всех элементов, картинок, а это очень заморочно. Плюс, как-то сделать чтобы шрифт не стал нечитаемым. Потому лучше использовать пиксели и неизменный шрифт размером как на макете.
#186 #378957
ОП, в первой задаче по DOM нужно использовать регулярные выражения? С помощью innerHTML? Хотел попробовать сделать второй номер, но я так понимаю там нужны функции из первого?
#187 #378959
>>378956
Макет раз - http://rghost.ru/57518135 (компьютер)
Макет два - http://rghost.ru/57518184(мобильник)
!xnn2uE3AU. #188 #378960
>>378902

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

Алсо,

> @media screen and (max-width: 640px) {


> @media screen and (min-width: 1024px) {



А что если ширина окна 900 пикселей? Так не делают. Делают просто верстку для всех, а потом дополнения для маленьких экранов (или наоборот для огромных).

Алсо, что это за упоротые цифры:

> width: 49.01960784313725%;


> width: 78.46153%;


> 2.411764705882353em;



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

>>378903

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

>>378908

Не нужен. Белая клетка — та, у которой нет класса black (а когда цвета перевернуты то наоборот). Этого вполне достаточно.

> Что-то не выходит.


Попробуй что-нибудь поменять.

> <input ... />


В HTML слеш в конце не ставится, он ставится в XML и XHTML. Полная история: http://softwaremaniacs.org/blog/2005/12/19/xhtml-you-say/

> newCell.width = '28px';


Это надо делать через CSS а не JS.

> return false;


Зачем?

> border-spacing: 0;


Чтобы не было жирных линий, используй border-collapse
!xnn2uE3AU. #188 #378960
>>378902

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

Алсо,

> @media screen and (max-width: 640px) {


> @media screen and (min-width: 1024px) {



А что если ширина окна 900 пикселей? Так не делают. Делают просто верстку для всех, а потом дополнения для маленьких экранов (или наоборот для огромных).

Алсо, что это за упоротые цифры:

> width: 49.01960784313725%;


> width: 78.46153%;


> 2.411764705882353em;



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

>>378903

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

>>378908

Не нужен. Белая клетка — та, у которой нет класса black (а когда цвета перевернуты то наоборот). Этого вполне достаточно.

> Что-то не выходит.


Попробуй что-нибудь поменять.

> <input ... />


В HTML слеш в конце не ставится, он ставится в XML и XHTML. Полная история: http://softwaremaniacs.org/blog/2005/12/19/xhtml-you-say/

> newCell.width = '28px';


Это надо делать через CSS а не JS.

> return false;


Зачем?

> border-spacing: 0;


Чтобы не было жирных линий, используй border-collapse
#189 #378962
>>378960

>что это за упоротые цифры


Лол, ну я прочитал книгу Итана Маркота "Отзывчивый веб-дизайн", ну и там прямо так и делалось. А как тогда?
#190 #378963
>>378960
Так как делать ширину? В % или px? А шрифты в em или в px? Сначала сделать общий css, потом для каких экранов доделывать?
#191 #378964
Чому у меня из-за
if(in_array("$key", $pathDone)){
continue;
}

страница показывает NULL?
!xnn2uE3AU. #192 #378967
>>378913

Циклом

>>378930

> SIZE_SMALL = 'МАЛЕНЬКИЙ';


Ой, вот так делать не стоит, название лучше записать в Hamburger.type. Не надо в константах хранить информацию.

> for (var size in Hamburger.type) {


> if (hamburger == size) {


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

> return 'Несуществующий вид гамбургера. Попробуйте снова.';


Используй исключения и throw new Error(). Твой вариант ошибки не сработает если тот, кто вызвал функцию, не проверяет что она возвращает. А вот исключение — сработает.

> (arguments[2] && additive === undefined)


Как это условие может выполниться? additive же и есть аргумент с индексом 2 если считать с нуля. Что это вообще должно делать?

> this.order.additive = Hamburger.additive[typeAdditive];


> this.text += ', Добавка: ' + typeAdditive;


> this.correctAddi = true;


По моему, это неправильный подход. Так не принято делать в ООП. Это не ООП, а непонятно что.

Какие свойства есть у гамбургера?

- размер
- начинка
- список добавок

Все остальное (text, correctHamb, generalPrice) можно вычислить исходя из этих данных с помощью методов. Раз их можно в любой момент вычислить, значит их нет смысла вообще хранить как свойства. Меньше свойств — меньше геморроя по поддержанию их в актуальном состоянии.

Ты немного все переусложнил. Вместо

> this.order.additive



можно написать this.addditive — так и проще и короче.

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

Функция makeSelection должна только задавать параметры гамбургера (и проверять что они верные).

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

> return 'Количество калорий: ' + this.generalCal;


Это неудобно. Может я захочу сложить число калорий в нескольких гамбургерах, как это сделать если ты возвращаешь не число, а текст? Возвращай число, а текст дописывай где-нибудь в другом месте, например в отдельной функции.
!xnn2uE3AU. #192 #378967
>>378913

Циклом

>>378930

> SIZE_SMALL = 'МАЛЕНЬКИЙ';


Ой, вот так делать не стоит, название лучше записать в Hamburger.type. Не надо в константах хранить информацию.

> for (var size in Hamburger.type) {


> if (hamburger == size) {


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

> return 'Несуществующий вид гамбургера. Попробуйте снова.';


Используй исключения и throw new Error(). Твой вариант ошибки не сработает если тот, кто вызвал функцию, не проверяет что она возвращает. А вот исключение — сработает.

> (arguments[2] && additive === undefined)


Как это условие может выполниться? additive же и есть аргумент с индексом 2 если считать с нуля. Что это вообще должно делать?

> this.order.additive = Hamburger.additive[typeAdditive];


> this.text += ', Добавка: ' + typeAdditive;


> this.correctAddi = true;


По моему, это неправильный подход. Так не принято делать в ООП. Это не ООП, а непонятно что.

Какие свойства есть у гамбургера?

- размер
- начинка
- список добавок

Все остальное (text, correctHamb, generalPrice) можно вычислить исходя из этих данных с помощью методов. Раз их можно в любой момент вычислить, значит их нет смысла вообще хранить как свойства. Меньше свойств — меньше геморроя по поддержанию их в актуальном состоянии.

Ты немного все переусложнил. Вместо

> this.order.additive



можно написать this.addditive — так и проще и короче.

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

Функция makeSelection должна только задавать параметры гамбургера (и проверять что они верные).

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

> return 'Количество калорий: ' + this.generalCal;


Это неудобно. Может я захочу сложить число калорий в нескольких гамбургерах, как это сделать если ты возвращаешь не число, а текст? Возвращай число, а текст дописывай где-нибудь в другом месте, например в отдельной функции.
#193 #378969
>>378967
http://jsbin.com/bowix/13/edit?js,console

Оп, я доделал. Проверь.
!xnn2uE3AU. #194 #378971
>>378937

Да.

>>378941

> column.height = tbHeight;


Ой не, вот это не используй — это какие-то древние свойства 20-летней давности. Используй CSS вместо JS для этого.

> row.style.borderColor = 'black';


Используй CSS а не JS

> document.getElementById('table').onclick


Давай будем использовать addEventListener так как на onclick можно повесить только один обработчик (тут он один, но все равно это дурная практика). onclick — он для использования в HTML-коде.

> (hasClass(target, 'fill_black')) ? removeClass(target, 'fill_black'): addClass(target, 'fill_black');


Используй тут if, не пиши так, так как явное лучше неявного. Алсо, тут можно бы написать функцию toggleClass(node, klass) которая включает/выключает класс.

Кнопка «сменить цвет» не работает — она все закрашивает черным, а должна менять местами черное и белое.
!xnn2uE3AU. #194 #378971
>>378937

Да.

>>378941

> column.height = tbHeight;


Ой не, вот это не используй — это какие-то древние свойства 20-летней давности. Используй CSS вместо JS для этого.

> row.style.borderColor = 'black';


Используй CSS а не JS

> document.getElementById('table').onclick


Давай будем использовать addEventListener так как на onclick можно повесить только один обработчик (тут он один, но все равно это дурная практика). onclick — он для использования в HTML-коде.

> (hasClass(target, 'fill_black')) ? removeClass(target, 'fill_black'): addClass(target, 'fill_black');


Используй тут if, не пиши так, так как явное лучше неявного. Алсо, тут можно бы написать функцию toggleClass(node, klass) которая включает/выключает класс.

Кнопка «сменить цвет» не работает — она все закрашивает черным, а должна менять местами черное и белое.
#195 #378976
>>378971
Чет я не догоняю как без цикла сменить всем ячейкам цвет. Писать рекурсивный toggleClass? По производительности все равно будет как цикл.
#196 #378977
>>378960

>а когда цвета перевернуты то наоборот



Наоборот что? Черная клетка та, у которой нет класса .black?
!xnn2uE3AU. #197 #378981
>>378950

> $pathDone=array($pathDone, "$point=>$key"=>$paths[$point][$key]);


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

array(array(array(array(....))))

и с ним невозможно будет работать. Сделай лучше нормальный массив, одноуровневый.

> $container=oneStep($paths, $pathDone, $time, $key, $target);


> return $container;


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

> но все равно $pathDone придётся переделывать, как я понял.


ну да

>>378957

> регулярные выражения?


можно

> С помощью innerHTML?


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

> Хотел попробовать сделать второй номер, но я так понимаю там нужны функции из первого?


да, они там пригодятся.

>>378959

Спасибо

>>378962

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

>>378963

Ширину можно и в %. Шрифт — в пикселях.

> Сначала сделать общий css, потом для каких экранов доделывать?


Потом для маленьких (то есть смартфонов).

>>378964

Не знаю.

>>378969

> throw new Error('Неверные данные');


Лучше писать 'Неверные данные, size=' + size — это поможет тебе же при отладке программы.

> this.checkForSimilarExtended(arguments);


А она сработает если добавить одну и ту же добавку несколькими отдельными вызовами addExtended? Очевидно нет: http://jsbin.com/veqogomunuke/1/edit

В остальном, все нормально.
!xnn2uE3AU. #197 #378981
>>378950

> $pathDone=array($pathDone, "$point=>$key"=>$paths[$point][$key]);


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

array(array(array(array(....))))

и с ним невозможно будет работать. Сделай лучше нормальный массив, одноуровневый.

> $container=oneStep($paths, $pathDone, $time, $key, $target);


> return $container;


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

> но все равно $pathDone придётся переделывать, как я понял.


ну да

>>378957

> регулярные выражения?


можно

> С помощью innerHTML?


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

> Хотел попробовать сделать второй номер, но я так понимаю там нужны функции из первого?


да, они там пригодятся.

>>378959

Спасибо

>>378962

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

>>378963

Ширину можно и в %. Шрифт — в пикселях.

> Сначала сделать общий css, потом для каких экранов доделывать?


Потом для маленьких (то есть смартфонов).

>>378964

Не знаю.

>>378969

> throw new Error('Неверные данные');


Лучше писать 'Неверные данные, size=' + size — это поможет тебе же при отладке программы.

> this.checkForSimilarExtended(arguments);


А она сработает если добавить одну и ту же добавку несколькими отдельными вызовами addExtended? Очевидно нет: http://jsbin.com/veqogomunuke/1/edit

В остальном, все нормально.
!xnn2uE3AU. #198 #378982
>>378976

Добавить на таблицу класс «переверни-цвета» и написать соответствующие css-правила.

>>378977

Да
#199 #378983
>>378981
Я пытаюсь сделать одноуровневый массив, но что-то не выходит. Пробовал делать и $pathDone[]=$key и через array_push, но в любом случае он выводит 0, не знаю почему. Получается только
через $pathDone=array($pathDone, $key) с кучей вложенных массивов.

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


Без return рекурсивная функция не работает, я бы с радостью просто записывал результат в переменную, а не сразу возвращал её, но тогда вызов подфункции ничего нам давать не будет.
!xnn2uE3AU. #201 #378985

> Я пытаюсь сделать одноуровневый массив, но что-то не выходит.


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

$pathDone[]=$key

должно работать. Проверь, что в $key.

> Без return рекурсивная функция не работает, я бы с радостью просто записывал результат в переменную, а не сразу возвращал её, но тогда вызов подфункции ничего нам давать не будет.


А ты записывай не в переменную, а в массив, а потом выбирай из массива лучши вариант и возвращай его.
!xnn2uE3AU. #202 #378986
>>378984

> this.checkForSimilarExtended(this.extended);


Проще перед добавлением каждой добавки в this.extended проверить, есть ли она уже там.

Алсо, если ты делаешь вложенный цикл, то лучше бы обойтись без него. А если никак, то внутренний цикл лучше начинать не с 1 а с i + 1.

А в остальном, верно.
#203 #378987
>>378985
http://ideone.com/J5Yqkk

>$pathDone[]=$key


Не работает. Прост пустой массив получается.
#204 #378990
>>378960

>> return false;


>Зачем?



Я просто подумал, что без него цвет просто мигнет. Где-то читал про это. Где-то же на onclick ставят return false;
#205 #378993
>>378987
>>378985
Да и насчет

>А ты записывай не в переменную, а в массив, а потом выбирай из массива лучши вариант и возвращай его.


Мне все равно придется возвращать что-то, массив ли или переменную. Допустим мы вызываем функцию для трех точек.
1. Вызывается функция oneStep.
2. Она в свою очередь вызывает саму себя.
3. Третья функция таки находит цель и возвращает результат из else локальной переменной container второй функции. Загвоздка в том, что эта вторая функция ничего не будет возвращать самой первой, если мы не напишем return $container, то есть все равно сразу придется возвращать первый попавшийся результат, иначе вызов второй функции просто не даст ничего и страница будет пустой.
#206 #378998
>>378982

>css-правила


Типа таких http://jsfiddle.net/c98x5dud/2/ ?
Ненавижу css! Понимаю что декларативный язык все такое, но почему даже моя умная IDE WebStorm не может анализировать css и написать что ты упоролся и пишешь ерунду. Как вообще тестируют css если он не выводит ошибки и вообще нихера не делает.
#207 #378999
http://jsbin.com/datan/22/edit?js,console

Оп, я сделал.

>>378998
Спасибо. Ты помог мне разобраться.
!xnn2uE3AU. #208 #379002
>>378987

Ты сделал очень большую ошибку. Ты вместо -1 написал в начале

error_reporting(0);

А это значит не показывать сообщения об ошибках. Исправь это для начала.

> Не работает. Прост пустой массив получается.


Значит, в массив ничего не кладется и до строчки $pathDone[]=$key; он просто-напросто не доходит. Ищи, почему.

>>378990

А ты не гадай а читай мануалы

http://learn.javascript.ru/#book-toc-425

в частности это http://learn.javascript.ru/default-browser-action

>>378993

> Мне все равно придется возвращать что-то, массив ли или переменную.


Верно.

> Загвоздка в том, что эта вторая функция ничего не будет возвращать самой первой, если мы не напишем return $container, то есть все равно сразу придется возвращать первый попавшийся результат, иначе вызов второй функции просто не даст ничего и страница будет пустой


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

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

> иначе вызов второй функции просто не даст ничего и страница будет пустой.


Почему, если в функции стоит return, рано или подзно он выполнится.

>>378998

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

В общем да, примерно так и надо. Исправь еще другие замечания только.
!xnn2uE3AU. #208 #379002
>>378987

Ты сделал очень большую ошибку. Ты вместо -1 написал в начале

error_reporting(0);

А это значит не показывать сообщения об ошибках. Исправь это для начала.

> Не работает. Прост пустой массив получается.


Значит, в массив ничего не кладется и до строчки $pathDone[]=$key; он просто-напросто не доходит. Ищи, почему.

>>378990

А ты не гадай а читай мануалы

http://learn.javascript.ru/#book-toc-425

в частности это http://learn.javascript.ru/default-browser-action

>>378993

> Мне все равно придется возвращать что-то, массив ли или переменную.


Верно.

> Загвоздка в том, что эта вторая функция ничего не будет возвращать самой первой, если мы не напишем return $container, то есть все равно сразу придется возвращать первый попавшийся результат, иначе вызов второй функции просто не даст ничего и страница будет пустой


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

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

> иначе вызов второй функции просто не даст ничего и страница будет пустой.


Почему, если в функции стоит return, рано или подзно он выполнится.

>>378998

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

В общем да, примерно так и надо. Исправь еще другие замечания только.
!xnn2uE3AU. #209 #379004
>>378999

Ок, теперь все верно.
!xnn2uE3AU. #210 #379005
Все, я ушел.

>>378998

Глазами тестируют то что в браузере выводится.
#211 #379007
>>378999
Пожалуйста. ОП полностью прав: если что-то можно сделать с помощью css или html - это нужно делать с помощью ccs или html.
#212 #379008
>>379005
http://jsbin.com/datan/25/edit?js,output

Начал сапера делать. Меня интересует переменная table, и почему она не видна функции setFlag. А может сделать свойство table у Field?

Тоже пойду отдохну.
#213 #379110
>>378498

>массив


Охуительно, я бы не додумался.
#214 #379170
>>378947

http://ideone.com/2WE2WW

Вот переделал слегка. Сейчас еще попробую с регекспом пошаманить на предмет

>> (\s?-?\s?[(]?\s?\d\s?[)]?\s?-?\s?)


Вместо того чтобы подбирать комбинации символов, проще использовать вариант «любое число скобок, пробелов, минусов».
А так скидываю рабочую версию просто.
#215 #379173
http://ideone.com/Uxtnrs
Почему теперь не работает? NULL возвращает для некоторых точек, а для некоторых всё нормально.

>PHP Warning: in_array() expects parameter 2 to be array, null given in /home/7t2r3S/prog.php on line 145


От этой херни я не знаю как избавиться. Объявлять массив в начале функции? Тогда массив будет равен 0 всегда. Выставить аргумент по умолчанию тоже не вариант.
#216 #379179
Аноны, посмотрите задачу на проверку номера телефона и приведение его к единому формату, не понимаю что за ошибка в 9 строке. http://ideone.com/E5gUSw
#217 #379181
>>379179

>+?


Что это должно значить?
#218 #379183
>>379181
Что + может встретится, а может и нет.
#219 #379185
>>379183
а если читая сначала?

>^+


то что ^ может встретиться хуеву гору раз?
#220 #379186
>>379181
Так, хорошо, первую ошибку исправил. Теперь, в $result должны же убираться символы не входящие в $regexp1, но они остаются, почему ?
#221 #379187
>>379183
+ в регулярных выражениях это "обязательно встретится минимум 1 раз и до бесконечности". Если тебе нужен знак плюс, то его надо экранировать.

>?7?8


Я так понял у тебя должно быть либо +7, либо 8, но у тебя регулярка допускает и то и другое сразу, то есть номер +78....
Алсо, я делал примерно так 8([0-9]\\-\\s\\(\\)){9}, не ручаюсь за правильность, но суть ты думаю уловил.
#222 #379189
>>379186
http://ideone.com/3CC52W
В таком случае у тебя неправильное регулярное выражение. Нужно искать НЕ цифры, и заменять их (только не $0, эта переменная соответствует всему регулярному выражению в скобках).
#223 #379200
>>379189
Понял, спасибо. Вот перепиленная версия, для двух случаев, но я ошибся где-то в if, снова.
#224 #379203
>>379200
Вроде нет ошибки. И вместо

>?7?8?


Лучше всё-таки сделать (\\+7)|8), потому-что в текущей версии программы можно написать во первых любую первую цифру, во вторых ввести 12 значный номер, начинающийся с +78
#225 #379204
>>379200
Ссылка отвалилась http://ideone.com/EI18CL
#226 #379205
>>379203

>(\\+7)|8)


(\\+7|8) fixed
#227 #379206
>>379203
Точно, так будет лучше, чем писать новое выражение
#228 #379207
>>379204
Так ты ; забыл перед if
И еще один регэксп зачем-то зафигачил.
#229 #379221
>>379207
Мне уже стыдно спрашивать, но допиливаю ту задачу, теперь в ответе пытаюсь заменить +7 на 8, пока придумал только такой громоздкий способ, который ещё почему-то не работает. http://ideone.com/9FWYFx
#230 #379225
>>379221
Объясню сразу как должно работать, получившуюся в результате
первого preg_replace строку мы проверяем, если видим, что первый символ 7, то заменяем её на 8.
#231 #379228
>>379221
>>379225
http://ideone.com/3CC52W Я думаю это можно было сделать проще (Оп пояснит, когда вернется), но пока так.
99 Кб, 1280x848
#232 #379282
ОП, или еще кто из более менее продвинутых няш, посоветуйте мануал, книгу, видеокурс в свободном доступе, где можно основательно освоить работу печенек, сессий, гетов и почтов. Где ни смотрел - галопом по европам, примеров минимум и что-то не до конца я понял.
!xnn2uE3AU. #233 #379292
Аноны, проверю все вечером или завтра, сейчас некогда.

>>379282

Все, кроме сессий — это части протокола HTTP, потому я бы советовал тебе изучить именно его. GET/POST связан еще с темой html-форм, потому если ты в них плохо разбираешься, то почитай http://htmlbook.ru/samhtml5/formy

Протокол HTTP позволяет получать данные с сервера и отправлять на сервер. И запрос и ответ на него состоят из трех частей: первой строки, заголовков и необязательного тела.

В HTTP есть разные методы (виды запросов), из них главные — это GET (используется для получения страницы или файла с сервера и для отправки форм вроде формы поиска), POST (используется для отправки HTML-форм на сервер, в том числе закачки файлов). Еще есть HEAD — это то же самое что и GET но при HEAD сервер отслыает клиенту только заголовки ответа, а тело не отправляет.

Куки — средство хранения информации на клиенте (в браузере), сервер их может ставить с помощью HTTP-заголовка Set-Cookie, после чего клиент (браузер) сохраняет их и начинает посылать их обратно в заголовках с каждым запросом к серверу. Например, можно каждому посетителю ставить в куку уникальный номер и таким образом их различать.

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

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

https://ru.wikipedia.org/wiki/HTTP
http://portscan.ru/article-protocol-http.html
https://tech.yandex.ru/education/shri/msk-2012/talks/537/

PHP автоматически извлекает данные запроса и заголовки и помещат их в _POST, _GET, _COOKIE и _SERVER перед запуском твоего скрипта. Ему остается только взять их оттуда и что-нибудь сделать.

Можешь почитать учебник PHP:

http://php.net/manual/ru/language.variables.external.php
http://php.net/manual/ru/reserved.variables.php
http://php.net/manual/ru/features.file-upload.post-method.php

Также, ты можешь открыть инспектор в Хроме или ФФ (Ctrl + Shift + I), там открыть вкладку Network и загрузить какой-нибудь сайт и посмотреть, какие там запросы отправляются, какие заголовки. Советую посмотреть все это самому.

Если есть еще какие-то вопросы или что-то непонятно, задавай, я потом отвечу.
!xnn2uE3AU. #233 #379292
Аноны, проверю все вечером или завтра, сейчас некогда.

>>379282

Все, кроме сессий — это части протокола HTTP, потому я бы советовал тебе изучить именно его. GET/POST связан еще с темой html-форм, потому если ты в них плохо разбираешься, то почитай http://htmlbook.ru/samhtml5/formy

Протокол HTTP позволяет получать данные с сервера и отправлять на сервер. И запрос и ответ на него состоят из трех частей: первой строки, заголовков и необязательного тела.

В HTTP есть разные методы (виды запросов), из них главные — это GET (используется для получения страницы или файла с сервера и для отправки форм вроде формы поиска), POST (используется для отправки HTML-форм на сервер, в том числе закачки файлов). Еще есть HEAD — это то же самое что и GET но при HEAD сервер отслыает клиенту только заголовки ответа, а тело не отправляет.

Куки — средство хранения информации на клиенте (в браузере), сервер их может ставить с помощью HTTP-заголовка Set-Cookie, после чего клиент (браузер) сохраняет их и начинает посылать их обратно в заголовках с каждым запросом к серверу. Например, можно каждому посетителю ставить в куку уникальный номер и таким образом их различать.

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

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

https://ru.wikipedia.org/wiki/HTTP
http://portscan.ru/article-protocol-http.html
https://tech.yandex.ru/education/shri/msk-2012/talks/537/

PHP автоматически извлекает данные запроса и заголовки и помещат их в _POST, _GET, _COOKIE и _SERVER перед запуском твоего скрипта. Ему остается только взять их оттуда и что-нибудь сделать.

Можешь почитать учебник PHP:

http://php.net/manual/ru/language.variables.external.php
http://php.net/manual/ru/reserved.variables.php
http://php.net/manual/ru/features.file-upload.post-method.php

Также, ты можешь открыть инспектор в Хроме или ФФ (Ctrl + Shift + I), там открыть вкладку Network и загрузить какой-нибудь сайт и посмотреть, какие там запросы отправляются, какие заголовки. Советую посмотреть все это самому.

Если есть еще какие-то вопросы или что-то непонятно, задавай, я потом отвечу.
#234 #379302
>>379292

>PHP автоматически извлекает данные запроса и заголовки и помещает их в _POST, _GET, _COOKIE и _SERVER


>автоматически


Вот оно, волшебное слово. Почему-то каждый раз, когда я слышу о какой-то фишке, то представляю, что мне нужно будет ее чуть ли не самому реализовать на языке. Почему - не знаю. О том, что в языке/программе/протоколе все давно реализовано и довольно просто оперируется с помощью функций и переменных, я и думать не могу. Поэтому каждый раз дико фэйлю и боюсь даже попробовать.
#235 #379319
>>378956
>>378960
https://github.com/infinitecats/infinitecats.github.io - там пока сверстанный хедер, пока без мобильника.Потяжелее, чем прошлый
370 Кб, 960x780
#236 #379348
PHP-анон подскажи про два вопроса.
1) Надо сделать скрипт, который постоянно крутится при старте сервера. Он не вызывается никакой страницой, просто постоянно запущен. Допустим, им выполняются определенные долгие вычисления. CRON-хуен не предлагать, серверная машина на винде
2) Без сложных костылей уметь связаться с этим постоянно запущенным скриптом другим скриптом, который запускается обычно, от набора его url-а в браузере. Авансом шлю няшу
#237 #379379
>>379348
Планировщик задач
!xnn2uE3AU. #238 #379438
>>379008

> dom.addEvent(table,


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

> Меня интересует переменная table, и почему она не видна функции setFlag


Видна, если ты ее передаешь.

>>379170

Работает верно, на все эти сложные \s?-? я бы заменил на «любое число пробелов, минусов, скобок»

>>379173

А зачем ты NULL в pathDone передаешь в самом начале? Вот тут:

> $testvar=oneStep($paths, NULL, 0, 'vas' , 'gor');



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

>>379200

Тебе тот же совет что и другим анонам: проверь свою программу на списке номеров:

Правильные: array('84951234567', '+74951234567', '8-495-1-234-567', ' 8 (8122) 56-56-56', '8-911-1234567', '8 (911) 12 345 67', '8-911 12 345 67', '8 (911) - 123 - 45 - 67', '+ 7 999 123 4567', '8 ( 999 ) 1234567', '8 999 123 4567');

Неправильные: array('02', '84951234567 позвать люсю', '849512345', '849512345678',
'8 (409) 123-123-123', '7900123467', '5005005001', '8888-8888-88',
'84951a234567', '8495123456a',
'+1 234 5678901', // неверный код страны
'+8 234 5678901', // либо 8 либо +7
'7 234 5678901' // нет +
);
!xnn2uE3AU. #238 #379438
>>379008

> dom.addEvent(table,


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

> Меня интересует переменная table, и почему она не видна функции setFlag


Видна, если ты ее передаешь.

>>379170

Работает верно, на все эти сложные \s?-? я бы заменил на «любое число пробелов, минусов, скобок»

>>379173

А зачем ты NULL в pathDone передаешь в самом начале? Вот тут:

> $testvar=oneStep($paths, NULL, 0, 'vas' , 'gor');



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

>>379200

Тебе тот же совет что и другим анонам: проверь свою программу на списке номеров:

Правильные: array('84951234567', '+74951234567', '8-495-1-234-567', ' 8 (8122) 56-56-56', '8-911-1234567', '8 (911) 12 345 67', '8-911 12 345 67', '8 (911) - 123 - 45 - 67', '+ 7 999 123 4567', '8 ( 999 ) 1234567', '8 999 123 4567');

Неправильные: array('02', '84951234567 позвать люсю', '849512345', '849512345678',
'8 (409) 123-123-123', '7900123467', '5005005001', '8888-8888-88',
'84951a234567', '8495123456a',
'+1 234 5678901', // неверный код страны
'+8 234 5678901', // либо 8 либо +7
'7 234 5678901' // нет +
);
38 Кб, 1070x677
#240 #379440
Макаба обезумела или что?
!xnn2uE3AU. #241 #379441
>>379221

Чтобы заменить +7 (точнее 7 в начале) на 8, надо написать регулярку такого типа:

«искать 7 в самом начале строки»

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

>>379228

Хорошо, но проверь свою программу на списке номеров в посте выше.

>>379302

тебе ответ тут: http://paste2.org/648a7bY7 (спам фильтр)
#242 #379442
>>379441
Оп, проверь пикчу - >>379439
Я не знаю, почему не посты не отправляются.
Вот
http://ideone.com/Uxtnrs
http://ideone.com/iLn1TI
Ни один способ без передачи нулл не работает.
!xnn2uE3AU. #243 #379447
>>379302

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

>>379319

> font-size: 17px;


Всегда когда указываешь font-size, указывай рядом line-height. На body надо задавать основной шрифт, то есть которым пишется например текст новости.

Меню у тебя больше по высоте чем на макете.

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

Стрелки на слайдере не совпадают по яркости с макетом, на макете темнее.

> .header {


> width: 1300px;


А почему тут ширина фиксированная? Попробуй уменьшить масштаб в браузере — шапка не тянется на всю ширину. И наоборот, на более узком окне (например 1200px) появляется прокрутка.

> .header .slider-controls .ahead {


> left: 1128px;


Лучше использовать right

Плеер надо сделать из компонентов, то есть кнопки и полоса прогресса — отдельными элементами.

Насчет фона, у меня есть интересная мысль, как его попробовать сжать из 250 Кб до меньшего размера. Можно сделать 2 слоя — размытый фон в jpg и текстура для сеточки в прозрачном png. Размытый JPEG очень сильно жмется, и может быть, тут будет гораздо меньше чем 250 Кб. Попробуй-ка.

То же самое кстати можно делать, когда есть картинка с текстом: жмем текст в PNG, а фон в JPG — получается экономия.

> .header .slider-controls .ahead .img-ahead {


Слишком много классов. .header и .ahead можно смело выкинуть. Обычно хватает 2 классов — блок и элемент в этом блоке.

> .header .slider .slide-text h2:nth-child(2) {


Тут лучше использовать CSS-класс а не nth-child

> <li class="about"><div class="top-menu-icon icon-about"></div><a href="#">About us</a></li>


Слишком много букв. Можно записать так:

<li class="about"><span class="icon"></span><a href="#">About us</a></li>

Или даже использовать псевдоэлемент :before и выкинуть спан.

> <div class="back"><div class="slider-controls-img img-back"></div></div>


<div class="back"><div class="slider-img"></div></div>

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

Странно, что h1 у тебя идет позже чем h2. Я бы сделал

h1 (одним тегом) — The Cool, The Minimal
h2 — LOREM IPSUM SIT AMET

> <h2>Better design</h2>


Это точно не заголовок. h2 тут можно убрать.

Слайды ты сделал не совсем верно. Там идет горизонтальный прокручиваемый ряд элементов, и пост с видео, и твиттер — это 2 равноценных записи в этой ленте. Они должны быть на одном уровне.
!xnn2uE3AU. #243 #379447
>>379302

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

>>379319

> font-size: 17px;


Всегда когда указываешь font-size, указывай рядом line-height. На body надо задавать основной шрифт, то есть которым пишется например текст новости.

Меню у тебя больше по высоте чем на макете.

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

Стрелки на слайдере не совпадают по яркости с макетом, на макете темнее.

> .header {


> width: 1300px;


А почему тут ширина фиксированная? Попробуй уменьшить масштаб в браузере — шапка не тянется на всю ширину. И наоборот, на более узком окне (например 1200px) появляется прокрутка.

> .header .slider-controls .ahead {


> left: 1128px;


Лучше использовать right

Плеер надо сделать из компонентов, то есть кнопки и полоса прогресса — отдельными элементами.

Насчет фона, у меня есть интересная мысль, как его попробовать сжать из 250 Кб до меньшего размера. Можно сделать 2 слоя — размытый фон в jpg и текстура для сеточки в прозрачном png. Размытый JPEG очень сильно жмется, и может быть, тут будет гораздо меньше чем 250 Кб. Попробуй-ка.

То же самое кстати можно делать, когда есть картинка с текстом: жмем текст в PNG, а фон в JPG — получается экономия.

> .header .slider-controls .ahead .img-ahead {


Слишком много классов. .header и .ahead можно смело выкинуть. Обычно хватает 2 классов — блок и элемент в этом блоке.

> .header .slider .slide-text h2:nth-child(2) {


Тут лучше использовать CSS-класс а не nth-child

> <li class="about"><div class="top-menu-icon icon-about"></div><a href="#">About us</a></li>


Слишком много букв. Можно записать так:

<li class="about"><span class="icon"></span><a href="#">About us</a></li>

Или даже использовать псевдоэлемент :before и выкинуть спан.

> <div class="back"><div class="slider-controls-img img-back"></div></div>


<div class="back"><div class="slider-img"></div></div>

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

Странно, что h1 у тебя идет позже чем h2. Я бы сделал

h1 (одним тегом) — The Cool, The Minimal
h2 — LOREM IPSUM SIT AMET

> <h2>Better design</h2>


Это точно не заголовок. h2 тут можно убрать.

Слайды ты сделал не совсем верно. Там идет горизонтальный прокручиваемый ряд элементов, и пост с видео, и твиттер — это 2 равноценных записи в этой ленте. Они должны быть на одном уровне.
!xnn2uE3AU. #244 #379448
>>379348

> серверная машина на винде


Сделай свою службу или пропиши в автозапуск (правда, службу перезапустят при падении в отличие от автозапуска). Или планировщик, но тут логичнее службу.

> Без сложных костылей уметь связаться с этим постоянно запущенным скриптом другим скриптом



- давать задания через таблицу в БД
- через NoSQL очередь вроде http://habrahabr.ru/post/44907/ и https://www.rabbitmq.com/tutorials/tutorial-two-php.html (очередь нужна если большие нагрузки, если маленькие хватит и таблицы, только с блокировками разберись)
- через сокеты, но придется придумать протокол и писать сервер. Можно например JSON-RPC поверх HTTP.
- через средства IPC: http://habrahabr.ru/post/193270/ — если они работают под виндой

>>379439

Значит твой скрипт кривой и его надо исправлять. А в pathDone передавать не NULL, а пустой массив. Очеивдно же что изначально пройденный путь пустой.

>>379440

А, у меня то же.

>>379442

И чем 0 лучше чем NULL? Я же написал, надо для pathDone передавать только массивы.

Алсо, еще и ideone отключился теперь. Пойду спать.
!xnn2uE3AU. #244 #379448
>>379348

> серверная машина на винде


Сделай свою службу или пропиши в автозапуск (правда, службу перезапустят при падении в отличие от автозапуска). Или планировщик, но тут логичнее службу.

> Без сложных костылей уметь связаться с этим постоянно запущенным скриптом другим скриптом



- давать задания через таблицу в БД
- через NoSQL очередь вроде http://habrahabr.ru/post/44907/ и https://www.rabbitmq.com/tutorials/tutorial-two-php.html (очередь нужна если большие нагрузки, если маленькие хватит и таблицы, только с блокировками разберись)
- через сокеты, но придется придумать протокол и писать сервер. Можно например JSON-RPC поверх HTTP.
- через средства IPC: http://habrahabr.ru/post/193270/ — если они работают под виндой

>>379439

Значит твой скрипт кривой и его надо исправлять. А в pathDone передавать не NULL, а пустой массив. Очеивдно же что изначально пройденный путь пустой.

>>379440

А, у меня то же.

>>379442

И чем 0 лучше чем NULL? Я же написал, надо для pathDone передавать только массивы.

Алсо, еще и ideone отключился теперь. Пойду спать.
#245 #379467
>>379438

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



Где-то она создана все равно:

var table = document.createElement('table');

http://jsbin.com/datan/37/edit?js,console

Я не понимаю.

>Ты используешь в глобальном коде



Через call, apply не работает.
!xnn2uE3AU. #246 #379507
>>379467

> Где-то она создана все равно:


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

По моему, ты что-то путаешь. Почему к моменту dom.addEvent(table... эта переменная должна существовать и что в ней по твоему должно быть?

> Я не понимаю.


Сравни: http://jsbin.com/muxiwojuhuli/1/edit?html,console

var a = 100;
console.log(a); // 100

console.log(b); // undefined
var b = 200;
#247 #379564
>>377570
господа, иду постепенно по шагам инструкции от няшного-добра-ему-вообще-молодец анона http://archive-ipq-co.narod.ru

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

Вот для примера:
http://ideone.com/6ZVlwa

Знаю, что, наверняка, малоэффективно использую код, и буду благодарен за помощь.
12 Кб, 280x281
#248 #379593
Ананасы, я тут немного потыкался в пехопе, в верстку, пробежался по js, прочитал, что такое фреймворк, cms, ide, mvc и другие страшные слова, отчего у меня случился лютый летчик. А я всего-то хотел немного поднатореть в веб-кодинге, напейсать пару каких-нибудь сайтов для себя уже посоветовали напейсать какой-нибудь велосипедный свитор, сферический магазин, загрузчик фоточек и прочие визитки чтобы было с чем идти проситься на джуна.
Анон, выкинь из этого списка то, что мне нахуй не нужно, а что следует почитать-посмотреть-попробовать:

Р. Никсон - Создаем динамические веб-сайты с помощью PHP, MySQL, javascript и CSS. 2-е издание
видосики из интернетов: developerstarter, infospir, knowcity и прочая, и прочая
samouchitelPHP56sfericheski-v-vakuume.pdf
HTML 5, CSS 3 и Web 2.0. Разработка современных Web-сайтов.fb2
Joomla3, wordpress, drupal
php_enhanced_ru.chm
Люк Веллинг, Лора Томсон - Разработка web-приложений с помощью PHP и MySQL (4 издание) - 2010
Stroganov_Vash_Pervi_Sait_PHP.djvu
Курс профессионального javaScript [2013]
Программирование на JavaScript (jQuery,AJAX) (2013) уровень б

Я специально вывалил содержимое папки с собранной мной инфой, чтобы анону был понятен уровень пиздеца, творящегося сейчас у меня в голове. Информации масса, ее слишком много, чтобы было понятно, с какого конца и за что браться.
Пока дрочу задачки из ОП-поста. Будущее туманно.
#249 #379641
>>379593

>Книги


Пиздос.
Выкинь все на хуй. По порядку.
PHP->PHP.net/docs->expirience->
исследование шаблонизаторов->
MDN->CSS->
MDN->Java ScriptRe ference->
expirience->
ищешь популярные framworks->
дрочишь сайтики->
.....->
Succes! You are monkey!
#250 #379645
>>379507
Оп, вот я идиот. Я смотрел на функцию createField и не видел, что творится вокруг. А там и вправду table откуда-то берется. Просто консоль мне твердила, что ошибка на 78 строке.

Ну ладно, буду внимательней.
#251 #379648
>>379593

>Программирование на JavaScript (jQuery,AJAX) (2013) уровень б


погромирование уровня /b/
#252 #379658
ОП, решал задачу и не могу понять, почему так получается:

function recurs($var){
$var++;

if($var<3)
recurs($var);

echo $var;
}

$var = 0;

recurs($var);


Должно же быть 123, а получается 321. Почему?
#253 #379665
>>379658
Поставь echo До проверки условия.
#254 #379668
>>379658
Потому, что рекурсивно вызываешь функцию, которая вызывает echo только когда var<3, а это произойдет в 3-й итерации рекурсивного вызова, когда условие var<3 не выполнится и функция echo сработает напечатав по порядку 3 2 1, по мере выхода из рекурсивных функций.

Используй For или .each
#255 #379678
Почему-то самоподрываюсь на минах http://jsfiddle.net/ct0q0yL2/ и too much recursion
#256 #379680
>>379678
А как флаг поставить?
#257 #379681
Я вообще не могу вникнуть в этот птичий язык:

class Model {
public $text;

public function __construct() {
$this->text = 'Hello world!';
}
}

class View {
private $model;
private $controller;

public function __construct(Controller $controller, Model $model) {
$this->controller = $controller;
$this->model = $model;
}

public function output() {
return '<h1>' . $this->model->text .'</h1>';
}

}

class Controller {
private $model;

public function __construct(Model $model) {
$this->model = $model;
}
}

//initiate the triad
$model = new Model();
//It is important that the controller and the view share the model
$controller = new Controller($model);
$view = new View($controller, $model);
echo $view->output();

Подскажите что прочитать что бы понимать что тут написано. В PHP могу и довольно не плохо.
#257 #379681
Я вообще не могу вникнуть в этот птичий язык:

class Model {
public $text;

public function __construct() {
$this->text = 'Hello world!';
}
}

class View {
private $model;
private $controller;

public function __construct(Controller $controller, Model $model) {
$this->controller = $controller;
$this->model = $model;
}

public function output() {
return '<h1>' . $this->model->text .'</h1>';
}

}

class Controller {
private $model;

public function __construct(Model $model) {
$this->model = $model;
}
}

//initiate the triad
$model = new Model();
//It is important that the controller and the view share the model
$controller = new Controller($model);
$view = new View($controller, $model);
echo $view->output();

Подскажите что прочитать что бы понимать что тут написано. В PHP могу и довольно не плохо.
#258 #379685
>>379680
Пажи с флагом. Я подрываюсь на минах, когда в коде пытаюсь открыть якобы не заминированную клетку. В консоле все видно Флаг будет просто символ, через Cell.prototype.setText поставить проще простого.
53 Кб, 604x473
Помогач-вопросач! #259 #379692
ребят подскажите. Решал задачу:
Школьник решил купить айфон и для этой цели взял кредит. Сумма кредита — 40000 р., банк каждый месяц начисляет 3% за пользование кредитом и 1000 р. комиссии (да, а ты думал, обойдешься процентами?). После этого, тоже каждый месяц, наш герой идет в банк и платит 5000 р (сэкономленных на школьных завтраках). Вопрос, когда он избавится от долга? Во сколько школьнику обошелся айфон?

Вот таким скриптом:

<?php

$opName = 'школьник';

for ($i = 40000; $i <= 0; $i = $i - 2800) {
echo "{$i}-оплата кредита — {$opName}\n";
}

Не понимаю где ошибка.
85 Кб, 700x680
#260 #379700
>>379692
пиздец я обосрыщ. Почитал ниже решение с примером.
Видимо мне никогда не научиться...
#261 #379705
>>379681
Блядь, это очень похоже на массивы, но нахуя столько сложностей то?
Пытаюсь понять зачем нужен ООП
#262 #379707
>>379705
У тебя хуёвый пример. ООП это шкаф с полочками для книг, шкаф для многих строк кода. Понять пользу шкафа трудно, когда у тебя одна книга. Найти выше в тредах пример про кошку/мышку и попробуй сделать его без ООП, а потом с ООП, и опиши для себя разницу.
#263 #379709
>>379707
Но ведь книги нужно хранить в библиотеке и искать их просто крикнув библиотекарю "пошёл и достал мне чего-нибудь интересного".

Не могу найти задачу, про которую ты гоСпасибо.
#264 #379711
>>379709

>Не могу найти задачу, про которую ты гоСпасибо.


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

> Но ведь книги нужно хранить в библиотеке и искать их просто крикнув библиотекарю "пошёл и достал мне чего-нибудь интересного".


Речь не об этом. Я говорю про подход к организации хранения информации (кода), или все книги лежат в общей стопке, или у тебя есть шкаф, где на полочках написано, что за книги там лежат. Про кошку-мышку есть ссылка в ОП-посте на его сайте.
#266 #379714
>>379712
А если я рассовываю разные функции по разным файлам? Например у меня есть файл с функциями нужными для управления пользователями. Есть файл с функциями работы с изображениями. Это плохой подход к программированию? Или он плох при работе в команде?
#267 #379720
>>379564
Ну ответьте же на ответ
#268 #379722
http://jsbin.com/luboh/6/edit?js,output

Не пойму почему одна мина только появляется. Да и так, ОП, посмотри на код, верный путь выбрал?
#270 #379740
>>379737
Но i--; не защищает от расстановки 2 двух мин на одну и ту же клетку.

Я заметил, что вот такая штука не срабатывает:

innerHTML == '' , когда дело касается проверки.

Еще хотел спросить, как реализовать сохранение в памяти, что на клетке находится мина, если я ее пометил флажком? Вот это будет главной проблемой, как уместить 3 знака на клетке. По-моему я уже свернул с верной дороги. Что думаешь?
!xnn2uE3AU. #271 #379781
>>379564

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


Ты можешь использовать в выражении для замены специальные конструкции:

$0 — вставляет текст, захваченный регулярным выражением
$1 — вставляет текст, захваченный первыми круглыми скобками
$2 — вторыми
И так далее.

Пример:

$text = "кошка кошке кошку";
$text = preg_replace("/кош(ка|ке)/ui", 'соба$1', $text);
echo $text; // собака собаке кошку

Здесь $1 заменяется на «ка» или «ке», которые попадают в первые круглые скобки в регулярке.

>>379593

Нормальные книги по PHP — Зандстра и Шлосснейгл (названия в ОП-посте) — но они для тех, кто уже что-то знает. Книга «Р. Никсон - Создаем динамические веб-сайты с помощью PHP, MySQL, javascript и CSS» даст общее представление о PHP/MySQL/JS/CSS, но уровень в ней довольно низкий, так что годится только для знакомства.

По яваскрипту нормальные книги — это Фленаган «Javascript, Полное руководство, 6-е издание» (не пятое и ниже), но она огромная и трудна для начинающих, и Дуглас Крокфорд «яваскрипт, сильные стороны».

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

Будь осторожен, книги по PHP в большинстве пишут авторы, которые сами толком не умеют на нем программировать, ничему хорошему они не научат.
!xnn2uE3AU. #271 #379781
>>379564

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


Ты можешь использовать в выражении для замены специальные конструкции:

$0 — вставляет текст, захваченный регулярным выражением
$1 — вставляет текст, захваченный первыми круглыми скобками
$2 — вторыми
И так далее.

Пример:

$text = "кошка кошке кошку";
$text = preg_replace("/кош(ка|ке)/ui", 'соба$1', $text);
echo $text; // собака собаке кошку

Здесь $1 заменяется на «ка» или «ке», которые попадают в первые круглые скобки в регулярке.

>>379593

Нормальные книги по PHP — Зандстра и Шлосснейгл (названия в ОП-посте) — но они для тех, кто уже что-то знает. Книга «Р. Никсон - Создаем динамические веб-сайты с помощью PHP, MySQL, javascript и CSS» даст общее представление о PHP/MySQL/JS/CSS, но уровень в ней довольно низкий, так что годится только для знакомства.

По яваскрипту нормальные книги — это Фленаган «Javascript, Полное руководство, 6-е издание» (не пятое и ниже), но она огромная и трудна для начинающих, и Дуглас Крокфорд «яваскрипт, сильные стороны».

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

Будь осторожен, книги по PHP в большинстве пишут авторы, которые сами толком не умеют на нем программировать, ничему хорошему они не научат.
!xnn2uE3AU. #272 #379788
Кстати, аноны, кто учит яваскрипт, если есть время, советую почитать книгу Крокфорда «Javascript сильные стороны» (Javascript the Good Parts) — она полезная и небольшая. Ее автор — очень профессиональный и опытный программист (как и автор learn.javascript.ru кстати).

И у меня кстати есть еще мини-задачка для яваскриптщиков:

if (x) {
...
}

Перечислите все значения x при которых if не сработает. Это так называемые ложные (falsy) значения. Всего их 6.

if (x !== x) { .. }

Чему должно быть равно x чтобы это условие сработало?

>>379678

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

У таблиц есть методы insertRow() ( http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-39872903 ), а у строк — insertCell ( http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-68927016 )

Еще инфа:

http://learn.javascript.ru/traversing-dom#таблицы
https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableElement (англ.)

> и too much recursion


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

> & # 9760


А точка с запятой где? Почитай-ка https://ru.wikipedia.org/wiki/%D0%9C%D0%BD%D0%B5%D0%BC%D0%BE%D0%BD%D0%B8%D0%BA%D0%B8_%D0%B2_HTML

> if (!(currentElement instanceof Cell)) {


> throw 'Element from around not instance of Cell'


> }


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

assert(currentElement instanceof Cell);

Это короче и читабельнее чем if, и любой нормальный программист понимает что значит assert.

> clickEvent


Лучше назвать clickCell или даже openCell, название функции должно начинаться с глагола.

Исправь баги, и снова покажи код, оценим твой ООП.
!xnn2uE3AU. #272 #379788
Кстати, аноны, кто учит яваскрипт, если есть время, советую почитать книгу Крокфорда «Javascript сильные стороны» (Javascript the Good Parts) — она полезная и небольшая. Ее автор — очень профессиональный и опытный программист (как и автор learn.javascript.ru кстати).

И у меня кстати есть еще мини-задачка для яваскриптщиков:

if (x) {
...
}

Перечислите все значения x при которых if не сработает. Это так называемые ложные (falsy) значения. Всего их 6.

if (x !== x) { .. }

Чему должно быть равно x чтобы это условие сработало?

>>379678

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

У таблиц есть методы insertRow() ( http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-39872903 ), а у строк — insertCell ( http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-68927016 )

Еще инфа:

http://learn.javascript.ru/traversing-dom#таблицы
https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableElement (англ.)

> и too much recursion


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

> & # 9760


А точка с запятой где? Почитай-ка https://ru.wikipedia.org/wiki/%D0%9C%D0%BD%D0%B5%D0%BC%D0%BE%D0%BD%D0%B8%D0%BA%D0%B8_%D0%B2_HTML

> if (!(currentElement instanceof Cell)) {


> throw 'Element from around not instance of Cell'


> }


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

assert(currentElement instanceof Cell);

Это короче и читабельнее чем if, и любой нормальный программист понимает что значит assert.

> clickEvent


Лучше назвать clickCell или даже openCell, название функции должно начинаться с глагола.

Исправь баги, и снова покажи код, оценим твой ООП.
41 Кб, 313x425
#273 #379789
>>379641
>>379781
Спасибо, толково. Вашим советам и последую.
!xnn2uE3AU. #274 #379790
>>379678

> var columns = rows[rowIndex].childNodes;


Это очень ненадежно, так как по идее между узлами <td> в дереве DOM например могут быть текстовые узлы с пробелами:

<td></td> (пробелы) <td></td>

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

Используй вместо childNodes свойство children (которое содержит только HTML-элементы) либо, что лучше, используй свойства rows[] и cells которые есть у таблиц в ДОМе.

> this.tdElemtnt = tdElement;


Опечатки.
!xnn2uE3AU. #275 #379792
>>379681

Это код для тех, кто разбирается в ООП. Если не разбираешься, то сначала прочти мой урок по ООП для чайников http://archive-ipq-co.narod.ru/l1/pasta.html и реши пару задач оттуда.

Алсо, почитать можно Зандстру или Шлосснейгла (названия книг в ОП-посте)

>>379700

Это задача сложная, некоторые ее с десятого раза сдавали.

>>379709

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

>>379711

http://archive-ipq-co.narod.ru/l1/pasta.html в конце страницы

>>379714

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

Мой урок по ООП (ссылка выше) очень простой, и в нем любой может разобраться, советую почитать. То, что ты учился по кривому учебнику без ООП, не повод от него отказываться.
!xnn2uE3AU. #276 #379793
>>379714

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

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

А как это сделать у тебя?

Это был пример «полиморфизма» (возможности вместо одного класса подсунуть другой), который невозможен в случае использования функций.
#277 #379804
>>379793>>379792
Тащемта я сегодня ночью понюхал амфетамина и прочитал книгу по ООП. Мэтт Зандстра - PHP. Объекты, шаблоны и методики программирования - 2011.

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

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


Лол, придумали какие-то правила и живут в своем мирке. Программисты страннее чем я думал. Это как у тян "мужчина должен".

>В мире ООП мы просто делаем вместо класса работы с пользователями класс-заглушку


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

Спасибо за ответы, вы мне очень помогли. Люблю вас.
#278 #379813
Как сделать авто-обновление постов как в чатах? Что-бы не рефрешить страницу постоянно, а "по тихому"? Сидишь, типо, и новые посты появляются.
#279 #379819
>>379813
Ajax вроде
диван
#280 #379838
>>379813
jQuery по таймеру спрашивает у php скрипта новые посты и добавляет их в блок.

Самое простое это .load()
#281 #379930
>>379740
ОП, а мне не ответил.
!xnn2uE3AU. #282 #379943
>>379740

Неправильно читать innerHTML и с чем-то его сравнивать. Это тупиковый путь.

Правльных вариантов 2:

1) Сделать объект Cell и в нем хранить информацию о клетке как другой достопочтенный анон: >>379678

2) Хранить информацию в data-* аттрибутах вроде data-isMine= "1" и использовать get/setAttribute()
!xnn2uE3AU. #283 #379945
>>379740

> Я заметил, что вот такая штука не срабатывает:


> innerHTML == '' , когда дело касается проверки


Все работает, это ты неприавльно что--то делаешь. Сдампь в консоль чему равен innerHTML

> Но i--; не защищает от расстановки 2 двух мин на одну и ту же клетку.


Проверяй и не ставь мину туда где она есть
!xnn2uE3AU. #284 #379949
>>379813

Аякс или вебсоекты. Второе лучше.

>>379838

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

>>379804

> придумали какие-то правила и живут в своем мирке.


Не придумали, а вывели из опыта (которого у тебя нет)

> я просто закомментирую пару строк в функции


Это автоматические тесты, которые например запускаются на каждый коммит. Замучаешься комментировать.
!xnn2uE3AU. #285 #379952
>>379692

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

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

>>379641

Самостоятельное изучение тоже может быть плохо, так как в сети и на stack overflow много плохих и неграмотных примеров, особенно на легких языках вроде HTML, JS, PHP.

Учитесь лучше в нашем треде. Мы быдлокод заставляем исправлять.
#286 #379954

>W5.2 Некто кладет в банк 10000 р. Банк начисляет 10% годовых (то есть, каждый год на счету становится на 10% больше, чем в прошлом году). Напиши программу, считающую, через сколько лет в банке будет миллион? Сколько лет будет этому некто? Доживет ли некто до этого дня, если сегодня ему 16 лет?



65 лет 1 067 189 рублёу?
#287 #379959
>>379949

> Аякс или вебсоекты. Второе лучше.



Наверное, ты хотел сказать «long polling и вебсокеты».
#288 #379960
>>379788

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



assert(currentElement instanceof Cell);
Мне же нужно выбросить исключение с конкретным текстом, а функция assert одна. Вообще assert по-моему используют в тестах для проверки выражения и вывода какой-то шаблонной инфы. Не вижу как тут можно заюзать assert
#289 #379964
>>379788

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


У меня же проверка
//если клетка уже открыта заканчиваем событие
if(!currentCell.close){
return true;
}
ХЗ откуда тут рекурсия
#290 #379965
>>379964
Всмысле бесконечная рекурсия
#291 #379976
>>379447
https://github.com/infinitecats/infinitecats.github.io - исправил. Там немного блока с контентом + хедер мобилки.

>Всегда когда указываешь font-size, указывай рядом line-height.


Я вот не знаю какую ставить. В фш написано, что "Авто".

>Стрелки на слайдере не совпадают по яркости с макетом, на макете темнее.


Там только левая темная, видно из-за того, что нельзя назад листать. Классы для js, наверное, потом сделаю.

>Плеер надо сделать из компонентов, то есть кнопки и полоса прогресса — отдельными элементами.


Посмотри, у меня какая-то дурная кнопка получилась. Видимо не так. Случайно не с помощью jQuery? Я просто пока его не освоил(пока DOM прохожу).

>Насчет фона, у меня есть интересная мысль, как его попробовать сжать из 250 Кб до меньшего размера. Можно сделать 2 слоя — размытый фон в jpg и текстура для сеточки в прозрачном png. Размытый JPEG очень сильно жмется, и может быть, тут будет гораздо меньше чем 250 Кб. Попробуй-ка.



То же самое кстати можно делать, когда есть картинка с текстом: жмем текст в PNG, а фон в JPG — получается экономия.

Я что-то ничего не понял. Можно по шагам? Там вроде все одной картинкой сразу сделано, вот я так и вырезал.

>Слишком много классов. .header и .ahead можно смело выкинуть. Обычно хватает 2 классов — блок и элемент в этом блоке.



Я просто посмотрел, у меня потом еще один слайдер. Думал чтобы не запутаться. У меня там вообще много классов css-файле. Сократить? По 2-3 сделать?

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



Я это исправлю, как дойду до туда.

http://habrahabr.ru/post/119127/ - ты мне давал ссылочку... Я там посмотрел, если уж совсем по хардкору, то нужно 4 макета? не знаешь, верстальщиков не заставляют додумывать отзывчивый дизайн?

Кстати, я правильно там делаю, когда картинкам(в топ-меню иконкам, логотипу) задаю фиксированные размеры?
#291 #379976
>>379447
https://github.com/infinitecats/infinitecats.github.io - исправил. Там немного блока с контентом + хедер мобилки.

>Всегда когда указываешь font-size, указывай рядом line-height.


Я вот не знаю какую ставить. В фш написано, что "Авто".

>Стрелки на слайдере не совпадают по яркости с макетом, на макете темнее.


Там только левая темная, видно из-за того, что нельзя назад листать. Классы для js, наверное, потом сделаю.

>Плеер надо сделать из компонентов, то есть кнопки и полоса прогресса — отдельными элементами.


Посмотри, у меня какая-то дурная кнопка получилась. Видимо не так. Случайно не с помощью jQuery? Я просто пока его не освоил(пока DOM прохожу).

>Насчет фона, у меня есть интересная мысль, как его попробовать сжать из 250 Кб до меньшего размера. Можно сделать 2 слоя — размытый фон в jpg и текстура для сеточки в прозрачном png. Размытый JPEG очень сильно жмется, и может быть, тут будет гораздо меньше чем 250 Кб. Попробуй-ка.



То же самое кстати можно делать, когда есть картинка с текстом: жмем текст в PNG, а фон в JPG — получается экономия.

Я что-то ничего не понял. Можно по шагам? Там вроде все одной картинкой сразу сделано, вот я так и вырезал.

>Слишком много классов. .header и .ahead можно смело выкинуть. Обычно хватает 2 классов — блок и элемент в этом блоке.



Я просто посмотрел, у меня потом еще один слайдер. Думал чтобы не запутаться. У меня там вообще много классов css-файле. Сократить? По 2-3 сделать?

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



Я это исправлю, как дойду до туда.

http://habrahabr.ru/post/119127/ - ты мне давал ссылочку... Я там посмотрел, если уж совсем по хардкору, то нужно 4 макета? не знаешь, верстальщиков не заставляют додумывать отзывчивый дизайн?

Кстати, я правильно там делаю, когда картинкам(в топ-меню иконкам, логотипу) задаю фиксированные размеры?
159 Кб, 591x752
#292 #379979
ОП, как тебе мой быдлокод? Правильно?
http://ideone.com/8NpHlS
#293 #379988
>>379788
Все, понял что я мудак Проверка клетки на close/open есть, но выставить клетке свойство close я забыл. Теперь все работает.
#294 #380004
>>379988
Покажи. У тебя еще target is null на 57 строке. Вот jsbin более требователен, он ничего не выводит.
#295 #380005
Пыханы, на работе начинаем разработку нового проекта. Руководитель хочет домен в зоне .рф, какие подводные камни?
#296 #380020
>>380004
Ну вроди как-то так http://jsfiddle.net/8awrh5n2/

>У тебя еще target is null на 57 строк


null может быть только если не находит элемент с нужным id

>Вот jsbin более требователен, он ничего не выводит


Не люблю jsbin т.к. не понял как там сохранить код
Еще нужно добавить кнопку новой игры и надписи win/loose и замечания ОП наверное будут.
#297 #380024
>>380020
Долго делал? Я вот скоро сам доделаю. Но со структурой ООП у меня опять косячно вышло.
!xnn2uE3AU. #298 #380077
>>379954

Да, примерно так.

>>379959

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

>>379960

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

>>379964

Тогда сделай в начале функции вывод x и y по которым произошел клик и посмотри в чем дело.

>>379976

> у меня потом еще один слайдер


Можно дать им разные классы, header-slider и feed-slider

> Кстати, я правильно там делаю, когда картинкам(в топ-меню иконкам, логотипу) задаю фиксированные размеры?


да

> Я вот не знаю какую ставить. В фш написано, что "Авто".


Скорее всего около 1.2. Можешь линейкой померять расстояние между 2 линиями строк.

> у меня какая-то дурная кнопка получилась.


Сделай треугольник картинкой тогда

> Я что-то ничего не понял. Можно по шагам? Там вроде все одной картинкой сразу сделано, вот я так и вырезал.


Ну если невозможно, то жаль. Так, многовато 250 Кб на 1 картинку.

> верстальщиков не заставляют додумывать отзывчивый дизайн?


Обычно нет. Тут у нас и 2 макетов хватит.

> Сократить? По 2-3 сделать?


Там многие классы излишние: .back .img-back — тут явно back лишний.
!xnn2uE3AU. #298 #380077
>>379954

Да, примерно так.

>>379959

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

>>379960

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

>>379964

Тогда сделай в начале функции вывод x и y по которым произошел клик и посмотри в чем дело.

>>379976

> у меня потом еще один слайдер


Можно дать им разные классы, header-slider и feed-slider

> Кстати, я правильно там делаю, когда картинкам(в топ-меню иконкам, логотипу) задаю фиксированные размеры?


да

> Я вот не знаю какую ставить. В фш написано, что "Авто".


Скорее всего около 1.2. Можешь линейкой померять расстояние между 2 линиями строк.

> у меня какая-то дурная кнопка получилась.


Сделай треугольник картинкой тогда

> Я что-то ничего не понял. Можно по шагам? Там вроде все одной картинкой сразу сделано, вот я так и вырезал.


Ну если невозможно, то жаль. Так, многовато 250 Кб на 1 картинку.

> верстальщиков не заставляют додумывать отзывчивый дизайн?


Обычно нет. Тут у нас и 2 макетов хватит.

> Сократить? По 2-3 сделать?


Там многие классы излишние: .back .img-back — тут явно back лишний.
#299 #380082
http://jsbin.com/luboh/17/edit?js,output

Оп, смотри код до 105 строки, дальше старые ненужные вещи, которые позже разберу.

Хочу реализовать вот что: все классы (Cell, Field, Game) независимы, но они при этом прослушивают друг друга. Cell сам обрабатывает события на себе и меняет свое состояние. Field открывает соседние ячейки, проверяет на на что-нибудь еще, например, на выигрыш, когда все мины пойманы. Ну а Game будет заниматься логикой.

Cell к примеру вообще не знает о Game и Field, а Field интересуется только своими ячейками.

Верны рассуждения?

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

У меня в голове возник еще один вариант, можно уже пользоваться готовыми объектами-узлами и приписывать им свойства и методы?

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

Какой структуры нужно придерживаться?
!xnn2uE3AU. #300 #380084
>>379979

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

Алсо, что с форматированием? Такой код надо пропускать через phpformatter.com прежде чем постить.

>>380005

Никаких

>>380020

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

> if (!('className' in node)) {


> return false;


Это зачем? Когда оно срабатывает?

> node.className = node.className.split(klass).join('');


Это неприавльный код. Пример, есть className 'klass kla klasses' и мы пытаемся удалить kla

> (hasClass(node, klass)) ?


Тут нужно использовать if

> this.mineField = tableModel;


Одинаковые вещи надо называть одинаково

> if (this.mineField[y][x] === undefined)


Эта проверка сработает только для неприавльного x, для непраивльного y вылетит искючение так как будет

(undefined)[x]

> this.currentCell = this.mineField[y][x];


> return this.currentCell;


Странно, функция называется получитьКлеточку, но при этом она тихонько меняет какое-то свойство. Это неочевидно и неожиданно и потому плохо. Менять currentCell надо методом вроде задатьТекущуюКлеточку.

> table {


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

.sapper-table
.sapper-table td

Иначе ты меняешь вид таблиц не только в своей игре, а на всей странице.

> currentCell.setText(aroundMine);


Это можно написать один раз, а не два

> currentCell.setText('');


Я бы сделал у Cell методы toggleFlag() и showMine()

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

> this.mineField[yIndex][xIndex]


Это повторяется 4 раза подряд, нехорошо

> (aroundCells.isMine) ? mineCount++ : 0;


Тут нужен if, а не костыли

> addEventListener('contextmenu',


Это неприавльно. contextmenu — это событие попытки вызвать меню. Оно может быть вызвано например кнопкой справа от пробела или еще как-то. Тебе нужно не оно, а событие mousedown (для открытия клетки тоже), а в нем уже смотреть какая кнопка нажата.

Использование mousedown позволит избавиться от задержки которую вносит onclick

!xnn2uE3AU. #300 #380084
>>379979

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

Алсо, что с форматированием? Такой код надо пропускать через phpformatter.com прежде чем постить.

>>380005

Никаких

>>380020

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

> if (!('className' in node)) {


> return false;


Это зачем? Когда оно срабатывает?

> node.className = node.className.split(klass).join('');


Это неприавльный код. Пример, есть className 'klass kla klasses' и мы пытаемся удалить kla

> (hasClass(node, klass)) ?


Тут нужно использовать if

> this.mineField = tableModel;


Одинаковые вещи надо называть одинаково

> if (this.mineField[y][x] === undefined)


Эта проверка сработает только для неприавльного x, для непраивльного y вылетит искючение так как будет

(undefined)[x]

> this.currentCell = this.mineField[y][x];


> return this.currentCell;


Странно, функция называется получитьКлеточку, но при этом она тихонько меняет какое-то свойство. Это неочевидно и неожиданно и потому плохо. Менять currentCell надо методом вроде задатьТекущуюКлеточку.

> table {


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

.sapper-table
.sapper-table td

Иначе ты меняешь вид таблиц не только в своей игре, а на всей странице.

> currentCell.setText(aroundMine);


Это можно написать один раз, а не два

> currentCell.setText('');


Я бы сделал у Cell методы toggleFlag() и showMine()

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

> this.mineField[yIndex][xIndex]


Это повторяется 4 раза подряд, нехорошо

> (aroundCells.isMine) ? mineCount++ : 0;


Тут нужен if, а не костыли

> addEventListener('contextmenu',


Это неприавльно. contextmenu — это событие попытки вызвать меню. Оно может быть вызвано например кнопкой справа от пробела или еще как-то. Тебе нужно не оно, а событие mousedown (для открытия клетки тоже), а в нем уже смотреть какая кнопка нажата.

Использование mousedown позволит избавиться от задержки которую вносит onclick

!xnn2uE3AU. #301 #380088
>>380082

> все классы (Cell, Field, Game) независимы, но они при этом прослушивают друг друга.


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

Field владеет и управляет всеми Cell
Game владеет и управляет Field

И потому тебе не нужна подписка на события. Game в любой момент может сделать this.field.doSmth(), а Field может сделать this.getCellAt(x, y).doSmthElse()

> Cell к примеру вообще не знает о Game и Field, а Field интересуется только своими ячейками.


Это верно.

> Cell сам обрабатывает события на себе


Это не получится так как Cell много, а обработчик клика будет один

> Но я не знаю куда вынести события.


Пусть Game слушает их и вызвает нужный метод Field вроде открытьЯчейку или поставитьФлажок. А тот уже меняет состояние нужной ячейки и делат еще что-то.

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


Узлами DOM? Ой, что-то у меня ощущение что ты хочешь что-то усложнить и запутать. DOM нужен для изменений на странице, это средство отображения информации и все.
!xnn2uE3AU. #302 #380090
>>380082

То, что у тебя задумано, пока что верно.
#303 #380107
>>380024
С 17 августа, где-то по 2 часа в день.

>со структурой ООП у меня опять косячно вышло.


Перфекционизмом не страдаю, по мне лучше написать кривую структуру чем не написать вовсепхп обезьяна жи есть А потом можно отрефакторить и сделать все по красоте.
>>380082
Это твой код? На мой взгляд ты совершенно напрасно в методе Field.prototype.createField используешь глобальный объект table. Логичней было бы чтобы класс получал скажем в конструкторе объект html таблицы. Ну и у Cell если есть isOpened то зачем тебе isClosed?
#304 #380118
>>380107
Почему напрасно?

>скажем в конструкторе объект html таблицы



Table и есть объект.
#305 #380170
>>378967
http://jsbin.com/lubewuqa/4/edit - гамбургеры. Там пока только makeSelection рабочая.

Слушай, makeAddative должна внутри makeSelection вызываться? Или нет?

Может все-таки order сделать свойством? Я просто не знаю, как мне потом работать с заказом, если он внутри makeSelection. Вызывать makeSelection внутри calcPrice и calcCalor? Как ему(makeSelection) тогда аргументы нужные передать?
#306 #380178
>>380118
Table это объект html. В ООП да и вообще в программировании глобальные переменные не приветствуются, но дело твое
#307 #380215
Первая задача по DOM - http://jsbin.com/qebovupucuke/1/edit?js,console
#308 #380225
ОП, а во второй задаче надо вешать событие клика на всю таблицу? Если да, то что потом, как задать конкретной ячейке новый класс? Я пока думаю, что как-нибудь через event.clientX / event.clientY, но думаю, что это как-то сложно. Можешь подсказать, или дать название темы из учебника?
#309 #380270
Оп , посмотри пожалуйста почту.
#310 #380338
>>380088

>И потому тебе не нужна подписка на события



Так, про это подробнее расскажи.

Ты об этом: http://learn.javascript.ru/custom-events ?
#311 #380339
>>380178
Ты прав, исправлю.
#312 #380349
http://jsbin.com/fuwohe/3/edit?js

Оп, я не понимаю как работает этот код.

Наверное это самая непонятная строка:
handlers.apply(this, [].slice.call(arguments, 1));

Наверное здесь trigger и вызывает событие. Поясни.
#313 #380379
http://jsbin.com/dagoxeleburo/2/edit?js

Почему все зависает, если на 95 строке написать:

this.cells[y] = [];
!xnn2uE3AU. #314 #380390
>>380170

> function uncorrectHamb(message) {


Нехорошо, ты при каждом вызове makeSelection создаешь новую функцию. Зачем? Надо создать ее один раз, так:

Hamburger.IncorrectArgs = function ...

То же относится и к checkTypeHamb, checkFilling. Не надо этот бардак, когда функции создаются внутри функций, лучше сделать их методами Hamburger

> Слушай, makeAddative должна внутри makeSelection вызываться? Или нет?


Как хочешь, так и делай

> Может все-таки order сделать свойством?


Я тебя не понимаю. Есть гамбургер, у него ровно 3 свойства: размер, начинка, список добавок. Зачем что-то усложнять? какая от этого выгода?

Вот смотри, ты решил усложнить и складывать все в одно свойство вместо трех: this.order. Допустим, мы захотим написать метод getFilling(). В случае с 3 свойствами он пишется элементарно:

...getFilling = function () { return this.filling; }

В твоем случае, надо будет писать целый алгоритм по обходу массива order и определению, что именно там является начинкой. Мне кажется, нужно не усложнять жизнь и сделать обычные свойства.
!xnn2uE3AU. #315 #380394
>>380170

> Я просто не знаю, как мне потом работать с заказом, если он внутри makeSelection.


Не понял, что значит «он внутри makeSelection»? Все, что нужно, ты можешь сохранить в свойства объекта.

> Вызывать makeSelection внутри calcPrice и calcCalor?


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

>>380215

> node.getAttribute('class').


Есть свойство node.className, его писать короче.

> function hasClass(node, klass) {


Неплохо, но есть более короткий способ: добавляем к className справа и слева пробелы и ищем в нем как в строке подстроку ' ' + klass + ' '. Для удаления, можно удалять регулярным выражением.

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

> if (classes == klass) {


> classes.splice(i, 1);


Не удалит если один класс идет 2 раза подряд: http://jsbin.com/dakodalamayu/1/edit?console (последний пример)

#316 #380460
Выложи, будь добр, пример какого-нибудь типичного и несложного ТЗ, даваемого на фриланс.
159 Кб, 669x513
#317 #380502
сап аноны, решил обмазаться книгой.Есть кто учится по ней? книга на инглише.
#318 #380516
С чего стоит начинать, если с вебом до сих пор не сталкивался, но опыт в программировании(laba3, kursach2013) имеется?
#319 #380531
>>380394
Первое по DOM. Исправил - http://jsbin.com/qebovupucuke/2/edit
#320 #380570
>>380502
совет возьми сразу несколько книг и читай одновременно
#321 #380596
>>380531
http://jsbin.com/hafiwatasaxi/2/edit - второе по DOM. Т.к ты еще не смотрел первый номер, то тут могут быть ошибки с этими функциями из первого. Там у меня проблемка: если много раз нажимать на одну и ту же клетку, то класс удаляется и добавляются все новые пробелы. Я не знаю как исправить.
#322 #380597
test
#323 #380598
>>380225

> а во второй задаче надо вешать событие клика на всю таблицу?


Конечно

> Я пока думаю, что как-нибудь через event.clientX / event.clientY, но думаю, что это как-то сложно.


У события есть свойство target (учебник читал? прочти: http://learn.javascript.ru/bubbling-and-capturing#%D1%86%D0%B5%D0%BB%D0%B5%D0%B2%D0%BE%D0%B9-%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82-event-target ). Ты можешь с его помощью определить на какой ячейке кликнули.

>>380338

> Ты об этом


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

То, что там — это делается на джейквери за счет того, что у нее написан собственный аналог системы браузерных событий (вроде бы для одинакового поведения в разных браузерах). То есть получая событие от браузера, jQuery создает на его основе свой объект-событие и обходит узлы DOM, вручную вызвыая обработчики.
#324 #380599

>>380349

Функция on добавляет в список обработчиков события указанную функцию. off — удаляет. trigger берет список добавленных ранее функций для данного события и вызывает их по очереди.

> [].slice.call(arguments, 1)


Это всего лишь такой хитрый способ применить метод массива slice к псевдомассиву arguments. slice делает копию массива начиная с 1-го элемента (пропуская нулевой)).

То есть это равносильно циклу:

var args = [];
for (i = 1; i < arguments.length; i++) {
args.push(arguments[ i ]);
}

apply вызывает указанную функцию с указанными аргументами и значением this.

Если ты не знаешь что делает apply или slice, погугли. Если ты не знаешь что такое псевдопеременная arguments, погугли.

В итоге, функция trigger вызвает все обработчики события, и при этом передает каждому свои аргументы, пропуская нулевой (так как в нем лежит eventName). B если мы вызовем

...trigger('something', 1, 2, 3);

То все обработчики будут вызваны по очереди с аргументами (1, 2, 3).
#325 #380600
>>380379

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

В ФФ открой отладчик, перейди на вкладку Profile, нажми Start и потом запусти код на jsbin, подожди немного и останови профайлинг. После чего, сортируя и пробуя разные режимы, определи, что именно тормозит.

В Хроме профайлер тоже подвис, но я смог остановить яваскрипт, открыв вкладку Script и нажав кнопочку с паузой. После этого ты можешь кнопочками выполнить код пошагово и увидеть, что происходит и чему равны переменные (очень удобно, кстати). Или же ты можешь перейти на вкладку профайлера — он разблокировался, когда я поставил скрипт на паузу.

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

Статья в помощь: http://habrahabr.ru/post/143767/
#326 #380621
>>380460

Открой fl.ru и поищи по слову ТЗ: https://www.fl.ru/search/?type=projects&search_string=%F2%E7&action=search

>>380502

Лучше бы ссылку на оглавление скинул.

Мне не нравится то, что там рекомендуется «method polymorphism», то есть когда методу можно передавать аргументы разных типов, это верный путь к бардаку.

Книга — cookbook (книга рецептов) то есть рассчитана не на изучение с нуля, а на тех, кто знает сам язык.

В первой главе используются плохие строковые функции (вроде substr) и обращение к строке как к массиву, которые не работают с utf-8. Книга рассчитана видимо на США, где может быть до сих пор используют ASCII, но для нас это точно неактуально. Нет смысла изучать эти дурные и неправильные примеры.

Сами примеры тоже сомнительные. Какой смысл пересказывать мануал по strpos? Чего только стоит это:

> 2.8 Taking Logarithms


> Problem


> You want to take the logarithm of a number.


> Solution. For logs using base e (natural log), use log()



Некоторые примеры поражают бесполезностью:

> 5.3 Exchanging Values Without Using Temporary Variables


Единственное, где это может понадобиться — на собеседовании.

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

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

В главе 14.2 неправильно закодировано тело POST-запроса, & amp ; там не нужен

Не используется gettext(), почему?

Оформление кода не соответствуют стандартам, сам код часто лапша на функциях или длинная портянка.

Главы про дату/время, XML, локализацию более-менее полезны. Глава про Software Engineering (отладка, юнит-тесты) хороша, но она крошечная и читатель скорее всего ее пропустит толком не разобравшись.

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

>>380516

C PHP либо HTML/CSS

>>380531

Проверку на hasClass можно сделать чуть оптимальнее: заменяем \\s на пробелы в className, дописываем пробелы с краев и после этого ищем обычным поиском ' ' + klass + ' ' (без регулярок). Именно так сделана проверка в jQuery: https://github.com/jquery/jquery/blob/master/src/attributes/classes.js#L148

> node.className = classes.replace(regexp, ' ').replace(regexp, ' ');


Зачем replace 2 раза? У тебя же флаг g стоит

При удалении класса, чтобы не копились пробелы в className, надо их удалять с краев с помощью функции trim (которую тебе тоже надо написать самому).

В addClass незачем возиться с массивом. Можно просто прибавить к className пробел (если оно не пустое) и имя класса.
#326 #380621
>>380460

Открой fl.ru и поищи по слову ТЗ: https://www.fl.ru/search/?type=projects&search_string=%F2%E7&action=search

>>380502

Лучше бы ссылку на оглавление скинул.

Мне не нравится то, что там рекомендуется «method polymorphism», то есть когда методу можно передавать аргументы разных типов, это верный путь к бардаку.

Книга — cookbook (книга рецептов) то есть рассчитана не на изучение с нуля, а на тех, кто знает сам язык.

В первой главе используются плохие строковые функции (вроде substr) и обращение к строке как к массиву, которые не работают с utf-8. Книга рассчитана видимо на США, где может быть до сих пор используют ASCII, но для нас это точно неактуально. Нет смысла изучать эти дурные и неправильные примеры.

Сами примеры тоже сомнительные. Какой смысл пересказывать мануал по strpos? Чего только стоит это:

> 2.8 Taking Logarithms


> Problem


> You want to take the logarithm of a number.


> Solution. For logs using base e (natural log), use log()



Некоторые примеры поражают бесполезностью:

> 5.3 Exchanging Values Without Using Temporary Variables


Единственное, где это может понадобиться — на собеседовании.

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

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

В главе 14.2 неправильно закодировано тело POST-запроса, & amp ; там не нужен

Не используется gettext(), почему?

Оформление кода не соответствуют стандартам, сам код часто лапша на функциях или длинная портянка.

Главы про дату/время, XML, локализацию более-менее полезны. Глава про Software Engineering (отладка, юнит-тесты) хороша, но она крошечная и читатель скорее всего ее пропустит толком не разобравшись.

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

>>380516

C PHP либо HTML/CSS

>>380531

Проверку на hasClass можно сделать чуть оптимальнее: заменяем \\s на пробелы в className, дописываем пробелы с краев и после этого ищем обычным поиском ' ' + klass + ' ' (без регулярок). Именно так сделана проверка в jQuery: https://github.com/jquery/jquery/blob/master/src/attributes/classes.js#L148

> node.className = classes.replace(regexp, ' ').replace(regexp, ' ');


Зачем replace 2 раза? У тебя же флаг g стоит

При удалении класса, чтобы не копились пробелы в className, надо их удалять с краев с помощью функции trim (которую тебе тоже надо написать самому).

В addClass незачем возиться с массивом. Можно просто прибавить к className пробел (если оно не пустое) и имя класса.
#327 #380623
>>380596

Вообще неплохо, вот замечания.

> body.insertAdjacentHTML


Копипаста из td. Надо от нее избавиться и генерировать программно.

> var table = body.firstChild;


Ненадежно. А что, если там в начале пробелы или другой элемент? Проще создавать table через createElement

Надпись в кнопке прыгает при наведении — ужасно.

В toggleClass лучше поставить вызовы addClass/removeClass

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

> <div


Есть тег button type="button". Может тебе список HTML-тегов стоит подучить?
#328 #380626
>>380600
У кого-то 10 секунд, а у меня минут 5 висит и не может развиснуть, в итоге приходится закрывать принудительно. Окно браузера недоступно.
#329 #380627
>>380598
Расскажи про observe. То есть запускается событие на Field и об этом Cell и Game должны знать?
#330 #380663
>>380626

У тебя Хром наверно. В ФФ завершается само через 10 секунд.

>>380627

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

В сапере это точно не нужно.

А вообще сама идея паттерна Наблюдатель простая, есть объекты которые генерируют события когда что-то происходит, и есть объекты которые на них подписываются. Обычно это в MVC используется.
#331 #380666
>>380663
И хром и мозила. У меня оба.
#332 #380671
>>380666

Значит можно через отладчк в Хроме поставить скрипт на паузу (отладчик надо открыть до запуска скриптов).
#333 #380718
http://ideone.com/ofvAIV
Почему на выводе пере variable1 куча пробелов?
#334 #380721
>>380718

> перед


Фикс.
#335 #380727
http://jsfiddle.net/9puhyrso/
Сапер мне надоел, хотя задача и погружает в жс с головой. Последний вопрос ОПу: нужно ли как-то убивать contextmenu? поделаю-ка я задачи на верстку пока
#337 #380840
>>380621
http://jsbin.com/qebovupucuke/3/edit - исправил.

>Зачем replace 2 раза? У тебя же флаг g стоит


Ну смотри, там в последней проверке(где много классов b), если убрать второй replace, то классы b не удаляться все(останется один). Там видимо получается так, что заменяем ' b ' на ' ',и продолжает искать со следующей позиции, а дальше 'b ', такая подстрока не подходит, и он ее пропускает. Вроде как-то так. Наверное можно как-то по проще, чем ставить второй replace.
#338 #380857
>>380623

>Копипаста из td. Надо от нее избавиться и генерировать программно.


http://jsbin.com/hafiwatasaxi/3/edit - попытался, но что-то не совсем получилось. Не могу сгенерировать таблицу, вроде все верно делал, но почему-то выдает только одну клетку.
#339 #380862
Смотри, ОП, вот так работает:
http://ideone.com/0A0Eh7
А так нет:
http://ideone.com/myB5ix
В чем дело, не пойму. Алсо, тупиковая ветвь, как например с крепостью тоже записывается в путь. А так же я сделал на будущее проверку на время, которая в первом скрипте по сути сейчас должна быть бесполезна, так как мы все равно возвращаем первый попавшийся результат, но как оказалось без неё скрипт работать не хочет и возвращает NULL.
#340 #380869
>>380857
Используй insertRow, insertCell вместо createElement.
#341 #380888
>>380718

Потому, что все, что идет вне маркеров <?php ... ?> выводится как есть, например:

2 + 2 равняется <?php echo 2 + 2; ?>, так-то!

выведет

2 + 2 равняется 4, так-то!

У тебя перед <?php идут пробелы, они и выводятся.

>>380727

> Сапер мне надоел,


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

По поводу архитектуры, мне кажется, надо часть кода перенести в Cell. Например, вместо того чтобы в Field проверять состояние флага, проще сделать метод Cell.prototype.toggleFlag. Это задача клетки — вывести флажок, а не поля. Поле просто хранит список клеток и раздает им команды.

И по моему определение победителя работает неверно: http://imgur.com/oPYzTeC

> нужно ли как-то убивать contextmenu?


Если ты предотвращаешь реакцию на нажатие правой кнопки в mousedown, то contextmenu не должно сработать.

> if (!('className' in node)) {


Зачем это?

> var regexp = new RegExp('\\s' + klass + '\\s');


Неправильно, так как удалит в строке 'klass' подстроку 'kla'

> Math.floor(Math.random() column)


Это надо вынести в отдельную переменную или функцию, а то слишком длинная строчка получается

> Sapper.prototype.createGameResult =


Это удобнее сделать по-другому. Не стоит городить порятнку из createElement/appendChild. Делаем шаблон вида

<div>{message}</div>....

В нем соответственно заменяем {message} на текст сообщения, после чего создаем див и вставляем с помощью innerHTML в него HTML-код, и добавляем див на страницу.

Хранить шаблон можно прямо в строке (плохо так как в JS строки нельзя переносить) или в HTML-коде в теге скрипт (хорошо), как описано тут: http://javascript.ru/unsorted/templating

> this.table.parentNode.insertBefore(this.createGameResult


Лучше сделать функцию this.showMessage('...')

> this.currentCell.startFlashing();


Это должно быть не в gameOver, а наверно в openCellEvent

> currentCell.setText(aroundMine);


Повторяется 2 раза, можно не повторяться

> (aroundCells.isMine) ? mineCount++ : 0;


Тут нужен if

> document.addEventListener('click', function(event) {


> if (event.target.id == 'button_reload') {


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

ОП
#341 #380888
>>380718

Потому, что все, что идет вне маркеров <?php ... ?> выводится как есть, например:

2 + 2 равняется <?php echo 2 + 2; ?>, так-то!

выведет

2 + 2 равняется 4, так-то!

У тебя перед <?php идут пробелы, они и выводятся.

>>380727

> Сапер мне надоел,


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

По поводу архитектуры, мне кажется, надо часть кода перенести в Cell. Например, вместо того чтобы в Field проверять состояние флага, проще сделать метод Cell.prototype.toggleFlag. Это задача клетки — вывести флажок, а не поля. Поле просто хранит список клеток и раздает им команды.

И по моему определение победителя работает неверно: http://imgur.com/oPYzTeC

> нужно ли как-то убивать contextmenu?


Если ты предотвращаешь реакцию на нажатие правой кнопки в mousedown, то contextmenu не должно сработать.

> if (!('className' in node)) {


Зачем это?

> var regexp = new RegExp('\\s' + klass + '\\s');


Неправильно, так как удалит в строке 'klass' подстроку 'kla'

> Math.floor(Math.random() column)


Это надо вынести в отдельную переменную или функцию, а то слишком длинная строчка получается

> Sapper.prototype.createGameResult =


Это удобнее сделать по-другому. Не стоит городить порятнку из createElement/appendChild. Делаем шаблон вида

<div>{message}</div>....

В нем соответственно заменяем {message} на текст сообщения, после чего создаем див и вставляем с помощью innerHTML в него HTML-код, и добавляем див на страницу.

Хранить шаблон можно прямо в строке (плохо так как в JS строки нельзя переносить) или в HTML-коде в теге скрипт (хорошо), как описано тут: http://javascript.ru/unsorted/templating

> this.table.parentNode.insertBefore(this.createGameResult


Лучше сделать функцию this.showMessage('...')

> this.currentCell.startFlashing();


Это должно быть не в gameOver, а наверно в openCellEvent

> currentCell.setText(aroundMine);


Повторяется 2 раза, можно не повторяться

> (aroundCells.isMine) ? mineCount++ : 0;


Тут нужен if

> document.addEventListener('click', function(event) {


> if (event.target.id == 'button_reload') {


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

ОП
#342 #380891
>>380888
Куда трипкод дел?
#343 #380893
>>380814

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

Вторая задача: в общем, верно, но куда потерялись паддинги и бордер у зеленого блока?
#344 #380894
>>380888
http://jsbin.com/dagoxeleburo/8/edit?js,output

Ну глянь у меня тоже тогда, пока ты здесь.
#345 #380895
>>380840

> классы не удалятся все(останется один).


Вообще верно, проблема есть, но 2 раза делать replace — не решение (так как класс может повторяться хоть 10 раз). Надо тогда либо переписать регулярку на использование assertions (по типу ( ? = ...)) либо вызвать replace в цикле, либо разложить список классов в массив и удалять элементы.

> trim


Это делается проще через одну регулярку и replace

> if ( ... + 1 )


Почему не проверка что меньше 0 ? По моему, это усложняет понимание кода
#346 #380897
>>380869
Во, теперь работает - http://jsbin.com/hafiwatasaxi/5/edit
#347 #380898
>>380869
Только так нечестно, такого даже на javascript.ru нету
#348 #380899
>>380857

> присутствует слово из спам листа


http://paste2.org/Kp4Vpe7C

>>380862

> , ОП, вот так работает:


тут тоже есть ошибка. Смотри:

foreach ($paths[$point] as $key => $val) {
....
$pathDone[] = $key;

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

То есть если у нас есть путь vas, teh и мы проверяем в цикле варианты kre, let, dvo то у тебя pathDone принимает значения:

vas, teh, kre
vas, teh, kre, let
vas, teh, kre, let, dvo

А должно быть

vas, teh, kre
vas, teh, let
vas, teh, dvo

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

> (!$paths){


> return $container;


А в чем смысл той проверки во втором варианте? Не понимаю. И что, если условие не сработает то ты возвращаешь null? Это правильно?

> В чем дело, не пойму


Сдампи $paths. И вообще, сделай чтобы программа выводила какие-то подробности о том, что она проверяет.
#348 #380899
>>380857

> присутствует слово из спам листа


http://paste2.org/Kp4Vpe7C

>>380862

> , ОП, вот так работает:


тут тоже есть ошибка. Смотри:

foreach ($paths[$point] as $key => $val) {
....
$pathDone[] = $key;

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

То есть если у нас есть путь vas, teh и мы проверяем в цикле варианты kre, let, dvo то у тебя pathDone принимает значения:

vas, teh, kre
vas, teh, kre, let
vas, teh, kre, let, dvo

А должно быть

vas, teh, kre
vas, teh, let
vas, teh, dvo

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

> (!$paths){


> return $container;


А в чем смысл той проверки во втором варианте? Не понимаю. И что, если условие не сработает то ты возвращаешь null? Это правильно?

> В чем дело, не пойму


Сдампи $paths. И вообще, сделай чтобы программа выводила какие-то подробности о том, что она проверяет.
#349 #380900
>>380899

>А в чем смысл той проверки во втором варианте? Не понимаю. И что, если условие не сработает то ты возвращаешь null? Это правильно


Ну смотри, мне же нужно, чтобы программа проверила все шаги, прежде чем вернуть окончательное значение. Для этого я и сделал проверку, остались ли непроверенные точки.
#350 #380901
>>380891

Боюсь вводить в непонятный интерфейс. алсо, как неудобно это всплывающее окно, закрывающее текст поста.

>>380894

> var newClasses = node.className.replace(new RegExp('(\\s+|^)' + klass + '(\\s+|$)', 'g'), ' ');


Мы тут обнаружили, что это не работает когда класс повторяется много раз подряд вроде a b b b b b с — заменяет не все классы.

> Field.prototype.openCell


Название не соответствует действию. Надо назвать setupClickListener или как-то так.

> dom.addEvent(this.table, 'contextmenu',


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

> this.cells[this.getCellIndex(target)].isOpened = true;


Не лезь внутрь другого класса, а вызывай метод.

> generateMines


Код ненадежный, так как нет никакой защиты от вечного цикла. Надо примерно так:

var mineCount = 0, i;
for (i = 0; i < 10 needMines && mineCount < needMines; i++) {
....
если удалось поставить мину то mineCount++;
}

Или же сделать массив свободных клеточек и выбирать место для мины из него.

> cellIndex < 0 || cellIndex > this.width - 1 || this.cells[cellIndex].isOpened || cellIndex === this.cells.indexof(cell) || !this.cells[this.getCellIndex(cellIndex)].isRigged


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

if (!this.cellExists(x, y)) {
continue;
}
var cell = this.getCellAt(x, y);
...

Клетки проще и удобнее хранить в 2-мерном массиве, чем мучаться с этими заморочными расчетами нужного индекса. Зачем?
#350 #380901
>>380891

Боюсь вводить в непонятный интерфейс. алсо, как неудобно это всплывающее окно, закрывающее текст поста.

>>380894

> var newClasses = node.className.replace(new RegExp('(\\s+|^)' + klass + '(\\s+|$)', 'g'), ' ');


Мы тут обнаружили, что это не работает когда класс повторяется много раз подряд вроде a b b b b b с — заменяет не все классы.

> Field.prototype.openCell


Название не соответствует действию. Надо назвать setupClickListener или как-то так.

> dom.addEvent(this.table, 'contextmenu',


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

> this.cells[this.getCellIndex(target)].isOpened = true;


Не лезь внутрь другого класса, а вызывай метод.

> generateMines


Код ненадежный, так как нет никакой защиты от вечного цикла. Надо примерно так:

var mineCount = 0, i;
for (i = 0; i < 10 needMines && mineCount < needMines; i++) {
....
если удалось поставить мину то mineCount++;
}

Или же сделать массив свободных клеточек и выбирать место для мины из него.

> cellIndex < 0 || cellIndex > this.width - 1 || this.cells[cellIndex].isOpened || cellIndex === this.cells.indexof(cell) || !this.cells[this.getCellIndex(cellIndex)].isRigged


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

if (!this.cellExists(x, y)) {
continue;
}
var cell = this.getCellAt(x, y);
...

Клетки проще и удобнее хранить в 2-мерном массиве, чем мучаться с этими заморочными расчетами нужного индекса. Зачем?
#352 #380903
>>380901

>Боюсь вводить в непонятный интерфейс


Хз, с куклой почти ничего не изменилось.
#353 #380904
>>380898

Это недостаток javascript.ru. Оно есть тут например: https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableElement

Но ты можешь использовать createElement + appendChild, это ничем не хуже.

>>380897

trim() можно упростить за счет регулярки и replace. Тем болеее что у тебя он только один пробел удаляет.

> replace('\\s', ' ')


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

По removeClass я в прошлый раз замечания написал, там тоже не совсем верно сделано

Вместо цикла по i лучше сделать 2 вложенных цикла по x и y

> var button = document.getElementsByTagName('button')[0];


Ненадежно, используй поиск по id

В event listener надо бы проверять что кликнули именно по td а не куда-то еще.
#354 #380906
Заметил интересную штуку: если открыть окно ответа и прокрутить страниу внихз и открывать большую форму ответа, то видно что данные какими-то костылями копируются из одной формы в другую. Вот это архитектура!

>>380900

А ты понимаешь, что внутри каждого вызова функции своя локальная копия массива $paths и unset удаляет только один элемент в этой локальной копии?
#355 #380909
>>380895
Исправил - http://jsbin.com/qebovupucuke/4/edit. Не знаю насчет trim, там какая-то странная и не совсем мне понятная регулярка получилась. Как по-другому - не знаю.
#356 #380910
>>380909

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


Не, неправильно. В новых браузерах с ES5 есть метод trim() у строк, а для старых , пишется он элементарно: http://stackoverflow.com/a/498978

> node.className.replace('\\s', ' ')


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

Дописал тест для не-пробелов: http://jsbin.com/johesetoyofe/1/edit?js,console
#357 #380911
ОП, может что-нибудь расскажешь о себе? ололо-деанон
#358 #380913
>>380911

Зачем? Как это поможет в изучении php? не вижу особого смысла.
#359 #380915
>>380913
Может это вдохновит новичков.
#360 #380920
>>380911
не работаю, учу пхп в пхп треде, пхп вся моя жызнь, без пхп и трипкода я лох.
#361 #380923
CSS 3 http://jsbin.com/voronobirifa/1/edit
>>380893

>но куда потерялись паддинги и бордер у зеленого блока?


А вот же padding: 0 10px;. Там что-то еще есть? У меня вообще проблема с определением элементов дизайна на глаз.
#362 #380924
Вот еще вопрос

> document.addEventListener('click', function(event) {


> if (event.target.id == 'button_reload') {


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


Я когда на локалочке пишу все event-ы у меня в функции window.onload т.е. связывание происходит когда загружается весь дом. Как мне повесть событие на кнопку если ее при window.onload? Я просто делегировал событие - это не правильно? Знаю что в жквери есть функция live для этого.
#363 #380925
>>380924

> пишу все event-ы у меня в функции window.onload


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

Чуть более правильно (но по прежнему не идеально) — вешать события на DomContentLoaded ( $(function () {....}) или $(document).ready(...) ). Оно срабатывает после полной загрузки html-файла страницы. Так делают во многих блогах, особенно западных (ну что с них возьмешь, на западе очень много непрофессионализма), на хабре, в учебниках и статьях.

Либо, что то же самое, делать это в блоке скрипт в самом конце страницы.

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

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

<button onclick="..." (плюньте в хипстеров которые говорят что это немодно, этот способ работает уже лет 20)

либо вешать обработчик перед вставкой в DOM:

button = createElement(...);
button.addEventListener('click', ...)

В твоем случае удобно вешать обработчик после вставки диалога в DOM.
#364 #380926
>>380924

>Я просто делегировал событие - это не правильно?


Ошибки тут нет, но это излишне, слушать клики со всей страницы ради единственной кнопочки. Логичнее обработчик на эту кнопку и повесить, разве нет?

>>380923

> Там что-то еще есть?


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

> Третье задание



> margin-right: 5px;


А почему 5, а не 10? Прочти-ка статью: http://css-live.ru/articles/zagadochnye-otstupy-mezhdu-inlajn-blokami.html

А так, верно.
#365 #380936
>>380899
Я не догоняю, как у меня может

>То есть если у нас есть путь vas, teh и мы проверяем в цикле варианты kre, let, dvo


Kre, let, dvo это соседние пути нашей точки? Если так, то
$pathDone не может принимать значения vas, teh, kre, let, dvo
как ты написал, он выберет одну соседнюю, и дальше уже пойдет вложенный цикл для это самой соседней точки, который в свою очередь запустит еще один, пока мы не достигнем конечной точки.
#366 #380941
>>380926
Но ведь в изначальном доме нет кнопки, как мне именно на нее повесить событие?
#367 #380949
Парни, я вам тут свой говнокод принес. Можете оценить?
http://rghost.ru/57630860 С гитом я пока не разобрался еще, а пора бы.
#368 #380953
Есть пользователь, который может создавать страницу на сайте. При создании страницы она добавляется в базу, но не активирована, при этом пользователь, который ее создал, может ее посещать, а другие пользователи — нет.

Вопрос в том, как вот эту часть лучше всего организовать, чтобы пользователь свою страницу мог посещать, а другие — нет? В голову приходит какая-то постная, слишком сложная хуйня, мне кажется, все можно сделать удобнее и эффективнее. Сначала подумал назначать модели страниц id пользователя (через один-ко-многим), который ее создал, и при посещении проверять сначала активацию, если неактивирована, то совпадение пользовательского id, но мне кажется, это абсолютно идиотский подход.
#369 #380957
>>380953
use cookie luke
#370 #380964
>>380957

А если куки сотрутся? Уточни, пожалуйста.
#371 #380977
>>380941
Пардон, проглядел пост >>380925
>либо вешать обработчик перед вставкой в DOM:

Не хотелось бы использовать addEventListener в своих классах. Может у меня MVC головного мозга, но стойкое желание убрать любые обращения во внешний мир суть action контроллеров из классов суть моделей так что я бы заюзал атрибуты.
#373 #380994
http://jsfiddle.net/fpt46guu/

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

this.openCell is not a function

В принципе, понятно почему так происходит, но мне просто необходимо запустить функцию openCell. Оп, подскажи. Может как по-другому можно?
#374 #380995
>>380994
Строка 145.
#375 #380996
>>380995
Можешь еще остальное глянуть, я немного поправил.
!test #376 #381016
Аноним #377 #381017
Test 2
#378 #381019
>>380936

> Kre, let, dvo это соседние пути нашей точки?


Да

> $pathDone не может принимать значения vas, teh, kre, let, dvo


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

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


Рано или поздно мы вернемся из всех вложенных вызовов функций, и сработает например это условие

> if ($time > $container['time']) {


> continue;


И мы продолжим выполнять цикл, добавляя еще одну точку в pathDone.

>>380949

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

Сейчас еще напишу. Замечаний много.
#379 #381022
>>380949

У тебя в коде серьезная уязвимость под названием SQL-инъекция:

> VALUES (now(), \''.$_POST["post_text"].'\');');


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

Чтобы уязвимости не было, нужно как минимум экранировать вставляемые данные, а лучше, использовать плейсхолдеры, как описано тут: http://habrahabr.ru/post/137664/

Сам код у тебя смешан в кучу. Ты смешиваешь логику на PHP (например получение данных из БД или вставку) и их представление в виде HTML в одном файле. Это недопустимо, так как получается каша. Не знаю, где такому учат, но это неправильно. Надо разделять код: в одном ты получаешь данные из базы, в другом ты их выводишь на страницу. Почитай: http://www.phpinfo.su/articles/practice/shablony_v_php.html

Я вижу, у тебя используется шаблон, но зачем ты тогда html код пишешь в index.php? Его там быть не должно.

mysql_ функции давно устарели, да и сам процедурный подход. Используй PDO или хотя бы mysqli (лучше PDO).

> function DB


Так было принято объявлять конструктор в PHP4 10 лет назад. Не знаю, где ты откопал такой старый учебник, но сейчас классы в PHP другие (конструктор пишется как public function _ _ construct). Я советую прочитать весь раздел по ООП, чтобы изучить новые особенности PHP: http://php.net/manual/ru/language.oop5.php

> </br>


У br нет закрывающего тега. Правильно просто <br>

> <DOCTYPE html>


Непраивльно пишешь доктайп, изучай http://htmlbook.ru/html/!doctype

> <input type="submit" />


Слеш в конце одиночных тегов пишут в XML и XHTML, а HTML его не пишут. История: http://softwaremaniacs.org/blog/2005/12/19/xhtml-you-say/

В общем, пока на двоечку с плюсом. Исправляйся.

У нас кстати есть задачка посложнее, для тех кто знает основы PHP, MySQL и хочет сделать сайт: https://gist.github.com/codedokode/9424217 — эта задачка поможет тебе освоить микрофреймворк Slim и изучить многие вещи, нужные для разработки сайтов с современным походом.
#379 #381022
>>380949

У тебя в коде серьезная уязвимость под названием SQL-инъекция:

> VALUES (now(), \''.$_POST["post_text"].'\');');


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

Чтобы уязвимости не было, нужно как минимум экранировать вставляемые данные, а лучше, использовать плейсхолдеры, как описано тут: http://habrahabr.ru/post/137664/

Сам код у тебя смешан в кучу. Ты смешиваешь логику на PHP (например получение данных из БД или вставку) и их представление в виде HTML в одном файле. Это недопустимо, так как получается каша. Не знаю, где такому учат, но это неправильно. Надо разделять код: в одном ты получаешь данные из базы, в другом ты их выводишь на страницу. Почитай: http://www.phpinfo.su/articles/practice/shablony_v_php.html

Я вижу, у тебя используется шаблон, но зачем ты тогда html код пишешь в index.php? Его там быть не должно.

mysql_ функции давно устарели, да и сам процедурный подход. Используй PDO или хотя бы mysqli (лучше PDO).

> function DB


Так было принято объявлять конструктор в PHP4 10 лет назад. Не знаю, где ты откопал такой старый учебник, но сейчас классы в PHP другие (конструктор пишется как public function _ _ construct). Я советую прочитать весь раздел по ООП, чтобы изучить новые особенности PHP: http://php.net/manual/ru/language.oop5.php

> </br>


У br нет закрывающего тега. Правильно просто <br>

> <DOCTYPE html>


Непраивльно пишешь доктайп, изучай http://htmlbook.ru/html/!doctype

> <input type="submit" />


Слеш в конце одиночных тегов пишут в XML и XHTML, а HTML его не пишут. История: http://softwaremaniacs.org/blog/2005/12/19/xhtml-you-say/

В общем, пока на двоечку с плюсом. Исправляйся.

У нас кстати есть задачка посложнее, для тех кто знает основы PHP, MySQL и хочет сделать сайт: https://gist.github.com/codedokode/9424217 — эта задачка поможет тебе освоить микрофреймворк Slim и изучить многие вещи, нужные для разработки сайтов с современным походом.
#380 #381023
>>380953

> Сначала подумал назначать модели страниц id пользователя (через один-ко-многим), который ее создал, и при посещении проверять сначала активацию, если неактивирована, то совпадение пользовательского id


Так и надо делать.

>>380957

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

>>380977

> Не хотелось бы использовать addEventListener в своих классах


Так я предлагаю использовать в той же функции где окошко и создается. Раз уж ты createElement и appendChild вовсю используешь, от addEventListener хуже не станет.

> но стойкое желание убрать любые обращения во внешний мир суть action контроллеров из классов суть моделей


Это правильная идея. Но appendChild, или просто обращение к window/document — это такое же обращение во внешний мир. И оно у тебя есть.
47 Кб, 556x371
#381 #381029
>>377570
Лол, этого ОП-а петушка еще не забанили?
Задачки вижу остались такими же быдлокодерскими. ОП-не исправим, лал.

>>379952

>Самостоятельное изучение тоже может быть плохо


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

>Мы быдлокод заставляем исправлять.


Быдлокод на быдлокод? Да ты шутник дохуя.

>Учитесь лучше в нашем треде.


А может новички сами решат, где им учится, а петушок? Не кукарекай там из под шконоря, пока не разрешат. Охуеть просто.
#382 #381030
Как сагать эту парашу?
>>381029

>учиться


fix()
#383 #381035
>>380979

Задание 4 — почти верно, только надо еще пиксель-два паддинга на спаны добавить, посмотри на картинку, там паддинг есть на цветных прямоугольниках. И шрифт крупнее сделай, как на картинке.

Задание 5 — не доделано же? Я только загловок вижу.

>>380994

Значение this не передается, как переменные в замыкании, во внутреннюю функцию. но можно скопировать this в обычную переменную. В твоем случае, можно сделать так:

Field.prototype.clickListener = function() {
var self = this;
dom.addEvent(this.table, 'click', function(e) {
....
self.openCell(...);

Другой вариант — использовать привязку функции к значению this:

function handler(e) { ... }
addEventListener(...., handler.bind(this)); // в новых браузерах с ES5 у функций есть метод bind

Решал ли ты задачки которые идут перед задачами на DOM? Там есть одна задачка вроде бы на эту тему.

> Можешь еще остальное глянуть


Не работает же вроде, на клики не реагирует.

> if (cell.hasMine) {


HasMine — это же метод, без скобок он всегда будет срабатывать

> markCell


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

> if (target.tagName == 'TD' && target.innerHTML === '' && e.button == 2) {


> target.innerHTML = '&#9873;';


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

contextmenu предотвращать не надо, и так должно работать.

Массив ячеек лучше сделать 2-мерным.

> .generateMines


Она не гарантирует что мин будет сколько требуется так как i считает только до this.mines

> getNumberAroundMines = function(cell) {


Надо передавать сюда не DOM ноду, а объект Cell

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

— Cell управляет данной ему ячейкой таблицы, в том числе выводом там разных значков и сменой классов. Знает, есть ли в ячейке мина или флажок.
— Field хранит коллекцию Cell, слушает события, вызывает их методы при приходе события. Не пытается сам менять что-то в ячейке, а вызывает для этого метогды Cell.
#383 #381035
>>380979

Задание 4 — почти верно, только надо еще пиксель-два паддинга на спаны добавить, посмотри на картинку, там паддинг есть на цветных прямоугольниках. И шрифт крупнее сделай, как на картинке.

Задание 5 — не доделано же? Я только загловок вижу.

>>380994

Значение this не передается, как переменные в замыкании, во внутреннюю функцию. но можно скопировать this в обычную переменную. В твоем случае, можно сделать так:

Field.prototype.clickListener = function() {
var self = this;
dom.addEvent(this.table, 'click', function(e) {
....
self.openCell(...);

Другой вариант — использовать привязку функции к значению this:

function handler(e) { ... }
addEventListener(...., handler.bind(this)); // в новых браузерах с ES5 у функций есть метод bind

Решал ли ты задачки которые идут перед задачами на DOM? Там есть одна задачка вроде бы на эту тему.

> Можешь еще остальное глянуть


Не работает же вроде, на клики не реагирует.

> if (cell.hasMine) {


HasMine — это же метод, без скобок он всегда будет срабатывать

> markCell


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

> if (target.tagName == 'TD' && target.innerHTML === '' && e.button == 2) {


> target.innerHTML = '&#9873;';


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

contextmenu предотвращать не надо, и так должно работать.

Массив ячеек лучше сделать 2-мерным.

> .generateMines


Она не гарантирует что мин будет сколько требуется так как i считает только до this.mines

> getNumberAroundMines = function(cell) {


Надо передавать сюда не DOM ноду, а объект Cell

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

— Cell управляет данной ему ячейкой таблицы, в том числе выводом там разных значков и сменой классов. Знает, есть ли в ячейке мина или флажок.
— Field хранит коллекцию Cell, слушает события, вызывает их методы при приходе события. Не пытается сам менять что-то в ячейке, а вызывает для этого метогды Cell.
#384 #381052
>>381035

>Задание 5 — не доделано же? Я только загловок вижу.


jsBin что ты делаешь, прекрати. Не любил же я этот сайт, вот теперь придется все делать заново хорошо там делать особо нечего
#386 #381057
Вкатываюсь.
Учил джаву три месяца - бросил, т.к. унылое говно, которое вообще неясно, где применяется. Хочется чего-то более жизненного.
У ОПа прошу какое-нибудь задание, чтобы не совсем для нуба в кодинге, но для нуба в пхп.
#387 #381090
>>381035
http://jsbin.com/dagoxeleburo/31/

По правому клику:

document.getElementById(...).rows is not a function строка 74

Хотя table раньше добавляется в документ, чем запускается функция toggleFlag. Это даже визуально видно.

По левому клику: везде цифра 4. Код проверочный на 233 строке вообще игнорируется.
#388 #381099
>>381057
Джаву можно применять там же, где и php. Бери какой-нибудь play или spring mvc, если нужен веб.
#389 #381110
>>381053

Вместо h3 логичнее использовать h1

Шрифт заголовка должен быть крупнее и другой (Trebuchet MS).

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

Текст не должен загибаться под меню.

>>381057

Так как мы не знаем твой уровень знания PHP, то давай начнем с первого задания из этого урока: http://archive-ipq-co.narod.ru/l1/regexp.html

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



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

Правильные: array('84951234567', '+74951234567', '8-495-1-234-567', ' 8 (8122) 56-56-56', '8-911-1234567', '8 (911) 12 345 67', '8-911 12 345 67', '8 (911) - 123 - 45 - 67', '+ 7 999 123 4567', '8 ( 999 ) 1234567', '8 999 123 4567');

Неправильные: array('02', '84951234567 позвать люсю', '849512345', '849512345678',
'8 (409) 123-123-123', '7900123467', '5005005001', '8888-8888-88',
'84951a234567', '8495123456a',
'+1 234 5678901', // неверный код страны
'+8 234 5678901', // либо 8 либо +7
'7 234 5678901' // нет +
);

Если ты хорошо знаешь PHP, то ты эту и другие простые задачки за 5 минут решишь.

У нас есть задачки типа «сделать сайт-файлообменник на фреймворке», но чтобы к ним перейти, надо сначала как следует изучить сам PHP и ООП, и познакомиться с основами HTML.

Если что-то непонятно или есть каике-то вопросы, задавай. Зашел в тупик? Покажи код и напиши что непонятно.
#389 #381110
>>381053

Вместо h3 логичнее использовать h1

Шрифт заголовка должен быть крупнее и другой (Trebuchet MS).

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

Текст не должен загибаться под меню.

>>381057

Так как мы не знаем твой уровень знания PHP, то давай начнем с первого задания из этого урока: http://archive-ipq-co.narod.ru/l1/regexp.html

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



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

Правильные: array('84951234567', '+74951234567', '8-495-1-234-567', ' 8 (8122) 56-56-56', '8-911-1234567', '8 (911) 12 345 67', '8-911 12 345 67', '8 (911) - 123 - 45 - 67', '+ 7 999 123 4567', '8 ( 999 ) 1234567', '8 999 123 4567');

Неправильные: array('02', '84951234567 позвать люсю', '849512345', '849512345678',
'8 (409) 123-123-123', '7900123467', '5005005001', '8888-8888-88',
'84951a234567', '8495123456a',
'+1 234 5678901', // неверный код страны
'+8 234 5678901', // либо 8 либо +7
'7 234 5678901' // нет +
);

Если ты хорошо знаешь PHP, то ты эту и другие простые задачки за 5 минут решишь.

У нас есть задачки типа «сделать сайт-файлообменник на фреймворке», но чтобы к ним перейти, надо сначала как следует изучить сам PHP и ООП, и познакомиться с основами HTML.

Если что-то непонятно или есть каике-то вопросы, задавай. Зашел в тупик? Покажи код и напиши что непонятно.
#390 #381114
>>381090

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

Чтобы приступить к отладке, открой Ctrl + Shift + I, там вкладку Sources, выбери файл с твоим кодом (можно поиском через Ctrl + P, можно в панели слева), и поставь точку останова в начале интересующей функции, например openCell (чтобы поставить точку останова, найди нужную строчку и щелкни по цифре с номером строки).

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

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

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

Лучше, как я сказал, использовать Хром, в фаерфоксе нужно устанавливать firebug, встроенный отладчик там слабенький.
#391 #381131
Подскажите почему не работает данный код.
<?php
$ch = curl_init("https://2ch.hk/index.html");

curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1" );
curl_setopt($ch, CURLOPT_HEADER, true);

curl_exec($ch);
curl_close($ch);

При указании своей страницы на бесплатном хосте по http все возвращает, и заголовок и страницу. В этом же случае вообще тишина, даже заголовка с ошибкой нет.
#392 #381133
Аноны, привет. Поздно ли учить PHP в 26? За плечами вышка по математике и 4 года работы аналитиком. Серьезно ничего не писал. Более или менее знаю только C#. Остальное только на уровне hello world. Хочу бросить все и пойти джуниором в веб-девелопмент.
#393 #381134
>>381131
https? Куки разрешены и сохраняются?
#394 #381135
>>381114
Оп, ну пошагово могу пройти. Но все равно не могу разобраться, где есть что.

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

Метка на toggleFlag тоже ничего не меняет.
#395 #381136
>>381131

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

>>381133

Не поздно
64 Кб, 1366x768
#396 #381147
>>381134
А подробнее? Я тут только что начал курл ковырять, пока глаза разбегаются от количества опций.
>>381136
Какие логи? ssl вроде стоит, пикретейлед результат phpinfo().
#397 #381148
>>381147
Да и с куками только в теории знаком. На практике еще ни разу с ними не работал. Я думал что они используются для хранения информации о юзере у него в браузере, что бы при повторном посещении его опознать. Как они на получение страницы через curl влияют?
#398 #381150
Есть у кого-нибудь решение задачи на поиск пути? Мне она не по силам.
#399 #381158
>>381148
У 2ch клаудфайр проверяет наличие куки "_cf" или что-то типа того. Я только с libcurl на с++ дело имел, там такая вот функция есть.
curl_easy_setopt( m_pCurlHandle, CURLOPT_COOKIEFILE, "" );
И еще есть возможность задать буфер ошибки.
curl_easy_setopt( m_pCurlHandle,CURLOPT_ERRORBUFFER,m_pErrorBuffer);
#400 #381178
Ананчики, задачку про новый айпад в кредит делаю.
Программа считает переплату.

<?php

function creditCalculate($credit_sum, $precent, $peni, $months) {
$sum = ($credit_sum $precent) + ($peni $months);
$over = $sum - $credit_sum;
return $over;
}

$bank1 = creditCalculate(39999, 1.04, 500, 12);
$bank2 = creditCalculate(39999, 1.03, 1000, 12);
$bank3 = creditCalculate(39999, 1.02, 0, 12);

echo "В банке HomoBank переплата составит: {$bank1}<br>";
echo "В банке Saberbank переплата составит: {$bank2}<br>";
echo "В банке Motherfaka переплата составит: {$bank3}<br>";

?>

Какие замечания?
85 Кб, 1092x591
#401 #381179
>>381178
Абу, зачем сломал вакабу?
Пикрилейтед, в общем.
57 Кб, 1185x648
#402 #381197
>>381110
Я не тот анон, но задачку с номерами сделал. И, как мне кажется, довольно компактно. Пикрилейтед.

Правильные: 84951234567, 8(495)1234567, 8-495-123-45-67, 8(495)123-45-67.
Остальные - неправильные.

381179-анон
72 Кб, 1305x736
#403 #381209
Дополнив эту задачку, сделал ту, в которой просится вывести номер без скобок, тире, пробелов итд.
Теперь программа проверяет формат номера, допущенные выводит на экран в формате 84951234567, в остальных случаях - вывод сообщения и exit.
#404 #381212
>>381135

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

(тут ставить не надо) function lalala()
{
(ставить надо тут) var x = 1;
.....
}
#405 #381217
>>381147

Логи сервера. Если ты запускаешь на хостинге, то логи либо лежат где-нибудь в папочке logs, либо доступны в панели управления. Найди там «лог ошибок» или error.log и посмотри текст ошибки.

Или в скрипте включи отобажаение ошибок например через ini_set.

Я не могу тебе помочь если ты не можешь нормально написать в чем именно ошибка и что выводится.
#406 #381219
>>381150

Начни отсюда

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

Алсо, запости код, и напиши в каком именно месте застрял.

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

>>381158

В PHP вроде чтобы получить ошибку есть функция curl_error.

>>381197

Проверь еще по большому списку:

Правильные: array('84951234567', '+74951234567', '8-495-1-234-567', ' 8 (8122) 56-56-56', '8-911-1234567', '8 (911) 12 345 67', '8-911 12 345 67', '8 (911) - 123 - 45 - 67', '+ 7 999 123 4567', '8 ( 999 ) 1234567', '8 999 123 4567');

Неправильные: array('02', '84951234567 позвать люсю', '849512345', '849512345678',
'8 (409) 123-123-123', '7900123467', '5005005001', '8888-8888-88',
'84951a234567', '8495123456a',
'+1 234 5678901', // неверный код страны
'+8 234 5678901', // либо 8 либо +7
'7 234 5678901' // нет +
);
#406 #381219
>>381150

Начни отсюда

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

Алсо, запости код, и напиши в каком именно месте застрял.

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

>>381158

В PHP вроде чтобы получить ошибку есть функция curl_error.

>>381197

Проверь еще по большому списку:

Правильные: array('84951234567', '+74951234567', '8-495-1-234-567', ' 8 (8122) 56-56-56', '8-911-1234567', '8 (911) 12 345 67', '8-911 12 345 67', '8 (911) - 123 - 45 - 67', '+ 7 999 123 4567', '8 ( 999 ) 1234567', '8 999 123 4567');

Неправильные: array('02', '84951234567 позвать люсю', '849512345', '849512345678',
'8 (409) 123-123-123', '7900123467', '5005005001', '8888-8888-88',
'84951a234567', '8495123456a',
'+1 234 5678901', // неверный код страны
'+8 234 5678901', // либо 8 либо +7
'7 234 5678901' // нет +
);
#408 #381224
>>381135

http://jsbin.com/dagoxeleburo/37/edit?js,output

Разобрался. В ФФ удобнее даже. Но проблема с рекурсией в openCell.
22 Кб, 282x470
#409 #381232
11 строка - фейл. Что не так, аноны? Только начал изучать .
#410 #381243
>>381232
Пиздец я еблан, нашел фейл.
#411 #381244
>>381232

Точку с запятой забыл после echo
#412 #381246
>>381223

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

Код лучше заливать на ideone.com — там будет сразу виден и результат выполнения.

Твоя регулярка пропустит номер вида

7+4951234567

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

8 1234 1234567

В котором слишком много цифр.

[8]{1} можно записать просто как 8
#413 #381249
>>381179

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

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

>>381209

Написал замечания и советы выше. 8{1} то же самое что просто 8.
#414 #381251
>>381147

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

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

- ошибки сохраняются в лог ошибок. Можно открыть его и почитать. Если ты запускаешь код на локалхосте, у себя, то лог хранится в папке Апача (обычно она называется logs) и имеет название вроде error.log . Если на хостинге — там либо есть файл error.log либо раздел в панели управления, где лог можно посмотреть

- также, ты можешь включить отображение ошибок. Открой файл php.ini, поставь там display_errors = On и error_reporting = E_ALL и перезапусти сервер. Теперь ошибки должны выводиться на экран.

>>381223

Там еще надо, когда номер выводишь, заменять +7 на 8 — у тебя этого вроде нет.

Также, удалять лишние символы наверно проще отдельной регуляркой.
#415 #381252
>>381219
Я читал эту статью, там ведь алгоритмы для поиска для клеток у которых расстояния одинаковые до соседних точек и можно рассчитать сразу примерно сколько займет путь до конца (эвристическая оценка вроде).
#416 #381256
>>381224

А отладчик не помогает найти причину рекурсии?

> if (!this.cellExist(k, j)) {


> aroundCells.push(this.cells[rowIndex][cellIndex]);


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

> if (rowIndex === undefined) {


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

> cellExist


Функция недописана, не проверяет что x меньше нуля, не проверяет y.

> generateMines


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

> dom.addEvent(this.getTable(), 'contextmenu',


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

> && target.innerHTML === ''


Это ужасный код. Стоит добавить хотя бы пробел и весь твой код перестанет работать. Так писать нельзя. И вообще, это какие-то уостыли. У тебя есть замечательный объект Cell, а ты ковыряешься в HTML-коде. Зачем?

> cell.toggleFlag(self.getTable());


Зачем туда передавать таблицу? Если и передавать, то передавай в конструкторе.

> e.button == 2


Это очень не кроссбраузерно так как в старом ИЕ и в W3C браузерах кнопки пронумерованы по-разному.

> var cell = this.cells[y][x];


> this.cell.mineCell(this.getTable());


Ошибка на ошибке

> document.body.getElementById('field').rows(this.y).cells(this.x).innerHTML


надо либо в конструктор передавать этот td, либо находить с помощью метода, не не писать такую длинную колбасу.

Еще, смотри, там есть сообщение внизу:

> : 'l' used out of scope.


Ты используешь переменную l снаружи блока, в котором она объявлена. Это либо ошибка либо кривой код (который недопустим в качестве решения).
#416 #381256
>>381224

А отладчик не помогает найти причину рекурсии?

> if (!this.cellExist(k, j)) {


> aroundCells.push(this.cells[rowIndex][cellIndex]);


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

> if (rowIndex === undefined) {


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

> cellExist


Функция недописана, не проверяет что x меньше нуля, не проверяет y.

> generateMines


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

> dom.addEvent(this.getTable(), 'contextmenu',


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

> && target.innerHTML === ''


Это ужасный код. Стоит добавить хотя бы пробел и весь твой код перестанет работать. Так писать нельзя. И вообще, это какие-то уостыли. У тебя есть замечательный объект Cell, а ты ковыряешься в HTML-коде. Зачем?

> cell.toggleFlag(self.getTable());


Зачем туда передавать таблицу? Если и передавать, то передавай в конструкторе.

> e.button == 2


Это очень не кроссбраузерно так как в старом ИЕ и в W3C браузерах кнопки пронумерованы по-разному.

> var cell = this.cells[y][x];


> this.cell.mineCell(this.getTable());


Ошибка на ошибке

> document.body.getElementById('field').rows(this.y).cells(this.x).innerHTML


надо либо в конструктор передавать этот td, либо находить с помощью метода, не не писать такую длинную колбасу.

Еще, смотри, там есть сообщение внизу:

> : 'l' used out of scope.


Ты используешь переменную l снаружи блока, в котором она объявлена. Это либо ошибка либо кривой код (который недопустим в качестве решения).
#417 #381257
>>381252

Есть разные алгоритмы. Алгоритм Дейкстры не использует никакой эвристики, и просто проверяет все варианты. Он простой.

А так, да, есть A-star который проверяет сначала те узлы, которые ближе к цели. Его можно было бы исплоьзовать, если бы у нас были координаты точек — по координатам можно прикинуть, какая из точек ближе к цели — но у нас их нет (ну или ты должен их сам проставить).
125 Кб, 1102x967
#418 #381260
Выучил верстку, к работе понадобилось выучить серверный язык.
Смотрю между руби, пхп и нод.жс.
Сейчас задам глупый вопрос, можно ли учить сразу фреймворк ларавель, без знаний нативного пхп? (такое прокатывает в жс например, знаешь джиквери, и доволен). Базовые знания пхп есть конечно, не полный дуб. В общем, очень нужен ваш совет, спасибо.
#419 #381263
>>381260
Блог с разметкой, пагнацией, комментариями и категориями (а лучше тегами) сделать сможешь?
#420 #381264
>>381263
Нет, этого не учил, все мои знания - это js. Массивы, переменные, функции, объекты и тд. Но ничего практического на пхп я не писал.
#421 #381268
>>377570
Решил обмазатся фреймворками, скачал видио уроки по Zend2
В связи с этим у меня возникла пару вопросов. Зачем, Господи зачем ты придумал это говно? НЗачемахуя мне нужен этот адовы пиздец? Архитектура говно, куча лишнего кода, который ужасно тормозит простой пример 'Hello wold!'. Каждый фреймвок как будто отделенный язык. Ладно бы если был только один фреймворк. Но их просто дохуища. И в каждой гавно конторе требуют знать если не несколько то хотя бы тот на котором они пишут.
#422 #381269
>>381268
>>381260
Начинай учить питон + jango а то будет как со мной
#423 #381283
>>381022
Отлично, спасибо! Много нового узнал.

Но тут у меня беда с функцией array_merge. Суть в том что в я получаю результат как-будто единственного её выполнения, но ведь она выполняется в цикле. МОжет быть она перезаписывает результат?
http://pastebin.com/C38NQsmV
#425 #381286
>>381285
И да, ОП, объясни, пожалуйста, регулярку - /^\s+|\s+$/g.
#426 #381307
>>381283
потому что ты внутри while {
обнуляешь каждый раз posts=[];
#427 #381363
>>381260

Нельзя, по моему

> такое прокатывает в жс например, знаешь джиквери, и доволен


Неправда, не прокатывает. Получается копипастер, который только умеет копипастить код из интернета, а не программист.
#428 #381366
>>381268

> Архитектура говно, куча лишнего кода,


Сомневаюсь. Что значит «куча лишнего кода», тебе его приходится писать самому или он уже написан и тихо-мирно лежит на диске? По моему, это большая разница.

> Каждый фреймвок как будто отделенный язык


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

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

Установи (если у тебя его нет) оп-кешер вроде Xcache или Eaccelerator (есть еще кешер в APC но я наблюдал с ним разные баги).

Отключи всякие отладочные панели и прочие лишние вещи.

Смотри например тут еще есть какие-то советы: http://hounddog.github.io/blog/performance-in-zend-framework-2/

Вот еще: http://www.masterzendframework.com/reviews/maximising-zend-framework-2-performance-phpuk14 — там в частности расширение советуется для склейки файлов.

Ты бы хоть разобраться попытался, в чем дело.

Если есть еще какие-то вопросы, задавай. Я правда с самими ZF2 не работал, но работал с ZF1 и умею гуглить.
#429 #381369
>>381286

А какая часть регулярки тебе понятна, а какая — нет?
#430 #381370
>>381268

Алсо, кроме видеоуроков надо бы читать документацию. Тебе же там не расскажут подробности про тот или иной компонент.
#431 #381375
>>381369
Ну смотри, как я понимаю. Ищем любые непробельные символы или ищем только пробельные символы? Как-то глупо получается. Видимо, | - это не "или".
#432 #381385
>>380390
Пока только сделал makeAdditive и makeSelection. Дальше пока не стал, а то как обычно ошибок понаделаю. Я решил делать свойство list с заказом у объекта order1. И свойство additive, но наверное его лучше в общий заказ запихнуть?
#433 #381386
#434 #381389
>>381375

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

^ значит что искать в начале строки
$ что в конце

Получается ищем один или больше пробельных символов в начале или конце строки.
#435 #381393
>>381219

>В PHP вроде чтобы получить ошибку есть функция curl_error.


Благодарю, помогло. Выдало SSL certificate problem: unable to get local issuer certificate
тут нашел ответ http://stackoverflow.com/questions/17478283/paypal-access-ssl-certificate-unable-to-get-local-issuer-certificate
Но правда не идеальный. Скачал я файл с сертификатами, кинул в папку с php, добавил параметр в ини. И начало выдавать ошибку http://chrisschuld.com/2008/07/how-to-fix-the-curl-error-error-setting-certificate-verify-locations/.
В качестве фикса указано изменение прав доступа к папке с файлом сертификатов, но я же под windows 7, какой тут chmod.
Пришлось вырубить проверку сертификата. Не знаю насколько это хорошо или плохо.

<?php
$ch = curl_init("https://2ch.hk/index.html");

curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1" );
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

curl_exec($ch);
echo curl_error($ch);
curl_close($ch);
#436 #381422
Ребзя, где в фш можно узнать в каком месте используется тень у надписей, а где ее нету? Или только глазами?
#437 #381435
>>381370>>381366
Там уроки еще очень плохие. В комментария все ругают автора. Думаю может книжку почитать http://rutracker.org/forum/viewtopic.php?t=4158510 может получше пойдет. Zend выбрал первым фреймворком только из за того что у него международная сертификация. Но многие говорят/пишут что он довольно таки сложный по сравнению с другими.
#438 #381464
Господа, дошёл до ZEND FRAMEWORK 2 Требуют местные конторки. Суканахуйвротебал, как учить киньте годные мануальчики позязя?
#439 #381469
>>381435

Тогда лучше было выбрать симфони 2. ZF1 был популярнее Symfony 1, а во второй версии вышло наоборот — Symfony 2 популярнее. По ней есть также годные самочители например

http://symfony.in.ua/symfony2-jobeet-tutorial.html

http://symfony.in.ua/creating-blog-symfony2-symblog-tutorial.html
#440 #381470
>>381464

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

http://ru.wikibooks.org/wiki/Zend_framework_2

http://habrahabr.ru/post/192522/

http://zf2.com.ua/doc

http://www.google.ru/search?aq=f&sourceid=chrome&ie=UTF-8&q=askeet#newwindow=1&q=zf2+%D1%83%D1%87%D0%B5%D0%B1%D0%BD%D0%B8%D0%BA
#441 #381473
>>381470
Спасиб. Принципы ООП ещё на плюсах и джаве дрочил, тут немного отличаются, но не суть важно.
#442 #381517
Зачем echo "a {$b}";
, а не echo "a $b";
?
#443 #381522
Пытаюсь разобраться в алгоритме Дейкстры и его реализация еще больше выносит мне мозг. Накатал подобный код, но понятия не имею, что должна возвращать вложенная рекурсивная функция, как мне сохранить путь до всех точек в массиве.
http://ideone.com/yq7BPo
#444 #381523
>>381256
http://jsbin.com/dagoxeleburo/39/edit?js,output

> if (!this.cellExist(k, j)) {


> aroundCells.push(this.cells[rowIndex][cellIndex]);


Исправил.

> if (rowIndex === undefined) {


Оно тут не нужно получается.

> cellExist


Исправил.

> generateMines


Переделал.

> dom.addEvent(this.getTable(), 'contextmenu',


Ну тут я не знаю.

> && target.innerHTML === ''


Ну да, но разве он сейчас основная проблема?

> cell.toggleFlag(self.getTable());


Исправил.

> e.button == 2


Надо все варианты кнопок перебрать?

> var cell = this.cells[y][x];


> this.cell.mineCell(this.getTable());


Исправил.

> document.body.getElementById('field').rows(this.y).cells(this.x).innerHTML


Теперь с помощью конструктора.

> : 'l' used out of scope.


Не знаю как там по-другому.

Тяжело разбираться в коде, все как-то запутанно.
#444 #381523
>>381256
http://jsbin.com/dagoxeleburo/39/edit?js,output

> if (!this.cellExist(k, j)) {


> aroundCells.push(this.cells[rowIndex][cellIndex]);


Исправил.

> if (rowIndex === undefined) {


Оно тут не нужно получается.

> cellExist


Исправил.

> generateMines


Переделал.

> dom.addEvent(this.getTable(), 'contextmenu',


Ну тут я не знаю.

> && target.innerHTML === ''


Ну да, но разве он сейчас основная проблема?

> cell.toggleFlag(self.getTable());


Исправил.

> e.button == 2


Надо все варианты кнопок перебрать?

> var cell = this.cells[y][x];


> this.cell.mineCell(this.getTable());


Исправил.

> document.body.getElementById('field').rows(this.y).cells(this.x).innerHTML


Теперь с помощью конструктора.

> : 'l' used out of scope.


Не знаю как там по-другому.

Тяжело разбираться в коде, все как-то запутанно.
#446 #381528
Не кидайте камнями. Я кун 17 лвл, все задачки дались легко, после полторы недели изучения языка, смог написать сам гостевую книгу. Есть страх,что php умрет лет через 5-10 и я останусь с хуем в руке. Скажите php будет долго жить?
#447 #381534
>>381528
Кто знает. Учи принципы, тогда будет легче перескочить на другие языки.
#448 #381539
>>381528
Долго. Но через 10 лет ты уже может будешь знать все, как и ОП.
108 Кб, 662x454
#449 #381551
Php-кун, а ты рассказываешь про пакетные менеджеры для php или bower и grunt для js?
#450 #381552
Господа, помогите написать скрипт на php

передается адрес url
с этой станицы собираются все ссылки
ссылки делятся на 3 категории:
внутренние (ведущие на этот же домен),
внешние (ведущие на другой домен),
неиндексируемые (находящиеся внутри тегов noindex или имеющие аттрибут rel="nofollow").

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

Совсем застрял.
46 Кб, 660x606
#451 #381568
Айпад в кредит. Анон, что я делаю не так? :(
#452 #381577
>>381568
20 раз считаешь одно и то же.
#453 #381581
>>381577
Цикл не нужен вообще?
#454 #381588
>>381577
Без цикла тоже не работает. Помоги, анончик.
#455 #381589
>>381588
У тебя же одно и тоже считается, дело не в цикле. Если
сделать х=2+2, ты хоть 500 раз считай, результат всегда будет одинаковым.
#456 #381591
>>381589

> тоже считается, дело не в цикле. Если


>сделать х=2+2, ты хоть 500


return?
#457 #381603
тест
#458 #381604
>>381591
У тебя $alo никак не меняется, каждый цикл она считает одно и тоже. Более того, ты считаешь одно, а возвращаешь совсем другое. Зачем то возвращаешь $creditbalance которая даже не изменяется внутри функции и так и возвращается в том же виде, в каком была передана.
42 Кб, 683x485
#459 #381608
>>381604
Благодарю, пофиксил
#460 #381611
>>381551

У нас в PHP есть пакетный менеджер composer (репозиторий: https://packagist.org/ )

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

Про bower - не рассказываю, так как только слышал о нем, но сам не использовал. Он просто скачивает и распаковывает пакет в папку или что-то еще умеет?

Насчет grunt — читал немного про него, и у меня сложилось отрицательное впечателение, так как там вместо конфига (наподобие make файлов например) надо писать JS-код, причем как-то заморочно, с коллбеками, словарями и еще чем-то, я например по памяти не напишу его. Я подозреваю, что никто в нем и не разбирается, а просто копипастит код из интернета.

Сам я, когда была необходимость что-то делать перед деплоем js/css файлов, всегда писал bash-скрипты и просто вставлял их вызов в скрипт деплоя (тоже самописный). там обычно была не просто склейка, а например вставка каких-то сгенерированных на PHP справочных данных, вставка шаблонов из файлов в js-строки, и т.д.

Конечно, лучше бы использовать стандартное решение для склейки/минификации, но grunt, как я написал, с первого взгляда мне не понравился. Не понимаю, почему он популярен, тем более что каких-то навороченных возможностей (вроде инкрементальной сборки только изменившихся зависимостей, которая много лет есть в makefile) там нет, и все как-то костыльно. Ну может я просто не разобрался.
#461 #381621
>>381285

> вторая по DOM.


Замечания: http://paste2.org/GL4J9O5K

Так, более-менее норм.

>>381386

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

var hamburger = new Hamburger();
hamburger.makeSelection(размер, начинка);
hamburger.addAddditive(добавка);
hamburger.addAdditive(другая добавка);
var price = hamburger.getPrice();
....

Но ты опять решил пойти своим путем:

- сделал Заказ отдельным массивом сложной структуры (ладно бы ты сделал класс Заказ, но ты cделал безликий массив)

- вместо простого создания объекта и вызова его методов усложнил выбор заказа:

> order1.list = order1.makeSelection(Hamburger.SIZE_BIG, Hamburger.FILLING_SALAD);



Почему не просто

order1.makeSelection(Hamburger.SIZE_BIG, Hamburger.FILLING_SALAD) ?

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

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

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

Если что-то непонятно, или если есть вопросы, пиши.

> CheckFilling


В JS обычно функции начинают с первой маленькой буквы (с большой буквы пишут константы и функции-конструкторы, т.е. классы).
#461 #381621
>>381285

> вторая по DOM.


Замечания: http://paste2.org/GL4J9O5K

Так, более-менее норм.

>>381386

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

var hamburger = new Hamburger();
hamburger.makeSelection(размер, начинка);
hamburger.addAddditive(добавка);
hamburger.addAdditive(другая добавка);
var price = hamburger.getPrice();
....

Но ты опять решил пойти своим путем:

- сделал Заказ отдельным массивом сложной структуры (ладно бы ты сделал класс Заказ, но ты cделал безликий массив)

- вместо простого создания объекта и вызова его методов усложнил выбор заказа:

> order1.list = order1.makeSelection(Hamburger.SIZE_BIG, Hamburger.FILLING_SALAD);



Почему не просто

order1.makeSelection(Hamburger.SIZE_BIG, Hamburger.FILLING_SALAD) ?

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

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

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

Если что-то непонятно, или если есть вопросы, пиши.

> CheckFilling


В JS обычно функции начинают с первой маленькой буквы (с большой буквы пишут константы и функции-конструкторы, т.е. классы).
#462 #381624
>>381393

> Пришлось вырубить проверку сертификата. Не знаю насколько это хорошо или плохо.


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

>>381422

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

>>381517

{} используются когда надо отделить переменную от текcта:

{$weight}kg

Или чтобы вставить сложное выражение: http://php.net/manual/ru/language.types.string.php#language.types.string.parsing
#463 #381625
>>381522

Для Дейкстры не нужна рекурсия, посмотри всевдокод алгоритма: https://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%94%D0%B5%D0%B9%D0%BA%D1%81%D1%82%D1%80%D1%8B#.D0.90.D0.BB.D0.B3.D0.BE.D1.80.D0.B8.D1.82.D0.BC

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

> что должна возвращать вложенная рекурсивная функция


В случае Дейкстры — ничего

> как мне сохранить путь до всех точек в массиве.


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

Это можно обойти, если передавать переменную в функцию по ссылке: http://php.net/manual/ru/language.references.pass.php

Но этот трюк усложняет код (так как мы имеем в итоге кучу ссылок на один массив), потому я советую избегать его. Тем более для Дейкстры это не нужно.
#464 #381628
>>381523

Код не работает же, расчехляй отладчик.

> Тяжело разбираться в коде, все как-то запутанно.


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

> dom.removeClass


Эта функция не удалит класс, если он идет несколько раз подряд: a b b b b с . Надо либо удалять в цикле, либо разбивать на массив классов и проходиться по нему.

> this.isMine = true;


Опечатка

> Cell.prototype.hasMine = function() {


> if (this.isMined) {


Можно просто return this.isMined;

> if (cell.hasMine()) {


> this.cell.mineCell();


Тут нет ошибки? cell != this.cell

> if (!l) {


> var l = 0;


Эта проверка бессмысленна. Локальной переменной l ранее ничего в этой функции не присваивалось, потому она равна undefined, потому if срабатывает всегда. Значит его можно заменить на

var l = 0;

Более того, это можно перенести внутрь for

> this.openCell(aroundCells[l].getX(), aroundCells[l].getY(), l);


А тут есть защита от зацикливания? Алсо, ты передаешь 3 аргумента, а принимает функция только 2.

> break;


Тоже непонятно зачем

> Field.prototype.getTable


Лучше сохранять ссылку на table в свойстве объекта Field в момент создания таблицы.

> if (x > this.width - 1 || x < this.width - 1


Это равносильно if (x != this.width - 1)

> Надо все варианты кнопок перебрать?


Сделай пока отдельную функцию isRegionButton(e). В ней можно проверять так:

- если есть свойство e.which, определяем по нему (оно работает в новых браузерах и работает одинаково)
- если его нет, это скорее всего IE значит есть свойство button и можно определить по нему.

Вот статья (старая) на тему: http://unixpapa.com/js/mouse.html — раздел «Identifying buttons». — посмотри таблицу там. Видишь, что бывает когда стандарт появляется позже реализации. Такое же веселье в JS с клавиатурными событиями.
#464 #381628
>>381523

Код не работает же, расчехляй отладчик.

> Тяжело разбираться в коде, все как-то запутанно.


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

> dom.removeClass


Эта функция не удалит класс, если он идет несколько раз подряд: a b b b b с . Надо либо удалять в цикле, либо разбивать на массив классов и проходиться по нему.

> this.isMine = true;


Опечатка

> Cell.prototype.hasMine = function() {


> if (this.isMined) {


Можно просто return this.isMined;

> if (cell.hasMine()) {


> this.cell.mineCell();


Тут нет ошибки? cell != this.cell

> if (!l) {


> var l = 0;


Эта проверка бессмысленна. Локальной переменной l ранее ничего в этой функции не присваивалось, потому она равна undefined, потому if срабатывает всегда. Значит его можно заменить на

var l = 0;

Более того, это можно перенести внутрь for

> this.openCell(aroundCells[l].getX(), aroundCells[l].getY(), l);


А тут есть защита от зацикливания? Алсо, ты передаешь 3 аргумента, а принимает функция только 2.

> break;


Тоже непонятно зачем

> Field.prototype.getTable


Лучше сохранять ссылку на table в свойстве объекта Field в момент создания таблицы.

> if (x > this.width - 1 || x < this.width - 1


Это равносильно if (x != this.width - 1)

> Надо все варианты кнопок перебрать?


Сделай пока отдельную функцию isRegionButton(e). В ней можно проверять так:

- если есть свойство e.which, определяем по нему (оно работает в новых браузерах и работает одинаково)
- если его нет, это скорее всего IE значит есть свойство button и можно определить по нему.

Вот статья (старая) на тему: http://unixpapa.com/js/mouse.html — раздел «Identifying buttons». — посмотри таблицу там. Видишь, что бывает когда стандарт появляется позже реализации. Такое же веселье в JS с клавиатурными событиями.
#465 #381630
>>381528

Развивайся, у современных веб-фреймворков много общего, и перескочить на другой язык скорее всего будет не так сложно. Я лично 5 лет назад думал, что PHP будет заменен Руби, ан нет, не заменен.

>>381551

Кстати, видел наши задачки по JS для начинающих?

https://gist.github.com/codedokode/ce30e7a036f18f416ae0

>>381552

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

В этой задаче удобно использовать DOM и Xpath для поиска ссылок.

Алсо, это подозрительно напоминает тестовое задание, а оно должно проверять твои знания, а не мои.

>>381608

Во втором банке должно быть около 61270. У тебя слишком мало.

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

Алсо, функции надо начинать с глагола, например посчитатьКредит = calculateIphoneCredit()
#465 #381630
>>381528

Развивайся, у современных веб-фреймворков много общего, и перескочить на другой язык скорее всего будет не так сложно. Я лично 5 лет назад думал, что PHP будет заменен Руби, ан нет, не заменен.

>>381551

Кстати, видел наши задачки по JS для начинающих?

https://gist.github.com/codedokode/ce30e7a036f18f416ae0

>>381552

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

В этой задаче удобно использовать DOM и Xpath для поиска ссылок.

Алсо, это подозрительно напоминает тестовое задание, а оно должно проверять твои знания, а не мои.

>>381608

Во втором банке должно быть около 61270. У тебя слишком мало.

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

Алсо, функции надо начинать с глагола, например посчитатьКредит = calculateIphoneCredit()
#466 #381635
>>381624
Я пробовал в echo пихать две переменные в скобки, {$a - $b}, даже {($a - $b)] пробовал, а оно все равно не выводило разницу, только печатало значения и знак минуса между ними.
#467 #381641
>>381630
Наверное все не так, но что не так?

http://ideone.com/t3xHy8
#468 #381642
>>381635

Мануал почитай по ссылке http://php.net/manual/ru/language.types.string.php#language.types.string.parsing

>>381641

То, что ты парсишь HTML регулярками. Я же написал недвусмысленно: продемонстрировать знания DOM и Xpath ждут от тебя авторы задачи.
#469 #381643
>>381642
echo "{$a}-{$b}";
тоже не работает. Никак?
#470 #381659
>>381641

>язык:Java

#471 #381667
>>381621
Давай тогда я буду тебя поэтапно по коду спрашивать. Начнем с makeSelection. Ну вот ты говоришь, что заказ я делаю неправильно. Ну вот смотри, я сделал через объект его - http://jsbin.com/lubewuqa/7/edit. Если не так, то я даже тогда не знаю, как мне сделать этот заказ. Ты еще вот тут >>380390 говорил, что должен быть не один заказ, а три свойства. А в голову мне ничего такого не приходит. Или может внутри метода makeSelection что-то записывать в свойства самого объекта? Но я тогда не знаю как.
#472 #381668
>>381611
Спасибо за развернутый ответ.
Я практически чистый бэкендщик, решил для собственных нужд и ради интереса сделать проект в себе с относительно сложным фронтендом. И тут обнаружил, что оказывается есть пакетный менеджер и система сборки для фронтенда. Было интересно твоё мнение по поводу этих инструментов.
#473 #381686
>>381667

Надо так:

...makeSelection = function (size, filling) {
this.checkSize(size);
this.checkFilling(filling);
this.size = size;
this.filling = filling;
};

Ты наверно задачи на ООП из учебника PHP не решал.
#474 #381687
>>381643

Никак.
#475 #381711
Анончики, помогите. Какую бы я ide не ставил всегда ничерта не пашет и нужен какой-то интерпретатор.
Посоветуйте, пожалуйста, хороший ide для mac os который не сильно жрет батарею и оперативку и достаточно простой. И скажите где взять этот интерпретатор и какой именно.
На том сайте что посоветовал ОП писать невозможно - все переменные нужно вручную вводить.
PhphStorm годный? Как там интерпретатор настроить?
#476 #381722
>>381686
Что здесь будет this? Я просто когда пробую запускать просто пишу: order3.makeSelection(Hamburger.SIZE_BIG, Hamburger.FILLING_POTATO). И This - Это Hamburger, а ему не нужны новые свойства.
#477 #381723
>>381686
Я его в феврале закончил, с тех пор php не трогал
sage #478 #381729
>>381711
Сажи идиоту!
ОП, ты видишь, кого ты плодишь?
#479 #381730
Слушай, ОП, что надо знать для Сапера? Стоит дочитать до конца раздел о событиях Кантора? Или знаний на уровне второго задания хватит? Там принциапми ООП пользоваться надо?С ООП все очень плохо, я тот, который тебя мучает гамбургерами >>381667
#480 #381733
>>381729
Почему тебе так припекло?
#481 #381740
ОП, что-то я понять не могу, как в алгоритме Дейкстры без рекурсии проходить по соседним точкам?
Я могу лишь вычислить соседние циклом foreach($paths[$point] as $key=>$value)
можно конечно вложить в этот цикл еще один с $paths[$key], а в него такой же и так до победного, но это полный бред.
#482 #381744
ОП, посмотри(пока только десктоп) - https://github.com/infinitecats/infinitecats.github.io . Остались только элементы видео Посмотри, что у меня там с тенями, где стояла тень в фш, там и сделал. Трудно найти если тень маленькая. Кстати, правильно я шрифты подключаю, или надо через @font-face? И это, как там сделать перенос слов?(в блоке перед футером есть список и там слова переносятся с " - " на новую строку)
74 Кб, 810x432
13 Кб, 675x36
#483 #381751
Почему у меня не работает перенос на новую строку?
Еле разобрался в установке пхп на мак, но все-равно не работает в ide.
#484 #381752
>>381751
Используй <br>
16 Кб, 431x76
#485 #381753
>>381752
Спасибо, но почему /n не работает все-таки?
#486 #381754
>>381753
Не уверен точно, но попробую объяснить: твой браузер воспринимает только хтмл, в котором перенос строки это <br> , а \n это перенос для пыхапе, который имеет смысл только на всяких айдеонах или в командной строке.
#487 #381761
>>381628
http://jsbin.com/dagoxeleburo/50/edit?js,output

С рекурсией подскажи, ОП.
#488 #381776
>>381753

Открой в браузере исходный код страницы (Ctrl + U) b убедись что \n работает как надо.
#489 #381779
>>381711

PhpStorm годный, еще есть Sublime Text 3, но это просто редактор, а не IDE. Netbeans PHP еще должен работать, он вроде кроссплатформенный.

> и нужен какой-то интерпретатор.


Ява? Интерпретатор PHP? Ты бы писал конкретно что ему надо, я бы мог прокомментировать, а так я ничего сказать не могу.

> На том сайте что посоветовал ОП писать невозможно - все переменные нужно вручную вводить.


Пиши в редакторе, а в ideone копипасть. Ideone хорош тем, что на него можно ссылкой поделиться.

А так, ты можешь запускать код в консоли (в маках по моему PHP идет в комплекте, правда не самый новый, но если это 5.4 то вполне ок) — открой консоль (Terminal App), перейди в нужную директорию и выполни команду

php myprogram.php

И она выполнится. Заметь, для этого даже устанавливать ничего не надо.

>>381722

Не, ты все путаешь. Смотри, в нормальном ООП есть классы (в которых мы описываем методы и свойства), и есть созданные из этих классов объекты. Соответственно this в PHP указывает на текущий объект, на котором был вызван метод.

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

> Что здесь будет this?


this будет равно order3, очевидно. Подробнее:

http://javascript.ru/this
http://javascript.ru/tutorial/object/thiskeyword

> И This - Это Hamburger


Неверно.
#489 #381779
>>381711

PhpStorm годный, еще есть Sublime Text 3, но это просто редактор, а не IDE. Netbeans PHP еще должен работать, он вроде кроссплатформенный.

> и нужен какой-то интерпретатор.


Ява? Интерпретатор PHP? Ты бы писал конкретно что ему надо, я бы мог прокомментировать, а так я ничего сказать не могу.

> На том сайте что посоветовал ОП писать невозможно - все переменные нужно вручную вводить.


Пиши в редакторе, а в ideone копипасть. Ideone хорош тем, что на него можно ссылкой поделиться.

А так, ты можешь запускать код в консоли (в маках по моему PHP идет в комплекте, правда не самый новый, но если это 5.4 то вполне ок) — открой консоль (Terminal App), перейди в нужную директорию и выполни команду

php myprogram.php

И она выполнится. Заметь, для этого даже устанавливать ничего не надо.

>>381722

Не, ты все путаешь. Смотри, в нормальном ООП есть классы (в которых мы описываем методы и свойства), и есть созданные из этих классов объекты. Соответственно this в PHP указывает на текущий объект, на котором был вызван метод.

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

> Что здесь будет this?


this будет равно order3, очевидно. Подробнее:

http://javascript.ru/this
http://javascript.ru/tutorial/object/thiskeyword

> И This - Это Hamburger


Неверно.
#490 #381781
>>381729

Сам себя сагаешь?

>>381730

Да, ООП обязателен для решения этой задачи.

> Стоит дочитать до конца раздел о событиях Кантора?


Дочитай, он же небольшой вроде.

> Или знаний на уровне второго задания хватит?


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

> С ООП все очень плохо


Тогда задавай вопросы. Ты должен знать, как работают прототипы в JS, что такое конструктор, как добавлять свойства и методы, как создавать объекты, как наследовать «классы», как работает this.

>>381740

> как в алгоритме Дейкстры без рекурсии проходить по соседним точкам?


За счет циклов. Посмотри алгоритм в википедии — ты видишь там рекурсию?

> можно конечно вложить в этот цикл еще один


Не надо. Там просто есть цикл:

Пока (есть необойденные вершины) {
берем одну из них;
помечаем ее как обойденную;
обходим без рекурсии всех ее соседей и проставляем там числа;
}

Ты читал статью в википедии? Там готовый алгоритм написан, тебе над его с русского на PHP перевести всего лишь.
#490 #381781
>>381729

Сам себя сагаешь?

>>381730

Да, ООП обязателен для решения этой задачи.

> Стоит дочитать до конца раздел о событиях Кантора?


Дочитай, он же небольшой вроде.

> Или знаний на уровне второго задания хватит?


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

> С ООП все очень плохо


Тогда задавай вопросы. Ты должен знать, как работают прототипы в JS, что такое конструктор, как добавлять свойства и методы, как создавать объекты, как наследовать «классы», как работает this.

>>381740

> как в алгоритме Дейкстры без рекурсии проходить по соседним точкам?


За счет циклов. Посмотри алгоритм в википедии — ты видишь там рекурсию?

> можно конечно вложить в этот цикл еще один


Не надо. Там просто есть цикл:

Пока (есть необойденные вершины) {
берем одну из них;
помечаем ее как обойденную;
обходим без рекурсии всех ее соседей и проставляем там числа;
}

Ты читал статью в википедии? Там готовый алгоритм написан, тебе над его с русского на PHP перевести всего лишь.
#491 #381782
На каком уровне php разработчик должен знать и уметь в вёрстку и js?
#492 #381783
>>381751

Перенос работает — открой исходный код страницы, он там есть. Другой вопрос, что в языке HTML перенос строки в исходном коде игнорируется.

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

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

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

>>381761

Поставь в отладчике точку останова в начало функции openCell и посмотри почему оно не работает. Посмотри, что хранится в переменных, что возвращают разные функции (вроде getAroundCells).

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

Также, ты можешь поставить несколько console.log внутрь openCell, может будет понятнее что там происходит.
#493 #381785
>>381782

Зависит от компании. Я бы советовал разобраться хорошо, тогда ты будешь более ценен. В любом случае, уметь читать код и делать простые правки необходимо.
#494 #381813
>>381779
Спасибо, но я уже сам анальными муками разобрался что к чему и поставил php+mamp+phpStorm. В мак ос маверикс некроджобс решил анально ораничить php и возможность создания серверов (она тоде встроена). Пришлось долго пердолить терминал десятками команд - на винде в разы все легче.
#495 #381814
Почему сервер>>377570
Почему сервер мускул мне отказывает в доступе? пробовал root в пользователь и пароль и пустые оставлять пробелы. что не так?
$link=mysql_connect("localhost", "root", "root");
#496 #381815
>>381814
Что именно пишет?

Что выдает в консоле mysql -u root ?
#497 #381819
>>381815
ну что может писать ебать?
Warning: mysql_connect() [function.mysql-connect]: Access denied for user ' '@'localhost' (using password: YES) in Z:\home\localhost\www\testing_php.php on line 325
#498 #381821
>>381819
Кстати, у меня что-то подобное было. Погуглил: нужно было сменить пароль для рут юзера.
#499 #381822
>>381821
пароль йес говорит. я уже запарилс прост.
552 Кб, 1370x1153
#500 #381824
Эм. няши. тут такое дело...
http://export.yandex.ru/weather-ng/forecasts/29642.xml
на минусы нажимайте, чтоб теги свернуть, чтобы понять суть проблемы.
еоп. есть один парсер. погоды. грубу говоря, температуры. temperature.
вот сайт с предложением, как спарсить погоду.
http://habrahabr.ru/post/136149/
там парсится отсюда:
<fact></fact>
а надо, чтоб ещё парсил на будущее, из
<day date="2014-08-27">
</day><day date="2014-08-28">
<day date="2014-08-29">
а когда вставляешь на место fact , например
$temp=$xml->day date="2014-08-29"->temperature;, чтобы эту самую temperature; спарсить, то ничего, своершенно. таки.
памагице, любезные. или любой другой способ подскажите, как из xml-ки вытащить из разных дней temperature, и расфасовать по табличке с прогнозом погодки.
#501 #381826
>>381824
syntax error, unexpected T_STRING
забыл ошбку прикрепить.
#502 #381830
>>377570
Снес себе ваще весь мускул нахуй из пхп. Знаете, идитека нахуй со своим программированием.
#503 #381877
>>381822
Пароль yes это значит, что пароль требуется. Попробуй зайди под рутом через командную строку mysql.
13 Кб, 259x91
78 Кб, 634x533
#504 #381894
Почему в меня в задачке про стихи попадаются вот такие строки? Это особенности php или моя ошибка?
http://codepad.org/CqJLIbJ0
#505 #381900
>>381779
http://jsbin.com/lubewuqa/3/edit - код смотреть не надо(только makeSelection). смотри, это какой-то из моих неправильных вариантов. Ну тут я использую this в makeSelection и ты мне говорил, что я "преумножаю сущности". Я так понял, что это записывается в свойства класса Гамбургер. Я вроде бы знаю достаточно теории, но с задачей что-то не выходит. Но что-то вообще ничего не получается. Может у тебя есть какая-нибудь готовая ООП задача, чтобы я ее разобрал? Или кусочек метода из этой?
#506 #381908
ОП, а чего в js класс - это именно функция-конструктор вместе с ее prototype?(не пойму зачем нужен prototype?) Можно же сделать так:
function Animal() {};
Animal.run = ....;(без прототипа), а не так: Animal.prototype.run = ....;
var rabbit = new Animal();
rabbit.run....
#507 #381910
>>381908
Ты точно пробовал запускать этот код?
#508 #381921
>>381894

Включи отображение ошибок в PHP (поменять display_errors = On в php.ini) — увидишь еще и текст ошибки. У тебя ошибка в программе и отклбючен вывод сообщений об ошибках.

Смотри сам: http://codepad.org/F8m3AYtu

Там иногда слишком большое число выпадает в mt_rand, больше чем есть элементов в массиве.

>>381813

Кстати, тут в итернете пишут http://coolestguidesontheplanet.com/get-apache-mysql-php-phpmyadmin-working-osx-10-9-mavericks/ что в макоси даже Апач установлен, достаточно просто его запустить, правда, да, немного надо с консолькой и конфигами помучаться.

>>381814

Потому, что ты пароль неправильный написал.

>>381822

Это переводится: пароль был отправлен: ДА

Алсо обрати внимание: user ' '@'localhost' — ты пытаешься под пустым именем пользователя залогиниться

>>381824

>а когда вставляешь на место fact , например


>$temp=$xml->day date="2014-08-29"->temperature;, чтобы эту самую temperature; спарсить,



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

Иди почитай сначала документацию: http://php.net//manual/ru/book.simplexml.php — там все прекрасно объяснено.

Если в документации что-то непонятно, я могу пояснить.
#508 #381921
>>381894

Включи отображение ошибок в PHP (поменять display_errors = On в php.ini) — увидишь еще и текст ошибки. У тебя ошибка в программе и отклбючен вывод сообщений об ошибках.

Смотри сам: http://codepad.org/F8m3AYtu

Там иногда слишком большое число выпадает в mt_rand, больше чем есть элементов в массиве.

>>381813

Кстати, тут в итернете пишут http://coolestguidesontheplanet.com/get-apache-mysql-php-phpmyadmin-working-osx-10-9-mavericks/ что в макоси даже Апач установлен, достаточно просто его запустить, правда, да, немного надо с консолькой и конфигами помучаться.

>>381814

Потому, что ты пароль неправильный написал.

>>381822

Это переводится: пароль был отправлен: ДА

Алсо обрати внимание: user ' '@'localhost' — ты пытаешься под пустым именем пользователя залогиниться

>>381824

>а когда вставляешь на место fact , например


>$temp=$xml->day date="2014-08-29"->temperature;, чтобы эту самую temperature; спарсить,



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

Иди почитай сначала документацию: http://php.net//manual/ru/book.simplexml.php — там все прекрасно объяснено.

Если в документации что-то непонятно, я могу пояснить.
#509 #381923
>>381921

> Включи отображение ошибок в PHP (поменять display_errors = On в php.ini) — увидишь еще и текст ошибки. У тебя ошибка в программе и отклбючен вывод сообщений об ошибках.


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

> Там иногда слишком большое число выпадает в mt_rand, больше чем есть элементов в массиве.


Как это возможно если диапазон от нуля до размера массива?
Странно этот php работает.
#510 #381924
>>381910
>>381908
Да, работать наверное не будет, тогда так:
Это без прототипов:
function Animal() {
this.run = function() {...};
};
rabbit = new Animal();
rabbit.run();

С прототипами:
function Animal() {};
Animal.prototype.run = function() {...};
rabbit = new Animal();
rabbit.run();

Чем они отличаются?
#511 #381925
>>381877

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

>>381900

Давай я тебе лучше правильный код сразу напишу для этой функции:

Hamburger.prototype.makeSelection = function(size, filling) {

this.checkSize(size); // выбрасывает исключение если размер неправильный
this.checkFilling(filling);
this.size = size;
this.filling = filling;
};

Насчет простой задачки ... ну допустим есть Компания, в ней работают несколько Работников. У каждого работника есть стаж в годах, базовая зарплата (тугриков в час), и число отработанных часов в этом месяце. Стаж влияет на зарплату: за каждый год стажа зарплата становится на 5% выше базовой, то есть с 5 годами — на 25% выше.

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

Должны быть такие «классы»:

Компания, свойства: список сотрудников, методы: посчитатьОбщуюВыработку, посчитатьОбщуюЗарплату

Работник, свойства: стаж, базовая ставка, число часов. Методы: посчитатьЗарплату, посчитатьЧислоЧасов

Новые свойства и методы запрещется добавлять. Писать console.log внутри конструктора или методов тоже запрещается.
#511 #381925
>>381877

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

>>381900

Давай я тебе лучше правильный код сразу напишу для этой функции:

Hamburger.prototype.makeSelection = function(size, filling) {

this.checkSize(size); // выбрасывает исключение если размер неправильный
this.checkFilling(filling);
this.size = size;
this.filling = filling;
};

Насчет простой задачки ... ну допустим есть Компания, в ней работают несколько Работников. У каждого работника есть стаж в годах, базовая зарплата (тугриков в час), и число отработанных часов в этом месяце. Стаж влияет на зарплату: за каждый год стажа зарплата становится на 5% выше базовой, то есть с 5 годами — на 25% выше.

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

Должны быть такие «классы»:

Компания, свойства: список сотрудников, методы: посчитатьОбщуюВыработку, посчитатьОбщуюЗарплату

Работник, свойства: стаж, базовая ставка, число часов. Методы: посчитатьЗарплату, посчитатьЧислоЧасов

Новые свойства и методы запрещется добавлять. Писать console.log внутри конструктора или методов тоже запрещается.
#512 #381926
Нашел полегче себе задание на ООП - http://learn.javascript.ru/task/klass-chasy. Вот решение: http://jsbin.com/rarekoruwaji/1/edit. Но блин опять не получилось, с авторским не сходится.
Вот авторское - http://jsbin.com/hoxafibadula/1/edit.
Скажи, что тут значит запись var self = this;? И зачем она?
#513 #381927
>>381925
И если, например, сделать так:
var order = new Hamburger();
order.makeSelection(...);
То у order будут свойства size и filling?
#514 #381928
>>381900

А, еще у компании есть методы добавитьСотрудника(сотрудник) и уволитьСотрудника (сотрудник), забыл. при попытке добавить уже добавленного или уволить не работабщего сотрубника — выкидывать исключение.

>>381908

Потому что в JS нет настоящих классов.

Твой код работать не будет. Ты создаешь свойство run у функции-конструктора, и на создаваемом объекте оно не появится само собой. Иди читай про прототипы.

>>381923

Так потому и слова пропускаются что ошибка. Ну е мое, посмотри ссылку http://codepad.org/F8m3AYtu

> Как это возможно если диапазон от нуля до размера массива?


В массиве 4 элемента. Перечисли, какие у них индексы? 0, 1, ... что дальше?

>>381924

> Чем они отличаются?


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

Первый способ имеет недостатки:

- конструктор становится огромным, когда у тебя там будет 500-1000 строк. Констурктор замусорен лишним кодом
- при создании объекта все методы создаются заново, а во втором варианте они создаются только один раз. Это логичнее.

Первый вариант обычно используют те, кто не разобрался как работают прототипы.
#514 #381928
>>381900

А, еще у компании есть методы добавитьСотрудника(сотрудник) и уволитьСотрудника (сотрудник), забыл. при попытке добавить уже добавленного или уволить не работабщего сотрубника — выкидывать исключение.

>>381908

Потому что в JS нет настоящих классов.

Твой код работать не будет. Ты создаешь свойство run у функции-конструктора, и на создаваемом объекте оно не появится само собой. Иди читай про прототипы.

>>381923

Так потому и слова пропускаются что ошибка. Ну е мое, посмотри ссылку http://codepad.org/F8m3AYtu

> Как это возможно если диапазон от нуля до размера массива?


В массиве 4 элемента. Перечисли, какие у них индексы? 0, 1, ... что дальше?

>>381924

> Чем они отличаются?


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

Первый способ имеет недостатки:

- конструктор становится огромным, когда у тебя там будет 500-1000 строк. Констурктор замусорен лишним кодом
- при создании объекта все методы создаются заново, а во втором варианте они создаются только один раз. Это логичнее.

Первый вариант обычно используют те, кто не разобрался как работают прототипы.
#515 #381929
>>381928

> В массиве 4 элемента. Перечисли, какие у них индексы? 0, 1, ... что дальше?


Спасибо, что-то затупил на этом.
Кстати, в пхп.ини все поменял как ты сказал, но ошибка не вылезла. Буду наверно еще пердолить.
#516 #381930
>>381926

Ошибка здесь:

> Clock.prototype._render();


В качестве this будет передан не текущий объект, а Clock.prototype. Это неправильно и не будет работать. Надо писать

this._render();

Но так написать мы тоже не можем так как внутри коллбека function() {Clock.prototype._render(); } this будет равно window, а не нашему объекту.

Потому мы используем трюк с переменной:

var self = this; // сохраняем текущий объект в переменную
...
function () { self._render(); }

Почитай про this: http://javascript.ru/tutorial/object/thiskeyword

>>381927

Я написал тебе правильное решение для функции makeSelection, используй его.

> То у order будут свойства size и filling?


Из твоего кода это непонятно так как ты привел только кусок.
#516 #381930
>>381926

Ошибка здесь:

> Clock.prototype._render();


В качестве this будет передан не текущий объект, а Clock.prototype. Это неправильно и не будет работать. Надо писать

this._render();

Но так написать мы тоже не можем так как внутри коллбека function() {Clock.prototype._render(); } this будет равно window, а не нашему объекту.

Потому мы используем трюк с переменной:

var self = this; // сохраняем текущий объект в переменную
...
function () { self._render(); }

Почитай про this: http://javascript.ru/tutorial/object/thiskeyword

>>381927

Я написал тебе правильное решение для функции makeSelection, используй его.

> То у order будут свойства size и filling?


Из твоего кода это непонятно так как ты привел только кусок.
#517 #381931
>>381929

Ты мог не в том php.ini поменять. Если ты ставил отдельный PHP то у него свой, отдельный конфиг скорее всего.

Ты можешь прямо в программе проверить:

var_dump(ini_get('display_errors'));

И поменять:

ini_set('display_errors', 'On');

Также, ты можешь сделать файл вида

<?php phpinfo();

И он выведет, какой именно файл php.ini был использован (и чему равно display_errors).
#518 #381952
Боже мой, я сделал это, мой скрипт находит кратчайшее расстояние! Осталось лишь найти, как сохранять пройденный путь.
#519 #381967
>>381931
Спасибо, все настроил.
#520 #381981
>>381783
http://jsbin.com/dagoxeleburo/54/edit?js,output

Теперь внутренние функции, которые использует метод openCell возвращают верные значения.

А так же уже что-то стало выводиться, но все равно ерунда.

this.openCell(aroundCells[l].getX(), aroundCells[l].getY(), l);

Посмотри в код, не понимаю почему l не передается. Я же теперь обращаюсь к ней как к arguments[2].
#521 #382012
onbeforeunload=function(){
location.reload();
return "you leave?"
};

onload=function(){
location.reload();
}

Оп, интересная штука получается. Не знал про onbeforeunload.
#522 #382021
Вернулся в стройные ряды изучающих жс и у меня проблема с 4 задачей. Накидал такой код http://jsfiddle.net/7mnu73r5/ Кажется что иду не в том направлении. Никак не могу придумать нормальный механизм поиска - в первом случае у нас приходит document, а после поиска массив, в элементах которого нужно производить поиск. Оп прокомментируй пжлст.
#523 #382023
>>382012
https://gist.github.com/finom/3ecfcea07d95f5dd7f8a

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

Element.prototype[ s_add ] = win[ s_add ] = doc[ s_add ] = function( on, fn, self ) {....

Откуда тут Element взялся?

Похоже она более совершенная, чем моя в http://jsbin.com/dagoxeleburo/54/edit Даже смешно сравнивать. Как такое пишут?
#524 #382057
>>382021

> в первом случае у нас приходит document, а после поиска массив,


Бери в качестве начальных данных не документ, а массив из одного элемента - документа.
#525 #382061
Поясните что нужно знать веб верстальщику.
Насколько я понимаю есть две стороны: клиентская и серварная.
Клиентская это javascript, что еще?
Серверная php, css(?), что еще?
Ну и html обезательно.
Посоветуйте чем заменить php, он конечно популярный и все дела, но после c, c++ и java пользоваться им немного НЕПРИВЫЧНО. Буду его учить, конечно, но хочу и другие варианты попробовать.
Поправьте меня, если я в чем-то неправ и что еще нужно знать веб верстальщику чтобы быть успешным и востребованным?
лютый ньюфаг в вебе, не бейте, лучше обоссыте
#526 #382065
>>382023

Element — это видимо конструктор для DOM Element в ИЕ, а Element.prototype —его прототип. Соответственно, этим мы добавляем ко всем DOM элементам метод 'addEventListener'

В старых ИЕ это все называлось Dynamic HTML (DHTML) Object Model.

http://msdn.microsoft.com/en-us/library/hh869680(v=vs.85).aspx

Вот тут описаны эти конструкторы. Вот мануал по Element: http://msdn.microsoft.com/en-us/library/hh869681(v=vs.85).aspx

А строчка

Element.prototype[ s_add ] = win[ s_add ] = doc[ s_add ] = ...

Добавляет функцию в прототип DOM нод, в window и document.

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

Код берет событие из window.event, добавляет свойства target и which (нажатая кнопка мыши), и пару методов. И только потом вызывает обработчик.
#527 #382067
>>382061

Клиентская — то, что обрабатывается в браузере. Серверная — что выполняется на сервере.

Клиентская — HTML/CSS/JS (в страницу можно встроить программы на javascript и они выполняются в браузере)

Серверная — PHP/Java/Ruby/Python/ + базы данных (SQL) + NoSQL хранилища и кеши. Это то, что генерирует страницы. Например, серверная программа может брать из базы данных результаты футбольных игр и генерировать страницу с турнирной таблицей в формате HTML (которую отобразит браузер).

> чем заменить php


Java, C#, Ruby, Python

> что еще нужно знать веб верстальщику


JS, DOM, jQuery, jQuery UI, Backbone, Knockout, Angular.
#528 #382070
>>382023

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

> Как такое пишут?


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

String.prototype.sayYes = function ...

И у всех строк появляется метод sayYes. Но нив коем случае так не делай, это крайне дурная практика.
#529 #382100
>>382070
Ага, я вначале в сапере хотел все свойства и методы сразу в DOM ноды записывать. Хотя может и было бы проще, не было бы функций поиска event.target в массиве cells и т.д.
#530 #382114
>>381925
http://jsbin.com/lubewuqa/8/edit - исключения не пашут
#531 #382115
>>381930
Спасибо, теперь понятно
` #532 #382130
Хочу сильно обмазаца PHP MYSQL JS(это пока что не обязательно), HTML CSS - это уже знаю на достаточном уровне. Интересует связка PHP MYSQL, где рассказывается принципы методики подходы виртуозного мотания MYSQL на PHP. Это у меня сейчас единственная проблема, спасибо. `<?php ?>`
` #533 #382136
>>382130
Ананасы вы где?
#534 #382138
>>382136
Знаю про мускул только из книги Никсона, могу простые таблицы делать и к пхп присобачивать, но ОП говорит, что описанная там технология ужасно устарела.
#535 #382144
>>382130
>>382138
Мне посовременнее что-нибудь надо. Хуйнуть к примеру вывод из бд через задницу я могу, но я хочу делать это правильно и современно.
#536 #382145
>>382144
Оп советовал вот эту штуку
http://habrahabr.ru/post/137664/
` #537 #382151
>>382145
Спасибо, поонанирую на досуге.
#538 #382161
>>382130
Гугли PDO как минимум.
#539 #382263
Пыханы у меня вопрос: почему код выведет 2
$a = new Test();
$a->newProp = 1;
$b = $a;
$b->newProp = 2;
var_dump($a->newProp);
Я знаю что объекты передаются по ссылке. Но ведь для того чтобы передать по ссылке нужно указать &. Получается = работает по разному? Или инстанс объекта это типа указатель на структуру? я пхпшник что такое указатель толком не знаю, так что если ерунда не ругайтесь
#540 #382264
ОП, вот задача на поиск кратчайшего пути
http://ideone.com/E2MFN3 вроде всё правильно.
Мне всё таки любопытно, как она решается через рекурсию?
#541 #382268
http://jsbin.com/dagoxeleburo/56/edit?js,output

Ну я думаю это прогресс. Но вот какие проблемы:

- если пустая ячейка, цикл открывает не все ячейки.

- цифры не всегда окружают все пустые ячейки.
#542 #382270
>>382263
Ты в $b скопировал из $a адрес объекта Test.
#543 #382283
>>382270

>Ты в $b скопировал из $a адрес объекта Test.


>Я знаю что объекты передаются по ссылке.


Внимание вопрос! Почему языковая конструкция "=" в этом примере скопировала адрес
#544 #382293
>>382283
Потому что "=" копирует значение, $a - указатель на объект, т.е. переменная со значением "адрес объекта".
#545 #382354
>>382283
Если хочешь копировать используй метод clone().
#546 #382364
Оп, смотри, что нашел. Переменное количество аргументов возможно оказывается: http://ru2.php.net/migration56.new-features#migration56.new-features.variadics А я всегда считал, что нет.
#547 #382376
>>382364
suki, пока я его выучу это уже будет не рhр.
#548 #382381
>>381952

Хорошо, ждем результатов.

>>381981

> Посмотри в код, не понимаю почему l не передается.


Она передается. Поставь там console.log(l) и убедись сам.

Алсо, вместо arguments[2] надо просто добавить 3-й аргумент к функции. В JS можно передавать меньше или больше аргументов чем указано, и это не вызовет ошибку (тем аргументам, которые не переданы, будет выставлено значение undefined).

>>382012

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

И то мне она не нравится, так как всплывающие окна раздражают (в старой Опере это событие вообещ было отключено по этой причине). Для предотвращения потери данных лучше сохранять в фоне данные в localStorage — в этом случае даже если у компьютера выключится питание, данные можо будет восстановить при следующем заходе на страницу.
#549 #382389
>>382012

Там еще раньше было просто onunload — https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers.onunload — но оно вроде не выводит окно-предупреждение и срабатывает уже после ухода со страницы.

Вот еще история про это событие: http://habrahabr.ru/post/141793/

Что касается location.reload и прочих трюков, они по идее не должны работать.

>>382021

> var selectorList = selector.split(' ');


Я бы разбивал по \s+ так как пробелов может быть несколько.

> if (Object.keys(tabList).length) {


Слишком сложно. надо писать if (isEmpty(tabList)) ...

Насчет проверки массив/не массив — сделай функцию, которая всегда принимает массив, то есть

find(token, contextArray)

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

В селекторе может быть указано несколько классов например

div.a.b#c

Это у тебя не учтено.

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

- если указан id и контекст — это документ, ищем по id
- если доступна getElementsByClassname и указан класс, ищем ей
- иначе если указан тег ищем через getElementsByTagName
- иначе ищем полным перебором

После поиска мы должны еще отсеять лишнее. Например если указан селектор

td.a.b

То мы можем найти все элементы с классом a, а потом пройтись по ним и проверить на соответствие условиям. Если в селекторе единственное условие, и мы по нему делали поиск (например указан 1 класс и мы использовали getByClassName) то можно этот этап пропустить.
#549 #382389
>>382012

Там еще раньше было просто onunload — https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers.onunload — но оно вроде не выводит окно-предупреждение и срабатывает уже после ухода со страницы.

Вот еще история про это событие: http://habrahabr.ru/post/141793/

Что касается location.reload и прочих трюков, они по идее не должны работать.

>>382021

> var selectorList = selector.split(' ');


Я бы разбивал по \s+ так как пробелов может быть несколько.

> if (Object.keys(tabList).length) {


Слишком сложно. надо писать if (isEmpty(tabList)) ...

Насчет проверки массив/не массив — сделай функцию, которая всегда принимает массив, то есть

find(token, contextArray)

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

В селекторе может быть указано несколько классов например

div.a.b#c

Это у тебя не учтено.

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

- если указан id и контекст — это документ, ищем по id
- если доступна getElementsByClassname и указан класс, ищем ей
- иначе если указан тег ищем через getElementsByTagName
- иначе ищем полным перебором

После поиска мы должны еще отсеять лишнее. Например если указан селектор

td.a.b

То мы можем найти все элементы с классом a, а потом пройтись по ним и проверить на соответствие условиям. Если в селекторе единственное условие, и мы по нему делали поиск (например указан 1 класс и мы использовали getByClassName) то можно этот этап пропустить.
#550 #382392
>>382100

Есть такой подход (он часто применяется в jQuery плагинах например): хранить данные в объектах DOM, либо как дополнительные свойства (это называется expando, в JS почти все это объект и туда можно добавлять свойства):

var div = document.getElementById('x');
div.something = 'yes'; // это работает, хотя и не гарантируется стандартами

Либо как аттрибуты:

div.setAttribute('data-something', 'smth');

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

Но это плохой подход, так как он спутывает логику программы и логику отображения данных. Лучше для отображения использовать DOM, а для хранения и обработки данных — свои классы — так код будет чище и аккуратнее.
#551 #382393
>>382114

А что не так с исключениями? Все работает вроде.

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

> if (!this.additive === undefined) {


Непонятно, что выполнится раньше, ! или ===. Надо либо ставить !== либо использовать скобки либо писать

if (!this.additive)

В свойствах size и fillign надо хранить саму константу (например Hamburger.SIZE_SMALL) а не словарь с ее параметрами. То, что у тебя. не позволит например сделать метод

getSize()

А так, неплохо, лучше чем раньше.

>>382130

Используй PDO как клиентскую библиотеку для связи с MySQL. Не забудь выставить ERRMODE_EXCEPTION чтобы видеть ошибки MySQL.

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

Статья http://habrahabr.ru/post/137664/

По MySQL у меня есть сборник ссылочек и задачка: https://gist.github.com/codedokode/10539213 — попробуешь свои силы?
#551 #382393
>>382114

А что не так с исключениями? Все работает вроде.

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

> if (!this.additive === undefined) {


Непонятно, что выполнится раньше, ! или ===. Надо либо ставить !== либо использовать скобки либо писать

if (!this.additive)

В свойствах size и fillign надо хранить саму константу (например Hamburger.SIZE_SMALL) а не словарь с ее параметрами. То, что у тебя. не позволит например сделать метод

getSize()

А так, неплохо, лучше чем раньше.

>>382130

Используй PDO как клиентскую библиотеку для связи с MySQL. Не забудь выставить ERRMODE_EXCEPTION чтобы видеть ошибки MySQL.

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

Статья http://habrahabr.ru/post/137664/

По MySQL у меня есть сборник ссылочек и задачка: https://gist.github.com/codedokode/10539213 — попробуешь свои силы?
#552 #382395
>>382138

Переходи на PDO. Хватит насиловать труп mysql_query

>>382144

Кроме библиотеки PDO, я тебе советую еще изучить паттерны проектирования для работы с БД:

http://design-pattern.ru/patterns/table-data-gateway.html
http://design-pattern.ru/patterns/data-mapper.html
http://design-pattern.ru/patterns/active-record.html

И другие: http://design-pattern.ru/

>>382263

Это и есть «передача по ссылке». В PHP скаляры (булевы, числа и строки) и массивы копируются, а объекты передаются по ссылке. Примеры:

$a = array(1, 2, 3);
$b = $a; // копирование, создается независимая копия массива
$b[0] = 10;
var_dump($a[0]); // 1

$d = &$a; // передача по ссылке — $d и $a указывают на один массив
// ссылка имеет много подвохов и недостатков, потому не используй это в своем коде
$d[0] = 4;
var_dump($a[0]); // 4

В случае объектов, они всегда передаются по ссылке (как будто бы там всегда ставится &).

То же касается и передачи в функцию: если ты
передаешь массив и в функции он меняется, исходный остается неизменным (так как в функцию передается копия). А если ты использовал & или передавал объект, то в функцию передается ссылка на тот же самый массив или объект, а не копия.

> Но ведь для того чтобы передать по ссылке нужно указать &.


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

Мануал: http://php.net/manual/ru/language.references.php
http://php.net/manual/ru/language.oop5.references.php

Чтобы скопировать объект, надо использовать оператор clone ( http://php.net/manual/ru/language.oop5.cloning.php )

> инстанс объекта это типа указатель на структуру


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

http://habrahabr.ru/post/226707/
http://habrahabr.ru/post/162713/
#552 #382395
>>382138

Переходи на PDO. Хватит насиловать труп mysql_query

>>382144

Кроме библиотеки PDO, я тебе советую еще изучить паттерны проектирования для работы с БД:

http://design-pattern.ru/patterns/table-data-gateway.html
http://design-pattern.ru/patterns/data-mapper.html
http://design-pattern.ru/patterns/active-record.html

И другие: http://design-pattern.ru/

>>382263

Это и есть «передача по ссылке». В PHP скаляры (булевы, числа и строки) и массивы копируются, а объекты передаются по ссылке. Примеры:

$a = array(1, 2, 3);
$b = $a; // копирование, создается независимая копия массива
$b[0] = 10;
var_dump($a[0]); // 1

$d = &$a; // передача по ссылке — $d и $a указывают на один массив
// ссылка имеет много подвохов и недостатков, потому не используй это в своем коде
$d[0] = 4;
var_dump($a[0]); // 4

В случае объектов, они всегда передаются по ссылке (как будто бы там всегда ставится &).

То же касается и передачи в функцию: если ты
передаешь массив и в функции он меняется, исходный остается неизменным (так как в функцию передается копия). А если ты использовал & или передавал объект, то в функцию передается ссылка на тот же самый массив или объект, а не копия.

> Но ведь для того чтобы передать по ссылке нужно указать &.


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

Мануал: http://php.net/manual/ru/language.references.php
http://php.net/manual/ru/language.oop5.references.php

Чтобы скопировать объект, надо использовать оператор clone ( http://php.net/manual/ru/language.oop5.cloning.php )

> инстанс объекта это типа указатель на структуру


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

http://habrahabr.ru/post/226707/
http://habrahabr.ru/post/162713/
#553 #382397
>>382264

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

> foreach ($paths[$point] as $key => $val) {


> $time[$key] = $paths[$point][$key]['time'];


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

> asort($paths[$key]);


Странная функция. Она сортирует массив по значению (а там хранятся вложенные массивы, непонятно как они будут сортироваться). Ты ее с другйо сортировкой не перепутал? Вот список: http://php.net/manual/ru/array.sorting.php

По какому критерию ты хотел там сортировать массив?

> Пусть v — вершина с минимальным d[v]


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

> $inf = 100000;


В PHP (как и в любом языке использующем IEEE 754 https://ru.wikipedia.org/wiki/IEEE_754-2008 ) есть бесконечности: http://php.net/manual/en/math.constants.php и функция проверки на бесконечность: http://php.net/manual/ru/function.is-infinite.php

Переменные лучше переименовать понятнее:

pathDone -> pathToPoint
$paths as $key => $value -> $paths as $pointName => $info

Вообще, не исплоьзуй key и value тут, так как они ничего не говорят.

Но вообще, программа работает, это хорошо.
#553 #382397
>>382264

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

> foreach ($paths[$point] as $key => $val) {


> $time[$key] = $paths[$point][$key]['time'];


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

> asort($paths[$key]);


Странная функция. Она сортирует массив по значению (а там хранятся вложенные массивы, непонятно как они будут сортироваться). Ты ее с другйо сортировкой не перепутал? Вот список: http://php.net/manual/ru/array.sorting.php

По какому критерию ты хотел там сортировать массив?

> Пусть v — вершина с минимальным d[v]


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

> $inf = 100000;


В PHP (как и в любом языке использующем IEEE 754 https://ru.wikipedia.org/wiki/IEEE_754-2008 ) есть бесконечности: http://php.net/manual/en/math.constants.php и функция проверки на бесконечность: http://php.net/manual/ru/function.is-infinite.php

Переменные лучше переименовать понятнее:

pathDone -> pathToPoint
$paths as $key => $value -> $paths as $pointName => $info

Вообще, не исплоьзуй key и value тут, так как они ничего не говорят.

Но вообще, программа работает, это хорошо.
#554 #382398
>>382264

> как она решается через рекурсию?


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

найтиПуть(текущая-точка, цель, пройденный-путь-от-старта-до-точки) {

если (текущая-точка и цель — соседи) {
добавляем в путь последнюю точку;
возвращаем результат;
}

перебираем соседние с текущей точки, которые не входят в пройденный-путь;
для каждой такой точки-соседа {
путь = копия проуденного пути + сосед;
список[] = найтиПуть(соседняя-точка, цель, путь);
}

Из списка выбираем наиболее короткий путь;
Возврашаем его;
}
#555 #382399
>>382397

> Пусть v — вершина с минимальным d[v]


Это должно выполняться благодаря asort. Я проверил и он сортирует точки как надо, сначала идут с наименьшим временем и по возрастанию.
#556 #382402
>>382268

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

Цифры хорошо бы отцентрировать и сделать покрупнее.

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

> target.innerHTML === ''


Это надо убрать из rightClickListener и заменить на вызов метода у cell

> self.cells[target.parentNode.rowIndex][target.cellIndex];


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

Кстати, правый клик не работает в фаерфоксе — ничего не происходит.

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

> this.getNumberAroundMines(cell


Повторяется раза 3, вынеси в переменную

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

Третий параметр у openCell не нужен. Зачем он? У тебя явно ошибка.

> this.cells[j][k]


Я бы писал this.getCellAt(x, y) чтобы абстрагироваться от способа хранения клеточек. Но это не обязательно.
#556 #382402
>>382268

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

Цифры хорошо бы отцентрировать и сделать покрупнее.

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

> target.innerHTML === ''


Это надо убрать из rightClickListener и заменить на вызов метода у cell

> self.cells[target.parentNode.rowIndex][target.cellIndex];


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

Кстати, правый клик не работает в фаерфоксе — ничего не происходит.

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

> this.getNumberAroundMines(cell


Повторяется раза 3, вынеси в переменную

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

Третий параметр у openCell не нужен. Зачем он? У тебя явно ошибка.

> this.cells[j][k]


Я бы писал this.getCellAt(x, y) чтобы абстрагироваться от способа хранения клеточек. Но это не обязательно.
#557 #382406
Скоро перекатимся, не убегайте.

>>382283

Потому, что $a — это объект. В переменной лежит не объект, а ссылка на него. Соответственно ты копируешь эту ссылку, на тот же самый объект.

Объекты всегда передаются по ссылке (не только в PHP но и в ruby, java, python, js и других языках).

>>382364

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

function lalala() {
$args = func_get_args();
...
}

И делаем что хотим. Но с появлением синтаксиса для этого, конечно, все стало лучше и удобнее.

>>382399

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

> Я проверил и он сортирует точки как надо


Это ненадежно, так как если мы переставим элементы в массиве местами, или доабвим новые элементы, оно перестанет работать. Для таких ситуация надо использовать uasort, и явно определить порядок сорировки:

uasort($array, function ($a, $b) {
...
});

Твой код слишком ненадежный, так писать не стоит.
#557 #382406
Скоро перекатимся, не убегайте.

>>382283

Потому, что $a — это объект. В переменной лежит не объект, а ссылка на него. Соответственно ты копируешь эту ссылку, на тот же самый объект.

Объекты всегда передаются по ссылке (не только в PHP но и в ruby, java, python, js и других языках).

>>382364

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

function lalala() {
$args = func_get_args();
...
}

И делаем что хотим. Но с появлением синтаксиса для этого, конечно, все стало лучше и удобнее.

>>382399

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

> Я проверил и он сортирует точки как надо


Это ненадежно, так как если мы переставим элементы в массиве местами, или доабвим новые элементы, оно перестанет работать. Для таких ситуация надо использовать uasort, и явно определить порядок сорировки:

uasort($array, function ($a, $b) {
...
});

Твой код слишком ненадежный, так писать не стоит.
!test #558 #382410
Test
!!test #559 #382411
Test
#560 #382413
Приглашаю всех в новый тред: >>382412

Этот тред закрыт.
#561 #382453
>>382393
А, работают. Надо куда-нибудь console.log() тогда вставить, чтобы ошибку ввыводило. Там потом выскакивает ошибка jsbin'a. Так и должно быть? http://jsbin.com/lubewuqa/9/edit?js,console - попытался сделать проверку на повторную добавку, не получается. Не могу разобраться с возникающей ошибкой. Алсо, как мне постоянно пополнять объект с добавками, не обнуляя его? Через замыкание?
!OP #562 #382467
BUMP
#563 #382487
>>377570
Добро-ОП, подскажи что делаю не так в задачи по функция
http://ideone.com/cZOHrY
#564 #382600
Аноны, мы переехали в новый тред.

>>382487

> PHP Notice: Undefined variable: pecent in /home/fHDWZ1/prog.php on line


13

Опечатался в имени переменной, проверь внимательно 13 строку.
``` #565 #382713
Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
программирования имеется (питон).
``` #565 #382713
Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
программирования имеется (питон).
``` #566 #382715
Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
программирования имеется (питон).
``` #566 #382715
Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
программирования имеется (питон).
``` #567 #382717
Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
программирования имеется (питон).
``` #567 #382717
Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
программирования имеется (питон).
``` #568 #382718
Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
программирования имеется (питон).
``` #568 #382718
Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
программирования имеется (питон).
#569 #383389
>>382600
Спасибо. Я что-то не догадался посмотреть на сообщение от PHP
Обновить тред
Двач.hk не отвечает.
Вы видите копию треда, сохраненную 19 сентября 2014 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски