Этого треда уже нет.
Это копия, сохраненная 14 сентября 2015 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
193 Кб, 1024x768
Добро пожаловать в наш уютный тредик. Тут мы изучаем язык PHP (а также JS/CSS/HTML/SQL), решаем задачки и даже делаем простые сайты! Зачем? Кто-то хочет научиться программировать, кто-то - делать сайты, кто-то - просто размять мозги и заняться чем-то полезным.

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

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

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

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

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

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

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

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

Учебник дает основы языка PHP, но чтобы делать сайты, этого недостаточно. Если ты его прошел, то надо переходить в более серьезным задачкам, которые научат тебя как выдавать страницы в браузер, работе с таблицами в БД, работе с формами, MVC.

- Простая, но полезная задача сделать список студентов: https://github.com/codedokode/pasta/blob/master/student-list.md
- Более сложная задача сделать файлообменник на микрофреймворке Slim: https://gist.github.com/codedokode/9424217
- Еще более сложная и долгая задача на Yii/Yii2: https://gist.github.com/codedokode/8733007
- После нее можно изучать автоматизированное тестирование
- Если ты все решил, переходи к Symfony 2/Doctrine 2

Чтобы делать эти задания, тебе надо установить Апач + PHP (можно заодно сразу и MySQL) на компьютер. Вот полезные инструкции:

https://gist.github.com/codedokode/10774100
https://gist.github.com/codedokode/7054af4a03865c4cc863

Может тебе понадобится пользоваться командной строкой, вот гайд https://gist.github.com/codedokode/10539568

Вот небольшой туториал по тому как начать использовать PHP на сервере для отдачи странички в браузер: https://php.net/manual/ru/tutorial.php Увы, уроков плавно подводящих к тому, как сделать задачи выше, пока нет, так что если что, задавай вопросы.

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

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

- HTML/CSS: https://gist.github.com/codedokode/58ebc90bd006baf4b35c
- JS: https://gist.github.com/codedokode/ce30e7a036f18f416ae0
- Проверялка решений на JS: http://dkab.github.io/jasmine-tests/
- MySQL: https://gist.github.com/codedokode/10539213

Что почитать

- Мануал по PHP — http://www.php.net/manual/ru/langref.php
- Сайт phptherightway (перевод на русский: http://getjump.github.io/ru-php-the-right-way/ )
- По PHP: Профессиональное программирование на PHP Джордж Шлосснейгл
- По PHP: Мэтт Зандстра — PHP: Объекты, шаблоны, методики программирования
- JS: learn.javascript.ru
- Про Git:

Подскажи сайты для поиска работы, я не умею гуглить? brainstorage.me, geekjob.ru, hh.ru
Нужен ли ООП, фреймворки, MVC? — Да, однозначно. Посмотри любую вакансию.
Сайт опять упал!!!!! — Не паникуй, а открой http://rghost.net/45000175
Оформляй код аккуратно!!! — например пропусти через phpformatter.com . Также, если ты пользуешься IDE вроде PhpStorm, Netbeans, Eclipse, то в них эта опция встроена, подробнее: https://gist.github.com/codedokode/8759492
ОП, сделай за меня мою работу или домашнее задание? — Это конечно, хорошая идея, но нет.
Где искать работу и заказы — hh.ru, geekjob.ru, brainstorage.me, fl.ru, odesk.com. Имей в виду, что кроме фриланса есть еще постоянная удаленная работа (remote job) когда тебе не надо тратить время на поиск заказов и переговоры с неадекватными заказчиками.

В этом треде ОП постарается сокращать свои графоманские пасты, чтобы тред не достигал бамп лимита так быстро.
162 Кб, 843x1024
#2 #523526
Уууоооот я захожу в трэд, ебу ОПа прямо там где он спит, на полу или как это называется.
Рядом прыгают пхп-макаки яростно размахивая руками, я швыряю парочку в окно и они летят с 10этажа вниз, далее я достаю свой непромытый-трипперно-ганорейно-ебанутый-недоразвитий хуй внезапно в комнату заходит мамаша модератора, но что было дальше вы узнаете в следующем треде...
sage #3 #523538
Нахуй иди, это не каноничный тред.
#4 #523543
>>523538
>>523526
лол бархет
#5 #523545
Просунул писюн в тред и оросил опа.
#6 #523546
https://github.com/blackberryJam/abiturients/blob/master/app/bootstrap.php

Чувак, который вот тут абитуриентов делал. Я не понял, зачем ты везде __DIR__ проставляешь. Оно итак ведь включает тот же файл, что лежит в той же папке по дефолту.
#7 #523606
Посмотрел пару видео о том как делаются PSD макеты для сайтов и сошёл сума, столько тонкой работы мышкой, где то навести тень, где то нарисовать точки, потом вдавить их, потом исказить картинку, пытался повторять, у меня вообще фотошоп не получается и нет желания его особенно учить, он сильно нужен? Я знаю норм вроде бы css и html, могу в разметку немного, этого хватит для ПХП программиста, можно обойтись без фотошопа?
sage #8 #523635
>>523606
https://gist.github.com/codedokode/58ebc90bd006baf4b35c
Это по html осиль, больше тебе не нужно. Фотошоп ПХП программисту вообще не требуется.
sage #9 #523643
>>523606
Нет, без фотошопа обойтись нельзя.
>>523635
Быдлокодер незаметен.
#10 #523911
Какой фреймворк лучше учить для первого сайта в портфолио? Yii вроде самый популярный, но только в России. В остальном мире набирает популярность Laravel.

https://www.google.com/trends/explore#q=yii%2C%20laravel&cmpt=q&tz=Etc%2FGMT-3
sage #11 #523913
>>523494 (OP)

>Что самое главное для программиста? Умение аккуратно оформлять код


Пыха - язык который притягивает ебанутых как магнит.
#12 #523957
>>523913
Однако,ты тут.
#13 #523980
>>523911
учи все, не промахнешься.
#14 #524041
>>523957
Просто мимо проходил.
#15 #524073
BREAKING NEWS
do-while в PHP считается хаком. Рекомендуется использовать goto.

>Не беспокойтесь, если вы не понимаете это сразу или вообще. Вы можете писать скрипты и даже мощные программы без использования этой 'возможности'. Начиная с версии PHP 5.3.0, стало возможным использовать оператор goto вместо подобного "хака".

#16 #524084
>>524073
Толсто.

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

Господа, срочный вопрос.
Пытаюсь вкатиться в веб-разработку, зная только основы html/css/js. Похапе не знаю в принципе и не хочу особенно знать, но надо набраться опыта в целом, я вообще джавист, но заинтересовался вебом.
Прислали из одной конторы тестовое задание. Если честно, я немного охуел, думал, какую-нибудь визитку заебашить предложат, а тут такое. Суть такова: "социальный видео плеер".
1. есть видео на тытрубе, одно конкретное.
2. юзеры могут кликать на смайлы в процессе просмотра видео, система запоминает момент видео, когда произошел клик
3. когда другой юзер смотрит это видео, у него где-то на экране появляются на 10 секунд те эмоции, которые кликали другие люди.
Можно использовать любые фреймворки, на мой вкус. Появление смайликов))))))00 должно быть реализовано с помощью AJAX, ну это и понятно.

Итак, вопрос, уважаемые знатоки: с помощью чего можно эту хуйню запилить максимально удобно и качественно?
sage #19 #524139
>>524121
Дохуя че-то для тестового задания. Вангую контора поддельная, на самом деле прислал какой-нибудь Васян с fl.ru, ищущий халявы. Я так один раз тестовое делал 2 дня, потом ни ответа ни привета.
#20 #524143
>>524139
Когда мне влом самому программировать проект, я нанимаю лопуха на удалённую работу из каких-нибудь ебеней. А потом кидаю его на зарплату.
#21 #524214
>>524143
Та не, не поддельная.
http://jobs.dou.ua/companies/i-techs/
Есть идеи, как это симпатично сделать? Какой-нибудь фреймворк для пыха посоветуете с внятной документацией, хотя бы?
sage #22 #524223
>>524214

>Та не, не поддельная.


>http://www.itcraft.com.ua/


>10 лет на рынке


>сайт из одной странички, сделанный за 2 минуты в генераторе htmlа


Проиграно.
#23 #524228
>>524223
Да похуй, я их рассматриваю исключительно как источник опыта.
#24 #524235
>>524143
будем знать и просить бабки за день.
#25 #524236
>>524121
Если ты про это

>Очевидный прозрачный бокс сверху кнопки для ловли события.


>Запись-чтение базы.


>Пишется на Ванилле за день.


то объясняю забыл про тот тред, ушел.

У тебя должно быть 2 места где нужно попрограммить - внутри страницы на js и на сервере, на PHP например, сервис, который будет читать-писать в базу количества смайликов.
"Ванилла" значит "фреймворки не нужны".
Вообще это банальная форма с реакцией на нее.

Итак, что у тебя должно быть.

0. База, в которой буду 3 поля - ID видео, ID смайла, Время добавления. Для простоты - sqlite, ей не требуется сервер, это просто файло. Предполагаю, что ты его сделал и создал в нем таблицу, тулзы для этого есть в интернетике.

1. PHP, принимающий клики. Это что-то вида
<?php
$db = new PDO("sqlite:smiles.sq");
$stmt= $db->prepare('INSERT INTO smiles (videoid,smileid) VALUES (?,?)');
$stmt->execute($_GET['video'], $_GET['smile']);
?>

2. Кликалка на странице. Это простая форма
<form method='get' target='невидимый_Iframe' action='php_из_пункта_1.php'>
<input type='hidden' name='videoid' value=здесь_видео_ид>
<button type=submit name='smileid' value=1>
<button type=submit name='smileid' value=2>
</form>

3. PHP, отдающий смайлы. Он будет принимать время и отдавать все смайлы по видео, прокликанные после этого времени.
<?php
$db = new PDO("sqlite:smiles.sq");
$stmt= $db->prepare('SELECT smileid,stamp FROM smiles WHERE videoid=? AND stamp>=? ORDER BY STAMP ASC');
$stmt->execute($_GET['video'], $_GET['stamp']);

$smileDump= [];
while($arr= $stmt->fetch())
$smileDump+= $arr;

echo json_encode($smileDump);
?>

4. Приемник смайлов на странице. Писать не буду, будет некрасиво. Суть токова:

а. По таймеру вызываешь AJAX запрос пхп из пункта 3, передавая ему время предыдущего подобного запроса (изначально 0).
б. пхп тебе возвращает все смайлики, протыканные с этого времени, отсортированные по времени же.
в. Ты их отображаешь куда полагается (".innerHTML+=" например бгг)
г. Время вызова сохраняешь для следующего вызова пункта a.

И да, тут чистая функциональность, еще по-хорошему проверок немало нужно антихацкерских, но для теста хватит, обосрутся иначе.
#25 #524236
>>524121
Если ты про это

>Очевидный прозрачный бокс сверху кнопки для ловли события.


>Запись-чтение базы.


>Пишется на Ванилле за день.


то объясняю забыл про тот тред, ушел.

У тебя должно быть 2 места где нужно попрограммить - внутри страницы на js и на сервере, на PHP например, сервис, который будет читать-писать в базу количества смайликов.
"Ванилла" значит "фреймворки не нужны".
Вообще это банальная форма с реакцией на нее.

Итак, что у тебя должно быть.

0. База, в которой буду 3 поля - ID видео, ID смайла, Время добавления. Для простоты - sqlite, ей не требуется сервер, это просто файло. Предполагаю, что ты его сделал и создал в нем таблицу, тулзы для этого есть в интернетике.

1. PHP, принимающий клики. Это что-то вида
<?php
$db = new PDO("sqlite:smiles.sq");
$stmt= $db->prepare('INSERT INTO smiles (videoid,smileid) VALUES (?,?)');
$stmt->execute($_GET['video'], $_GET['smile']);
?>

2. Кликалка на странице. Это простая форма
<form method='get' target='невидимый_Iframe' action='php_из_пункта_1.php'>
<input type='hidden' name='videoid' value=здесь_видео_ид>
<button type=submit name='smileid' value=1>
<button type=submit name='smileid' value=2>
</form>

3. PHP, отдающий смайлы. Он будет принимать время и отдавать все смайлы по видео, прокликанные после этого времени.
<?php
$db = new PDO("sqlite:smiles.sq");
$stmt= $db->prepare('SELECT smileid,stamp FROM smiles WHERE videoid=? AND stamp>=? ORDER BY STAMP ASC');
$stmt->execute($_GET['video'], $_GET['stamp']);

$smileDump= [];
while($arr= $stmt->fetch())
$smileDump+= $arr;

echo json_encode($smileDump);
?>

4. Приемник смайлов на странице. Писать не буду, будет некрасиво. Суть токова:

а. По таймеру вызываешь AJAX запрос пхп из пункта 3, передавая ему время предыдущего подобного запроса (изначально 0).
б. пхп тебе возвращает все смайлики, протыканные с этого времени, отсортированные по времени же.
в. Ты их отображаешь куда полагается (".innerHTML+=" например бгг)
г. Время вызова сохраняешь для следующего вызова пункта a.

И да, тут чистая функциональность, еще по-хорошему проверок немало нужно антихацкерских, но для теста хватит, обосрутся иначе.
#26 #524237
>>524214
Такой сайт, что у меня аж в рашке заблокирован. Или теперь все домены ua блокируют?
#27 #524239
>>524236
кококо тестовые задания ни делаю!
#28 #524240
>>524236
И да, естественно в таблице поле stamp должно быт вида

>stamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP


Чтобы заполнялось само.

Там еще будет ебатни с временными зонами, но это уже за деньги.
#29 #524242
>>524239
Да не похуй ли как время жизни потратить - таким образом, или в засмеялся-проиграл тредах.
Так даже лучше.
#30 #524243
>>524237
Все доступно, дс. У тебя провайдер говно, так и передай.
#31 #524245
Почему программирующих на пхп называют пхп-макаками и хейтят их? Почему? Я новичек в программировании, не бейте, лучше обоссыте.
#32 #524246
>>523494 (OP)
огромное кол-во раз сталкивался с тем что пхп считается "позорным" языком, спросив однажды у своего знакомого после его шутки "... ну хоть не пхп хахаха" я спросил почему пхп все хуесосят он ответил что и сам не знает.
Ну так в чём причина такого отношения к пхп?
#33 #524247
>>524236
Бро, ты охуенен. Приеду домой - начну ковырять. Цистерну чаю тебе!
#34 #524249
Пришла в голову идея сделать сайт в котором будет представлен курс валют по городам. То есть выбираешь город а тебе показывает в нём курс доллара от разных банков. Как такой сайт лучше всего делать, при помощи парсинга? Или у банков должно быть API? Подойдёт ли такой сайт для портфолио при приёме на работу?
#35 #524251
>>524245
Потому что всех кодеров называют макаками, ничего обидного. Я вот временами макака.

Кодер - это когда нужно просто взять и сделать, чтобы работало СЧАС. Многие мамкины и не очень АРХИТЕКТОРЫ считают, что это недостойно - просто делать. Сначала надо разработать. А пхп так уж устроено и так функционирует, что вполне выгодно сначала написать, чтобы работало, а потом уже выкинуть и переписывать как надо.
И многие останавливаются на этапе "чтобы работало". В итоге получаются тонны говнокода, работающего абы как и который потом начинает через копипасты просачиваться в другой код.

НЕОП
#36 #524253
>>524251
а кодер и программист не одно и то же?
в понимании анона с /pr/
#37 #524254
>>524236

>$smileDump+= $arr;


$smileDump[]= $arr;

Конечно же вот так. Вот я дурак.
sage #38 #524257
>>524246
>>524245
Средний ПХПшник хуево знает ООП, использует кривые паттерны, пишет спагетти-код, десятиэтажные конструкции, не проверяет инпуты и оставляет кучу дыр для хакеров. Его код плохо расширяется и его трудно заново использовать в других местах. Это все не проблемы PHP, а проблемы кодеров, которые на нем пишут, не разобравшись толком в языке и инструментах. Кто освоил задания из шапки треда и прочел все линки, уже так не будет делать, соответственно таким уже говнокодером не будет, а будет нормальным специалистом, как в других языках.
#39 #524259
>>524253
Пока не побудешь тем и тем, разницы как бы и нет.

Но по факту кодер это подмножество программистов и архитектор это другое подмножество.

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

В чистом виде, впрочем, не думаю, что встречаются в природе. Даже железячные ассемблерщики работают в поле понятий железки, а не самого кода.
Но в своей собственной деятельности очень полезно эти штуки разносить. Вот сейчас ты архитектор, и тебе для работы достаточно бумаги и карандаша для блок-схем и каляк-маляк, и таки да, ты пишешь программу. А потом за комп и кодить, кодить, не отвлекаясь.
#40 #524261
>>524257

>не проверяет инпуты и оставляет кучу дыр для хакеров.


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

чего сагаешь-то, настроение плохое?
sage #41 #524266
>>524261

>чего сагаешь-то, настроение плохое?


Тред без ОПа левый, каноничный тут https://2ch.hk/pr/res/514869.html
#42 #524267
лал, смотрите, тут чел ЧЕТЫРЕ ЕБАНЫХ ГОДА фрилансит под вордпресс и даже ООП не знает.

http://dou.ua/forums/topic/14427/
sage #43 #524269
>>524267
Это норма в пхп. В шапке для таких линки с заданиями и лежат, чтобы квалификацию повышали.
#44 #524272
>>524266

>#659


Ю мэд брах?
#46 #524278
>>524274
У меня, кстати выборочно, оказалось.

>http://dou.ua/forums/topic/14427/


закрыт.
#47 #524293
>>524278
юзай тор или зенмейт.
#48 #524371
Ну посоны ну поясните по поводу этого >>524249
#49 #524383
>>524371
Лично я апи по городам не нашел, значит парсить банки разных городов. Повезет, если у них есть xml.
#50 #524384
#51 #524395
http://hh.ru/vacancy/14151832
Как думаете, это битрикс-параша или нет?
#52 #524398
Аноны, поясните что такое вёрстка из PSD? Создаётся макет сайта средствами фотошопа и потом просто смотришь на него и повторяешь всё в ХТМЛ и КСС в ручную? То есть это тоже самое что и нарисовать карандашом сайт и верстать смотря на этот рисунок?
#53 #524402
Пацаны, вбрасываю решение уже другой задачи. На первую мне ответа никто не дал, ну я её сам там уже поправил.

Решение задачи из вашего курса для совсем дебилов новичков по теме "Регулярные выражения": http://ideone.com/10F2E2 .

Подскажите как вывести ошибку более-менее цивильно, а то через таблицу он как-то через раз нормально выводит.
sage #54 #524404
>>524398
Верстка из PSD подразумаеват, что йоба-дизайнер тебе готовую PSD со слоями пришлет. В ней сайт уже нарисован. Тебе остается открыть эту PSD в фотошопе, нарезать на подходящие по размеру куски бэкграунды, потом отключить лишние слои и вырезать кнопки, картинки и другие элементы. Все это сохранить в .jpg с нужным качеством, сверстать html + css, подходящий под картинку и натянуть вырезанные .jpg.
sage #55 #524405
>>524402
Тред не тот, тут опа нет проверять.
ОП в своем сидит https://2ch.hk/pr/res/514869.html
#56 #524406
>>524405
Вас понял. Выдвигаюсь.
#57 #524431
>>524404
Казалось бы, почему не верстать сразу в ПСД...
#58 #524489
Возвращаясь с идеи сайта с курсом валют по городам >>524249 Если я уже нашёл подобный сайт, с курсом валют по городам, то парсить оттуда это не самая лучшая идея?
#59 #524500
>>524489
Бесплатная масштабируемость. Значит для создания копии продукта ненадо тратить деньги. Не надо платить работнику и вообще кому бы то нибыло. Также это значит, что единожды написанный программный продут закрывает всю нишу, как во времени так и в пространстве! Яркий пример MS Windows + Office. Один раз дал кодерам денег, размножил на весь мир, и вечно суёшь бабки в карман. И никто никогда в мире не залезет на твой пирог! Где билли гейц в форбсе - все знают. А программистишки? Да на свалочке. Виндофс и офис уже написан, баги выловлены, досвидания. Хочешь заняться "своим бизнесом", сделать свой виндофс+форд, даже спиздив код у б. гейца? Валяй! Продукт уже на рынке, ты туда не влезешь, программный рынок не кокурентный.

Подумай над этим, порграммистишко, поверни свой ссохшийся на ООП мозг в сторону мысли. Подумай об этом, когда будешь засирать мир очередной остоёбившей шареварей, очередным ебаным веп ресурсом, когда будешь разрабатывать дяде очередную систему. С каждой рабочей системой жизненное пространство для программиста сжимается. В ближайше годы допишут всё, что надо. Останется 1000 кодеров во всём мире дописывать мульки, остальные на помойку. ВСЁ УЖЕ НАПИСАНО!.
sage #60 #524506
>>524489
Иди в нормальный тред с ОПом https://2ch.hk/pr/res/514869.html
В этом одни трали.
Аноним #61 #524511
Нет вы только посмотрите, на этого сагающего уебка, у которого ЧСВ в жопе играет и ради ЧСВ этот гондон хочет мучить людей, чтобы все проматывали до десятой страницы и добавляли говнотред с гонодвача в избранное, да ты совсем крышей двинулся что ли? Либо создавай треды вовремя, либо сиди не выебывайся.
Сага Сага #62 #524512
Сага
#63 #524515
>>524432
https://github.com/blackberryJam
Я у него задачку списал. Советую почитать мануал по ООП на http://php.net/manual/ru/language.oop5.abstract.php
А потом еще учебник Зандрст "Объекты, шаблоны и методики программирования."
#64 #524556
>>524506
Но ты же тут не один, обиженка.
#65 #524687
Как в зависимости от даты представлять по разному дату?

if
Текущий год

>02.08



else*
Предыдущий год

>2014

#66 #524688
>>524687
в пхп есть функция date, которая определяет текующую дату.
#67 #524691
>>524687
Всё, решил задачку. Отбой.
#68 #524784
Хочу попробовать проверить за сколько кликов в вконтакте можно выйти со страницы любого пользователя на страницу любого другого случайного пользователя. Пока что немного не понимаю как это сделать, но я не сильно знаком с АПИ вконтакте, там хватает доступных функций для решения подобной задачи?
#69 #524798
<?php

error_reporting(-1);
$credit = 40000 ;
$payment = 5000 ;
$procent = 1.03 ;
$comission = 1000 ;
$paymenTotal = 0

for ($month = 1 ; $month <= 12 ; $month ++) {
\t$credit= ($credit * $procent) - $payment + $comission ;
\t$paymentTotal = $paymentTotal + $payment ;
\techo "Спустя $month месяцев выплачено $paymentTotal осталось выплатить $credit \n" ;
\tif ($credit <=0){
echo "Выплачено!" ;
break ;}
}

господа почему показывает ошибку в 10 строке?
#71 #524800
>>524799
что не так аноны!?
#72 #524807
а всё разобрался нету точки с запятой
#73 #524839
здарова ребят

пишу на пышке анонимный чат, вообще есть смысл его дорабатывать? Прикрепление файлов, емоджи смайлы, и вообще переписать используя что-то типа KPHP, HHVM.
#74 #524868
Блать, анононасы, читал тредик и понял, что вообще нихуя не шарю в безопасности. Есть может какие статьи или еще че-нить годное, для того, что кулцхакер из 6б не рассмеялся в голос, когда уронит мое говноподелие?
sage #76 #524897
#77 #524974
>>524868
Главное reg_exp делать для любых введенных данных и не ставить переменные пост и гет в сокл запросы.
#78 #525009
>>524974
Эмм...
Вообще-то лучше использовать библиотеки, в которых это делается уже.
Ну там экранировать SQL, использовать готовую авторизацию.
#79 #525010
ОП, что у тебя есть по вордпресс?
sage #80 #525014
>>525010
ОП в другом треде https://2ch.hk/pr/res/514869.html
В этом одни трали.
#81 #525016
>>525014
В этом только ты траль, мы это уже выяснили.
sage #82 #525017
>>525016
Тред просмотри, ни одного ответа от ОПа, всякие дауны отвечают. ОП в своем каноничном сидит.
#83 #525028
>>525017

>ни одного ответа от ОПа


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

А ты не заметил, что вопросы в этом треде как-то получают ответы?
Суть "проблемы" только в том, что оповские задачки не контроллируются им же. Такая пичаль.
sage #84 #525031
>>525028
Нихуя не получают, тут одни трали. В оповском треде на все вопросы нормальные ответы.
#85 #525048
>>525031
Ты ссылку то блядь на тред дай, хули ты как дурак?
sage #86 #525052
>>525048
Вот ссылка на нормальный тред с ОПом
https://2ch.hk/pr/res/514869.html
#87 #525170
Посоны, ответьте по поводу этого >>524784
10 Кб, 420x48
#88 #525178
Пиханы, хелп! Почему видео вставленное на форуме не проигрывается?

$post = preg_replace("/\[webm\](.*)\[\/webm\]/i", '<video controls="controls" width="480" height="360" id="video1"><source src="\\1" type=\'video/webm; codecs="vorbis"\'></video>', $post);
#89 #525189
>>525052
да угомонись ты уже, что тот, что этот я создавал, так что ты пишешь в обоих моих тредах.
#90 #525190
class ctrlindex extends ctrl {
function index() {
$this->posts = $this->db->query('SELECT FROM posts ORDER BY ctime DESC')->all();
$this->out('posts.php');
}
function login() {
$this->out('login.php');
echo "login hi";
}

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

Вот роутер, что не так?

class ctrl {
public function __construct(){
$this->db = new db();
}
public function out($tplname, $nested = false) {
if(!$nested) {
$this->tpl=$tplname;
include 'tpl/main.php';
}
else
include 'tpl/'.$tplname;
}
}
class app {
public function __construct($path) {

$this->route = explode('/', $path);
$this->run();
echo $path;

}
private function run() {
$url = array_shift($this->route);
//if(!preg_match('@^[a-ZA-Z0-9.,-]&
@', $url)) throw new Exception('Invalid path');
$ctrlName = 'ctrl/'.ucfirst($url);
if (file_exists("app/".$ctrlName . ".php")){
$this->runController($ctrlName);

}
else {
array_unshift($this->route, $url);
$this->runController('ctrlIndex');
}

}

private function runController($ctrlName) {
include "app/". $ctrlName .".php";

$ctrl = new $ctrlName();

if (empty($this->route)|| empty($this->route[0])){
$ctrl->index();
}
else {
if(empty($this->route))
$method='index';

else
$method = array_shift($this->route);
if(method_exists($ctrl, $method)){
$ctrl->$method();
} else throw new Exception('Error 404');
}
}
}
#90 #525190
class ctrlindex extends ctrl {
function index() {
$this->posts = $this->db->query('SELECT FROM posts ORDER BY ctime DESC')->all();
$this->out('posts.php');
}
function login() {
$this->out('login.php');
echo "login hi";
}

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

Вот роутер, что не так?

class ctrl {
public function __construct(){
$this->db = new db();
}
public function out($tplname, $nested = false) {
if(!$nested) {
$this->tpl=$tplname;
include 'tpl/main.php';
}
else
include 'tpl/'.$tplname;
}
}
class app {
public function __construct($path) {

$this->route = explode('/', $path);
$this->run();
echo $path;

}
private function run() {
$url = array_shift($this->route);
//if(!preg_match('@^[a-ZA-Z0-9.,-]&
@', $url)) throw new Exception('Invalid path');
$ctrlName = 'ctrl/'.ucfirst($url);
if (file_exists("app/".$ctrlName . ".php")){
$this->runController($ctrlName);

}
else {
array_unshift($this->route, $url);
$this->runController('ctrlIndex');
}

}

private function runController($ctrlName) {
include "app/". $ctrlName .".php";

$ctrl = new $ctrlName();

if (empty($this->route)|| empty($this->route[0])){
$ctrl->index();
}
else {
if(empty($this->route))
$method='index';

else
$method = array_shift($this->route);
if(method_exists($ctrl, $method)){
$ctrl->$method();
} else throw new Exception('Error 404');
}
}
}
#91 #525270
>>525190
хуйню написал
#92 #525279

>Решения задач лучше показать мне, особенно на ООП,так как сам ты вряд ли увидишь все ошибки



https://jsbin.com/yuheteweyi/2/edit?js,console

Решение задачи про электросеть на джаваскрипте. Это ООП, посоны?
sage #93 #525283
бамп
#94 #525320
>>523494 (OP)
Привет, братишки. Я уверен, этот вопрос задавали не единожды, но быстропоиск ответов не дал. Вообщем, я знаю базу пхп, жс, хтмл+цсс, немного мускл (ну и еще кучу баз других языков, штук 8). Могу, к примеру, подгугливая, запилить форму для постинга сообщений с подключением базы данных. Ясно, что этого для трудоустройства маловато будет, но тут я уже чуть ли не полтора года спотыкаюсь и ударяюсь лбом о потолок - что делать дальше? Нигде нету систематизированной информации по сабжу, и я чувствую себя астероидом в огромном космосе информационного пространства.
Просто садиться и разбирать задачки о списке студентов и дальше? Или все же стоит прочесть http://archive-ipq-co.narod.ru/ ?
Плюс, я лет 5 работал с джумлой, хостя у провайдера всё это говно, но до сих пор не имею полного представления как всё устроено.
#96 #525328
>>525320
Фреймворки учи и делай на них инет-магазины с админкой.
#97 #525330
>>525327
Зачем писать с нуля, если есть фреймворки?
#98 #525333
>>525328
Вот так сходу? А если проебусь с безопасностью?
#99 #525348
>>525330
Все, я уже исправил. Потому что мне важно самостоятельно понять принцип MVC. Потом и до них дойду.
#100 #525349
>>525333
Во-первых, как тут уже писали, в фреймворках учитана безопасность, и даже без них нужно заменять получаемые данные и делать все по правилам, паролль там через md5 пропускать, ты как-то циклишься на "безопасности", обычным одностраничным говносайтам взлом не грозит.
#101 #525350
Зашёл в /pr/, вижу этот тред на нулевой. Пользуясь случаем, дёргаю анусы всем отписавшимся без саги и укатываюсь в каноничный оповский тред.
Сага Сага #102 #525351
>>525350
Сага отвалилась.
#103 #525355
>>525350
Слушай, у тебя по ходу какие-то психические проблемы. Хочешь поговорить об этом? Я у тебя заместо психоаналитика буду, а ты меня пхп поучишь?
#104 #525367
>>523494 (OP)
Аноны, поясните за массивы. У меня стаж 6 лет, а вот как нормально работать с массивами, я так и не понял. Упражнения и прочее подгонититя? :3 В универах оче ебаная тема, мне кажется и не все преподы её освещают. ЧТО С НИМИ ДЕЛАТЬ?

даже не спрашивайте что я 6 лет делал
#105 #525380
>>525367

>У меня стаж 6 лет, а вот как нормально работать с массивами, я так и не понял.


Это нормально для php-программиста. Не парься.
#106 #525387
>>525380
:( но я на другом языке ебашу и строго серверсайд. массивы обхожу стороной, а то что с ними делаю, строго в рамках положенного

Всё равно тема довольно скользкая.
#107 #525393
>>525387

>но я на другом языке ебашу


На каком?
sage #108 #525400
>>525367
В это треде некому пояснять, тут одни трали. Спроси в каноничном треде с ОПом - https://2ch.hk/pr/res/514869.html
#109 #525413
Хули ничего не работает
<?php
function longdate($timestamp)
{
\treturn date("l F jS Y", $timestamp);
}
?>
#110 #525434
>>525413
Потому что ты тупой.
#111 #525458
>>525434
Значит и Робин Никсон тупой? Что с кодом не так?
sage #112 #525473
>>525458
Ты не в том треде спрашиваешь, тут одни трали. На вопросы в этом отвечают https://2ch.hk/pr/res/514869.html
#113 #525491
>>525413
а как ты собрался эту функцию вызывать лол? там же свои параметры в скобки не поставишь.
sage #115 #525494
>>525492
Нахуй иди, ты не ОП. Оп в другом треде вообще.
59 Кб, 940x465
#116 #525497
>>525413
Все работает, возможно ты передаешь не timestamp, а что-то другое.
ОП #117 #525532
>>525494
мамку твою ебал
#118 #525534
Есть ли тут те кто может написать небольшой сайтик с регистрацией и подтверждением регистрации по почте/восстановлением пароля и авторизацией? Ну, или ткнуть в уже готовый вариант. Нужна регистрация с активацией по почте онли и присвоение каждому юзеру уникального id после регистрации(активации). Сам не разбираюсь в этом вашем вебе и вообще не люблю веб погромирование, но тут приспичило. Готов даже символично заплатить, если нужно.
#119 #525538
>>525492
плюсадин, затралил траль.
sage #120 #525540
>>525534
тебе на fl.ru
#121 #525541
>>525534
Любой фреймворк с модулем пользователей. Вот, например, модуль для йии2 который умеет все что тебе нужно и даже немножко больше https://github.com/amnah/yii2-user С помощью композера все это устанавливается и настраивается в течении нескольких минут. Не нравится йии, возьму любой другой современный фреймворк и луркай на гитхабе "%фреймворкнейм% users".

> ткнуть в уже готовый вариант


Любая CMS.
#122 #525545
>>525534
http://phpdes.com/php/aktivaciya-email-posle-registracii/
2 секунды в гугле.
Но за 10 000 рэ могу тебе написать и поставить на хост.
#123 #525557
>>525545
Это плохой вариант. Зачем советовать плохое?
sage #124 #525561
>>525557
Сам тогда пиши, раз такой умный.
Архитектор-кун !T5MuanW1QE #125 #525562
Я архитектор в конторе где в стеке 90% PHP.

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

Спрашивайте ответы, мои няши :3
#126 #525563
>>525562
Zend или Simfony?
#127 #525565
>>525562
Стекломоем наебениваетесь или на боярышник хватает?
#128 #525566
>>525563
Смотря для чего, а так ни то, ни другое.
Архитектор-кун !T5MuanW1QE #129 #525567
>>525565
Хватает на хороший виски или текилу.
#130 #525571
Оскорбляет ли вас, когда ваш язык называют пэхэпэ? Просто интересно.
Архитектор-кун !T5MuanW1QE #131 #525573
>>525571
Нет, потому что язык - это просто инструмент.
#132 #525574
>>525566

> Смотря для чего


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

> ни то, ни другое


Но почему и какие наши альтернативы?
#133 #525576
>>525571
Ноуп.

>>525573
Двачую.
#134 #525577
>>525573
Ну все равно. У программиста же всегда будет любимый инструмент! Будь то пхп или питон, если речь про веб. Руби в пример не привожу, ибо он руби.
#135 #525579
>>525571
лол, да я сам его называю ПЫХА
#136 #525580
>>525571
А как его еще называть? ПИЭШПИ?
Архитектор-кун !T5MuanW1QE #137 #525582
>>525574

> Но почему и какие наши альтернативы?


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

Из вашего списка я бы выбрал Symfony (скорость разработки, миллиарды готовых решений). Сам бы я взял Laravel (скорость разработки, няшности) или Yii2 (скорость работы).

ПЫСЫ: не считаю ни один из представленных выше фреймворком плохим

>>525577

> У программиста же всегда будет любимый инструмент!


Будет, он им и останется, но пренебрегать другими инструментами - плохая мысль.
Архитектор-кун !T5MuanW1QE #138 #525583
>>525580
У нас его называют ПЫШП.\t\t
sage #140 #525590
>>525580
пи-ах-пи
#141 #525594
>>525582
Благодарю.
#142 #525612
В общем есть класс, в нем куча функций, как мне их разбить массивом, чтобы в зависимости от урл подключалась та или иная функция?
sage #143 #525615
>>525612
Попробуй оператором goto.
#144 #525617
>>525612
http://php.net/manual/ru/function.parse-url.php
Распарсь URL и вызывай в зависимости от содержимого нужный метод.
#145 #525633
>>525612
анус себе распарсь, пес
#146 #525639
>>525617
Я так и делаю, но хотелось бы как-то это автоматизировать в одну строчку.

f ($this->route[1]=='index.php' || empty($this->route[1]))
{
$ctrl->index();
}

elseif($this->route[1]=='?login')
{
$ctrl->login();
}
elseif($this->route[1]=='?add')
{
$ctrl->add();
}
elseif($this->route[1]=='?del')
{
#147 #525641
>>525639
Например
if (method_exists($ctrl, $controller)
{
if($this->route[1]==$controller)
{
$ctrl->$controller();
}
}
#148 #525653
>>525639
>>525641
Пясдуй в официальный тред, там тебе ОП ответит, как освободится. Или кто-нибудь другой.
Официальный тред: https://2ch.pm/pr/res/514869.html
#149 #525704
>>525653
Зачем мне писать в тред, ушедший в бамп лимит? Я же не поехавший.
#150 #525716
>>525704
Можешь писать в двух. Или только тут.
#151 #525720
>>525716
Блять не хочу, хочу жрать говно.
#152 #525743
>>525612
Запили роутер, который и будет вызывать нужный метод. Но судя по тому коду что ты привел у тебя там лютый говнокод.
#153 #525844
>>525562
Есть у вас такое понятие, как время жизни кода? Это косвенный вопрос о том, насколько на продакшне приемлем хуяк-хуяк-в-продакшн-лишь-бы-работало.

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

>>525585
Тебя еще не забанили, болезный?
sage #154 #525860
>>525720

>выбрал php


>рассуждает о поедании говна

50 Кб, 549x720
Архитектор-кун !T5MuanW1QE #155 #525911
>>525844

> Есть у вас такое понятие, как время жизни кода?


Есть. Если есть задача на хуяк-хуяк (что очень редко), то есть и задача на рефакторинг этого говна.

Но при этом защиту архитектуры, ревью, тестирование, etc. проходит любой код.

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


Приемлем, главное не зарасти в этом говне.
#156 #525962
>>525860

>Выбрал пхп


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


И часто у вас такое бывает?
#157 #525964
>>525743

>который и будет вызывать нужный метод


ну так покажи, как.
Архитектор-кун !T5MuanW1QE #158 #525966
>>525964
Вы так любите писать свои велосипеды (я хуею просто).

https://github.com/slimphp/Slim
https://github.com/chriso/klein.php
https://github.com/c9s/Pux
#159 #526015
Какие плюсы у пхп в качестве бекенда над джавой?
sage #160 #526016
>>526015
можно говнокодеров и макак сразу за бэкенд сажать
#161 #526021
>>526016
Ну если серьезно. Только низкий порог вхождения?
Интересно было бы сравнить скорость разработки на популярных фреймворках пхп и джавы.
#162 #526024
>>526016

>имплаинг что 90% бекендов на джяве не быдлокод надристанный идусами


ох ю

>>526015
у джявы нет нормальных вебфреймворков и вообще её тупарылая тырпрайзнутая суть плохо сочетается с вебом
#163 #526151
Как лучше запилить авторизацию в Symfony2 на скорую руку для тестового задания?
8 Кб, 405x440
#164 #526158
Господа, как мне найти строки из базы данных, которые входят в заданную строку?
Например, бд (или массив) = ("Паттерн", "Французский паттерн", "Коворкинг");
строка = "Съешь ещё этих мягких французских паттернов, да выпей коворкинга";

Как результат хотелось бы позиции подстрок в строке.
Делаю для инглиша, так что на падежи и прочее похуй.
#165 #526160
>>526158
Google://full+text+search
52 Кб, 374x575
#166 #526161
>>526151

>для тестового задания

#167 #526177
Только не бейте, няши.
Что нужно уметь, чтобы найти работу пхп-программистом на удалёнке хотя бы за 500$?
#168 #526180
>>526177

>Что нужно уметь


"Мне помог элемент удачи. Я нашёл контору в гермашке, которая работает на оДеске и имеет кучу сделанных проектов там. Они брались найти проект по хорошей ставке за 40% от всей суммы, которую я заработаю. Я согласился и они таки нашли. Четыре проекта я сделал с ними. Всё удаленно. После этого работал на пол-ставки вне оДеска и те деньги стали прибавкой к з/п. Так я понял, что на начальном этапе самое главное - не твой скилл, а скилл того, кто тебя продаёт.

Не лезьте сами на оДеск. Лезьте туда как часть аутсорс-конторы с кучей проектов и репутацией. Иначе будете конкурировать с индусами, что нереально."
#169 #526185
>>526180
Спасибо, полезная инфа.

Смотрел вакансии, требования к джуниору за 500$

>знание php, mysql, html, css, javascript


Требования к разработчику за 1К$

>то же самое + пару фреймворков


Какие реальные навыки нужны? Что нужно уметь делать на пхп, чтобы взяли джуном или разработчиком на удалёнку за 500$?
Что имеется в виду, когда пишут

>хорошее знание php


>отличное знание php


?
#170 #526197
>>526185

>Что имеется в виду, когда пишут


>>хорошее знание php


>>отличное знание php


Оба врут.
#171 #526199
>>526197
Не, это в требованиях к вакансии написано.
33 Кб, 500x500
157 Кб, 1024x683
187 Кб, 853x480
72 Кб, 1022x575
Клуб любителей изучать PHP 56 #172 #526228
Теперь это будет наш тред.

Добро пожаловать в наш уютный тредик. Тут мы изучаем язык PHP (а также JS/CSS/HTML/SQL), решаем задачки и даже делаем простые сайты! Зачем? Кто-то хочет научиться программировать, кто-то - делать сайты, кто-то - просто размять мозги и заняться чем-то полезным.

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

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

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

Предыдущий тред был тут: >>514869 (OP)

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

Ссылки и задачки в ОП посте.
56 Кб, 500x644
#173 #526229
!!!! Код нужно писать не как попало, а аккуратно и по правилам. Почему? Потому, что на неакуратно написанный код не хочется даже смотреть.

Если тебе лень выравнивать код руками, закачай его на http://beta.phpformatter.com/ и нажми «format». Робот исправит выравнивание и отступы в мгновение ока (да, прогресс не стоит на месте). Если ты используешь мощную IDE вроде PhpStorm, там тоже есть функция форматирования кода.

Горячие клавиши для форматирования кода в разных IDE: https://gist.github.com/codedokode/8759492

Вообще, в PHP долгое время не было единого стандарта оформления кода, все писали как попало и было много бардака, но сейчас дело лучше — есть стандарты PSR-1 и 2. Вот как надо оформлять код:

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

Вот ссылка на стандарты, где все это описано подробнее и даны примеры оформления:

PSR-1: https://github.com/php-fig/fig-standards/blob/master/accepted/ru/PSR-1-basic-coding-standard.md
PSR-2: https://github.com/php-fig/fig-standards/blob/master/accepted/ru/PSR-2-coding-style-guide.md

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

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

Будь доброжелателен

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

Объясняй

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

Не проповедуй

Мы учим использованию самых распространненных подходов, стандартов, библиотеки фреймворков. Если ты не любишь ООП, пробелы в коде, jQuery, сам PHP, то рассказать об этом стоит в каком-нибудь другом треде.

Ах да. Если тебе кажется, что что-то в учебнике или задачах можно сделать лучше — пиши, обратная связь всегда очень полезна.
56 Кб, 500x644
#173 #526229
!!!! Код нужно писать не как попало, а аккуратно и по правилам. Почему? Потому, что на неакуратно написанный код не хочется даже смотреть.

Если тебе лень выравнивать код руками, закачай его на http://beta.phpformatter.com/ и нажми «format». Робот исправит выравнивание и отступы в мгновение ока (да, прогресс не стоит на месте). Если ты используешь мощную IDE вроде PhpStorm, там тоже есть функция форматирования кода.

Горячие клавиши для форматирования кода в разных IDE: https://gist.github.com/codedokode/8759492

Вообще, в PHP долгое время не было единого стандарта оформления кода, все писали как попало и было много бардака, но сейчас дело лучше — есть стандарты PSR-1 и 2. Вот как надо оформлять код:

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

Вот ссылка на стандарты, где все это описано подробнее и даны примеры оформления:

PSR-1: https://github.com/php-fig/fig-standards/blob/master/accepted/ru/PSR-1-basic-coding-standard.md
PSR-2: https://github.com/php-fig/fig-standards/blob/master/accepted/ru/PSR-2-coding-style-guide.md

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

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

Будь доброжелателен

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

Объясняй

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

Не проповедуй

Мы учим использованию самых распространненных подходов, стандартов, библиотеки фреймворков. Если ты не любишь ООП, пробелы в коде, jQuery, сам PHP, то рассказать об этом стоит в каком-нибудь другом треде.

Ах да. Если тебе кажется, что что-то в учебнике или задачах можно сделать лучше — пиши, обратная связь всегда очень полезна.
#174 #526230
Напомню себе проверить код этого анона: >>524520\t
https://github.com/nsdvw/file-sharing

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

Ответ анону с 10 задачкой на HTML и на регулярки: >>526137\t
Ответ на задачку про номера телефонов: >>526196\t
Ответ анону с кучей HTML задачек: >>526200\t
Ответ анону с кучей простых заадчек из учебника: >>526203
Ответ про поддрежку utf-8 в ядре: >>526212\t

ну и другие ответы. Если я кого-то пропустил, напомните о себе
Переверни дерево #175 #526231
Аноны, те из вас, кто читает всякие It-сайты, наверно уже натыкались на упоминание задачи про переворот бинарного дерева. Если вам интересно, то на одном из западных сайтов или в твиттере человек возмущался тем, что его, уважаемого разработчика, пришедшего на собеседование в гугл завалили этой идиотской задачей вместо того чтобы поговорить про его опыт и знания.

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

Но вы пока не профессиональные разработчики, почему бы не поломать голову? Вот задача:

- напишите функцию, переворачивающую бинарное дерево.

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

https://ru.wikipedia.org/wiki/%D0%94%D0%B5%D1%80%D0%B5%D0%B2%D0%BE_(%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85)

http://www.intuit.ru/studies/courses/648/504/lecture/11458

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

С деревьями связано много интересных алгоритмов и задач:

http://algolist.manual.ru/ds/btree.php
http://algolist.manual.ru/ds/walk.php

Бинарное (двоичное) дерево — это дерево, у каждого узла которого может быть не более 2 детей. Их обычно называют «левый» и «правый» ребенок.

«Перевернуть» дерево значит пройтись по всем узлам в дереве и поменять местами «левого» и «правого» детей.

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

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

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

http://learnc.info/adt/binary_tree_traversal.html
http://hci.fenster.name/304y/lab3/
https://sohabr.net/post/232669/

Ну а имея его, перевернуть дерево, труда, думаю, не составит.

Аноны, попробуйте порешать. Даже если вы будете натягивать шаблоны на битрикс, все равно для мозгов полезно.
Переверни дерево #175 #526231
Аноны, те из вас, кто читает всякие It-сайты, наверно уже натыкались на упоминание задачи про переворот бинарного дерева. Если вам интересно, то на одном из западных сайтов или в твиттере человек возмущался тем, что его, уважаемого разработчика, пришедшего на собеседование в гугл завалили этой идиотской задачей вместо того чтобы поговорить про его опыт и знания.

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

Но вы пока не профессиональные разработчики, почему бы не поломать голову? Вот задача:

- напишите функцию, переворачивающую бинарное дерево.

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

https://ru.wikipedia.org/wiki/%D0%94%D0%B5%D1%80%D0%B5%D0%B2%D0%BE_(%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85)

http://www.intuit.ru/studies/courses/648/504/lecture/11458

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

С деревьями связано много интересных алгоритмов и задач:

http://algolist.manual.ru/ds/btree.php
http://algolist.manual.ru/ds/walk.php

Бинарное (двоичное) дерево — это дерево, у каждого узла которого может быть не более 2 детей. Их обычно называют «левый» и «правый» ребенок.

«Перевернуть» дерево значит пройтись по всем узлам в дереве и поменять местами «левого» и «правого» детей.

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

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

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

http://learnc.info/adt/binary_tree_traversal.html
http://hci.fenster.name/304y/lab3/
https://sohabr.net/post/232669/

Ну а имея его, перевернуть дерево, труда, думаю, не составит.

Аноны, попробуйте порешать. Даже если вы будете натягивать шаблоны на битрикс, все равно для мозгов полезно.
#176 #526233
>>526151

Разумеется используя возможности симфони и минимум велосипедостроения. Погугли по словам «symfony авторизация» например (я проверил, все гуглится).

Заметь что ответ на этот вопрос ты бы мог получить гораздо быстрее из гугла.
#177 #526236
test
#178 #526243
>>525966
Быстрее свой написать, чем чужой расковыривать.
#179 #526245
>>526180

>Лезьте туда как часть аутсорс-конторы


Ага и как частью этой конторы стать? Все равно нужно лезть на одеск и искать эту контору.
#180 #526262
Сап пхпач. Устроился в фирму местную и маленькую. В общем дали задание разбираться с цмсками типа опенскрипт и джумла, есть годные гайды по джумле? Она на первый взгляд такая неудобная.
sage #181 #526276
>>526262
С такими вобросами тебе в /веб
#182 #526292
>>526115
https://github.com/V3N0m21/Uppu3
Разобрал замечания, есть пару вопросов

>Тут можно (и нужно) прописать связь с файлом. А в файле — обратную связь. Зачем нам id файла когда мы можем прописать связь и доктрина будет возвращать нам сущность-файл?



Я не совсем понимаю как это должно работать.
https://github.com/V3N0m21/Uppu3/blob/master/app/Resource/Comments.php#L46
Я сделал так, но я не уверен что уловил суть.

>$deleted = $cache->deleteAll();



Это у меня на время отладки, кэш создал мне много проблем

> `children` int(11) DEFAULT NULL,


>Что хранится в children? Комментария нет, непонятно.



С этим полем children у меня тоже непонятки, по идее туда должны вставляться ID потомков, но я не совсем понимаю почему у меня это не работает, если не сложно, посмотри что у меня там не так, делал как в оф.документации
https://github.com/Atlantic18/DoctrineExtensions/blob/master/doc/tree.md#materialized-path

> https://github.com/V3N0m21/Uppu3/blob/master/public/index.php#L50


> $helper = new FormatHelper();


>Это не нужно, там же все методы статические



А как тогда передать это в шаблон?
#183 #526298
>>526124

>Вот кстати, ты файлообменник доделываешь, самое время за HTML, JS и SQL взяться, если ты их еще не решал. Ну и далее фреймворки мучать.



>Вообще, справедливости ради, выгоднее может быть сначала мучать Yii2 и симфони 2, а потом JS/HTML/SQL, так как на собеседовании это будет весомее, но ведь ты будешь ужасный код писать, будешь тратить много времени на отладку неработающих скриптов или верстки, это все равно надо знать. Мне не нравится когда люди хорошо пишут PHP код, но открываешь JS и там ужас какой-нибудь.



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

По поводу sql да, я чувствую что я там совсем плаваю. Был бы благодарен за ссылку на книжку, или хотя бы название книжки по которой можно было бы подтянуть основные моменты.
#184 #526330
>>526292

> https://github.com/V3N0m21/Uppu3/blob/master/app/Resource/Comments.php#L46


> Я сделал так, но я не уверен что уловил суть.


Пока неправильно. Ты знаешь про виды отношений, 1-1, 1-M, M-N? Если нет то начни с повторения: http://jtest.ru/bazyi-dannyix/sql-dlya-nachinayushhix-chast-3.html

Определи какое тут отношение. Затем открывай

http://doctrine-orm.readthedocs.org/en/latest/reference/association-mapping.html (англ)
http://odiszapc.ru/doctrine/working-with-associations/ (рус)

И определи как реализуется та или иная связь. ну например в случае ManyToMany у тебя не должно быть аннотации @Column и должна быть @JoinColumn, а само поле $fileId (неудачное название) будет содержать тогда коллекцию связанных с комментарием сущностей.

> Это у меня на время отладки, кэш создал мне много проблем


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

> С этим полем children у меня тоже непонятки, по идее туда должны вставляться ID потомков,


Нет. Так никто не делает так как со списом id нельзя работать на уровне SQl, и это противоречит нормализации (в одном поле должно храниться одно значение а не несколько). Надо бы тебе SQL подучить.

> но я не совсем понимаю почему у меня это не работает, если не сложно, посмотри что у меня там не так, делал как в оф.документации


Там $children замаплено не на поле в таблице а на отношение «родитель» - «дети». Если у поля есть аннотация @COlumn это значит, оно мапится на реальную колонку в базе данных. Если там стоит @ManyToOne , @OneToOne и подобное то это отношение, и оно может вообще не соответствовать никакой колонке.

Например чтобы получить детей, мы делаем выборку по условию WHERE parentId = ? и нам не нужно поле для хранения их списка. Потому $children это ассоциация (связь) в доктрине а не поле в таблице. Туда записвается коллекция (объект напоминающий массив) сущностей-деетй комментария и ты можешь пользоваться ей так:

$comment = $em->find(..., $id);

$children = $comment->getChildren(); // возвращает объект PersistentCollection с комментариями внутри

foreach ($children as $child) {
echo $child->getComment(); // выводит текст комментария

Заметь что это так называемая «ленивая коллекция». При обращении $children = $comment->getChildren(); ты получаешь объект в котором нет детей. Там хранится только id родителя (то есть $comment).

А при вызове foreach, когда ты пытаешься перебирать содержимое объекта-коллекции, он делает запрос в базу SELECT .. WHERE parentId = ? и загружает в себя комментарии. И затем происходит цикл по ним.

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

SELECT com, ch FROM Comment com JOIN com.children ch WHERE ...

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

Там есть 2 вида прокси: прокси для коллекции (используется в отношениях 1-M и M-N) и прокси для объекта (в отсношениях 1-1 и M-1). У примеру, в поле $file у комментария загрузится прокси-объект для Entity\File. Это объект класса, унаследованного от него:

namespace \Proxy\Entity\;
class File extends \Entity\File {
...
}

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

Ты можешь найти прокси-классы в папке которая указана в конфиге: $config->setProxyDir(sys_get_temp_dir()); Рекомендую посмотреть их.

Этот паттерн разумеется описан в книге Фаулера: http://design-pattern.ru/patterns/lazy-load.html

В общем, попробуй с этим разобраться, как оно работает.

И вторая концепция, которую ты должен осилить, это Identity Map: http://design-pattern.ru/patterns/identity-map.html

Ее суть в том что доктрина никогда не создаст 2 сущности соответствующих одной строке таблице. Вот этот код:

$c1 = $em->find(..., 1); // делает запрос в базу
$c2 = $em->find(..., 1); // берет ранее загруженную сущность из Identity Map

Таким образом в твоей программе никогда не будет 2 сущностей с одинаковым id.

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

Как видишь, для новичка доктрина доволно сложная. Но тем не менее, она позволяет нам экономить силы на написании однотипного кода работы с базой, а что касается описанных выше конценпций то они выглядят логично если вспомнитьчто цель ORM абстрагироваться от базы и создать видимость что весь граф сущностей хранится в памяти, а не базе.
#184 #526330
>>526292

> https://github.com/V3N0m21/Uppu3/blob/master/app/Resource/Comments.php#L46


> Я сделал так, но я не уверен что уловил суть.


Пока неправильно. Ты знаешь про виды отношений, 1-1, 1-M, M-N? Если нет то начни с повторения: http://jtest.ru/bazyi-dannyix/sql-dlya-nachinayushhix-chast-3.html

Определи какое тут отношение. Затем открывай

http://doctrine-orm.readthedocs.org/en/latest/reference/association-mapping.html (англ)
http://odiszapc.ru/doctrine/working-with-associations/ (рус)

И определи как реализуется та или иная связь. ну например в случае ManyToMany у тебя не должно быть аннотации @Column и должна быть @JoinColumn, а само поле $fileId (неудачное название) будет содержать тогда коллекцию связанных с комментарием сущностей.

> Это у меня на время отладки, кэш создал мне много проблем


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

> С этим полем children у меня тоже непонятки, по идее туда должны вставляться ID потомков,


Нет. Так никто не делает так как со списом id нельзя работать на уровне SQl, и это противоречит нормализации (в одном поле должно храниться одно значение а не несколько). Надо бы тебе SQL подучить.

> но я не совсем понимаю почему у меня это не работает, если не сложно, посмотри что у меня там не так, делал как в оф.документации


Там $children замаплено не на поле в таблице а на отношение «родитель» - «дети». Если у поля есть аннотация @COlumn это значит, оно мапится на реальную колонку в базе данных. Если там стоит @ManyToOne , @OneToOne и подобное то это отношение, и оно может вообще не соответствовать никакой колонке.

Например чтобы получить детей, мы делаем выборку по условию WHERE parentId = ? и нам не нужно поле для хранения их списка. Потому $children это ассоциация (связь) в доктрине а не поле в таблице. Туда записвается коллекция (объект напоминающий массив) сущностей-деетй комментария и ты можешь пользоваться ей так:

$comment = $em->find(..., $id);

$children = $comment->getChildren(); // возвращает объект PersistentCollection с комментариями внутри

foreach ($children as $child) {
echo $child->getComment(); // выводит текст комментария

Заметь что это так называемая «ленивая коллекция». При обращении $children = $comment->getChildren(); ты получаешь объект в котором нет детей. Там хранится только id родителя (то есть $comment).

А при вызове foreach, когда ты пытаешься перебирать содержимое объекта-коллекции, он делает запрос в базу SELECT .. WHERE parentId = ? и загружает в себя комментарии. И затем происходит цикл по ним.

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

SELECT com, ch FROM Comment com JOIN com.children ch WHERE ...

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

Там есть 2 вида прокси: прокси для коллекции (используется в отношениях 1-M и M-N) и прокси для объекта (в отсношениях 1-1 и M-1). У примеру, в поле $file у комментария загрузится прокси-объект для Entity\File. Это объект класса, унаследованного от него:

namespace \Proxy\Entity\;
class File extends \Entity\File {
...
}

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

Ты можешь найти прокси-классы в папке которая указана в конфиге: $config->setProxyDir(sys_get_temp_dir()); Рекомендую посмотреть их.

Этот паттерн разумеется описан в книге Фаулера: http://design-pattern.ru/patterns/lazy-load.html

В общем, попробуй с этим разобраться, как оно работает.

И вторая концепция, которую ты должен осилить, это Identity Map: http://design-pattern.ru/patterns/identity-map.html

Ее суть в том что доктрина никогда не создаст 2 сущности соответствующих одной строке таблице. Вот этот код:

$c1 = $em->find(..., 1); // делает запрос в базу
$c2 = $em->find(..., 1); // берет ранее загруженную сущность из Identity Map

Таким образом в твоей программе никогда не будет 2 сущностей с одинаковым id.

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

Как видишь, для новичка доктрина доволно сложная. Но тем не менее, она позволяет нам экономить силы на написании однотипного кода работы с базой, а что касается описанных выше конценпций то они выглядят логично если вспомнитьчто цель ORM абстрагироваться от базы и создать видимость что весь граф сущностей хранится в памяти, а не базе.
#185 #526334
>>526292

> >Это не нужно, там же все методы статические


> А как тогда передать это в шаблон?


Передавать в любом случае смысла нет так как статические методы надо вызыать не через переменную-объект, а через класс:

Class::method

В твоем случае надо либо сделать методы не статическими, либо, что полезнее, объявить функции в твиге как описано тут: http://twig.sensiolabs.org/doc/advanced.html#functions

Заметь что когда тебе надо создать много функций, ты можешь сделать класс-расширение с ними как описано тут: http://twig.sensiolabs.org/doc/advanced.html#creating-an-extension

Сделай-ка расширение к твигу, допустим с названием UppuExtension, и добавь туда нужные функции.
#186 #526336
>>526298

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

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


Криво писать HTML-код внутри строки. А в твоем случае это вообще не требуется, так как форма есть в дереве DOM, ее надо просто перенести под нужный комментарий.

> Еще хотел спросить насичет Аякса, его тоже учить по этой книге, или по нему есть что-то другое?


По этой, но сначала разумеется надо выучить сам язык JS.

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


В задачках из оп поста на SQL есть ссылки на туториалы, для начала их пройди, они простые.
#187 #526339
>>526292

Насчет identity map, это работает примерно так. Представь массив вида id => сущность, изначально пустой. Это и есть простейший пример map:

$map = [];

Затем доктрина при зарузке данных из БД (например при вызове findBy) делает так:

$rows = ... ; //строки с данными из базы
$results = [];

foreach ($rows as $row) {
// определяем id сущности в этой строке
$id = $row['id'];
// Если она есть в identity map, берем ее оттуда, иначе создаем, заполняем данными и кладем в map
if (array_key_exists($id, $map)) {
$entity = $map[$id];
} else {
$entity = new Comment;
// поставляем значения в объект из массива данных черз Reflection API (позволяющее лезть в закрытые снаружи поля)
....
$map[$id] =$entity;
}

$result[] = $entity;
}

return $result;
#187 #526339
>>526292

Насчет identity map, это работает примерно так. Представь массив вида id => сущность, изначально пустой. Это и есть простейший пример map:

$map = [];

Затем доктрина при зарузке данных из БД (например при вызове findBy) делает так:

$rows = ... ; //строки с данными из базы
$results = [];

foreach ($rows as $row) {
// определяем id сущности в этой строке
$id = $row['id'];
// Если она есть в identity map, берем ее оттуда, иначе создаем, заполняем данными и кладем в map
if (array_key_exists($id, $map)) {
$entity = $map[$id];
} else {
$entity = new Comment;
// поставляем значения в объект из массива данных черз Reflection API (позволяющее лезть в закрытые снаружи поля)
....
$map[$id] =$entity;
}

$result[] = $entity;
}

return $result;
#188 #526342
Есть ли современное но не объемное чтиво по сетям? Танненбаума я только за 2003 год нашел, Олифер слишком большой, мне с TCP/IP разобраться.
#189 #526348
>>526342

Кто-то писал что у Олифера есть уменьшенная версия учебника: >>513854

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


Там все излагается гораздо более кратко и доступно. "Компьютерные сети" для гиков, "Основы" для нубов. Сами аффтары тралят в предисловии, говорят мол для ниасиляторов выпускаем лайт-версию, пикрелейтед.

Хотя не знаю, может и эта будет слишком большой для тебя.
#190 #526351
>>526342

Мой краткий пост про TCP: >>510553
165 Кб, 1644x1012
#191 #526356
Подскажите, как в ебучем Phpstorm включить нормально xdebug. Сделал как на скрине, работает, но каждый раз нужно на каждом новом php файле лезть в настройку эту и писать в конец имя файла для дебага (на скрине test2.php). Иначе он не то дебажить начинает. Как там автоматическую подстановку файла при дебаге подключить? В netbeans все заводилось без танцев с бубном и само, неужели в phpstorm так неудобно сделали?
#192 #526359
>>526342
У "интуита" еще неплохо объясняется.
http://www.intuit.ru/studies/courses/2/2/info
#193 #526368
>>526356

В меню нет пунктов типа дебажить текущий файл?
125 Кб, 1459x909
179 Кб, 1414x984
#194 #526374
>>526356
>>526368
Нет. Но я разбрался уже сейчас случайно. Вот так надо было все выставлять, теперь автоматически нужный файл дебажит. Причем в доках по настройке Phpstorm фиг кто это скажет, я их уже гору перелопатил, наткнулся сейчас методом тыка только.
#195 #526383
>>526374
Кстати, кому надо команды под линукс, чтобы Oracle Java для Phpstorm поставился, вчера их тоже гуглить заебался:
su
echo "deb http://ppa.launchpad.net/webupd8team/java/ubuntu precise main" | tee /etc/apt/sources.list.d/webupd8team-java.list
echo "deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu precise main" | tee -a /etc/apt/sources.list.d/webupd8team-java.list
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys EEA14886
apt-get update
apt-get install oracle-java7-installer
exit
cd ~
wget http://download-cf.jetbrains.com/webide/PhpStorm-9.0.tar.gz
tar xfz PhpStorm-.tar.gz
cd PhpStorm
/bin
./PhpStorm.sh
#196 #526388
>>526383

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

Тут как минимум это есть: https://www.jetbrains.com/phpstorm/help/system-requirements-and-installation.html#d266796e215
#197 #526389
>>526388
Там неправильно. Я оттуда сначала пробовал, ничего не поставилось.
#198 #526396
>>526389

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

Если там неправильно то лучше всего им же в багтрекер об этом написать (если ошибка у них а не ты накосячил в выполнении команд). Я не понимаю, почему для установки продукта надо лезть на какие-то левые сайты, а не официальный.
#199 #526400
>>526396
Потому что на официальном неактуальные команды же. Я на официальный и залез сначала. С дебагом то же самое, на официальном сайте не было, как настроить правильно.
#200 #526422
>>526200

>не работает font: 40px/1.5 #333 "Times New Roman";


>потому что нельзя указывать цвет в font


Что? А почему тогда работает font: 14px/1.2 #000 arial; ?
Ну ладно, мне все равно привычнее писать правила по-отдельности: font-size, font-family, line-height и т.д.

Вопрос не по теме: я недавно пересел на эту вашу убунту, и последнее время стал дико тормозить то ли рабочий стол (xfce), то ли проводник (thunar, иногда вылетает, особенно если быстро кликнуть несколько раз кнопку переходу в папку выше).
Может кто сталкивался, как там его лечить.
Потому что кликаю правой кнопкой по значку на рабочем столе, и жду секунд пять, пока появится контекстное меню. Винчестер скрипит в это время, будто я запускаю yoba-игру.
#201 #526428
>>526422

Почитай синтаксис http://htmlbook.ru/css/font

Если у тебя что-то работает то это ничего не доказывает. Например у тебя это правило могло не работать, а шрифт унаследовался от родительского элемента.
#202 #526429
>>526202

> 4 задание


>Там не 10px между блоками, смотри сам: https://jsfiddle.net/3jok8w7k/1/


А, я понял, inline-block ведет себя как строчный, поэтому появляются пробелы между блоками.
Не знаю, как с этим бороться. Можно конечно поудалять переводы строк, и писать в одну строку, но это как-то тупо.
Я не выспался и не могу сегодня соображать.
Пойду лучше поучу матчасть, чем часами ломать голову над такими заданиями.
>>526428

>шрифт унаследовался


Вот оно че, я понял.
#203 #526435
>>526422

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


> Может кто сталкивался, как там его лечить.


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

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

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


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

Не то чтобы я эксперт по этой теме, но если есть желание покрасноглазить, я могу что-то подсказать. В твоем случае например можно запускать тормозящую программу под strace (а удобнее наверно присоединяться к ней на время) и анализировать системные вызовы.
#204 #526440
>>526429

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


Ты подсказки под задачей прочел? https://gist.github.com/codedokode/58ebc90bd006baf4b35c#Задание-4

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

#205 #526450
>>526435

>это не путь истинного линуксоида, имей в виду


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

>если есть желание покрасноглазить


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

>Ты подсказки под задачей прочел? http://css-live.ru/articles/zagadochnye-otstupy-mezhdu-inlajn-blokami.html (32 экрана)


Блджад, рака тем людям, которые не могут писать лаконичные статьи.
Придется читать. Я сейчас прочитаю, и перепишу статью так, как она должна была бы выглядеть по моим представлениям о ясности и лаконичности. (Офигенное занятие, а кто-то сейчас на пляже загорает)
#206 #526465
>>526450
Ставь дебиан c GNOME, там ничего не тормозит. Убунта для говноедов, переехавших из последней винды, потому там много свистелок и перделок, от которых тормоза.
61 Кб, 757x552
#207 #526467
Помогите слепому увидеть разницу между двумя картинками.
На что указывает красный стрелочкэ?
53 Кб, 757x552
#208 #526469
>>526467
На пикрелейтед же.
#209 #526471
>>526467
Красная рамка обрезает часть кнопки.
60 Кб, 757x552
#210 #526476
#211 #526477
Да понял уже, просто у меня глазомер еще не настолько развит. И я не привык, что различие в 0.5px может привести к неприятным последствиям. Но наверное таки может, верю на слово.
#212 #526499
Осилил графоманскую статью http://css-live.ru/articles/zagadochnye-otstupy-mezhdu-inlajn-blokami.html

Законспектировал 36 строк, 3614 символов. (Оригинальная статья 455 строк, 27634 символа)
Выводы: из-за того что разработчики браузеров не могут реализовать этот несчастный стандарт w3org, мне приходится разбираться во всяких хаках и костылях. Это нихуя не интересно и непрактично. Поэтому в верстке я выберу быдлокодерский путь, а именно тупое запоминание готовых решений.

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

По самой статье: там разбирается несколько "хаков", то есть обходных решений, чтобы избавиться от ошибок в браузерах.
Я для себя выбрал следующий способ: родительскому элементу выставить font-size:0, а у элементов с inline-block соответственно переопределить размер шрифта на нужный. Так мы убиваем пробелы, но проявляются косяки разработчиков Safari. Чтобы этого "бага" избежать, применяем правило display:table родительскому элементу. Что за собой тянет ряд особенностей данного типа поведения, о которых необходимо помнить.

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

В верстке существует проблема с интервалами (пробелами), которые вставляются между словами.
Эти пробелы часто мешают нам при вёрстке того или иного блока. Избавиться от них бывает не так-то просто.
В этой статье мы рассмотрим, что такое inline-block, и почему после себя он ставит эти непонятные интервалы. Ну, и, самое главное, мы увидим несколько универсальных решений данного вопроса и,конечно же, обсудим все их стороны.

inline-block — представляет собой блок, с поведением строки, т.е. по сути является строчно-блочным элементом.
Строчное поведение inline-block позволяет ему оставаться в одной строке с другими строчными элементами, например <span>-ом или попусту сливаться с обычными буквами, т.е. вести себя, как текст в строке.
Ну а благодаря своим блочным способностям, inline-block-у можно смело задавать любые свойства, которые присущи блочным элементам: ширину, высоту, верхний и нижний margin, например, уже будет действовать, как у блоков.

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

Варианты решения этой задачи.
1. margin-left (отрицательный) — свойство, с помощью которого можно сдвинуть пункты влево, как бы друг на друга, "избавившись" от пробела между ними.
Недостаток: в разных версиях браузеров могут быть микроскопические отличия, которые тем не менее могут сломать верстку при изменении шрифта или его размера.
В случае фиксированных размеров приемлемый вариант.

2. font-size — свойство, задающее размер шрифта, с помощью которого нашему пробелу (символу) можно выставить размер шрифта, равный нулю, и тем самым сделать его настолько маленьким, что его попусту не будет видно.
Выставляем размер шрифта у обертки-родителя (например ul) в ноль.
Не работает в Safari. Для лечения прописываем родителю display: table.
Соответственно такое решение тянет за собой ряд подводных камней, о который придется помнить при дальнейшей модификации этих элементов верстки.

3. letter-spacing — свойство, определяющее интервал между символами. По умолчанию (normal) задаёт обычный интервал, исходя из размера и типа шрифта.
Можно подогнать отрицательный letter-spacing у родительского элемента (например для Verdana это -.36em). Но это не работает в Opera.
Работает в комбинации с предыдущим решением с font-size. Но опять-таки, в Safari может быть баг, из-за которого некорректно работают относительные величины (em).
Так что способ display:table + font-size предпочтительнее.

4. word-spacing — свойство, определяющее интервал между словами.
Можно попробовать выставить отрицательный word-spacing у родителя, но появляются похожие проблемы, как и в случае использование letter-spacing. На этот раз Safari и Chrome выдают некорректные результаты.
Решается заданием родителю display:table.

5. Прижать элементы друг к другу, т.е. вплотную, тег к тегу, и таким образом убрать межссловный интервал. Либо поставить комментарии между элементами, тем самым убрав между ними отступы.
Недостатки понятны.

6. Не писать закрывающие теги.
Оригинально. Но валидатору это очевидно не понравится.
#212 #526499
Осилил графоманскую статью http://css-live.ru/articles/zagadochnye-otstupy-mezhdu-inlajn-blokami.html

Законспектировал 36 строк, 3614 символов. (Оригинальная статья 455 строк, 27634 символа)
Выводы: из-за того что разработчики браузеров не могут реализовать этот несчастный стандарт w3org, мне приходится разбираться во всяких хаках и костылях. Это нихуя не интересно и непрактично. Поэтому в верстке я выберу быдлокодерский путь, а именно тупое запоминание готовых решений.

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

По самой статье: там разбирается несколько "хаков", то есть обходных решений, чтобы избавиться от ошибок в браузерах.
Я для себя выбрал следующий способ: родительскому элементу выставить font-size:0, а у элементов с inline-block соответственно переопределить размер шрифта на нужный. Так мы убиваем пробелы, но проявляются косяки разработчиков Safari. Чтобы этого "бага" избежать, применяем правило display:table родительскому элементу. Что за собой тянет ряд особенностей данного типа поведения, о которых необходимо помнить.

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

В верстке существует проблема с интервалами (пробелами), которые вставляются между словами.
Эти пробелы часто мешают нам при вёрстке того или иного блока. Избавиться от них бывает не так-то просто.
В этой статье мы рассмотрим, что такое inline-block, и почему после себя он ставит эти непонятные интервалы. Ну, и, самое главное, мы увидим несколько универсальных решений данного вопроса и,конечно же, обсудим все их стороны.

inline-block — представляет собой блок, с поведением строки, т.е. по сути является строчно-блочным элементом.
Строчное поведение inline-block позволяет ему оставаться в одной строке с другими строчными элементами, например <span>-ом или попусту сливаться с обычными буквами, т.е. вести себя, как текст в строке.
Ну а благодаря своим блочным способностям, inline-block-у можно смело задавать любые свойства, которые присущи блочным элементам: ширину, высоту, верхний и нижний margin, например, уже будет действовать, как у блоков.

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

Варианты решения этой задачи.
1. margin-left (отрицательный) — свойство, с помощью которого можно сдвинуть пункты влево, как бы друг на друга, "избавившись" от пробела между ними.
Недостаток: в разных версиях браузеров могут быть микроскопические отличия, которые тем не менее могут сломать верстку при изменении шрифта или его размера.
В случае фиксированных размеров приемлемый вариант.

2. font-size — свойство, задающее размер шрифта, с помощью которого нашему пробелу (символу) можно выставить размер шрифта, равный нулю, и тем самым сделать его настолько маленьким, что его попусту не будет видно.
Выставляем размер шрифта у обертки-родителя (например ul) в ноль.
Не работает в Safari. Для лечения прописываем родителю display: table.
Соответственно такое решение тянет за собой ряд подводных камней, о который придется помнить при дальнейшей модификации этих элементов верстки.

3. letter-spacing — свойство, определяющее интервал между символами. По умолчанию (normal) задаёт обычный интервал, исходя из размера и типа шрифта.
Можно подогнать отрицательный letter-spacing у родительского элемента (например для Verdana это -.36em). Но это не работает в Opera.
Работает в комбинации с предыдущим решением с font-size. Но опять-таки, в Safari может быть баг, из-за которого некорректно работают относительные величины (em).
Так что способ display:table + font-size предпочтительнее.

4. word-spacing — свойство, определяющее интервал между словами.
Можно попробовать выставить отрицательный word-spacing у родителя, но появляются похожие проблемы, как и в случае использование letter-spacing. На этот раз Safari и Chrome выдают некорректные результаты.
Решается заданием родителю display:table.

5. Прижать элементы друг к другу, т.е. вплотную, тег к тегу, и таким образом убрать межссловный интервал. Либо поставить комментарии между элементами, тем самым убрав между ними отступы.
Недостатки понятны.

6. Не писать закрывающие теги.
Оригинально. Но валидатору это очевидно не понравится.
#213 #526531
ОП, легитимный расскажи о себе. Давно программируешь, что знаешь, кем вообще работаешь? Преподаватель в вузе, работаешь в фирме или может курсы свои ведешь?
#214 #526532
>>526531

Он не ответит. Его уже многие спрашивали.
#215 #526533
>>526532
Ясно, значит это искусственный разум. ПХП программисты все-таки смогли его сделать, чтобы было удобно передавать свой опыт другим.
#216 #526535
Помогите, ребят.
Как решить вторую задачу? http://archive-ipq-co.narod.ru/i-am-smart.html
Через explode("," $str) я смог получить массив, но вида "порядковый номер" => 'intKey'=6. Дальше никак.
#217 #526537
>>526533

Было бы круто. Но боюсь все проще и он просто скрытный скромняшка.
#218 #526555
>>526535
Помучился и сам решил. Проверьте на быдлокод: https://ideone.com/JrYztD
#219 #526557
>>526537
Вангую, он один из разрабов PHP или кодит какой-нибудь известный фреймворк в опенсорсе.
#220 #526560
надо будет вбросить инфу, что оп это тян, тогда они вообще на нее мастурбировать начнут
#221 #526562
>>526560
Они и на собаку мастурбировать будут
#222 #526563
>>526562
Ты, навреное, хотел сказать на кота.
#223 #526564
>>526563
Он хотел сказать, что кодить лучше давай пойдем, а не выбирать на кого тут аноны мастурбировать будут, на котейку или собаку.
54 Кб, 566x604
#224 #526566
>>526564
Пойдем :3
#225 #526567
Исправлено 4-е задание.
https://jsfiddle.net/3jok8w7k/4/
Убрал пробелы при помощи font-size:0 и display:table у родителя.

В шестом задании применил clearfix-метод против выпадения плавающих блоков.
http://jsfiddle.net/8mk9bc62/1/

Девятое:

>сделай это клеарфиксом, как написано в подсказке под задачей


>убери div-обертку над текстом


http://jsfiddle.net/9grpj1hf/1/

Одиннадцатое.

>Ты поверх скругленного label выводишь квадратный серый span вот он и закрывает уголки. Увеличь масштаб и увидь.


Да блин вижу я это, вижу. Но не знаю как исправить.

Пойду лучше учить фреймворки, в жопу верстку.
#226 #526570
>>526567

> Да блин вижу я это, вижу. Но не знаю как исправить.


Очевидно скруглить уголки у спана тоже.
#227 #526579
>>526570
Думал об этом, но меня останавливало то, что радиусы могут не совпасть. Это ведь концентрические окружности, у них по идее разные радиусы.
Ну ладно.
http://jsfiddle.net/9tLfgyej/3/
В шрифтах не разбираюсь, поставил ариал, хотя это явно не он.
Что касается тени, то на картинке в задании не могу рассмотреть, как она должна выглядеть: кажется, у верхней рамки тень сильнее, справа и слева слабее, а внизу едва заметна. Не знаю, как это реализовать. Сделал простой box-shadow.

Что-то я не в форме сегодня. Надо поспрать.
Хотя в общем я доволен. Хоть и заманался с этими вашими "задачками", узнал много нового об инлайн-блоках, анимации/transition, псевдокласс :checked и т.д.
#229 #526583
>>526567
Пиздуй в версткотред в воркаче, хуле вы тут вообще забыли?
#230 #526584
>>526583
Пасть закрой, макака.
#231 #526585
PHP программисту вообще верстать нужно уметь на хорошем уровне?
205 Кб, 525x394
#232 #526586
>>526583
в лецо мне это сказать не зассыш?
#233 #526587
>>526582
Ебать я мудак, есть же Trim.
Сильно не бейте, я джве недели как начал что то пытаться писать.
#234 #526588
>>526585
Нет. В говноконторах, где верстку от бэкендов требуют, уровень верстки обычно на уровне видеолекций из вконтакта, там пойдет любой вводный курс или копипаст темплейтов. А в нормальных конторах распределение обязанностей четкое, и бэкенды обычно ничего не верстают.
62 Кб, 604x453
#235 #526589
>>526588
Кто бэкенд? Ты бэкенд.
#236 #526590
>>526588

Они не верстают не потому, что не умеют, а потому что выгоднее отдать это верстальщику. А вы лентяши просто учиться не хотите. Хороший специалист это фуллстек специалист, посмотрите например кого ищут калифорнийские стартапы — там слишком разборчивых клоунов которым нужен персональный верстальщие и написатель SQL запросов, не жалуют.
#237 #526591
>>526590

Ну и джуниору без опыта обычно выбора работать или не работать с версткой, не дают.
#238 #526594
ОП объясни одну вещь, почему иногда не работает \tmargin-top? Помню когда верстал макет было такое, я спрашивал у друга студента программиста, он сказал что такое бывает и что в таком случае нужно пользоваться margin-bottom у верхнего элемента.
#240 #526596
>>526595
Благодарю.
#241 #526597
>>526590
Фронтенд отдельная профессия и в калифорнийских стартапах везде отдельный фронтенд есть, либо на аутсорс профессиональному фронтенду отдают. Смысл давать бэкенду задачи фронтенда нет, даже если он фуллстек, он все равно как профессиональный фронтенд не сработает, у которого на этом специализация ежедневная. Так что бэкенда фронтендом заставляют работать только в совковых говноконторах, где за любую копейку трясутся, но никак не в калифорнийских стартапах, где бабла на зарплаты не жалеют.
#242 #526600
>>526594

Нужен конкретный пример.

>>526597

> Так что бэкенда фронтендом заставляют работать только в совковых говноконторах


Так верстальщики же дешевле стоят, где экономия? А фуллстек нужен чтобы он мог при разработке фичи сразу и серверный код написать, и запрос написать, и аяксовое окошечко приделать не тратя времени. А фронтендеры занимаются более глобальными вещами вроде верстки больших разделов или подготовки набора виджетов.
#243 #526602
>>526383
А в арче yaourt -S phpstorm, лол.
#244 #526604
>>526600

>Нужен конкретный пример.


Я тот кун который делает макет. Сел исправлять ошибки и сейчас занимаюсь кнопкой SEE PORTFOLIO. Возможно маргин на ней не работает потому что это тег <a>.
Посмотреть код можно здесь.

http://maketi.esy.es/

Только предупреждаю, что исправляю все в онлайн режиме и скоро код там будет уже другой, но пока минут 10 трогать ничего не буду. Как видно на кнопку я поставил маргин-топ 1000 и никакого эффекта, так что это даже не схлопывание.
#245 #526607
>>526604

>исправляю все в онлайн режиме и скоро код там будет уже другой


Вот для этого есть git.
#246 #526609
Дежурно оросил унтерменшей горяченьким.
#247 #526610
>>526609
мамку твою ипал
#248 #526611
>>526600
Фронтенды занимаются как раз версткой + всякие css тулы, клиентские фреймворки, бутстрапы и javascript c библиотеками. Бэкенды занимаются серверной стороной, БД, архитектурой и оптимизацией. Всю верстку и сопутствующую поебень бэкенд получает готовой, остается только в шаблоны ее всунуть (а часто и этим фронтенд занят, ибо шаблоны специально под них пишутся доступным языком). У фронтенда колоссальный опыт и он свои задачи выполняет быстрее и профессиональнее, причем стоит дешевле бэкенда. Если бэкенда сажают делать и то и другое, выходит хуже в фронтеде, плюс страдает бэкенд, поэтому отдельного фронтенда нет только в самых говнистых конторах.
#249 #526612
>>526609
Но унтерменш тут только ты.
#250 #526614
>>526604

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

Горизонтальные маргины и паддинги работают.

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

Также, я вижу, ты явно пропустил изучение основ CSS. Ты сдавал предыдущие задачки? Читал этот учебник? http://softwaremaniacs.org/blog/category/primer/ Если нет, то прочти, он небольшой но очень полезный. И про особенности инлайновых элементво там по моему написано. А если этого мало то есть такой хороший подробный цикл статей:

http://css-live.ru/articles/vvedenie-v-inlajnovyj-kontekst-formatirovaniya-ikf-osnovnye-ponyatiya-1-ya-publikaciya-cikla-tajny-css2-1.html
http://htmlbook.ru/samlayout/blochnaya-verstka/strochnye-elementy
#251 #526615
>>526611

> У фронтенда колоссальный опыт


Опыт перестановки CSS свойств наугад пока не заработает и опыт верстки толкьо под последнюю версию сафари.
#252 #526616
>>526600
Да что собственно сложно в этой верстке? Там учить нечего, все CSS тэги за один вечер учатся вместе с адаптивностью, бутстрап и жквери туда же. Да и что уж говорить, никому на постсоветском пространстве эта красота с плагинами, скролами и свг не упала. Те, которые высокооплачиваемые фронтендеры, должны еще в дизайн, свг и рисование логотипов и макетов уметь, уже не говоря про хорошее знание js. Мне лично js со всеми его фреймворками не нравится (они еще и бэкэнд на нем делают, лол). Проэтому фронтендеров я презираю, а верстка - вообще однотипное говно, где все за вечер учится и больше там учить нечего, рутинно одно и то же повторяешь.
#253 #526618
>>526616
Ну никто и не говорит, что фронтенд особо сложен. Все же до профессионального фронтенда у тебя несколько дольше уйдет, чем пару дней, погугли что-ли блоги нормальных фронтендеров или доклады с их конф. В фирмах есть четкое деление и на всем фронтенде сидит отдельный чувак, а в крупных и несколько. Так выходит выгоднее для фирмы, чем бэкенда нагружать несвойственными ему задачами.
#254 #526619
>>526614
Я читал статьи на htmlbook, потом решал те 12 задач, но сюда не присылал и вот взялся за макет.
#255 #526621
>>526619

Почитай учебник на softwaremaniacs, он небольшой, но многие важные вещи освещает. Ну и не страшно что ты пока делешь ошибки, ты же начинающий. Если что, потом еще какой-нибудь макет сверстаешь.
#256 #526622
>>526619

И кстати освой инспектор в браузере (Ctrl + Shift + i). Многие вещи можно делать через него, например менять стили и сразу же видеть результат, удобно.

Статья: http://habrahabr.ru/post/143767/
#257 #526624
>>526611
Кстати, по поводу шаблонов. Я вот смотрю, некоторые шаблоны еще хуй распарсишь.
#258 #526627
>>526622
Я пользуюсь инспектором.
Я там бывает поэксперементирую, а потом сохраняю в нотпаде и гружу на сайт. Хотя обычно гружу каждый раз, когда что-то меняю. Я так с самого начала делал и уже дискомфорта не чувствую, до автоматизма дошло.

И спасибо за литературу, все ссылки сохранил, пожалуй даже ознакомлюсь сначала с учебником а потом продолжу исправлять макет.
#259 #526628
>>526618
Да вот только в верску любой школьник может, а заказов по сравнению с исполнителями гораздо меньше. На любом бутстрапе можно магаз написать.
#260 #526632
>>526627

Тебе не обязательно кстати что-то выгружать на сайт. Ты можешь просто с диска перетащить html файл в браузер и он откроется.
#261 #526634
>>526422

>xfce


Может у тебя в контекстном меню включен пункт "Приложения" ("Applications" или как-то так, не помню)?
#262 #526636
>>526632
Приму к сведению. Так же друг советовал какой-то денвер, но все руки не доходят посмотреть что это. Да и у меня мой способ секунду занимает, всего лишь ctrl+s прожать да ОК в файлзилле.

>>526614
А это ничего что в этом учебнике на softwaremaniacs информация 2005-2006 годов?
#263 #526638
>>526636

Ничего, флоаты и блочные элементы со времен CSS2.1 не изменились и сам CSS3 это набор расширений для CSS2.1
#264 #526639
>>526636
Попробуй Brackets. Live update там очень хорошо работает. Видишь все без перезагрузок и сразу.
#265 #526640
>>526636

То что там про ИЕ6 написано конечно можно не читать.
#266 #526641
>>526638
>>526639
>>526640

Все понял, спасибо, займусь пока чтением учебника.
#267 #526647
>>526614

>Ты сдавал предыдущие задачки?


Я вот только вкатываюсь, начиная с каких задачек можно сдавать решения в тред?
Эту http://codepad.org/aLSx8geV про депозит на миллион можно проверить?
нюфак
#268 #526650
>>526647

Можно. Эта задача решена верно.
#269 #526651
Верстко-пидоры, для вас в воркаче есть специальный тред, съебите туда.
#270 #526663
>>526651
Пых-макаки должны страдать.
#271 #526679
>>526663
Сказал версткопидор, пришедший в чужой тред.
#272 #526683
>>526634
О, точно.
Погуглил, когда-то в этом xfce-appfinder был баг https://bugs.launchpad.net/ubuntu/+source/xfce4-appfinder/+bug/1048805
Говорят его лечить при помощи
xfconf-query -c xfce4-keyboard-shortcuts -p '/commands/custom/<Alt>F2' -s "xfrun4 --disable-server"
Что-то не особо помогло. Вроде стало быстрее, но тоже не мгновенно.
Как бы его вообще отключить.
#273 #526684
>>526679
Мимо, я сижу тута не вылезая. Пыху учу, js, немного вёрстку.
#274 #526685
>>526683

>Как бы его вообще отключить.


Шиндовс накатить.
#275 #526686
>>526683
Вроде бы в настройках галочкой отключается.
#276 #526688
>>526685
...Алсо, у меня тоже бубунта, но с юнити. Ничего не тормозит. Ну только панель ПОИСК НА КОМПЬЮТЕРЕ И В ИНТЕРНЕТЕ бывает тормозит. Но кому она нужна?
79 Кб, 642x525
#277 #526692
>>526685
азазаза)
Нет, лучше уже тогда мак.

>>526686
В каких настройках? Лучше команду для терминала.
Спросил в треде линукса, там какие-то дауны, спорят какой дистрибутив круче. Они наверное этим все время занимаются.

>>526688
Да, речь именно о долбанном "поиске", который зашит в контекстное меню мыши и главном меню.
#278 #526694
>>526692

>В каких настройках?


Не помню, сейчас xfce у меня нет, но когда ставил, как-то быстро нашёл этот пункт в настройках. Не в редакторе настроек, а в аналоге виндовской панели управления вроде.
#279 #526697
Нет, линукс великолепен, но меня убивает необходимость вечно что-то искать, прикручивать, настраивать.
Представьте, что вы купили шикарный автомобиль, но чтобы на нем ездить вам необходимо каждый день что-то там подкручивать, лазить под капот, ковыряться в двигателе.
О маке не знаю почти ничего, но в моих маня-мечтаниях это тот же юникс, но за деньги меня избавят от геморроя ковыряния с ним.
Надо бы почитать о нем сначала, вдруг там не все так радужно.
194 Кб, 1280x288
#280 #526700
>>526692

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


Я про такой поиск.
#281 #526701
>>526697

>каждый день что-то там подкручивать


Но нахуя?
Маны читать требует разве что. Наугад накликать не получится точно.
Алсо xfce действительно кривоват. Я ушёл на gnome 3.
#282 #526704
А вы тоже заметили, что у нас теперь есть полоса загрузки как на тостере? При открытии треда появляется.
#283 #526707
Ребят, какие вообще требование для пхп-джуна? Как можно себя проверить до собеседования?
#284 #526709
>>526707
1. html/css
2. javascript
3. jquery
4. sql
5. unix bash
6. apache, nginx
7. git, composer
8. basic php, oop
9. frameworks
10. english intermediate

Чтобы проверить теорию загугли "вопросы на собеседованиях php".
Ну и нужно что-то написать для пробы.
Пройди учебник, уроки, задачи и ссылки из оп-поста, и считай ты принят.
#285 #526711
>>526709
OSI, TCP/IP, HTTP забыл.
#286 #526714
>>526709
1. Не могу в адаптивную верстку, но про теги, селекторы знаю. Пару резиновых сайтов для своих проектов слепил.
2. ЖС на уровне одного консольного мини-приложения на ноде.
3. Делал пару аjax-форм.
Зачем вообще весь этот фронтэнд, который выше?
4. Вроде тут все норм, делал бд, читал/добавлял/удалял.
5. Последний год живу на убунте, с консолью хорошо знаком.
6. Связку LAMP ставил одним пакетом из репозитория, что еще нужно?
7. Завел проект на гитхабе, залил туда пару проектов, в общем знаю про VCS.
8. Около месяца-двух опыта на чистом пхп, ООП использую еще с питона.
9. Не видел в глаза ни одного фрейворка.
10. Плохо изъясняюсь, но хорошо понимаю/читаю инглиш.

Худо-бедно подхожу под требования, но что с фреймфорками? Погуглил, сейчас везде просят Laravel/Symfony, за сколько их можно освоить? Просто очень нужна работа в ближайшее время хотя бы за минимальные деньги.
#287 #526717
>>526714
Более-менее, если из Москвы или Питера то возьмут за минимальные деньги.
Но без фреймворков никак, на голом php никто не пишет.

Yii/Laravel за месяц-полтора, Симфони сложнее конечно, и требует знания других вещей (doctrine например).
Пиши, звони, ходи на собеседования.
#288 #526722
Таак, вывел количество комментов на нулевой, осталось сделать пагинацию и бложик готов.
#289 #526725
>>523494 (OP)
Помогите с регуляркой, кто может.
/<.(\w{3}).>/im
текст: < azaza azaz oza aza rr > aza aza aza
нужно что бы в "кармашки" пападало и oza и aza. В текущем состоянии попадает только последнее.
170 Кб, 680x419
#290 #526727
>>526650
Спасибо!

Почему символы русского алфавита у меня на локальном компе (PHP 5.4.44 в режиме built-in web server, Windows XP) занимают два байта (пик), а на айдеоне один байт? http://ideone.com/2AsANE
Дело в настройках интерпретатора? В php.ini у меня default_charset = "UTF-8"

Есть функции, которые считают количество символов в строке, а не байт?
#291 #526731
>>526727

>функции, которые считают количество символов в строке


Нашёл iconv_strlen(), но она даёт тот же результат, что mb_strlen() — на локальном компе показывает 12, на айдеоне 6.
#292 #526732
>>526727
Кодировка для mb-функций устанавливается с помощью mb_internal_encoding(). Мануал: http://php.net/manual/ru/function.mb-internal-encoding.php
Скорее всего, по умолчанию у тебя стоит не utf-8.
Сделай echo mb_internal_encoding(). Если выведет НЕ "UTF-8", прописывай в начале скрипта mb_internal_encoding('utf-8');
#293 #526734
>>526732
...и default_charset = "UTF-8" в php.ini к этому не имеет отношения.
#294 #526737
>>526732
>>526734
Понял.
Можно же указать mbstring.internal_encoding = UTF-8 (и iconv.internal_encoding = UTF-8) в php.ini.
Но наверное это может быть чревато проблемами в случае, если не будет возможности настраивать php на реальном хостинге или если проект сложный/старый и в других скриптах используется, например, стандартная ISO-8859-1?
Получается, лучше всегда объявлять кодировку в начале скрипта и не трогать глобальные настройки?
17 Кб, 427x207
#295 #526752

>Deal with it


А если исключить элементы с пустыми строками?
preg_split("//u", $text, 0, PREG_SPLIT_NO_EMPTY);

В задаче «Лев Толстой» (http://ideone.com/ao47z3) уместно использовать array_rand()?
#296 #526813
Анончик, рассуди:
- Нужно отправлять письмо и файл на сервер за нажатие кнопки;

Причем:
- файл должен загружаться, меняться имя на unix дату и отдавать ссылку на файл (не на страницу, а в принципе, из финальной папки);
- письмо должно улетать адресату уже со ссылкой на файл;

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

- Загружается во временную;
- Перемещается в конечную папку;
- Переименовывается;
- Отправляем письмо со ссылкой на файл;

И ещё не понимаю как с помощью pathinfo получить расширение файла, заебался чет.
#297 #526817
Да, приблизительно так. В чем вопрос? Реализацию смотри на php.net.
Информация о загруженный пользователем файле попадает в массив $_FILES, переместить (и соответственно переименовать) файл можно при помощи функций типа move_uploaded_file. Подробно здесь:
http://php.net/manual/ru/features.file-upload.post-method.php

Временную метку возвращает time http://php.net/manual/ru/function.time.php

Письмо отправляется при помощи функции mail. Естественно нужен почтовый сервер.
http://php.net/manual/ru/function.mail.php

Функция pathinfo
http://php.net/manual/ru/function.pathinfo.php
Полагаться на расширение небезопасно, потому что хакер может загрузить php-скрипт под невинным расширением (или вообще без него). Лучше проверять mime-тип (например объектом finfo, есть еще сторонние библиотеки типа getId3).

В базу ты ничего не собираешься записывать что ли?
#298 #526831
>>526817

> В базу ты ничего не собираешься записывать что ли?


Не, нахуй. Там просто надо долбоёбам файл отдать. По уму - в базу бы, но нет необходимости.

> Полагаться на расширение небезопасно


Тоже так думаю. А то чет прост увидел pathinfo, решил попробовать.
20 Кб, 599x429
#299 #526837
Зачем сделали DOM рекурсивным?
#300 #526853
>>526813

> файл должен загружаться, меняться имя на unix дату


Ты так ненавидишь своих пользователей?

> не понимаю как с помощью pathinfo получить расширение файла,


Мануал по функции читал?
#301 #526858
>>526813
Пости код хоть какой, а мы уже советовать будем, что поправить/доделать. Смысла нет болтать без кода.
#302 #526862
>>526837

Там еще по моему можно через window.document.window зациклиться
#303 #526905
Оп, а как ты советуешь организовывать CSS?
Делать описание элементов по порядку, как они идут в html или группировать по типу:
-шрифты
-цвета
и т.д.
#304 #526918
>>526905
По смыслу - шапка, футер, меню навигации, страница логина, страница создания заказа и т.д. Каждая группа в отдельном файле, собирать через gulp / фреймворк.
Алсо, верстка по бэм.
мимо-3-года-веб-макака
#305 #526925
>>526837
Каким в пизду рекурсивным?
Что будет в этом случае:
{} = {};
Правильно - будет создана ссылка, а изменение первого затронет остальные и наоборот.
#306 #526930
Доброго времени суток!

Когда-то давно встречал ссылки на пошаговый видеокурс типа от 1 (простого) до 4 (гуру), подскажите название? (Обучение+лабы) Помнится анон весьма лестно отзывался об этом курсе.
#307 #526935
>>526930
Игорь Борисов / учебный центр "Специалист", курсы php 1-4 (трекер nnm-club.me, на рутрекере кажется закрыли копирасты).

Годится только если ты полный новичок. Никакого "гуру", дает базовые джуниорские знания. Разве что на четвертом курсе пытается объяснять паттерны и mvc, крайне неудачно на мой взгляд.
#308 #526936
>>526935
а есть курсы, где до гуру учат?
#309 #526938
>>526936
Да, в этом треде.
В оп-посте учебник и задания разных уровней сложности, ссылки на полезные статьи и т.д.
Читай учебник, решай задачи, выкладывай в тред.

Тред постоянно мониторят 1-2 сеньора, подсказывают и дают советы по решению. Сам понимаешь это лучше всяких дурацких курсов.
#310 #526960
Сеньоры, подскажите, пожалуйста, как я могу реализовать обход таблицы для каждой строки и записью спаресенного в массивы/переменные?

мимо-начинающий
#311 #526972
Киньте туториал по регуляркам, где много примеров и все хитрости доступным языком объясняются.
#313 #526992
>>526960
Какой еще "обход"?
Получить все записи из бд можно простым sql-запросом "SELECT х FROM tbl_name".
Для работы с бд есть объект pdo с соответствующими методами.
http://php.net/manual/ru/book.pdo.php
Результат может быть как массивом, так и объектом, даже пользовательского класса. Это задается при помощи setFetchMode.

Если записей в таблице реально много, то наверное лучше выдергивать их по частям в цикле.
мимо-нуб
#314 #527024
>>526992
Я имел в виду парсер для стороннего сайта.
Неточно выразился, простите.
Там таблица в HTML, надо ее спарсить и занести в массив/переменные, чтобы потом вывести.
#315 #527028
>>527024
DOM в php
http://php.net/manual/ru/book.dom.php

Если тебе нужно спарсить контент какого-то говносайта, то наверное ради него не стоит париться, а использовать готовые библиотечки, например
http://habrahabr.ru/post/176635/
#316 #527050
Привет, оп. В прошлом треде ты где-то кидал задание на регулярные выражения, я другой анон, но решил сделать.
https://ideone.com/IYkhZ3

И короче никак в них не врублюсь. Во-первых, это каждый раз такой адок нужно будет составлять? Мб упростить как-то можно? Во-вторых у меня не до конца правильно, что исправить?
#317 #527056
Какие вещи надо знать, чтобы решить задание №4 по JavaScript?
#318 #527058
>>527056

Нужно почитать про функции в JS: https://learn.javascript.ru/function-basics

Если ты про этот пункт

> А, еще, сделай тогда, чтобы в качестве gen можно было указать функцию с аргументами, и при вызове


> Эти аргументы бы передавались функции gen. Аргументов может быть любое количество.



То надо почитать про псевдопеременную arguments и методы call/apply:

https://learn.javascript.ru/arguments-pseudoarray
https://learn.javascript.ru/call-apply

>>527050

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

> Во-первых, это каждый раз такой адок нужно будет составлять?


А не надо составлять такое сложное выражение. Надо написать: номер начинаеся с +7 или 8, за ними идут ровно 10 цифр между которыми может быть любое число скобок, минусов, пробелов.
#319 #527059
>>527050

Алсо я слоупок, только сейчас понял шутку про Аллаха.
#320 #527060
>>527050

И почему ты пишешь транслитом? Русские буквы на ideone работают.
#321 #527064
>>527058

>Если ты про этот пункт


Да, я именно про него, спасибо.
#322 #527065
Аноны, нужна небольшая помощь. Всю голову сломал с регулярками.

Есть ссылка: http://site.ru/a/b/c/d/1.html
Нужно спарсить только b и 1.
Каким образом это сделать?
Нужны только эти значения чистые, без слешей и расширения страницы.
#323 #527069
>>527058
>>527059
Короче это шаманство какое-то, убираю пробел - одни результаты, ставлю - другие. Сам цикл же правильный у меня?

https://ideone.com/IYkhZ3

>>527060
Просто удобнее, регистр менять не надо.
8 Кб, 250x243
#324 #527077
Приступаю к фреймворкам.
#325 #527079
>>527065
реквест урле $this->route
$this->route = explode('/', $path);
$this->route[1]
че за вопросы тупые и нубские?
#326 #527080
>>527077
Трусы на голову однь, обосрешся еще, а они тебя запомнят и опознают.
#327 #527099
>>527065
$site = 'http://site.ru/a/b/c/d/1.html';
preg_match('/site\.ru\/[a-z]{1}\/([a-z]{1})\/[a-z]{1}\/[a-z]{1}\/([a-z0-9_]+)\.html/',$site,$matches);
echo $matches[1] . '<br>' . $matches[2];

Так это делается.
#328 #527101
>>526972
На инглише тут норм c упражнениями http://regexone.com/lesson/introduction_abcs
#329 #527112
>>527099
А лучше даже так:
$site = 'http://site.ru/a/b/c/d/1.html';
preg_match('/site\.ru\/[\w]+\/([\w]+)\/[\w]+\/[\w]+\/([\w]+)\.html/',$site,$matches);
echo $matches[1] . '<br>' . $matches[2];
#330 #527150
>>527077
Задание на файлообменник сделал? Там используется slim или silex. Это микрофреймворки, с них нужно начинать.
Я хуею, когда нубы после изучения синтаксиса хватаются за symfony или zend, а потом жалуются, что нипонятно.
#331 #527159
Проверьте пожалуйста задачу про айпад в кредит http://ideone.com/Mzr5EF Код нормально написан?
#332 #527166
>>527159
Strawberry банк неправильно посчитан, должно 61336.87 выйти.

>$StrawberryBankTotal


Переменные с маленькой буквы начинать надо. Имена классов с большой.
#333 #527229
Сделал вставку эмбед ютуб видео на страницу из админки через айфреймы, но не пойму как мне оверлейные картнки менять. Через ютуб апи можно сделать, но чёт не работает у меня ничего. Можете наглядно показать как всатвлять видео с ютуба на страницу и менять на них оверлейные картинки?
#334 #527262
>>527050
>>527069
http://ideone.com/re7dpy
Телефоны решил. Рейт ми.
#335 #527263
>>527150
Какой прасти синтаксис, я уже два сайта на ООП и MVC написал, нахуй пошел со своим обменником. Задания научись сначала давать правильно, обрыган.
50 Кб, 500x281
#336 #527269
>>527263
А, тогда ладно.
Можешь пробовать устраиваться сеньором.
#337 #527270
>>527229
слишком сложное задание для тебя, попробуй еще поучить фреймворки и поделать сайты.
#338 #527275
>>527270
Никаких фреймворков, только велосипеды.
#339 #527277
>>527229
Дебильное задание. Я еще могу понять, что время смайла отслеживается через функцию date(), но как его привязать к началу видео? Можно конечно с момента нажатия кнопки проиграть выставить функцию daеe(),а потом вычесть из этого дату смайлика. Но что если видео остановят? Что если начнут сначала, что если несколько пользователей будут проигрывать, то значит каждого ложить в куки и вызывать ему отдельно эти функции? У меня бы вышел лютейший гонокод.
#340 #527281
>>527229
Картинки через <img src="adreskartinki"> вставляй.
#341 #527291
Как находить в интернет-магазинах каталог товаров в XML?
#342 #527306
>>527291
Позвони им по телефону, программистишка.
Я нипонел, ты интернет-затворник чтолле?
#343 #527316
>>527291
Напиши скрипт, который странички их парсит и ссылки все найденные обходит. Где найдет <?xml, там значит оно.
#344 #527337
А вы заметили, что на сосаке появилась линия подгрузкия аяксовая, как на ютубе? Уже не первый раз замечаю, как в тредах что-то спрашивают типа как сделать такую линию или как сделать, чтобы страницы подгружались колесиком и потом такое появляется на сосаке.
#345 #527339
Кстати, а кто-нибудь написал проверялку текстов на уникальность? Мне тоже интересно, как оно такой объем инфы находит и перерабатывает.
#346 #527343
>>527339
Гуглит кусок текста, переходит по ссылкам, парсит и сравнивает строки. Текст себе в базу добавляет, чтобы следующий раз не гуглить.
#347 #527345
>>527337
Сосака хайлоад сайт же. В хайлоаде проблема не в том, чтобы подгрузку сделать, а чтобы сайт не падал, когда эта подгрузка начнет у тысяч анонов сама включаться.
#348 #527406
Задание очепяточники, чеканите.
http://ideone.com/1qqCxO
#349 #527430
>>527306
Нет, мне надо xml многих сайтов, хочу создать агрегатор товаров с разных сайтов, звонить же каждому не будешь.
#350 #527431
>>527339
Я пробовал, написал черновик, делал примерно как говорить вот он >>527343 В каком-то треде даже описывал как я это делал, мне кстати сказали что так в гугле могут забанить, это правда?
20 Кб, 557x413
14 Кб, 1257x215
12 Кб, 911x158
#351 #527447
Форма работает, но в add.php не отправляется запрос к бд, выдает пустую страницу. В db.php и в файле конфига ошибок нет. Где ошибка?
#352 #527448
>>527447
А, нет, заработало, но кириллица не отправляется.
#353 #527451
>>527447
Данное расширение устарело, начиная с версии PHP 5.5.0 и не поддерживается. Юзай PDO или mysqli.
#354 #527452
>>527431
Если в очередь ставить все запросы к гуглу и из очереди с достаточно большим временным интервалом обрабатывать, то не забанят. Юзеру в это время крутить какой-нибудь индикатор обработки на js.
#355 #527472
<?php
function longdate($timestamp)
{
return date("l F jS Y", $timestamp);
}
echo longdate(time());
?>

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

>PHP Fatal error: date(): Timezone database is corrupt - this should never happen! in /home/Yzj5mx/prog.php on line 4


Что с ним не так? Ведь просто создается функция, а потом вызывается результат с параметром, так почему же не работает?
#356 #527480
>>527472
Перейди на php.net и узнай, как работает функция date, чему соответствуют паттерны типа l F jS и т.д.
Не копируй код, если не понимаешь как он работает. Если это какой-то учебник, где дают код без объяснений, выбрасывай его.

Здесь проблема в Timezone, настройках даты/времени на твоем компьютере. Автор очевидно американец, и о существовании других временных зон не догадывается, или пренебрегает.
Проверь, у тебя все нормально с локалью? ( https://ru.wikipedia.org/wiki/%D0%9B%D0%BE%D0%BA%D0%B0%D0%BB%D1%8C )
Вбей в терминале команду locale, в первой строке должно быть что-то вроде LANG=ru_RU.UTF-8
В php-скрипте попробуй setlocale(LC_ALL, 'ru_RU'); или setlocale(LC_ALL, 'ru_RU.UTF-8');
Поищи в php.ini строку date.timezone. Если ее нет, пропиши сюда настройку для своего часового пояса.
http://profiphp.ru/directives/4-date_timezone.html
Не забудь перезапустить сервер (sudo service apache2 restart)
#357 #527486

> /home/Yzj5mx/prog.php


Блджад, это же идеоне, а я ему о настройках локали и php.ini

Тогда это вопрос к опу, почему идеоне не работает с функциями времени.
#358 #527487
>>527472
У меня работает твой код, выдает Sunday August 9th 2015. Попробуй другую сборку PHP скачать.
#359 #527491
Вопрос по гиту:
я правильно понял, что push с опцией -u нужно писать только первый раз, чтобы оно в .git/config прописало для текущего бранча репозиторий?
Дальше можно писать просто git push, "оно само" разберется какой remote и какой бранч соответствует данному?
17 Кб, 209x300
#360 #527494
>>527480
Благодарю тебя анон, но я таки пользователь окошек, но разберусь.

> l F jS


Чмтал.

>Если это какой-то учебник, где дают код без объяснений, выбрасывай его.


Пикрелейтед, разжёвано неплохо, но локализация страдает, да. Взял эту книгу для того, что бы понять как эти все технологии работают вместе, и для начальных знаний. ООП буду познавать позже.
#361 #527496
>>527486

> а я ему о настройках локали и php.ini


Спок, на пека с XAMP тоже не запускается.
>>527487
Попробую.
#362 #527504
А вообще, что лучше ставить - сборку типа "все в одном" или ставить ПХП и Мускуль по отдельности?
#363 #527510
>>527504
По отдельности конечно.
Если собираешься работать программистом, то на работе естественно не будет никаких денверов, да и виндоус тоже не будет.

Сборки для быдлокодеров-фрелансеров, которым насрать, что их приложение не будет работать на реальном сервере.
#364 #527514
>>527510

>да и виндоус тоже


Для гейоси я слишком нищеброд.
#365 #527515
>>527494

>ООП буду познавать позже.


А я бы с него начал.
#366 #527516
>>527514
Поставь себе детский линукс какой-нибудь.
#367 #527523
>>527504
Ставь сборку xampp для линукса. Будет почти как на реальном серваке все.
http://www.oldnix.org/install-xampp-linux/
#368 #527524
>>527523
>>527504
Алсо, насчет сборок - там все уже на совместную работу настроено, поэтому можно почитать их конфиги и поразбираться, что за что отвечает, погуглить команды. При обучении это удобнее. Как разберешься, можешь ставить уже реальные apache, php и mysql без сборок и настраивать вручную.
#369 #527527
>>527523
Чета сложно как то))
Чистяком ставить проще как-то. Тем более, у ОПа мануалы есть.
#370 #527528
>>527523
А денвер для линукса не завезли?
#371 #527531
>>523546

Не обязательно. Мануал в этом плане как-то особенно уклончив: http://php.net/manual/ru/function.include.php но из него видно что есть разница между например формами './dir/file.php' и 'dir/file.php'. Потому надежнее нормально прописать полный путь.

> Оно итак ведь включает тот же файл, что лежит в той же папке по дефолту.


А ты уверен что это именно папка с файлом в котором написан require, а не папка в которой лежит index.php? Это могут быть разные папки вообще-то.

>>523911

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

>>524119

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

>>524121

Slim

> Появление смайликов))))))00 должно быть реализовано с помощью AJAX, ну это и понятно.


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

>>524214

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

>>524236

> PHP, отдающий смайлы


Проще сразу JSON со смайлами в страницу внедрить

>>524245

Завидуют наверно.

>>524249

Такой сайт уже есть, banki.ru и не знаю, разрешит ли он тебе с него собирать данные. А для официаьного курса ЦБ у них на сайте есть API.

>>524251

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

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

>>524259

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

>>524261

> Например тут у меня пример чистого макакства.


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

>>524267

Это его выбор, он выбирает верстку сайтов под вордпресс, мы выбираем карьеру профессионального фуллстек разработчика.
#371 #527531
>>523546

Не обязательно. Мануал в этом плане как-то особенно уклончив: http://php.net/manual/ru/function.include.php но из него видно что есть разница между например формами './dir/file.php' и 'dir/file.php'. Потому надежнее нормально прописать полный путь.

> Оно итак ведь включает тот же файл, что лежит в той же папке по дефолту.


А ты уверен что это именно папка с файлом в котором написан require, а не папка в которой лежит index.php? Это могут быть разные папки вообще-то.

>>523911

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

>>524119

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

>>524121

Slim

> Появление смайликов))))))00 должно быть реализовано с помощью AJAX, ну это и понятно.


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

>>524214

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

>>524236

> PHP, отдающий смайлы


Проще сразу JSON со смайлами в страницу внедрить

>>524245

Завидуют наверно.

>>524249

Такой сайт уже есть, banki.ru и не знаю, разрешит ли он тебе с него собирать данные. А для официаьного курса ЦБ у них на сайте есть API.

>>524251

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

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

>>524259

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

>>524261

> Например тут у меня пример чистого макакства.


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

>>524267

Это его выбор, он выбирает верстку сайтов под вордпресс, мы выбираем карьеру профессионального фуллстек разработчика.
#372 #527537
>>527531

>Slim


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

А то скоро файлообменник делать буду, а фреймворк всё никак не выберу.
#373 #527540
>>527528
Денвер - костылль для винды
#374 #527541
>>524274

Я набираю в гугле «web proxy» и открываю через него. Браузерные расширения это бекдоры, VPN читает весь твой трафик. А веб прокси маусимум рекламу вставит.

>>524214

Кстати обратите вимание, на комментарий в статье:

> За последнее время провёл с два десятка собеседований на вакансию пхп-джуна. В итоге взяли двоих, хотя собирались одного — не смогли выбрать :). Что их выгодно отличало от остальных:


> — начальные знания ООП, некоторых паттернов ООП и архитектурных (больше половины кандидатов вообще сказали, что об ООП ничего сказать не могут — не было необходимости, остальные валились на простейших вопросах типа «что такое инкапсуляция»)


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


> — смогли что-то сказать о нормализации и денормализации таблиц в РСУБД


> — есть базовые навыки использования git



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

>>524383

На banki.ru есть сервис но без АПИ наверно.

>>524398

Тебе дают PSD, а от тебя ждут образцовый HTML + CSS + JS.

>>524402

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

>>524404

> Все это сохранить в .jpg с нужным качеством


Либо в png или gif в зависимости от ситуации.

>>524431

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

>>524500

> В ближайше годы допишут всё, что надо.


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

>>524784

Не знаю. Не факт что АПИ поможет.

>>524799
>>524798

> $paymenTotal = 0


Точку-запяточку не поставил в конце команды и он думает что for это часть команды:

$paymenTotal = 0 for ($month = 1 ; $month <= 12 ; $month ++) { ...

И не пониамет что это значит.

>>524839

Не знаю, смотря какая у тебя цель. Для HHVM особо много переписывать не придется, а вот для KPHP надо отказываться как минимум от ООП (что по моему фейл).

>>524868

От SQL инъекций используй плейсхолдеры
ПРо XSS https://github.com/codedokode/pasta/blob/master/security/xss.md
Про CSRF https://github.com/codedokode/pasta/blob/master/security/xsrf.md

Ну и при загрузке файлов будь внимателен чтобы тебе php файл или htaccess не закачали.

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

>>525010

Офиц док-ю читал?

>>525178

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

>>525190

Код какой-то странный. Почему имена классов с маленькой буквы? Что за названия функций out? Почему используется file_exists хотя логичнее class_exists? Почему include вместо автозагрузчика? Я бы советовал остерегаться учебника который ты читаешь.

Чтобы понять почему код не работает, натыкай там var_dump и посмотри что в какой переменной и сделай вывод почему то или иное условие не срабатывает.
#374 #527541
>>524274

Я набираю в гугле «web proxy» и открываю через него. Браузерные расширения это бекдоры, VPN читает весь твой трафик. А веб прокси маусимум рекламу вставит.

>>524214

Кстати обратите вимание, на комментарий в статье:

> За последнее время провёл с два десятка собеседований на вакансию пхп-джуна. В итоге взяли двоих, хотя собирались одного — не смогли выбрать :). Что их выгодно отличало от остальных:


> — начальные знания ООП, некоторых паттернов ООП и архитектурных (больше половины кандидатов вообще сказали, что об ООП ничего сказать не могут — не было необходимости, остальные валились на простейших вопросах типа «что такое инкапсуляция»)


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


> — смогли что-то сказать о нормализации и денормализации таблиц в РСУБД


> — есть базовые навыки использования git



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

>>524383

На banki.ru есть сервис но без АПИ наверно.

>>524398

Тебе дают PSD, а от тебя ждут образцовый HTML + CSS + JS.

>>524402

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

>>524404

> Все это сохранить в .jpg с нужным качеством


Либо в png или gif в зависимости от ситуации.

>>524431

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

>>524500

> В ближайше годы допишут всё, что надо.


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

>>524784

Не знаю. Не факт что АПИ поможет.

>>524799
>>524798

> $paymenTotal = 0


Точку-запяточку не поставил в конце команды и он думает что for это часть команды:

$paymenTotal = 0 for ($month = 1 ; $month <= 12 ; $month ++) { ...

И не пониамет что это значит.

>>524839

Не знаю, смотря какая у тебя цель. Для HHVM особо много переписывать не придется, а вот для KPHP надо отказываться как минимум от ООП (что по моему фейл).

>>524868

От SQL инъекций используй плейсхолдеры
ПРо XSS https://github.com/codedokode/pasta/blob/master/security/xss.md
Про CSRF https://github.com/codedokode/pasta/blob/master/security/xsrf.md

Ну и при загрузке файлов будь внимателен чтобы тебе php файл или htaccess не закачали.

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

>>525010

Офиц док-ю читал?

>>525178

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

>>525190

Код какой-то странный. Почему имена классов с маленькой буквы? Что за названия функций out? Почему используется file_exists хотя логичнее class_exists? Почему include вместо автозагрузчика? Я бы советовал остерегаться учебника который ты читаешь.

Чтобы понять почему код не работает, натыкай там var_dump и посмотри что в какой переменной и сделай вывод почему то или иное условие не срабатывает.
#375 #527542
Кто на topcoder.com сидел, есть смысл там учить? Зарегался, ничего почти не понимаю, как к большинству задач подступиться даже не знаю. Понял только пару самых простых из division 2 level one. Задачки какие-то странные, как для аутистов сделанные. Веб-программисту имеет смысл там ошиваться или малополезно?
#376 #527546
>>527541

>Браузерные расширения это бекдоры


Прямо-таки все? Я этим пользуюсь просто, ничего не замечал: https://chrome.google.com/webstore/detail/browsec/omghfjlpggmjjaagoclmmobgdodcjboh?hl=ru
#377 #527547
>>527546
Код расширений никто не проверяет, туда любой мимокрокодил закачать что угодно может. Недавно вскрывалась история, что из пользователей одного подобного расширения ботнет сделали, который кого-то там ДДОСил. Еще они могут пиздить личные данные из браузера и ОС.
#378 #527548
>>525279

Я не смог открыть вторую версию кода, открыл вместо нее http://jsbin.com/yuheteweyi/1/edit?html,js,output

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

> if(power < 1 || power > 100) power = Math.floor(Math.rand() × 100);


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

-----

В FF24 этот кривосайт jsbin не работает. Ну там и быдокодеров понабирали. Уверен, они используют grunt, node и пишут на кофескрипте — это обязательные признаки вестальщика-быдлоокодера.

Первый попавшийся кусок кода многое говорит об уровне этих фронтенд «специалистов»:

> if (jsbin.user && jsbin.user.name) {


То есть у нас может быть юзер, но без имени и это надо проверить отдельно.

Алсо что за дебилы сделали в Хроме функцию которая на каждой второй странице предлагает ее перевести? Во-первых, я не такой даун как вам кажется и могут читать английский текст, во-вторых, гуглотранслейт все равно переводит текст так, что он ничуть понятнее не становится.
#379 #527555
>>525320

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

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


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

> Плюс, я лет 5 работал с джумлой, хостя у провайдера всё это говно, но до сих пор не имею полного представления как всё устроено.


это плохо. но джумла умерла 5 лет назад, так что фиг с ней.

>>525349

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

>>525367

В учебнике из ОП поста почитай раздел про массивы и прорешай все задачи из раздела «Повторим». Там есть работы с массивами.

>>525387

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

>>526021

На PHP быстрее, на Яве код призводительнее и вообще она круче. Но изучать ее раз в 5 сложнее и дольше чем PHP. Если ты ньюфажина то кроме самой Явы надо изучить и знать кучу концепций и мастертски владеть командной строкой и т д.

>>526024

«энтерпрайзная суть» это способность писать и поддерживать код большой командой в течение долгого времени, использовать лучшие практики и подходы, большая инфраструктура библиотек и инструментов. Не вижу что здесь плохого. Гугл и Яндекс используют Яву.
#379 #527555
>>525320

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

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


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

> Плюс, я лет 5 работал с джумлой, хостя у провайдера всё это говно, но до сих пор не имею полного представления как всё устроено.


это плохо. но джумла умерла 5 лет назад, так что фиг с ней.

>>525349

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

>>525367

В учебнике из ОП поста почитай раздел про массивы и прорешай все задачи из раздела «Повторим». Там есть работы с массивами.

>>525387

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

>>526021

На PHP быстрее, на Яве код призводительнее и вообще она круче. Но изучать ее раз в 5 сложнее и дольше чем PHP. Если ты ньюфажина то кроме самой Явы надо изучить и знать кучу концепций и мастертски владеть командной строкой и т д.

>>526024

«энтерпрайзная суть» это способность писать и поддерживать код большой командой в течение долгого времени, использовать лучшие практики и подходы, большая инфраструктура библиотек и инструментов. Не вижу что здесь плохого. Гугл и Яндекс используют Яву.
https://github.com/nsdvw/file-sharing #380 #527570
>>526230

> https://github.com/nsdvw/file-sharing/blob/master/db.sql#L17


> size INT UNSIGNED NOT NULL,


В курсе что у INT ограничение на 4 млрд? Если нужно больше, бери BIGINT или DECIMAL.

> https://github.com/nsdvw/file-sharing/blob/master/public_html/index.php#L16


> define('UPLOAD_DIR', 'upload');


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

> как отключить это долбанное кеширование?


Ты наверно читал доки по 2-й версии, а в доках 3-й версии управление кешированием сделано через методы: http://www.smarty.net/docs/en/caching.tpl

> https://github.com/nsdvw/file-sharing/blob/master/public_html/index.php#L43


> $login = ($id and $hash) ? true : false;


> $loginEmail = '';


> $loginPassword = '';


Чтобы не копипастить, то, что связано с логином, логично проверять в начале index.php и ставить через $app->view->appendData. Также, код залогинивания/разлогинивания/проверки логина не должен быть размазан по всему index.php, вынеси его в LoginService или LoginManager.

> https://github.com/nsdvw/file-sharing/blob/master/public_html/index.php#L77


> session_start();


> session_destroy();


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

Для Регистрации, Входа на сайт, Выхода, надо сделать отдельные роуты (урлы). Например /register, /logout, а не помещать все это в код главной страницы. Логаут надо защитить CSRF-токеном: https://github.com/codedokode/pasta/blob/master/security/xsrf.md иначе злоумышленник может разлогинивать всех, кого хочет, заманивая людей на свою страницу.

Код сохранения файла почему-то дублируется 2 раза, в $app->post('/') и $app->post('/ajax/upload'). Надо сделать единый обработчик.

> $loginError = '';


> $loginEmail = '';


> $loginPassword = '';


> $registerError = '';


> $registerLogin = '';


> $registerEmail = '';


Не надо передавать поля по отдельности. Сделай объект User и передавай его. Для ошибок можно сделать массив например, вида 'имя поля' => 'текст ошибки' или объект ErrorList с удобными методами. Также, почитай про алгоритм работы с формами: https://github.com/codedokode/pasta/blob/master/forms.md

> $registerForm = new RegisterForm(


> array(


> 'login'=>$_POST['register']['login']


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

> https://github.com/nsdvw/file-sharing/blob/master/public_html/index.php#L299


> $user->fromForm($registerForm);


Я думаю, код работы с формой надо поместить не в юзера, а в форму. $registerForm->setAttributes($user)

> $mapper = new UserMapper($app->connection);


UserMapper надо сделать сигнлтоном в Слиме.

> https://github.com/nsdvw/file-sharing/blob/master/app/Model/FileMapper.php


Это не модель и потому стоит положить его например в папку Mapper

> https://github.com/nsdvw/file-sharing/blob/master/app/Model/FileMapper.php#L44


> $limit = Pager::PER_PAGE


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

> https://github.com/nsdvw/file-sharing/blob/master/app/Model/Form.php


Это лучше поместить в папку Form. Также, предлагаю подумать, можно ли сделать чтобы форма работала не с массивом данных, а с моделью? Там появляется проблема в том, что в форме регистрации могут быть поля которых нет в модели (в модели есть хеш и соль, а в форме регистрации пароль и подтверждение). В сифмони эта проблема решена тем, что поля которых нет в модели, хранятся в массиве. Ты мог бы хранить их в полях объекта-наследника Form (в модели формы) и превращать их в хеш при обработке формы.

С другой стороны, форма, которая работает напрямую с моделью, удобна, так как нам не надо возиться с преобразованиями между массивом и объектом. А сейчас у тебя фактически модель дублируется 2 раза: модель-класс и данные модели внутри формы.

> https://github.com/nsdvw/file-sharing/blob/master/app/Model/Form.php#L5


> public $errorMessage;


Это плохая идея. Ты должен предоставить удобные методы для работы с ощибками («есть ли ошибка в этом поле?», «есть ли ошибки вообще?», «получить текст ошибки»), а не давать массив без методов. Более того, я не уверен, а должны ли мы хранить массив ошибок в форме? Не логичнее ли когда validate возвращает массив или объект с ошибками, никуда их не сохраняя?

> public function notEmpty($field, $flag = true)


Лучше дать функциям-валидаторам общий префикс, например validateNotEmpty

> https://github.com/nsdvw/file-sharing/blob/master/app/Model/Form.php#L36


> mb_internal_encoding('UTF-8');


Неправильно. Функция-валидатор не должна менять глобальные настройки. Это надо перенести в index.php

С данными, пришедшими в форму, надо делать trim() иначе из-за одного пробела они не пройдт валидацию.

> https://github.com/nsdvw/file-sharing/blob/master/app/Model/MediaInfo.php#L12


> public static function fromUser($fileName)


Что значит fromUser?

> https://github.com/nsdvw/file-sharing/blob/master/app/Model/MediaInfo.php#L39


> public static function fromDataBase(\stdClass $obj)


Все что работает с базой должно быть в маппере. Я советую переименовать метод в fromArray, и заменить StdClass на массив. stdClass это и есть по сути массив, только без функций для работы с ним. Не вижу ни одной ситуации где его вообще уместно использовать.

> https://github.com/nsdvw/file-sharing/blob/master/app/Model/MediaInfo.php#L42


> foreach ($obj as $property => $value) {


Тут нет никакой проверки что такие поля есть в объекте. Это плохо.

> https://github.com/nsdvw/file-sharing/blob/master/app/Model/User.php#L14


> public function fromForm(Form $form)


Это праильнее перенести в форму

> https://github.com/nsdvw/file-sharing/blob/master/app/Helper/HashGenerator.php


Советую почитать статью про стандартные функции работы с паролями, добавленные в 5.5: http://habrahabr.ru/post/194972/

> https://github.com/nsdvw/file-sharing/blob/master/app/Helper/Pager.php


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

> https://github.com/nsdvw/file-sharing/blob/master/views/header.tpl#L44


> <input type="text" name="login[email]" placeholder="email" value="{$loginEmail}">


Где защита от XSS и escape ? Читай https://github.com/codedokode/pasta/blob/master/security/xss.md

На этом пока все, исправь это а потом дальше посмотрим. Для начинающего неплохо, но код требует рефакторинга. Древовидные комментарии с аяксом не хочешь еще потом сделать?
https://github.com/nsdvw/file-sharing #380 #527570
>>526230

> https://github.com/nsdvw/file-sharing/blob/master/db.sql#L17


> size INT UNSIGNED NOT NULL,


В курсе что у INT ограничение на 4 млрд? Если нужно больше, бери BIGINT или DECIMAL.

> https://github.com/nsdvw/file-sharing/blob/master/public_html/index.php#L16


> define('UPLOAD_DIR', 'upload');


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

> как отключить это долбанное кеширование?


Ты наверно читал доки по 2-й версии, а в доках 3-й версии управление кешированием сделано через методы: http://www.smarty.net/docs/en/caching.tpl

> https://github.com/nsdvw/file-sharing/blob/master/public_html/index.php#L43


> $login = ($id and $hash) ? true : false;


> $loginEmail = '';


> $loginPassword = '';


Чтобы не копипастить, то, что связано с логином, логично проверять в начале index.php и ставить через $app->view->appendData. Также, код залогинивания/разлогинивания/проверки логина не должен быть размазан по всему index.php, вынеси его в LoginService или LoginManager.

> https://github.com/nsdvw/file-sharing/blob/master/public_html/index.php#L77


> session_start();


> session_destroy();


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

Для Регистрации, Входа на сайт, Выхода, надо сделать отдельные роуты (урлы). Например /register, /logout, а не помещать все это в код главной страницы. Логаут надо защитить CSRF-токеном: https://github.com/codedokode/pasta/blob/master/security/xsrf.md иначе злоумышленник может разлогинивать всех, кого хочет, заманивая людей на свою страницу.

Код сохранения файла почему-то дублируется 2 раза, в $app->post('/') и $app->post('/ajax/upload'). Надо сделать единый обработчик.

> $loginError = '';


> $loginEmail = '';


> $loginPassword = '';


> $registerError = '';


> $registerLogin = '';


> $registerEmail = '';


Не надо передавать поля по отдельности. Сделай объект User и передавай его. Для ошибок можно сделать массив например, вида 'имя поля' => 'текст ошибки' или объект ErrorList с удобными методами. Также, почитай про алгоритм работы с формами: https://github.com/codedokode/pasta/blob/master/forms.md

> $registerForm = new RegisterForm(


> array(


> 'login'=>$_POST['register']['login']


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

> https://github.com/nsdvw/file-sharing/blob/master/public_html/index.php#L299


> $user->fromForm($registerForm);


Я думаю, код работы с формой надо поместить не в юзера, а в форму. $registerForm->setAttributes($user)

> $mapper = new UserMapper($app->connection);


UserMapper надо сделать сигнлтоном в Слиме.

> https://github.com/nsdvw/file-sharing/blob/master/app/Model/FileMapper.php


Это не модель и потому стоит положить его например в папку Mapper

> https://github.com/nsdvw/file-sharing/blob/master/app/Model/FileMapper.php#L44


> $limit = Pager::PER_PAGE


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

> https://github.com/nsdvw/file-sharing/blob/master/app/Model/Form.php


Это лучше поместить в папку Form. Также, предлагаю подумать, можно ли сделать чтобы форма работала не с массивом данных, а с моделью? Там появляется проблема в том, что в форме регистрации могут быть поля которых нет в модели (в модели есть хеш и соль, а в форме регистрации пароль и подтверждение). В сифмони эта проблема решена тем, что поля которых нет в модели, хранятся в массиве. Ты мог бы хранить их в полях объекта-наследника Form (в модели формы) и превращать их в хеш при обработке формы.

С другой стороны, форма, которая работает напрямую с моделью, удобна, так как нам не надо возиться с преобразованиями между массивом и объектом. А сейчас у тебя фактически модель дублируется 2 раза: модель-класс и данные модели внутри формы.

> https://github.com/nsdvw/file-sharing/blob/master/app/Model/Form.php#L5


> public $errorMessage;


Это плохая идея. Ты должен предоставить удобные методы для работы с ощибками («есть ли ошибка в этом поле?», «есть ли ошибки вообще?», «получить текст ошибки»), а не давать массив без методов. Более того, я не уверен, а должны ли мы хранить массив ошибок в форме? Не логичнее ли когда validate возвращает массив или объект с ошибками, никуда их не сохраняя?

> public function notEmpty($field, $flag = true)


Лучше дать функциям-валидаторам общий префикс, например validateNotEmpty

> https://github.com/nsdvw/file-sharing/blob/master/app/Model/Form.php#L36


> mb_internal_encoding('UTF-8');


Неправильно. Функция-валидатор не должна менять глобальные настройки. Это надо перенести в index.php

С данными, пришедшими в форму, надо делать trim() иначе из-за одного пробела они не пройдт валидацию.

> https://github.com/nsdvw/file-sharing/blob/master/app/Model/MediaInfo.php#L12


> public static function fromUser($fileName)


Что значит fromUser?

> https://github.com/nsdvw/file-sharing/blob/master/app/Model/MediaInfo.php#L39


> public static function fromDataBase(\stdClass $obj)


Все что работает с базой должно быть в маппере. Я советую переименовать метод в fromArray, и заменить StdClass на массив. stdClass это и есть по сути массив, только без функций для работы с ним. Не вижу ни одной ситуации где его вообще уместно использовать.

> https://github.com/nsdvw/file-sharing/blob/master/app/Model/MediaInfo.php#L42


> foreach ($obj as $property => $value) {


Тут нет никакой проверки что такие поля есть в объекте. Это плохо.

> https://github.com/nsdvw/file-sharing/blob/master/app/Model/User.php#L14


> public function fromForm(Form $form)


Это праильнее перенести в форму

> https://github.com/nsdvw/file-sharing/blob/master/app/Helper/HashGenerator.php


Советую почитать статью про стандартные функции работы с паролями, добавленные в 5.5: http://habrahabr.ru/post/194972/

> https://github.com/nsdvw/file-sharing/blob/master/app/Helper/Pager.php


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

> https://github.com/nsdvw/file-sharing/blob/master/views/header.tpl#L44


> <input type="text" name="login[email]" placeholder="email" value="{$loginEmail}">


Где защита от XSS и escape ? Читай https://github.com/codedokode/pasta/blob/master/security/xss.md

На этом пока все, исправь это а потом дальше посмотрим. Для начинающего неплохо, но код требует рефакторинга. Древовидные комментарии с аяксом не хочешь еще потом сделать?
#381 #527577
>>526450

> Разумеется лезть в код линукса я для этого не собираюсь.


Ну лезть это последняя мера, а под strace программу запустить это не то.

> Куплю тогда мак, действительно


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

> А задроты пусть ковыряются в исходниках


Так программирование и есть ковыряние в исходниках

> Офигенное занятие, а кто-то сейчас на пляже загорает


Иди загорай, потом почитаешь

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

>>526465

Но убунта распространненнее и все ее поддерживают. Хотя если бы я ставил линукс я бы тоже наверно дебиан + какой-нибудь DE поставил.

>>526467

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

>>526499

> Выводы: из-за того что разработчики браузеров не могут реализовать этот несчастный стандарт w3org, мне приходится разбираться во всяких хаках и костылях


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

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


Лучше понимать как что работает.

> А верстка сама по себе неинтересна,


А ты попробуй в ней разобраться.

> Я для себя выбрал следующий способ: родительскому элементу выставить font-size:0, а у элементов с inline-block соответственно переопределить размер шрифта на нужный.


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

> Мой конспект статьи


У тебя там по моему тоже графоманства немного осталось:

> Одна из главных вещей, которые вы должны знать, ..


Это можно было смело вырезать.

> 6. Не писать закрывающие теги.


> Оригинально. Но валидатору это очевидно не понравится.


Для таких тегов как li, p, стандарт разрешает не ставить закрывающие, если они идут друг за другом.
#381 #527577
>>526450

> Разумеется лезть в код линукса я для этого не собираюсь.


Ну лезть это последняя мера, а под strace программу запустить это не то.

> Куплю тогда мак, действительно


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

> А задроты пусть ковыряются в исходниках


Так программирование и есть ковыряние в исходниках

> Офигенное занятие, а кто-то сейчас на пляже загорает


Иди загорай, потом почитаешь

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

>>526465

Но убунта распространненнее и все ее поддерживают. Хотя если бы я ставил линукс я бы тоже наверно дебиан + какой-нибудь DE поставил.

>>526467

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

>>526499

> Выводы: из-за того что разработчики браузеров не могут реализовать этот несчастный стандарт w3org, мне приходится разбираться во всяких хаках и костылях


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

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


Лучше понимать как что работает.

> А верстка сама по себе неинтересна,


А ты попробуй в ней разобраться.

> Я для себя выбрал следующий способ: родительскому элементу выставить font-size:0, а у элементов с inline-block соответственно переопределить размер шрифта на нужный.


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

> Мой конспект статьи


У тебя там по моему тоже графоманства немного осталось:

> Одна из главных вещей, которые вы должны знать, ..


Это можно было смело вырезать.

> 6. Не писать закрывающие теги.


> Оригинально. Но валидатору это очевидно не понравится.


Для таких тегов как li, p, стандарт разрешает не ставить закрывающие, если они идут друг за другом.
#382 #527588
>>527570

>В курсе что у INT ограничение на 4 млрд?


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

>что-то констант многовато


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

>Код сохранения файла почему-то дублируется 2 раза, в $app->post('/') и $app->post('/ajax/upload')


Так ведь один для обращения обычной отправкой формы, а второй через аякс. Да, логика там одинаковая, но разный результат: первая вызывает шаблонизатор и тот генерирует html, а вторая только возвращает responseText.
Но да, надо подумать, как вынести повторяющийся код в одно место.

>Ты наверно читал доки по 2-й версии


Упс, таки да.
composer show -i (зацени как я могу)
smarty/smarty v3.1.27
Я только еще не разобрался с этими суффиксами для версий пакетов, типа ~, ^ и т.д.

И наверное настало время перекатиться на twig, как и обещал. Как раз читал документацию, когда ты написал.
Сделаю наверное отдельным бранчем (подтянул знания гита, теперь разбираюсь во многих тонкостях). Кстати гит учил по превосходному видеокурсу от линда.ком, там очень подробно как раз объясняется принцип работы гита, например что такое указатель HEAD, как происходит слияние, что такое конфликт и как его избежать и многое другое. Так что видеокурсы бывают разные, это зависит от преподавателя. И от ученика зависит, будет ли он бездумно повторять действия из ролика, или вникнет в суть. Не от формы урока зависит его качество.
По гиту не до конца понял один нюанс, бампну вопрос >>527491

Первые впечатления: твиг разве не использует пространства имен?
И вот эта строка require_once '/path/to/lib/Twig/Autoloader.php';
Чего композер этот класс сам не подключил?

Остальные замечания переварю и исправлю, данке шон.
Ты потом еще глянь верстку, только не сильно стукай. Это мой первый сверстанный сайт вообще в жизни, понятно что верстка там не идеальна. Нужны общие советы.
И в джаваскриптах не силен. В целом работает, но как-то похоже на лапшу. Наверное по js тоже не помешало бы освоить какой-нибудь фреймворк.
Мне советовали backbone. Что по нему можешь сказать?
#382 #527588
>>527570

>В курсе что у INT ограничение на 4 млрд?


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

>что-то констант многовато


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

>Код сохранения файла почему-то дублируется 2 раза, в $app->post('/') и $app->post('/ajax/upload')


Так ведь один для обращения обычной отправкой формы, а второй через аякс. Да, логика там одинаковая, но разный результат: первая вызывает шаблонизатор и тот генерирует html, а вторая только возвращает responseText.
Но да, надо подумать, как вынести повторяющийся код в одно место.

>Ты наверно читал доки по 2-й версии


Упс, таки да.
composer show -i (зацени как я могу)
smarty/smarty v3.1.27
Я только еще не разобрался с этими суффиксами для версий пакетов, типа ~, ^ и т.д.

И наверное настало время перекатиться на twig, как и обещал. Как раз читал документацию, когда ты написал.
Сделаю наверное отдельным бранчем (подтянул знания гита, теперь разбираюсь во многих тонкостях). Кстати гит учил по превосходному видеокурсу от линда.ком, там очень подробно как раз объясняется принцип работы гита, например что такое указатель HEAD, как происходит слияние, что такое конфликт и как его избежать и многое другое. Так что видеокурсы бывают разные, это зависит от преподавателя. И от ученика зависит, будет ли он бездумно повторять действия из ролика, или вникнет в суть. Не от формы урока зависит его качество.
По гиту не до конца понял один нюанс, бампну вопрос >>527491

Первые впечатления: твиг разве не использует пространства имен?
И вот эта строка require_once '/path/to/lib/Twig/Autoloader.php';
Чего композер этот класс сам не подключил?

Остальные замечания переварю и исправлю, данке шон.
Ты потом еще глянь верстку, только не сильно стукай. Это мой первый сверстанный сайт вообще в жизни, понятно что верстка там не идеальна. Нужны общие советы.
И в джаваскриптах не силен. В целом работает, но как-то похоже на лапшу. Наверное по js тоже не помешало бы освоить какой-нибудь фреймворк.
Мне советовали backbone. Что по нему можешь сказать?
#383 #527598
>>526555

Не работает если значение содержит знаки равно: https://ideone.com/PJflPF

>>526567

> Убрал пробелы при помощи font-size:0 и display:table у родителя.


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

> box-sizing: border-box;


> width: 100%;


Тут можно обойтись ьез border-box, используя width auto. А если используешь box-sizing, то надо писать еще вендорные префиксы для более старых браузеров.

> font-size: 18px;


Когда указываешь font-size укаызвй рядом line-height, она сама не вычисляется, а наследуется.

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

> В шестом задании применил clearfix-метод против выпадения плавающих блоков.


> font-family: "Trebuchet MS";


В конце списка шрифтов должен идти один из универсальных: http://htmlbook.ru/css/font-family

> article:before,


> article:after {


> content: " ";


> display: table;


> }


Что делает элемент :after, я понимаю, а для чего тут :before?

Ну и вообще, я подумал, тут клеарфикс не нужен. Клеарфикс используют, когда мы хотим чтобы родитель охватывал находящиеся в нем флоаты. У нас внутри article нет флоатов. Что касается проблемы заползания текста под меню, она решается margin-left на article.

Объясни-ка, зачем тут клеарфикс?

Клеарфикс нужен в задаче где серые квадраты в желтых блоках находятся.

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

>>526579

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


Так ты можешь это учесть, ты же знаешь ширину бордера. Если посмотреть MDN:

https://developer.mozilla.org/ru/docs/Web/CSS/border-radius
https://developer.mozilla.org/en-US/docs/Web/CSS/background-clip

То увидим что радиус относится к кромке, определяемой свйоством background-clip, по умолчанию это border-box то есть наружная кромка бордера. Следовательно, внутренний радиус (радиус угла спана) равен внешнему радиусу label минус ширина бордера.

> Что касается тени, то на картинке в задании не могу рассмотреть, как она должна выглядеть: кажется, у верхней рамки тень сильнее, справа и слева слабее, а внизу едва заметна. Не знаю, как это реализовать. Сделал простой box-shadow.


Ты правильно рассмотрел. Это размытая тень, которая чуть смещена вниз. Изучи свойство box-shadow и какие у него есть параметры. Там есть 2 парамера, отвечающих за смещение тени. Вот как примерно можно определить параметры:

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

У тебя прозрачность тени не используется. Ты используешь #999 то есть полностью непрозрачный цвет. Обычно тень задается как rgba(0, 0, 0, 0.3) то есть черный цвет с определенным уровнем прозрачности. Обычно делают 0.0.5-0.2 в качестве значения прозрачности.

Тень должна появляться при вжатии кнопки, не при наведении. При наведении можно просто серым цветом подсвечивать.

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

> input[type="radio"] {


> display: none;


Так не годится. Этот код действует на любые радиокнопки а должен скрывать только кнопки внутри твоего виджета.

Также, у тебя если добавить пару опций, некоторые линии становятся двойными: https://jsfiddle.net/71q5wwtg/1/

>>526582

> string[] splittedSrr = rawStr.Split(new Char[] {','});


Это не сработает если в значениях строк есть запятые. Алсо, именование переменных у тебя ужасное, что за pKey? Почему не key? Что за rawStr? тяжело читать конечно.

Почему rawStr сделан публичным свойстом? Смысл? Его можно менять?

> public Dictionary<string,string> Dict;


Это неудачное свойство, так как до вызова FillDict оно равно null. Как можно надежно работать с объектом в котором непонятно есть значение или нет?

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

Что-то у тебя в ООП пробелы.
#383 #527598
>>526555

Не работает если значение содержит знаки равно: https://ideone.com/PJflPF

>>526567

> Убрал пробелы при помощи font-size:0 и display:table у родителя.


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

> box-sizing: border-box;


> width: 100%;


Тут можно обойтись ьез border-box, используя width auto. А если используешь box-sizing, то надо писать еще вендорные префиксы для более старых браузеров.

> font-size: 18px;


Когда указываешь font-size укаызвй рядом line-height, она сама не вычисляется, а наследуется.

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

> В шестом задании применил clearfix-метод против выпадения плавающих блоков.


> font-family: "Trebuchet MS";


В конце списка шрифтов должен идти один из универсальных: http://htmlbook.ru/css/font-family

> article:before,


> article:after {


> content: " ";


> display: table;


> }


Что делает элемент :after, я понимаю, а для чего тут :before?

Ну и вообще, я подумал, тут клеарфикс не нужен. Клеарфикс используют, когда мы хотим чтобы родитель охватывал находящиеся в нем флоаты. У нас внутри article нет флоатов. Что касается проблемы заползания текста под меню, она решается margin-left на article.

Объясни-ка, зачем тут клеарфикс?

Клеарфикс нужен в задаче где серые квадраты в желтых блоках находятся.

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

>>526579

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


Так ты можешь это учесть, ты же знаешь ширину бордера. Если посмотреть MDN:

https://developer.mozilla.org/ru/docs/Web/CSS/border-radius
https://developer.mozilla.org/en-US/docs/Web/CSS/background-clip

То увидим что радиус относится к кромке, определяемой свйоством background-clip, по умолчанию это border-box то есть наружная кромка бордера. Следовательно, внутренний радиус (радиус угла спана) равен внешнему радиусу label минус ширина бордера.

> Что касается тени, то на картинке в задании не могу рассмотреть, как она должна выглядеть: кажется, у верхней рамки тень сильнее, справа и слева слабее, а внизу едва заметна. Не знаю, как это реализовать. Сделал простой box-shadow.


Ты правильно рассмотрел. Это размытая тень, которая чуть смещена вниз. Изучи свойство box-shadow и какие у него есть параметры. Там есть 2 парамера, отвечающих за смещение тени. Вот как примерно можно определить параметры:

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

У тебя прозрачность тени не используется. Ты используешь #999 то есть полностью непрозрачный цвет. Обычно тень задается как rgba(0, 0, 0, 0.3) то есть черный цвет с определенным уровнем прозрачности. Обычно делают 0.0.5-0.2 в качестве значения прозрачности.

Тень должна появляться при вжатии кнопки, не при наведении. При наведении можно просто серым цветом подсвечивать.

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

> input[type="radio"] {


> display: none;


Так не годится. Этот код действует на любые радиокнопки а должен скрывать только кнопки внутри твоего виджета.

Также, у тебя если добавить пару опций, некоторые линии становятся двойными: https://jsfiddle.net/71q5wwtg/1/

>>526582

> string[] splittedSrr = rawStr.Split(new Char[] {','});


Это не сработает если в значениях строк есть запятые. Алсо, именование переменных у тебя ужасное, что за pKey? Почему не key? Что за rawStr? тяжело читать конечно.

Почему rawStr сделан публичным свойстом? Смысл? Его можно менять?

> public Dictionary<string,string> Dict;


Это неудачное свойство, так как до вызова FillDict оно равно null. Как можно надежно работать с объектом в котором непонятно есть значение или нет?

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

Что-то у тебя в ООП пробелы.
14 Кб, 447x215
#384 #527601
Начал учить верстку.
Слева - хром, справа - файрфокс. Как видно, в хроме кнопка съезжает на пару пикселей вниз. В чем проблема?
#385 #527604
>>527601
Код пости.
#386 #527605
>>526585

Хорошо бы. А то залезет программист в верстку, набылокодит, а потом кому-то разгребать это.

>>526651

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

>>526697

> но меня убивает необходимость вечно что-то искать, прикручивать, настраивать.


Он вообще-то и сделан для любителей прикручивать и настраивать.

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


Тебя избавят от денег в первую очередь.

>>526704

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

>>526714

> 9. Не видел в глаза ни одного фрейворка.


Плохо

> Погуглил, сейчас везде просят Laravel/Symfony, за сколько их можно освоить?


По моему просят больше Yii2/Symfony2

>>526725

Тебе наверно нужен preg_match_all а не preg_match который находит только первое совпадение

>>526727

> mb_detect_encoding


Это функция-пустышка. Она не дает верный результат: http://habrahabr.ru/post/107945/

100% способа определить кодировку нет. Но можно попробовать угадать ее по статистике распределения букв.

Проверь чему равен mb_internal_encoding

>>526734

В новых версиях по идее должна иметь, если mb_internal_encoding не задан: http://www.google.ru/search?sourceid=chrome&ie=UTF-8&q=php+ini+default+charset

>>526737

> Можно же указать mbstring.internal_encoding = UTF-8 (и iconv.internal_encoding = UTF-8) в php.ini.


да, но это действует на все проекты сразу

> Получается, лучше всегда объявлять кодировку в начале скрипта и не трогать глобальные настройки?


Лучше и там и там

>>526752

> А если исключить элементы с пустыми строками?


> preg_split("//u", $text, 0, PREG_SPLIT_NO_EMPTY);


Да, так и надо

> В задаче «Лев Толстой» (http://ideone.com/ao47z3) уместно использовать array_rand()?


да, твое решение верное.

>>526905

По моему без разницы, но можно вынести в начало самые распространенные и глобальные вещи (стили body, ссылок). И можно сгруппировать по страницам, да.

Мне кажется стили для разных разделов сайта удобно помечать разными префиксами. Типа reg-form, reg-notice и тд.

>>526918

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

>>527069

> [0-9 \\-?\\(?\s?\\)?]{10}


Это неправильно. Почитай что это значит:

Ровно 10 раз встречаются такие символы: цифры, пробел, минус, знак вопроса, скобка. Но ведь тогда получается если у тебя есть 2 пробела то под цифры остается только 8 знаков.

А надо — ровно 10 цифр + любое число дополнительных знаков между ними.

> \\-?


Знак вопроса внутри квадратных скобок значит просто «знак вопроса». Квадратные скобки вообще значат «один из перечасленных символов» и в них спецсимволы не работают.
#386 #527605
>>526585

Хорошо бы. А то залезет программист в верстку, набылокодит, а потом кому-то разгребать это.

>>526651

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

>>526697

> но меня убивает необходимость вечно что-то искать, прикручивать, настраивать.


Он вообще-то и сделан для любителей прикручивать и настраивать.

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


Тебя избавят от денег в первую очередь.

>>526704

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

>>526714

> 9. Не видел в глаза ни одного фрейворка.


Плохо

> Погуглил, сейчас везде просят Laravel/Symfony, за сколько их можно освоить?


По моему просят больше Yii2/Symfony2

>>526725

Тебе наверно нужен preg_match_all а не preg_match который находит только первое совпадение

>>526727

> mb_detect_encoding


Это функция-пустышка. Она не дает верный результат: http://habrahabr.ru/post/107945/

100% способа определить кодировку нет. Но можно попробовать угадать ее по статистике распределения букв.

Проверь чему равен mb_internal_encoding

>>526734

В новых версиях по идее должна иметь, если mb_internal_encoding не задан: http://www.google.ru/search?sourceid=chrome&ie=UTF-8&q=php+ini+default+charset

>>526737

> Можно же указать mbstring.internal_encoding = UTF-8 (и iconv.internal_encoding = UTF-8) в php.ini.


да, но это действует на все проекты сразу

> Получается, лучше всегда объявлять кодировку в начале скрипта и не трогать глобальные настройки?


Лучше и там и там

>>526752

> А если исключить элементы с пустыми строками?


> preg_split("//u", $text, 0, PREG_SPLIT_NO_EMPTY);


Да, так и надо

> В задаче «Лев Толстой» (http://ideone.com/ao47z3) уместно использовать array_rand()?


да, твое решение верное.

>>526905

По моему без разницы, но можно вынести в начало самые распространенные и глобальные вещи (стили body, ссылок). И можно сгруппировать по страницам, да.

Мне кажется стили для разных разделов сайта удобно помечать разными префиксами. Типа reg-form, reg-notice и тд.

>>526918

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

>>527069

> [0-9 \\-?\\(?\s?\\)?]{10}


Это неправильно. Почитай что это значит:

Ровно 10 раз встречаются такие символы: цифры, пробел, минус, знак вопроса, скобка. Но ведь тогда получается если у тебя есть 2 пробела то под цифры остается только 8 знаков.

А надо — ровно 10 цифр + любое число дополнительных знаков между ними.

> \\-?


Знак вопроса внутри квадратных скобок значит просто «знак вопроса». Квадратные скобки вообще значат «один из перечасленных символов» и в них спецсимволы не работают.
#387 #527606
>>527159

> \t// Если в последнем месяце получилась переплата


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

Считает вроде верно.

>>527166

> Strawberry банк неправильно посчитан, должно 61336.87 выйти.


Почему? Там 0 комиссия и всего 2%.

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


Это верно.

>>527229

Средствами CSS

>>527262

> $regexp = '/^\s?(8|\+[\s]?7)(\d{10}|-\d{3}-\d{1}-\d{3}-\d{3}|\s?[(-]?\s?\d{3}\s?[)]?\s?(\d{2}-\d{2}-\d{2}|[-]?\d{7}|\d{2}\s?\d{3}\s?\d{2}|[-]\s?\d{3}\s-



Ну не, ты издеваешься, анон? Вот скажи, как это проверять? Выписывать на листочек и тщательно пересчитыать? Нет, код должен быть проще. Регулярку надо записать так:

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

>>527263

Что ты забыл тут, грубиян?

>>527277

Можно через АПи узнавать текущее время воспроизведения. Алсо тестовое задание должно проверять твои знания и сообразительность.

>>527291

Можно гуглом, изучи синтаксис запросов.

>>527337

Бессмысленное дублирование функций браузера.
#387 #527606
>>527159

> \t// Если в последнем месяце получилась переплата


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

Считает вроде верно.

>>527166

> Strawberry банк неправильно посчитан, должно 61336.87 выйти.


Почему? Там 0 комиссия и всего 2%.

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


Это верно.

>>527229

Средствами CSS

>>527262

> $regexp = '/^\s?(8|\+[\s]?7)(\d{10}|-\d{3}-\d{1}-\d{3}-\d{3}|\s?[(-]?\s?\d{3}\s?[)]?\s?(\d{2}-\d{2}-\d{2}|[-]?\d{7}|\d{2}\s?\d{3}\s?\d{2}|[-]\s?\d{3}\s-



Ну не, ты издеваешься, анон? Вот скажи, как это проверять? Выписывать на листочек и тщательно пересчитыать? Нет, код должен быть проще. Регулярку надо записать так:

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

>>527263

Что ты забыл тут, грубиян?

>>527277

Можно через АПи узнавать текущее время воспроизведения. Алсо тестовое задание должно проверять твои знания и сообразительность.

>>527291

Можно гуглом, изучи синтаксис запросов.

>>527337

Бессмысленное дублирование функций браузера.
3 Кб, 209x91
#388 #527611
>>527604
Попробовал вычленить хедер и все стили, на него влияющие - поплыло вообще полностью.
И в хроме все равно на пиксель съезжает.

http://pastebin.com/ZVV7ka0h
#389 #527613
>>527406

> $matches[1][$key]


лучше использовать в preg_match_all другой порядок заполнения массива чтобы было просто $match[1]

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

>>527430

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

Автоматического способа искать ссылки нет. Яндекс-маркет их не ищетЮ владельцв магазинов сами их присылают.

>>527431

Да. Гугл не любит тех кто им пользуется и не смотрит рекламу.

>>527447

Просто хочу предупредить что никто так не пишет и ты учишься по учебнику 10-летней давности. Почитай про PDO.

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

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

В panel.php вообще ты пытаешься отправлять заголовок после вывода HTML, это делать нельзя.

>>527448

Вместо того чтобы брать данные из POST, пропиши их в коде и проверь заработает ли. Код надо сохранять в utf-8 без BOM.

>>527452

Ждать замучаешься и все равно в итоге забанят.

>>527472

Судя по http://stackoverflow.com/questions/8751221/php-timezone-database-is-corrupt-error какой-то баг в самом PHP.

У меня в PHP 5.4 все работает, а клоуны, которые сидят на самых последних и непротестированных версиях PHP, должны страдать.

Сделай phpinfo() и выясни какая версия PHP, какие настройки даты/времени.

Вот аналогичные баги в старых PHP:

https://bugs.php.net/bug.php?id=48882
https://bugs.php.net/bug.php?id=42856
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=492025

Гугл тут твой лучший помощник.

>>527480

Баг не у анона а в PHP.

>>527486

Баг в PHP (или в дистрибутиве на ideone) видимо. Там же написано should never happen то есть мы не должны ни при каких условиях это были увидеть.

Сделай phpinfo() и выясни какая версия PHP, какие настройки даты/времени.

>>527491

Я обычно явно пишу git push origin HEAD (запушить текущую ветку)

А так да, ты вроде прав.

>>527494

Это плохая книга и код там плохой.

>>527504

По отдельности. У меня уроки есть:

https://gist.github.com/codedokode/7054af4a03865c4cc863
https://gist.github.com/codedokode/10774100
https://gist.github.com/codedokode/10539568

>>527523

На линуксе апач и PHP вообщ парой команд ставится, зачем сборки?

>>527524

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

>>527537

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

Можешь брать Sliex, он не плох. Тогда советую сразу взять шаблонизатор Twig и Doctrine для работы с БД. Они все равно пригодятся когда до симфони дойдешь.
#389 #527613
>>527406

> $matches[1][$key]


лучше использовать в preg_match_all другой порядок заполнения массива чтобы было просто $match[1]

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

>>527430

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

Автоматического способа искать ссылки нет. Яндекс-маркет их не ищетЮ владельцв магазинов сами их присылают.

>>527431

Да. Гугл не любит тех кто им пользуется и не смотрит рекламу.

>>527447

Просто хочу предупредить что никто так не пишет и ты учишься по учебнику 10-летней давности. Почитай про PDO.

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

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

В panel.php вообще ты пытаешься отправлять заголовок после вывода HTML, это делать нельзя.

>>527448

Вместо того чтобы брать данные из POST, пропиши их в коде и проверь заработает ли. Код надо сохранять в utf-8 без BOM.

>>527452

Ждать замучаешься и все равно в итоге забанят.

>>527472

Судя по http://stackoverflow.com/questions/8751221/php-timezone-database-is-corrupt-error какой-то баг в самом PHP.

У меня в PHP 5.4 все работает, а клоуны, которые сидят на самых последних и непротестированных версиях PHP, должны страдать.

Сделай phpinfo() и выясни какая версия PHP, какие настройки даты/времени.

Вот аналогичные баги в старых PHP:

https://bugs.php.net/bug.php?id=48882
https://bugs.php.net/bug.php?id=42856
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=492025

Гугл тут твой лучший помощник.

>>527480

Баг не у анона а в PHP.

>>527486

Баг в PHP (или в дистрибутиве на ideone) видимо. Там же написано should never happen то есть мы не должны ни при каких условиях это были увидеть.

Сделай phpinfo() и выясни какая версия PHP, какие настройки даты/времени.

>>527491

Я обычно явно пишу git push origin HEAD (запушить текущую ветку)

А так да, ты вроде прав.

>>527494

Это плохая книга и код там плохой.

>>527504

По отдельности. У меня уроки есть:

https://gist.github.com/codedokode/7054af4a03865c4cc863
https://gist.github.com/codedokode/10774100
https://gist.github.com/codedokode/10539568

>>527523

На линуксе апач и PHP вообщ парой команд ставится, зачем сборки?

>>527524

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

>>527537

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

Можешь брать Sliex, он не плох. Тогда советую сразу взять шаблонизатор Twig и Doctrine для работы с БД. Они все равно пригодятся когда до симфони дойдешь.
#390 #527614
>>527606

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


Что-то как-то просто совсем. Я думал, это хитровыебанное задание на отлов всех скобочек, дефисов и проблелов с различным количеством цифр между ними.
Вот новый вариант по 10 цифрам:
http://ideone.com/WfMgUi
#391 #527618
>>527542

Полезно для развития мозгов, только начинать надо с простых (которые решены максимальное число раз). Параллельно читай книги про алгоритмы/структуры данных, например http://aliev.me/runestone/ и книги по решению олимпиадных задач:

http://www.google.ru/search?sourceid=chrome&ie=UTF-8&q=%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5+%D0%BE%D0%BB%D0%B8%D0%BC%D0%BF%D0%B8%D0%B0%D0%B4%D0%BD%D1%8B%D1%85+%D0%B7%D0%B0%D0%B4%D0%B0%D1%87

Ну и можешь тут запостить задачу, я подскажу.

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

>>527546

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

Гугл стоит в стороне от этого и никак не проверяет расширения. А ведь расширение видит все твои данные, включая https сайты, например интернет-банки.

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

Причем как я помню, в хроме в расширении может быть даже dll с нативным кодом, а она с твоим компьютером вообще что хочешь сделает.
#392 #527620
>>527588

> Меня больше смущает кол-во импортированных классов. А если у меня их будет под сотню?


Если использовать кеш опкодов (встроен начиная с 5.5) то это не проблема.

> Так ведь один для обращения обычной отправкой формы, а второй через аякс. Да, логика там одинаковая, но разный результат: первая вызывает шаблонизатор и тот генерирует html, а вторая только возвращает responseText.


Сделай один обработчик с ифом в конце. Не копипасть, не дублируй код.

> Я только еще не разобрался с этими суффиксами для версий пакетов, типа ~, ^ и т.д.


Обычно хватает 2.× то есть зафиксировать мажорную версию.

> И наверное настало время перекатиться на twig, как и обещал.


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

> Первые впечатления: твиг разве не использует пространства имен?


> И вот эта строка require_once '/path/to/lib/Twig/Autoloader.php';


> Чего композер этот класс сам не подключил?


Это инструкция для тех у кого нет композера.

> твиг разве не использует пространства имен?


Использует.

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


У нас есть Путь HTML/CSS, там изучение идет с основ, в ОП посте. Советую найти время на прохождение.

> И в джаваскриптах не силен. В целом работает, но как-то похоже на лапшу. Наверное по js тоже не помешало бы освоить какой-нибудь фреймворк.


Мне советовали backbone. Что по нему можешь сказать?
Советую начать с jQuery. Это библиотека для работы с DOM так что сначала надо изучить его.

Backbone это для написания клиентских приложений (Single page App), он один не используется, к нему как минимум шаблонизатор или что-то аналогичное надо. Пежде чем за него браться надо изучить хорошо JS, DOM, jQuery.

У нас кстати и на JS задачки есть. С роботом-проверяльщиком.
#392 #527620
>>527588

> Меня больше смущает кол-во импортированных классов. А если у меня их будет под сотню?


Если использовать кеш опкодов (встроен начиная с 5.5) то это не проблема.

> Так ведь один для обращения обычной отправкой формы, а второй через аякс. Да, логика там одинаковая, но разный результат: первая вызывает шаблонизатор и тот генерирует html, а вторая только возвращает responseText.


Сделай один обработчик с ифом в конце. Не копипасть, не дублируй код.

> Я только еще не разобрался с этими суффиксами для версий пакетов, типа ~, ^ и т.д.


Обычно хватает 2.× то есть зафиксировать мажорную версию.

> И наверное настало время перекатиться на twig, как и обещал.


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

> Первые впечатления: твиг разве не использует пространства имен?


> И вот эта строка require_once '/path/to/lib/Twig/Autoloader.php';


> Чего композер этот класс сам не подключил?


Это инструкция для тех у кого нет композера.

> твиг разве не использует пространства имен?


Использует.

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


У нас есть Путь HTML/CSS, там изучение идет с основ, в ОП посте. Советую найти время на прохождение.

> И в джаваскриптах не силен. В целом работает, но как-то похоже на лапшу. Наверное по js тоже не помешало бы освоить какой-нибудь фреймворк.


Мне советовали backbone. Что по нему можешь сказать?
Советую начать с jQuery. Это библиотека для работы с DOM так что сначала надо изучить его.

Backbone это для написания клиентских приложений (Single page App), он один не используется, к нему как минимум шаблонизатор или что-то аналогичное надо. Пежде чем за него браться надо изучить хорошо JS, DOM, jQuery.

У нас кстати и на JS задачки есть. С роботом-проверяльщиком.
#393 #527622
>>527601

Причин может быть много, посмотри инспектором. margin например.

>>527614

Простое решение лучше сложного.

> '/^\s?(8|\+[\s]?7)([\s()-]{0,}\d{1}[\s()-]{0,}\d{1}[\s()-]{0,}\d{1}[\s()-]{0,}\d{1}[\s()-]{0,}\d{1}[\s()-]{0,}\d{1}[\s()-]{0,}\d{1}[\s()-]{0,}\d{1}[\s()-]{0,}\d{1}[\s()-]{0,}\d{1}[\s()-]{0,})$/';


Это пока еще не простое решение. Что это такое? Укороти регулярку минимум в 4 раза.

> \d{1}


Это то же самое что и \d

> {0,}


Это то же самое что звездочка

> [\s()-]{0,}\d{1}[\s()-]{0,}\d{1}


Избавься от копипасты
#394 #527623
Если я кого-то пропустил, напомните о себе
#395 #527625
>>527622
Финальный вариант, укоротил, копипасту убрал.
http://ideone.com/CpchOt
#396 #527627
>>527625

Теперь хорошо.
#397 #527637
>>527598

>Это не сработает если в значениях строк есть запятые


>В условии не было же. Но да, не сработает, увы. Алсо, именование переменных у тебя ужасное, что за pKey? Почему не key?



Потому что это регэксп шаблон. Вот и назвал p (preg) Key

>Что за rawStr?



Сырая строка же. Необработанные входные данные. Английский жи.

>Это неудачное свойство, так как до вызова FillDict оно равно null. Как можно надежно работать с объектом в котором непонятно есть значение или нет?



Можно было бы в конструкторе проинициализировать.

>Что-то у тебя в ООП пробелы.



Я две недели как учусь.
#398 #527638
Как решить задание циклы и айфон в кредит?
W5.1 Исправь и переделай программу, чтобы она работала нормально. Например, эта версия позволяет школьнику переплатить за кредит, так, что банк ему становится должен — это плохо! Подсказка: перед тем, как платить, надо проверять, сколько осталось долга, и если он меньше 5000, то платить только остаток и завершать цикл через break

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

http://ideone.com/L3bJ5d
#399 #527646
>>527638

>перед тем, как платить, надо проверять, сколько осталось долга


Смотрим твой код:
for ($month = 1; $month <= 20; $month ++) {
$creditBalance = ( $creditBalance * $percent ) + $servicePayment - $monthlyPayment;

Первой же строчкой идет оплата и только потом проверка. Условие уже не выполнено.
#400 #527647
>>527646

>первой же строчкой внутри цикла


фикс
#401 #527651
>>527647
не понимаю. Можешь написать как правильно?
#402 #527653
>>527651
Но это уже будет решением задачи. Боюсь я тем самым окажу тебе медвежью услугу. Могу только пояснить тебе логику программы, а код ты как-нибудь сам уже из этого делай. Сперва мы вычисляем сумму оставшегося кредита на данном месяце (но ни в коме случае не отнимаем от него месячную плату), затем идет проверка на то, больше ли эта сумма нашей ежемесячной платы или меньше, и в зависимости от проверки уже отнимаем либо ежемесячную плату, либо сумму кредита.
#403 #527671
Как прикрутить бутсьрап к симфони?
Все по инструкции сделал, нихуя не работает
Пиздец, нахую столько сложностей
#404 #527680
>>527671
Чего конкретно не получается?
Ассеты используй
22 Кб, 803x265
#405 #527683
Читаю главу учебника ОПа про регулярки.
Зачем в этих примерах модификатор u? В шаблоне же только цифры.
#406 #527684
>>527683

Лучше привыкнуть всегда его ставить ем забыть и долго искать причину почему не работает. Вреда-то от него нету.
#407 #527704
Что думаете по поводу создания сайта, где люди покупают фальшивые билеты и деньги начисляются вам?
#408 #527708
Кто-то писал уже файлообменник на слиме? Чот вообще не пойму, как там к бд подключаться и данные от пользователя принимать, потом закачивать юзеру на комп, как с шаблонами работать, пока только выводить контент в зависимости от урл могу, туториал ваще непонятый.
239 Кб, 1959x1959
#409 #527709
ДЖВА ГОДА УЧИЛ ВЕБ ПРОГРАММИРОВАНИЕ
@
ЗНАЕШЬ МАЙСОКЛ ХТМЛ ЦСС ПХП ЖКВЕРИ УЧИШЬ ПХП ФРЕЙМВОРКИ
@
ПОШЕЛ РАБОТАТЬ ПРОДАВАНОМ
#410 #527710
>>527708

Задачу про список студентов сделал? Ее надо делать до файлообменника и там работа с базой как раз отрабатывается. И там подробные комментарии к задаче.
30 Кб, 600x399
#411 #527715
>>527709
Ах, жиненна)))

СИЖУ С ПЕРВЫХ ТРЕДОВ
@
КАЖДЫЙ РАЗ ВОЗВРАЩАЮСЬ СЮДА, В НАДЕЖДЕ, ЧТО ЗА МЕНЯ РЕШАТ МЕЛКУЮ ЗАДАЧКУ
#412 #527722
>>527684
Ок.

Не могу понять, как решать задачу "Grammar Nazi" (пик).
Допустим есть переменная $text, содержащая

>Нет пробела,после запятой;точки с запятой!Восклицательного знака?Вопросительного знака:двоеточия.После точки. Жы-шы пешы с «и». Сдесь координально пока не зделал но потом зделаю и он будет зделан а может быть и нет.


Какой алгоритм действий? Резать текст по пробелам не нужно ведь? Должно быть одно регулярное выражение, которое будет искать все ошибки и заносить найденные в массив? А потом нужно ещё что-то пользователю вывести, желательно чтобы он быстро нашёл это место в тексте, значит на выводе должно получиться что-то вроде

>,после


>;точки


>!Восклицательного


>?Вопросительного


и т.д.
Для этого нужно, чтобы регулярка искала слово целиком, до следующего за ним пробела. Что-то вроде /(,|;|!)\\S+/
Чё делать посаны? Киньте свой код
71 Кб, 689x374
#413 #527723
>>527722
Картинку забыл.
#414 #527725
>>527710
https://github.com/toppestkek/List-Ofstudents

Списал у блэкджерри. Эй, ебло, я тебя не спрашиваю, как вообще к бд подключаться. я спрашивая, где в слиме это говно все спрятано, туториал говно
#415 #527726
Слушайте, а зачем вообще нужен этот тред, зачем вы учите нюфань программировать? Ведь во всем мире за образования берутся деньги. (Не берутся только если ты медалист). Без корочки все равно нихуя не устроишься, так к чему это, вам побазарить не о чем?
#416 #527727
>>527725
Зая, а зачем тебе это?
sage #417 #527728
>>527725
Нормальный у слима туториал, это ты глупенький. Слим из коробки не умеет в базы данных. Накатывай какую-либо библиотеку, которая умеет в бд, и уже с ней работай.
#418 #527729
>>527728
Сажа приклеилась.
#419 #527730
>>527728

>какую-либо библиотеку


В PHP же пдо есть.
#420 #527732
>>527730
Есть. Но когда у тебя в БД больше 3х таблиц, то уже надо что-то, что умеет в абстракции.
#421 #527745
>>527728
Нет, туториал правда говно, мне кажется, зря я убил целый день на его чтение я нихуя непонел, лучше бы просто лазил по папкам и смотрел классы.
#422 #527751
>>527680
Использовал, mopa_bootstrap, делал всё по инструкции через LESS, в итоге стили н загружаются

вот кофиг
https://ideone.com/hobYki
вот шаблон
https://ideone.com/RsbJQ7
#423 #527752
>>527751
официальный тоже пробовал, тот же результат

а вот что выпадает при
sudo php app/console assetic:dump --env=prod --no-debug

[Symfony\Component\Debug\Exception\ContextErrorException]
Catchable Fatal Error: Argument 2 passed to Assetic\Filter\LessFilter::__construct() must be of the type a
rray, string given, called in /var/www/FinanceTest/app/cache/prod/appProdProjectContainer.php on line 301
and defined
44 Кб, 410x355
#424 #527812
>>526858

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


Да чет стыдно, пиздец. Вот есть у васянов вот такая функция на отправку почты http://pastebin.com/hF2zTstC с проверочками и прочим. А мне надо вписать в неё возможность отправки файла. Причем если файла нет, то хуй с ним, а если файл есть, то, хотя бы, проверить его на MIME тип и размер. Загружается файл, отсылается письмо. Письмо улетает адресату со ссылкой на файл внутри. Вот моё быдлятство на отправку файла, лел http://pastebin.com/zPSgJg5u

Молость опух чет. Помогите вписать, с меня щитонибудь.
#425 #527840
Привет. Нахожусь в процессе изучения верстки, сейчас прохожу CSS. Пришел сюда, чтобы спросить советов или найти людей с похожей проблемой. Так вот, чувствую себя абсолютно, непроходимо тупым. Приходится постоянно перечитывать одну и ту же строку, чтобы хоть что - то понять. И не всегда помогает. Когда перехожу к практике - начинаю адово тупить, сразу хвататься за конспекты, в общем, пятиминутное задание я делаю все двадцать, а то и больше. Вся проблема в том, что я застреваю на довольно легких моментах("Селекторы" на чтмл академи. Не смог выполнить итоговое испытание). Рассеянность, невозможность нормально сконцентрироваться, отсутствие нестандартного мышления - вот это мои постоянные спутники. Пришел я не плакаться, а спросить советов, можно ли хоть как - то с этим бороться? Или тупость это навсегда? Может какие - то ноотропы или другие волшебные таблетки? Особые техники развития интеллекта? Аноны, пожалуйста, спасайте идиота!
#426 #527841
>>527726

>Без корочки все равно нихуя не устроишься


Да ты поехавший, как там в 80-ых? Кто на это вообще смотрит, нужны люди которые умеют писать код либо смогут научиться это делать а не корочкообладатели, которые ничего не могут.
#427 #527850
>>527840
Забей, я тут регулярки, ООП, паттерны и БД все освоил уже по урокам, а в верстку с CSS и что тут по ней постят до сих пор не врубаюсь. Для верстки по ходу талант нужен, начни лучше с бэкенда.
#428 #527857
>>527840
Очевидно приходит с опытом.
Попробуй порешать задачи на развитие логики и абстрактного мышления, если с этим есть проблемы.
Нет ничего стыдного, чтобы попробовать детские развивающие задачи (между прочим, я ради интереса смотрел "тесты на айкью", которые любят люди, желающие показаться умнее, чем есть на самом деле: там большинство заданий именно для дошкольников).

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

Так что если есть желание вникать в процесс программирования, это уже хорошо. Нужно только терпение и трудолюбие.
#429 #527871
Саше и Маше подарили 12 яблок. Саша съел несколько яблок, а Маша съела столько яблок, сколько осталось у Саши. Сколько яблок осталось на двоих у Саши и Маши?
(Чужие яблоки есть нельзя.)

Ответ: платье золотое
#430 #527872
>>527871

>подарили по 12 яблок


fix
#431 #527874
Почоны, есть один js код, он лежит в переменной, я хочу добавить туда результат выполнения кода:
for ($i = 1; $i < $counts; $i++)
{
$maps[]= "myPlaces.push(new Place('".$points[$i]['name']."',".$points[$i]['coordinate'].", ''))"."\r\n";
}
то-есть каждый элемент массива вставить в код js, каким образом это сделать? с одиночным элементом выходит хорошо, но когда элементов больше одного - не работает, видимо перенос строки корректно не работает. Либо как это можно организовать по другому? У меня есть массив с ответом базы данных с названиями и координатами, есть их количество, мне надо построить карту с указанными точками на js. Я к сожалению с JS знаком очень плохо.
#432 #527875
>>527874
точнее я пробовал вот так
for ($i = 1; $i < $counts; $i++)
{
$maps.= "myPlaces.push(new Place('".$points[$i]['name']."',".$points[$i]['coordinate'].", ''))"."\r\n";
}
$code = "кусок js кода".$maps."второй кусок JS кода";
#433 #527878
#434 #527883
>>527874

>видимо перенос строки корректно не работает


Не перенос, а отсутствие точки с запятой в js-коде.
После myPlaces.push() нужна точка с запятой.
Открой исходный код страницы (ctrl + u), и посмотри на полученный яваскрипт.

А почему не сформировать массив myPlaces прямо из php?
Тогда это выглядело бы
<script>var myPlaces = <?php echo $myPlaces;?>; ... </script>
#435 #527891
>>527857

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


И очень действенный и понятный метод между прочим, не понимаю, что там понимать, если есть уже хорошие готовые решения.
#436 #527893
>>527883
Да, точки с запятой не хватало, но карту не рисовало оказывается потому, что результатов больше 40 было.
#437 #527895
>>527874
Использование шаблонизатора может помочь избежать такого корявого кода.
Например в твиг можно объединить массив в строку прямо в шаблоне

Фильтр join возвращает строку, содержащую объединенные строки последовательности. Разделитель по-умолчанию - пустая строка, но его можно определить как параметр:
{{ [1, 2, 3]|join('|') }}
{# вернет 1|2|3 #}
{{ [1, 2, 3]|join }}
{# вернет 123 #}

Так что тебе было бы достаточно передать php-шный массив в шаблон, а в шаблоне преобразовать его в строку
places.push( {{ php_places|join(',') }} );
20 Кб, 180x358
#438 #527899
Я тут почитал статью об абстрактном мышлении и это... Мы оказывается не аутисты, а Люди с Абстрактным Мышлением.
Теперь я спокоен.

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

Основные качества:
Большая работоспособность, увлеченность профессией;
Могут представлять ситуацию с разных ракурсов, мыслят сложно;
Могут отказаться от физического плана. (че?)
Недостатки:
эгоисты, сосредоточены только на себе;
невнимательны к родственникам и друзьям, рассеяны;
чересчур активное абстрактное мышление приводит к непрактическим выводам;
усердствуют в теории, но пассивны в практике.
105 Кб, 1137x626
#439 #527900
Делаю задачу на превьюшки. Алгоритм для SCALE уже готов, а вот как сделать CROP пока не совсем понятно. Вот что у меня вышло:
http://ideone.com/wdTpjo
Результат не такой. какого я ожидал. Пикрелейтед: слева результат выполнения программы, справа то, как должно быть по логике, если я конечно правильно понял суть кропа.
#440 #527909
>>527900

>$x = floor($newWidth/2-$width/2);


Зачем?
Те четыре координаты int $dst_x , int $dst_y , int $src_x , int $src_y определяют смещение слоя изображения относительно холста.
Это координаты левого верхнего угла исходного и результирующего изображения, они должны быть выставлены в ноль.

> $tempImage = imagecreatetruecolor($newWidth, $newHeight);


>$newImage = imagecreatetruecolor($width, $height);


Зачем два раза создавать новое изображение?
Разберись в работе этих функций.

Алгоритм такой:
1. Создаем канвас (холст, пустышку) при помощи imagecreatetruecolor с размерами превью.
Высоту превью кстати лучше не фиксировать, а высчитывать из пропорций исходного изображения, чтобы не искажать. Например, ширина превью 100, а ориг.картинки 800, это 100/800. Но высота ориг.картинки 600, тогда высота превью 600*1/8 = 75.
2. Подгружаем ресурс при помощи imagecreatefromjpeg (кстати, почему только jpeg? как насчет gif, а также png, где еще нужно позаботиться о прозрачности?)
3. imagecopyresampled($canvas, $resource, 0, 0, 0, 0, $preview_width, $preview_height, $original_width, $original_height).
4. Отдаем в рабузер или сохраняем на диск при помощи imagejpeg.
#441 #527910
>>527900
А, тебе нужно именно вырезать участок изображения, а не создать уменьшенную копию?
Что-то я туплшю сегодня.
#442 #527911
>>527910

>есть 2 режима уменьшения, когда например мы пытаемся вписать картинку 1000×200 в квадрат 100×100: CROP — уменьшает картинку до 500×100 и отрезает правую и левую части, SCALE — уменьшает картинку до 100×20


SCALE (то, что ты описал) у меня уже сделан. Нужно сделать CROP
24 Кб, 266x314
#443 #527918
>>527871
Ошибка в условии задачи. Попробуйте снова.
#445 #527928
>>527899

>Могут отказаться от физического плана. (че?)


В астрал переходят.
#446 #527941
Поделитесь хоть историями успеха, что ли. Личными, конечно же.
Как опа-хуя дела?
#447 #527944
>>527613

>другой порядок заполнения массива


>сделай чтобы определяло еще опечатку в английских словах


Сделал, проверьте:
http://ideone.com/ZJjOOQ
290 Кб, 1600x639
2 Кб, 100x100
#448 #527950
>>527900
Ладно, я понял, что было не так. В src_w и src_h нужно было писать не размеры исходного изображения, а нужное разрешение конечной превьюшки. Вот скрипт:
http://ideone.com/wdTpjo
Пикрелейтед оригинал и кропнутая превьюшка. Всё верно?
#449 #527954
>>527918
В анусе твоём ошибка.
20 Кб, 977x480
Git #450 #527964
Анончики, помогите с гитхабом. На протяжении года я время от времени ковыряюсь в нем, когда нужно выложить свои поделки, поэтому не все тонкости я знаю и помню. Вот, например, ситуация пикрелейтед - год назад я клепал свое первое учебное портфолио с кучей косяков с компьютера 1. Пару месяцев назад я пересел на компьютер 2 и перелопатил абсолютно все заново на нем. Теперь вопрос - как с компьютера 2 выложить файлы с заменой на мастер ветку и на ветку gh-pages (т.е. сразу и захостить с помощью гитхаба страницу сайта с кодом 2). Т.е. первое - мне надо удалить все файлы (код1) с мастер ветки и ветки gh-pages, и залить на них код2. Создавать новый чистый репозитарий не хочу, нужно изменить именно этот, чтобы не менять ссылку на портфолио. Буду рад рад, если вкратце напишете мне последовательность действий, советы вроде "юзай $git clone" мне мало помогут.
#451 #527970
#452 #527977
>>527918
>>527923
Ращщот абиззян окончен))0)
#453 #527981
>>527964
Репозиторий как бы не предназначен, чтобы что-то удалять и перезаписывать с нуля.

Ну удали репозиторий и создай новый с тем же именем. Ссылка же не поменяется.
Если по каким-то причинам не имеешь права удалить репо, то создай новые ветки branch1 и branch2, удали свои старые негодные ветки master и gh-pages, а потом переименуй branch1 и branch2 в master и gh-pages. (Попробуй сначала на фейковом репозитории, чтобы не ошибиться)

Команды:
branch <branch_name> // создает новый бранч
checkout <branch_name> // переключиться на ветку
branch // без аргументов показывает все ветки в локальном репозитории
branch -r // показывает отслеживаемые ветки удаленного репозитория; чтобы ветка была отслеживаемой, нужно пушить ее с опцией -u (push -u)
branch -a // все ветки
branch -m <старое_имя> <новое_имя> // переименовать ветку
branch -d <имя_ветки> // удалить бранч
#454 #527983
>>527981
Спасибо за ответ!
18 Кб, 500x333
#455 #527987
Есть массив. http://ideone.com/ttpjSq
Как мне сделать такой вывод?
#456 #527990
>>527987
Джаваскриптом?

setInterval(function(){
// взять значение из свойств объекта, присвоить это значение innerHTML соответствующих элементов
}, 2000);
#457 #527991
>>527987
echo 'Многообразие...';

foreach ($array as $member){
echo $member['url'];
}
#458 #527992
>>527991
У него там гиф, ссылки и описание циклически меняются.
#459 #527996
>>527991
http://ideone.com/MFQNLK

Я так понимаю, надо получить текущее значение страницы и сравнять с массивном, и то, что ниже значения < отсеивается. Но как это сделать — не понимаю.
732 Кб, 1099x761
http://maketi.esy.es/ Кун с макетом #460 #527997
В очередной раз присылаю на проверку свой макет.
Прочитал кстати, ОП, тот учебник который ты рекомендовал, а именно http://softwaremaniacs.org/blog/category/primer/, действительно очень неплохой, помог разобраться во многих вещах, так что если кто не читал, прочтите.

Теперь к самому макету:

>Традиционно меню делают с помощью списка ul/li (типа меню это список ссылок). Также, можно делать его через тег <nav>


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

>Сейчас используют тег strong.


Учел. Статьи прочитал, смысл понял. На сайте переделал.

>Я думаю этот пустой див можно либо заменить на padding + backgorund либо (если используется спрайт) на псевдоэлемент. А класс обозначающий картинку перенести на родителя.


Если что, это сказано было про 4 изображения: андроид, монитор...
Схему понял, переделал.

>-Куча замечаний насчет текста и использования тегов hN-


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

>У input нет закрывающего тега.


Просто по невнимательности поставил, остаток неудавшегося эксперимента.

>all наверно можно не писать


Класс у работ в портфолио Действительно можно было не писать, переделал, правда чуть увеличился css, зато html стал меньше, ведь в том и смысл?

>Что у тебя за странные отступы перед селектором в CSS?


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

>Также, сохрани css файл в utf-8.


И как я сам не догадался. И кстати, открыв его в utf-8 без BOM русские буквы были иероглифами, а вот в обычном utf-8 все в порядке. Странно, ведь в редакторе все открывалось нормально, ну да ладно, теперь в курсе как нужно сохранять.

>У блочных элементов ширина 100% по умолчанию. min-width лучше указывать на html


Логично, все понял, переделал.

>Насчет ширины — давай сделаем так. На совсем узкой странице пусть допустим ширина серединки будет 900px + 10px поля с краев. На более широкой странице ширина середины увеличивается до 1100px, а дальше растут уже поля с краев. Это достигается с помощью min (на html) и max-width (на wrapper).


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

>Также, чтобы научиться адаптивному дизайну, попробуй сделать версию страницы для малекнькой (<= 800) ширины, когда страница перестраивается в виде вертикальной цепочки из блоков. Такие страницы удобно смотреть на смартфоне например. Для этого надо использовать media queries и @media. После того как это сделаешь, добавь meta viewport чтобы мобильные устройства знали что страница под них оптимизирована и не отображали ее в уменьшенном виде.



Сделал переставлние блоков на ширине 800 и 400. Столкнулся с проблемой что если @media в коде выше того, что оно исправляет, то эта медиа не работает. Помогло только использование !important но в коде это выглядит адски.
Так же переделал шапку при уменьшении экрана, знаю что некрасиво, но я вообще не дизайнер, и даже рисовать не умею, сделал как смог.

>Для лого можно объединить теги div и a.


Логично, переделал.

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


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

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


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

>Вот это плохо, что ты копипастишь эти width 900px.


Убрал отовсюду эту ширину. Сейчас правда 1100. Оставил в ксс только в одном месте в wrapper. Но пришлось добавить пару дивов-врапперов в html, за что, после прочтения учебника, как я понял, заслуживаю места в аду.

>Вот это все равно плохое имя для класса


Названия классов по цифровому порядку убрал.

>Для расширения охвата браузеров добавь версии с вендорными префиксами, -webkit-box-sizing и -moz-box-sizing. Аналогично с border-radius и transition.


Учел, исправил во всех случаях.

>Проверь отступы. На макете например под 4 колонками есть паддинг снизу, пикселей 70-80, у тебя нет.


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

>text-before-portfolio и portfolio-buttons-and-works это одна секция, не две.


Логично, объединил.

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


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

>по моему тут проще вообще отключить бордер


Сказано было про бордер вокруг кнопок. Его цвет был одинаковым с фоном. Логично, что он не нужен, убрал.

>Укажи анимируемые свойства явно.


Сказано было про transition: 0.5s;
Это мне нужно объяснить какие свойства я там анимирую и сказать или там что-то прописывать. Если сказать, то у кнопок это плавное изменение цвета при наведении и переключении. У работ в портфолио плавное срезание углов. Так же при переставлении из ряда 4 работы, в ряд из 2 работ это происходит плавно.

>По моему тут не нужны nth-of-type.


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

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


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

> font-size: 0; Что за грязные трюки?


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

>Социальные иконки надо выводить без img


Сделал.

>Также для них надо сделать эффект при наведении. Например потемнение или осветление.


Немного необычно как мне кажется, но сделал.

>div можно выпилить. Ты всегда можешь сделать <a> блоком или инлайн-блоком или чем угодно


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

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


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

>Логотип у тебя по моему меньше чем в макете. Кнопка See Portfolio не соответвует размерами макету, возможно из-за отсутствия шрифта у меня.


Логотип сделал точно таким же как и на psd. И теперь вопрос. Все нужно делать пиксель-в-пиксель как и на том изображении? Я делал на глаз. Это ведь издевательство все высчитывать.

А теперь то, что я не осилил. Шрифты. Оставил их на самый конец. Прочитал только что статьи и понял что ничерта не понял. Попробую еще разобратья завтра на свежую голову. Но пока я ничего не могу сделать. Просто не понимаю что там нужно конвертировать, что загружать на те сайты и т.д. Отдаленно представляю, но пока не могу сделать. И еще. Я загрузил папку со шрифтами ничего оттуда не вырезал лишнего, так 1.2мб загрузил, прописал все в css. Но вот проверить работоспособность не могу, т.к. на моем компьютере этот шрифт был установлен изначально.

Твои посты про мой макет, чтобы их не искать
>>526186
>>526187
732 Кб, 1099x761
http://maketi.esy.es/ Кун с макетом #460 #527997
В очередной раз присылаю на проверку свой макет.
Прочитал кстати, ОП, тот учебник который ты рекомендовал, а именно http://softwaremaniacs.org/blog/category/primer/, действительно очень неплохой, помог разобраться во многих вещах, так что если кто не читал, прочтите.

Теперь к самому макету:

>Традиционно меню делают с помощью списка ul/li (типа меню это список ссылок). Также, можно делать его через тег <nav>


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

>Сейчас используют тег strong.


Учел. Статьи прочитал, смысл понял. На сайте переделал.

>Я думаю этот пустой див можно либо заменить на padding + backgorund либо (если используется спрайт) на псевдоэлемент. А класс обозначающий картинку перенести на родителя.


Если что, это сказано было про 4 изображения: андроид, монитор...
Схему понял, переделал.

>-Куча замечаний насчет текста и использования тегов hN-


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

>У input нет закрывающего тега.


Просто по невнимательности поставил, остаток неудавшегося эксперимента.

>all наверно можно не писать


Класс у работ в портфолио Действительно можно было не писать, переделал, правда чуть увеличился css, зато html стал меньше, ведь в том и смысл?

>Что у тебя за странные отступы перед селектором в CSS?


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

>Также, сохрани css файл в utf-8.


И как я сам не догадался. И кстати, открыв его в utf-8 без BOM русские буквы были иероглифами, а вот в обычном utf-8 все в порядке. Странно, ведь в редакторе все открывалось нормально, ну да ладно, теперь в курсе как нужно сохранять.

>У блочных элементов ширина 100% по умолчанию. min-width лучше указывать на html


Логично, все понял, переделал.

>Насчет ширины — давай сделаем так. На совсем узкой странице пусть допустим ширина серединки будет 900px + 10px поля с краев. На более широкой странице ширина середины увеличивается до 1100px, а дальше растут уже поля с краев. Это достигается с помощью min (на html) и max-width (на wrapper).


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

>Также, чтобы научиться адаптивному дизайну, попробуй сделать версию страницы для малекнькой (<= 800) ширины, когда страница перестраивается в виде вертикальной цепочки из блоков. Такие страницы удобно смотреть на смартфоне например. Для этого надо использовать media queries и @media. После того как это сделаешь, добавь meta viewport чтобы мобильные устройства знали что страница под них оптимизирована и не отображали ее в уменьшенном виде.



Сделал переставлние блоков на ширине 800 и 400. Столкнулся с проблемой что если @media в коде выше того, что оно исправляет, то эта медиа не работает. Помогло только использование !important но в коде это выглядит адски.
Так же переделал шапку при уменьшении экрана, знаю что некрасиво, но я вообще не дизайнер, и даже рисовать не умею, сделал как смог.

>Для лого можно объединить теги div и a.


Логично, переделал.

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


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

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


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

>Вот это плохо, что ты копипастишь эти width 900px.


Убрал отовсюду эту ширину. Сейчас правда 1100. Оставил в ксс только в одном месте в wrapper. Но пришлось добавить пару дивов-врапперов в html, за что, после прочтения учебника, как я понял, заслуживаю места в аду.

>Вот это все равно плохое имя для класса


Названия классов по цифровому порядку убрал.

>Для расширения охвата браузеров добавь версии с вендорными префиксами, -webkit-box-sizing и -moz-box-sizing. Аналогично с border-radius и transition.


Учел, исправил во всех случаях.

>Проверь отступы. На макете например под 4 колонками есть паддинг снизу, пикселей 70-80, у тебя нет.


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

>text-before-portfolio и portfolio-buttons-and-works это одна секция, не две.


Логично, объединил.

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


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

>по моему тут проще вообще отключить бордер


Сказано было про бордер вокруг кнопок. Его цвет был одинаковым с фоном. Логично, что он не нужен, убрал.

>Укажи анимируемые свойства явно.


Сказано было про transition: 0.5s;
Это мне нужно объяснить какие свойства я там анимирую и сказать или там что-то прописывать. Если сказать, то у кнопок это плавное изменение цвета при наведении и переключении. У работ в портфолио плавное срезание углов. Так же при переставлении из ряда 4 работы, в ряд из 2 работ это происходит плавно.

>По моему тут не нужны nth-of-type.


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

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


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

> font-size: 0; Что за грязные трюки?


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

>Социальные иконки надо выводить без img


Сделал.

>Также для них надо сделать эффект при наведении. Например потемнение или осветление.


Немного необычно как мне кажется, но сделал.

>div можно выпилить. Ты всегда можешь сделать <a> блоком или инлайн-блоком или чем угодно


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

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


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

>Логотип у тебя по моему меньше чем в макете. Кнопка See Portfolio не соответвует размерами макету, возможно из-за отсутствия шрифта у меня.


Логотип сделал точно таким же как и на psd. И теперь вопрос. Все нужно делать пиксель-в-пиксель как и на том изображении? Я делал на глаз. Это ведь издевательство все высчитывать.

А теперь то, что я не осилил. Шрифты. Оставил их на самый конец. Прочитал только что статьи и понял что ничерта не понял. Попробую еще разобратья завтра на свежую голову. Но пока я ничего не могу сделать. Просто не понимаю что там нужно конвертировать, что загружать на те сайты и т.д. Отдаленно представляю, но пока не могу сделать. И еще. Я загрузил папку со шрифтами ничего оттуда не вырезал лишнего, так 1.2мб загрузил, прописал все в css. Но вот проверить работоспособность не могу, т.к. на моем компьютере этот шрифт был установлен изначально.

Твои посты про мой макет, чтобы их не искать
>>526186
>>526187
#461 #528001
>>527996
Ну что-то вроде этого:
foreach ($array as $member){
$mask = 'http:\/\/site\.com\/\w+\/w+\/(\d+)';
$actual_link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
preg_match($mask, $actual_link, $matches);
$curNumber = $matches[1][0];

preg_match($mask, $member['url'],$matches);
$number = $matches[1][0];
if ($number > $curNumber)
echo $member['url'];

}
423 Кб, 2510x1048
Кун с макетом #462 #528015
>>527997
Плюс ко всему вот что.

1й и 2й скриншоты мои, 3й скриншот сделал мой знакомый. У него в шапке видно, что блок со словами сдвинут немного слева. Я полагаю, что это padding который дают сами браузеры для ul, вот только до этого такая проблема была у меня на пк и вылечилась обнулением всех паддингов. На моем телефоне тоже все ровно, а вот у знакомого почему-то нет. Почему понять не могу.
58 Кб, 575x562
#464 #528023
>>528022
Сам съеби в бе, даун малолетний.
#465 #528024
>>528022
Эм, я вообще-то делаю задания ОПа и макет, который дал ОП. Тот который легитимный. Так что мне не нужно никуда укатываться.

>Также, у нас есть задачи которые позволят тебе изучить или подтянуть до нормального уровня знания JS/HTML/CSS/SQL. Решай их параллельно с задачами выше.

#466 #528029
>>527981
Забыл спросить - а как со второго компьютера получить доступ к удаленному репозитарию? Допустим, мне нужно в мастер ветку добавить файл?
#467 #528030
>>528029
Так же, как и с первого: ввести логин и пароль, когда спросит при пуше.
#468 #528037
>>527840
Изучение чего-то другого даётся проще?
Как у тебя с воображением?
#469 #528038
>>528029
remote add origin https://github.com/login/repo_name.git

Ты так много "забыл", что лучше начать учить с самого начала.
https://git-scm.com/book/ru/v1
#470 #528040
>>528024
Это лишь дополнение, верстка-тред в другом месте, здесь обсуждают пхп.
14 Кб, 402x149
9 Кб, 413x109
#471 #528041
Господа, какое решение задачи по js №4 более лучшее?
http://dkab.github.io/jasmine-tests/?spec=4
#472 #528042
>>528041
Алсо, мне больше нравится первое. Но не будет ли такая проверка наличия аргументов избыточной?
#473 #528052
>>527997
Сделай у социальных ссылок изменение прозрачности плавным, пока ОП не видит. Так будет пизже.
#474 #528057
>>528038
Не получается...Я создаю на другом компьютере новую папку в которой инициализирую версионный контроль, в папке создаю файл, который хочу добавить в существующий удаленный репозитарий - команда $git remote add origin <SSH-путь (или HTTPS)> мне выдает ошибку:

Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.

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

В общем, я не могу понять, почему так, и как нужно настраивать ключи, чтобы работать с проектами, не клонируя их каждый раз.
42 Кб, 1297x405
#475 #528062
Кто как учит английский?
Может есть годные курсы? (вот тут точно нужны курсы, английские идиомы хуй выучишь по словарю, пикрелейтед)
#476 #528063
>>528057
Сгенирируй новый ключ:
ssh-keygen -t rsa -b 4096 -C "mylo@moe.com"
и постаавь его в настройках своего акка на гитхабе
#477 #528065
>>528062
Сирики смотрю с фильмами в оригинале. По моему большинство так и учит.
#478 #528066
>>528062

>пикрелейтед


А что там не так?
#479 #528068
>>528062
На http://php.net/manual/en/ заходишь, открываешь в параллельных вкладках http://www.lingvo-online.ru/ и google translate и читаешь все статьи подряд, незнакомые слова суешь в лингву и гуглтранслейт. Через пару месяцев такого будешь уже нормально все понимать.
#480 #528069
>>528065

>>>528062


А я музыку слушаю и композиции перевожу.
#481 #528075
>>528065
Да ну, я половину слов не понимаю, и они еще так быстро говорят, а американцы часто с реднекским акцентом.
Разве что с субтитрами попробовать, и через каждых пять секунд ставить на паузу.

>>528066
http://www.correctenglish.ru/reference/idioms/cup-of-tea/

Особенно все эти выражения с get, take, put и т.д., у которых стопицот значений, а гугл выдает херню.
Ну ладно, качну сериал с субтитрами.
#482 #528080
>>528075
Так я с субтитрами и смотрю. Сейчас уже почти не ставлю паузы, буквально 1 или 2 раза за весь фильм. И тё, только для того, чтобы посмотреть заинтересовавшее меня слово, которое никак не влияет на сюжет и моё понимание фильма в целом.
#483 #528084
Численный эксперимент не получается. Хотел проверить с какого количества кликов в среднем, можно добраться от любого случайного пользователя контакта, до любого другого случайного пользователя. Решил реализовать это используя рекурсивную функцию и естественно API контакта. Суть в следующем
1. Берём два случайных id (можно сгенерировать)
2. Делаем запрос на получение всех друзей id#1, и ищем среди этого массива id#2, если не находим то уже делаем запрос по каждому другу из полученного массива и ищем id#2, если и тут ничего не получаем то формируем массив из всех друзей второго уровня (друзей друзей друзей) и ищем уже по ним и так дальше.

Короче скрипт не желает работать уже после того как я просто ищу по друзьям друзей, работает если например ограничить обход 50 друзьями друзей, в итоге у меня получается примерно 15 000 уникальных id из которых можно искать нужный id#2, но получить большее количество весьма проблематично.

У меня вопрос, это впринципе не решаемая задача в домашних условиях? Либо я слишком утяжелил скрипт и пройтись так по 3-4 уровням вполне реально?
#484 #528086
Аноны, никогда не делал сайты, изучал C/С++. Что вообще нужно знать, чтобы их делать? Я так понял html нужен для каркаса сайта, javascript это то, что ты на него нанизываешь, а PHP это, если ты хочешь, чтобы твой сайт реагировал на действия пользователя? Прав ли я? Можете объяснить вкратце? И накидать учебников совсем новичкам.
#485 #528091
>>528086
Html нужен для каркаса, css для представления ("разукраски" этого каркаса), javascript для того чтобы страница реагировала на действия пользователя, в основном на движения и клики мыши, а также подгрузки данных с сервера без перезагрузки страницы (технология ajax). Javascript встроен в браузер.
Php крутится на сервере. И поскольку держать тысячи однотипных html страниц на сервере не выгодно, php занимается в основном тем, что берет информацию из базы данных (нужно знать язык запросов к базе SQL), и собирает страницу из этих данных и кусков html из шаблонов. Так мы получаем страницу для конкретного пользователя, например.

Блог с учебником для начинающих и задачами в оп-посте.
#486 #528092
>>528091

>Блог с учебником для начинающих и задачами в оп-посте.


Да, но там сразу уроки PHP и нет ни html, ни javascript
#487 #528093
>>528063
Сделал. Но, по ходу, все равно приходиться делать пулл (скачивать весь репозитарий) в папку с новым файлом, чтобы иметь возможность вносить в проект изменения. Это так и задумано?
#488 #528094
>>528084
Использую не класс VK API а file_get_contents. Конечно можно разбить задачу на несколько этапов и на несколько скриптов, например вначале по нажатию одной кнопки проверить первый уровень друзей (записать id в файл, примерно 250-300 id), потом проверить второй уровень по нажатию другой кнопки (записать все ид в файл это уже примерно 60000 id), потом разбить по частям и проверить третий уровень (записать в файл это уже примерно 18000000) то есть на третьем уровне уже очень большая вероятность найти нужный ид. Но хотелось бы сделать всё одним скриптом за одну загрузку, или слишком много информации для такого придётся обрабатывать?
#489 #528096
>>528094
Дело в том что я хочу исследовать соц.сеть, и суть в том что бы не только 2 или 3 клика до необходимого человека а например 2,6 или 1,9 кликов (взависимости от ранжировки друзей в списке мои друзья), а также проверить всё это по гендерному и географическому принципу.
#490 #528097
>>528092

>Также, у нас есть задачи которые позволят тебе изучить или подтянуть до нормального уровня знания JS/HTML/CSS/SQL. Решай их параллельно с задачами выше.



- HTML/CSS: https://gist.github.com/codedokode/58ebc90bd006baf4b35c
htmlbook.ru, htmlacademy.ru, видеокурсы центра "Специалист"
- JS: https://gist.github.com/codedokode/ce30e7a036f18f416ae0
learn.javasript.ru
- MySQL: https://gist.github.com/codedokode/10539213

По верстке и MySQL можно еще попробовать загуглить какие-нибудь книжки.
По js и php хороших книг для новичков нет.
#491 #528098
>>528097
Ясно, спасибо
#492 #528107
>>528097
а где нужно писать на js?
#493 #528110
>>528062
на форчане сижу
ПЕРВОЕ ЗАДАНИЕ ПО JS #494 #528123
http://pastebin.com/6A4xrF3h

Парни, как вывести первое значения без изменений, а потом уже учитывая step.
не могу придумать.
#495 #528138
>>527997

Проверить шрифт можно поменяв его имя. Напиши временно в @font-face другое имя, например OpenSans2 и аналогично в font-family. И тестируй. Не забудь только потом назад поменять.
#496 #528142
>>528022

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

Если каким-то троллям это не нравится их никто тут не удерживает, валите в любой другой тред.

>>528040

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

>>528029

Клонировать.

>>528062

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

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

http://news.ycombinator.com/ (IT тематика типа нашего хабра)
reddit.com (просто всякая ерунда, по тематике напоминает /b )

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

>>528075

> Да ну, я половину слов не понимаю, и они еще так быстро говорят, а американцы часто с реднекским акцентом.


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

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

>>528093

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


Гит это не FTP сервер. Тебе нужно иметь копию репозитория чтобы что-нибудь с ним сделать.

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

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

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

И в чем проблема клонировать репозиторий? У тебя там терабайт файлов что ли?
#496 #528142
>>528022

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

Если каким-то троллям это не нравится их никто тут не удерживает, валите в любой другой тред.

>>528040

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

>>528029

Клонировать.

>>528062

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

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

http://news.ycombinator.com/ (IT тематика типа нашего хабра)
reddit.com (просто всякая ерунда, по тематике напоминает /b )

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

>>528075

> Да ну, я половину слов не понимаю, и они еще так быстро говорят, а американцы часто с реднекским акцентом.


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

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

>>528093

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


Гит это не FTP сервер. Тебе нужно иметь копию репозитория чтобы что-нибудь с ним сделать.

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

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

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

И в чем проблема клонировать репозиторий? У тебя там терабайт файлов что ли?
#497 #528161
Кто изучает регулярные выражения, можно порешать задачки здесь http://regexone.com
#498 #528165
>>528001
http://ideone.com/EmibHU
Как применить в этом случае? У меня ничего не получается.
#499 #528166
>>527850
Дружище, тут суть не только в CSS, к сожалению.

>>527857
Спасибо за советы. Пердолился весь вечер и таки осилил селекторы.
>>528037
Нет, воспринимаю с трудом практически любую информацию. Во время изучения чего - то мозг будто бы превращается в желе. С воображением лучше, чем надо. Сотни безумных идей, придуманных вселенных ну и так далее.
#500 #528169
>>528165
http://ideone.com/xQjxYd
Как теперь правильно расположить?
#501 #528170
>>528169
Кажется, я хуйню написал.
#502 #528172
>>528170
У меня получилось. Теперь как зациклить, чтобы показывало и A, и B в конце?
#503 #528174
Дело в том, что у меня сортировка неправильно срабатывает.

A
B
G
J

А я хочу, чтобы было:
G
J
A
B
#504 #528176
>>528174
Добавить ещё один цикл по массиву с противоположным знаком сравнения во внутреннем условном операторе.
Правда я не понял, что ты делаешь, и вообще ньюфаг.
#505 #528177
>>528174
Как теперь лимит, чтобы выводились не все массивы, а только пять значений?
http://ideone.com/jWrrod
#506 #528178
>>528176
Да я так и сделал, лол.

>>528176>>527987
#507 #528180
>>528178
Всё, решил задачу. Оказалось на до прикрутить array_slice.
#508 #528181
>>527871

12-2*(несколько яблок)
53 Кб, 800x600
#509 #528183
>>527871
>>527977
$result = 12-($sasha+$masha)
$result/2
#510 #528192
>>527722
Бамп вопросу. Я правильно понял задание?
#511 #528196
>>528177
$i = 0;
foreach($posts as $post) {
$i++;
if ($i > 5) break;
if ($actual_title > $post['title']) {
if ($actual_title > $post['title']) {
\t echo $post['title']."<br>\n";
}
}
}
#512 #528199
>>527722
Регулярка умеет искать по пробелам же. ,\s для запятой с пробелом например.
Резать ничего не нужно, нужно универсальную маску регуляркой.

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


Да, все найденные куски текста с ошибкой вывести.

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


Скорее слово+знак препинания+пробел+слово. Под это маску и пиши.

>(,|;|!) - это группа для


Вряд ли тут группа нужна, скорее брэкет []
#513 #528200
>>528199

>слово+знак препинания+слово


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

Даже не знаю, как к этому относиться. Впрочем, мне уже похуй и я почти не сижу на бордах, а занимаюсь полезным делом.
Спасибо абу опу.
#515 #528204
>>528201
Перед экзаменами там как-то полезные треды кидали про написание заданий для лабораторки. Впрочем решить никто не смог, это же /b.
#516 #528206
>>528199
Спасибо, буду разбираться.

> Вряд ли тут группа нужна, скорее брэкет []


Да, уже тоже сообразил.
#517 #528213
>>528196
Я немного обосрался. Всё работает, только когда вывожу все тайлы в массиве. Но когда уменьшаю array_slice($posts, 0, 5), то значения обрезаются сразу в двух массивах.

Как прикрутить эту считалку сюда?
http://ideone.com/X8pjLM
#518 #528214
>>528213
$i++;
if ($i > 5) break;

в цикл сунь
#519 #528224
>>528214
Всунул. Всё сломалось.
http://ideone.com/F5cMWt
#520 #528225
>>528224
По идее должно быть так:

$actual_title = "D";

G
I
J
O
Y

$actual_title = "O";
Y
Z
A
B
C
#521 #528227
>>528224

>$i++;


>if ($i > 5) break;



if ($actual_title < $post['title']) {
\t\t\techo $post['title'] . "<br />\n";
\t\t\t}

Сюда сунь.
#522 #528228
>>528227
http://ideone.com/G0KHKI

УРАААААААААААААААААААААААААААААААААА!
#523 #528229
Slim настолько популярный фреймворк, что гайды для него на ютубе только на французском и испанском.
246 Кб, 640x491
#524 #528230
>>528227
Всего тебе самого хорошего!
#525 #528232
>>528142
верстка тут нахуй не нужна. все начинают с верстки в воркаче, а не приходят учиться верстке в пхп треде, проваливай клоун из моего треда бтв.
#526 #528267
>>528062
я на duolingo + memrise. По 5-6 повторений на memrise+15 новых слов и 2-3 урока на duolingo в день. Читать что-то труднее "It is a book", пока не могу. Когда подтяну, попытаюсь перевисти мануал по slim'у. И себе польза и анонам будет.
#527 #528268
Оп дай более конкретное пояснение к этом

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



Как я понимаю только мышка в центре ,окруженная другими мышами, защищена, а мыши с края ? Их можно съесть?
. . M <-- вот эту можно съесть ?
. M К
. M .
64 Кб, 970x185
#528 #528271
>>528267

>memrise


О, помню пол-года назад тоже решил подтянуть свой словарный запас там. После прохождения курса мотивация повторять из него слова постепенно улетучивалась, слова накапливались и я забросил это дело.
#529 #528274
>>528268
Мыши с края могут объединиться и съесть кошку.
#530 #528279
>>528274
Тогда это уже не мыши, а самые настоящие крысы
#531 #528295
Скачал на ноут триалку php storm 9.0, постоянно слетает настройка (пропадает маркер строк) после перезапуска, и сохраняет по дефалту файлы в cp1271 вместо UTF-8 не знаю че с ним делать, notepad++ не удобный.
#532 #528298
>>528295
вот ссыль
https://nnm-club.me/forum/viewtopic.php?t=916985
Сам сижу на 8 ломанном под линухом, качал с этого же трекера
#533 #528299
>>528295
Что за маркер строк? У меня ничего не пропадает. А кодировку он по дефолту и так в cp1251 ставит, там внизу справа надпись есть, на нее кликаешь и жмешь UTF-8, он тебе окошко показывает, где Convert нажать, и будет utf8.
#535 #528301
>>528295
Settings - в поиске encoding - project encoding - utf-8
#536 #528324
>>527637

> Сырая строка же. Необработанные входные данные. Английский жи.


Тогда стоило назвать sourceString. А регулярку keyRegexp (или keyRe сокращенно). А класс StringParser, а метод parse или parseString. Не стоит делать лишние сокращения, так как это усложняет понимание кода читателем.

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

Но в первую очередь надо конечно заставить код работать.

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

>>527638

Ответ должен быть около 61270.

У тебя ошибка как минимум тут:

> $paymentTotal = $creditBalance + 50000;


Откуда взялось 50 000 ? Оно в условии задачи не фигурирует. Ты может хотел написать 5 000?

А также: надо смотреть чему равен остаток долга и обрабатывать ситуацию, когда он маленький, а не выплачивать сразу же 5000 вот в этом месте: ... + $servicePayment - $monthlyPayment;

Попробуй переписать код внутри цикла примерно так:

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

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

>>527704

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

>>527708

Через pdo, фреймворк этим не занимается.

>>527722

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


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

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


Можно вывести так:

Ошибка: нет пробела после знака препинания: ,после
Ошибка: жи-ши пишутся с буквой «и»: жызнь

А можно так:

Результат проверки, ошибок: 5
Нет пробела[,]после запятой[;]точки с запятой[!]:ж[ы]знь

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


Лучше использовать условие «искать все идущие далее буквы», так как пробела может и не быть.
#536 #528324
>>527637

> Сырая строка же. Необработанные входные данные. Английский жи.


Тогда стоило назвать sourceString. А регулярку keyRegexp (или keyRe сокращенно). А класс StringParser, а метод parse или parseString. Не стоит делать лишние сокращения, так как это усложняет понимание кода читателем.

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

Но в первую очередь надо конечно заставить код работать.

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

>>527638

Ответ должен быть около 61270.

У тебя ошибка как минимум тут:

> $paymentTotal = $creditBalance + 50000;


Откуда взялось 50 000 ? Оно в условии задачи не фигурирует. Ты может хотел написать 5 000?

А также: надо смотреть чему равен остаток долга и обрабатывать ситуацию, когда он маленький, а не выплачивать сразу же 5000 вот в этом месте: ... + $servicePayment - $monthlyPayment;

Попробуй переписать код внутри цикла примерно так:

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

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

>>527704

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

>>527708

Через pdo, фреймворк этим не занимается.

>>527722

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


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

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


Можно вывести так:

Ошибка: нет пробела после знака препинания: ,после
Ошибка: жи-ши пишутся с буквой «и»: жызнь

А можно так:

Результат проверки, ошибок: 5
Нет пробела[,]после запятой[;]точки с запятой[!]:ж[ы]знь

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


Лучше использовать условие «искать все идущие далее буквы», так как пробела может и не быть.
#537 #528344
>>527725

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

>>527726

Почему ты решил, что не устроиться? И почему ты думаешь что аноны из нашего треда нигде не учатся?

>>527732

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

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

>>527745

Можно и то и другое делать параллельно.

>>527752

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

Например вот это вот:

> filter='less,cssrewrite,?yui_css'



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

>>527812

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

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

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

> $fileExt = substr(strrchr($_FILES['filename']['name'], '.'), 1);


Лучше использовать регулярку или pathinfo() чем городить такие странные конструкции. Что, например, если в имени нет точки?

> echo 'Данный файл не разрешен к загрузке на сервер';


Без заголовка Content-Type или тега meta надпись может вывестись не в той кодировке

>>527840

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

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

>>527850

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

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

>>527871

Подсказка: попробуйте обозначить число съеденных Сашей яблок переменной x.
#537 #528344
>>527725

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

>>527726

Почему ты решил, что не устроиться? И почему ты думаешь что аноны из нашего треда нигде не учатся?

>>527732

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

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

>>527745

Можно и то и другое делать параллельно.

>>527752

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

Например вот это вот:

> filter='less,cssrewrite,?yui_css'



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

>>527812

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

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

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

> $fileExt = substr(strrchr($_FILES['filename']['name'], '.'), 1);


Лучше использовать регулярку или pathinfo() чем городить такие странные конструкции. Что, например, если в имени нет точки?

> echo 'Данный файл не разрешен к загрузке на сервер';


Без заголовка Content-Type или тега meta надпись может вывестись не в той кодировке

>>527840

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

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

>>527850

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

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

>>527871

Подсказка: попробуйте обозначить число съеденных Сашей яблок переменной x.
133 Кб, 1293x916
#538 #528345
Охуенно блядь. Кому-то из мартышкиных кодеров не помешала бы пара уроков из этого треда.
#539 #528347
>>528345
Это да, тоже заметил, что читая длиннопосты с прокруткой при наведении на ссылку пост появляется хрен знает где внизу.
Приходится искать его через поиск по номеру.
#540 #528352
>>527874

Ты делаешь неправильно. Не надо формировать JS код программой на PHP так как получается нечитаемая лапша. Ну и в твоем случае вообще нет гарантий что код окажется верным.Например, что если $points[$i]['name'] содержит одиночную кавычку или перевод строки?

Для передачи данных из PHP в JS код есть проверенные способы:

Если тебе нужно заложить какие-то данные в DOM-элемент, можно использовать data-атрибуты, например:

<img src="small.jpg" data-full-size="big.jpg" alt="">

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

Но тут все еще проще. Тебе можно передать данные напрямую в JS-скрипт:

<script>
var places = [{ name: 'place 1', coordinates: ... }, {name: 'place 2', coordinates: ...}];
showPlaces(places);
</script>

При этом функция showPlaces может быть во внешнем JS файле.

Как корректно подставить данные из PHP в JS-строку, соблюдая все правила экранирования спецсимволов? Раньше я писал для этого свою функцию, но потом обнаружил что существует готовая:

var data = <?= json_encode($phpData) ?>;

Так как JSON это подмножество JS то любое JSON-закодированное значение является корректным значением в яваскрипте и мы можем смело присвоить его переменной, и не бояться что полуим ошибку JS. Таким образом можно передавать значения null, false|true, цифры, строки, массивы и словари.

Заметь что мы не используем здесь htmlspecialchars. Почему? Потому, что теги script и style имеют особый тип содержимого: в них не интерпретируются html-сущности вроде < и в них угловые скобки не обознгачают теги, а передаются js- или css-движку как есть. Потому при вставке данных внутрь style/script не надо их экранировать. Единственное, в этих данных не должна встречаться последовательность

</

которая браузером можт интерпретироватся как конец тега script/style. json_encode заменяет / на \/ потому в ее результате такая последовательность встретчиться не может.

Это относится только в тегами script/style. Если ты хочешь вставить js-переменную, например в атрибутт тега, ты обязан ее экранировать по всем правилам:

<div onclick="doSmth(<?= htmlspecialchars(json_encode($value), ENT_QUOTES) ?>)">

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

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

> Я к сожалению с JS знаком очень плохо.


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

Думаю этот пост пригодится не только тебе но и другим анонам.
#540 #528352
>>527874

Ты делаешь неправильно. Не надо формировать JS код программой на PHP так как получается нечитаемая лапша. Ну и в твоем случае вообще нет гарантий что код окажется верным.Например, что если $points[$i]['name'] содержит одиночную кавычку или перевод строки?

Для передачи данных из PHP в JS код есть проверенные способы:

Если тебе нужно заложить какие-то данные в DOM-элемент, можно использовать data-атрибуты, например:

<img src="small.jpg" data-full-size="big.jpg" alt="">

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

Но тут все еще проще. Тебе можно передать данные напрямую в JS-скрипт:

<script>
var places = [{ name: 'place 1', coordinates: ... }, {name: 'place 2', coordinates: ...}];
showPlaces(places);
</script>

При этом функция showPlaces может быть во внешнем JS файле.

Как корректно подставить данные из PHP в JS-строку, соблюдая все правила экранирования спецсимволов? Раньше я писал для этого свою функцию, но потом обнаружил что существует готовая:

var data = <?= json_encode($phpData) ?>;

Так как JSON это подмножество JS то любое JSON-закодированное значение является корректным значением в яваскрипте и мы можем смело присвоить его переменной, и не бояться что полуим ошибку JS. Таким образом можно передавать значения null, false|true, цифры, строки, массивы и словари.

Заметь что мы не используем здесь htmlspecialchars. Почему? Потому, что теги script и style имеют особый тип содержимого: в них не интерпретируются html-сущности вроде < и в них угловые скобки не обознгачают теги, а передаются js- или css-движку как есть. Потому при вставке данных внутрь style/script не надо их экранировать. Единственное, в этих данных не должна встречаться последовательность

</

которая браузером можт интерпретироватся как конец тега script/style. json_encode заменяет / на \/ потому в ее результате такая последовательность встретчиться не может.

Это относится только в тегами script/style. Если ты хочешь вставить js-переменную, например в атрибутт тега, ты обязан ее экранировать по всем правилам:

<div onclick="doSmth(<?= htmlspecialchars(json_encode($value), ENT_QUOTES) ?>)">

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

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

> Я к сожалению с JS знаком очень плохо.


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

Думаю этот пост пригодится не только тебе но и другим анонам.
#541 #528383
>>528352
А в data-атрибуты htmlspecialchars(json_encode(javascript код)) можно совать?
И как его читать оттуда потом?
#542 #528394
>>527883

> А почему не сформировать массив myPlaces прямо из php?


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

>>527891

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

>>527893

Почитай пост выше про json_encode.

>>527895

Twig это хорошо, но тут надо использоать json_encode, читай пост выше. Не надо генерирвать JS код на PHP или twig. Кстати в twig тоже есть json_encode.

>>527899

> Чаще всего ярко развитым абстрактным мышлением обладают мужчины, женщин намного реже.


дальше можно не читать

>>527900

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


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

CROP реализуется тем, что ты вырезаешь часть картинки, там у imagecopyresampled есть параметры определяющие какую часть (отступ и размеры) картинки скопировать. Ну условно если у нас есть картинка размером 400×100 а мы хотим 50×50 то нам надо вырезить из исходной квадрат посередине, размером 100×100, отстоящий от левого края на (400 -100) / 2 = 150 пикселей. Попробуй на бумаге это нарисовать.

>>527910

Чтобы вырезать надо укзать как раз ненулевые значения в imagecopyresampled.

>>527941

Делились же аноны в других тредах.

>>527944

> [а-яёА-ЯЁ]*[a-zA-Z]*)*)


Это можно записать проще, засунув диапазоны букв в одну общую пару квадратных скобок

> $word = ltrim($match[0]);


А зачем ltrim? Там разве могут попасть пробелы?

А вообще, неплохо сделано.

>>527950

Выглядит верно, проверь еще обработку полупрозрачных (а не просто прозрачных) PNG, пример картинки: https://ru.wikipedia.org/wiki/PNG#/media/File:PNG_transparency_demonstration_1.png

>>527964

> . Буду рад рад, если вкратце напишете мне последовательность действий, советы вроде "юзай $git clone" мне мало помогут.


Клонируешь репо с гитхаба на компьютер 2:

git clone http//lalala . (точка значит в текущую папку, без нее гит создаст подпапку в ней)

переходишь в нужную ветку, git checkout (увидеть спсиок веток: git branch)
меняешь что надо, делаешь git add . /git commit -m "..."
заливаешь изменения текущей ветки на гитхаб: git push origin HEAD

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

Подробнее это описано тут:

https://git-scm.com/book/ru/v1/%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D1%8B-Git-%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0-%D1%81-%D1%83%D0%B4%D0%B0%D0%BB%D1%91%D0%BD%D0%BD%D1%8B%D0%BC%D0%B8-%D1%80%D0%B5%D0%BF%D0%BE%D0%B7%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D1%8F%D0%BC%D0%B8

https://git-scm.com/book/ru/v1/%D0%92%D0%B5%D1%82%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B2-Git-%D0%A3%D0%B4%D0%B0%D0%BB%D1%91%D0%BD%D0%BD%D1%8B%D0%B5-%D0%B2%D0%B5%D1%82%D0%BA%D0%B8
#542 #528394
>>527883

> А почему не сформировать массив myPlaces прямо из php?


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

>>527891

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

>>527893

Почитай пост выше про json_encode.

>>527895

Twig это хорошо, но тут надо использоать json_encode, читай пост выше. Не надо генерирвать JS код на PHP или twig. Кстати в twig тоже есть json_encode.

>>527899

> Чаще всего ярко развитым абстрактным мышлением обладают мужчины, женщин намного реже.


дальше можно не читать

>>527900

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


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

CROP реализуется тем, что ты вырезаешь часть картинки, там у imagecopyresampled есть параметры определяющие какую часть (отступ и размеры) картинки скопировать. Ну условно если у нас есть картинка размером 400×100 а мы хотим 50×50 то нам надо вырезить из исходной квадрат посередине, размером 100×100, отстоящий от левого края на (400 -100) / 2 = 150 пикселей. Попробуй на бумаге это нарисовать.

>>527910

Чтобы вырезать надо укзать как раз ненулевые значения в imagecopyresampled.

>>527941

Делились же аноны в других тредах.

>>527944

> [а-яёА-ЯЁ]*[a-zA-Z]*)*)


Это можно записать проще, засунув диапазоны букв в одну общую пару квадратных скобок

> $word = ltrim($match[0]);


А зачем ltrim? Там разве могут попасть пробелы?

А вообще, неплохо сделано.

>>527950

Выглядит верно, проверь еще обработку полупрозрачных (а не просто прозрачных) PNG, пример картинки: https://ru.wikipedia.org/wiki/PNG#/media/File:PNG_transparency_demonstration_1.png

>>527964

> . Буду рад рад, если вкратце напишете мне последовательность действий, советы вроде "юзай $git clone" мне мало помогут.


Клонируешь репо с гитхаба на компьютер 2:

git clone http//lalala . (точка значит в текущую папку, без нее гит создаст подпапку в ней)

переходишь в нужную ветку, git checkout (увидеть спсиок веток: git branch)
меняешь что надо, делаешь git add . /git commit -m "..."
заливаешь изменения текущей ветки на гитхаб: git push origin HEAD

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

Подробнее это описано тут:

https://git-scm.com/book/ru/v1/%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D1%8B-Git-%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0-%D1%81-%D1%83%D0%B4%D0%B0%D0%BB%D1%91%D0%BD%D0%BD%D1%8B%D0%BC%D0%B8-%D1%80%D0%B5%D0%BF%D0%BE%D0%B7%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D1%8F%D0%BC%D0%B8

https://git-scm.com/book/ru/v1/%D0%92%D0%B5%D1%82%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B2-Git-%D0%A3%D0%B4%D0%B0%D0%BB%D1%91%D0%BD%D0%BD%D1%8B%D0%B5-%D0%B2%D0%B5%D1%82%D0%BA%D0%B8
#543 #528406
>>527964

Кстати вот еще пара вещей тебе в помощь. git push по умолчанию пушит только текщую (или указанную ветку). Но ты можешь пушить изменения во всех ветках командой

git push --all origin

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

Также вроде бы доступна git pull --all но она скачивает все ветки в твой репозиторий, но мержит только текущую. То есть если ты сидишь в мастере и у тебя есть ветки a, b то изменения в master она скачает и смерджит, а изменения в a и b cкачаются в origin/a и origin/b но сами a и b останутся прежними (надо будет потом сделать либо pull либо merge перейдя в них).
#544 #528411
>>528394

>Это можно записать проще, засунув диапазоны букв в одну общую пару квадратных скобок


Хм, да, действительно, вообще не заметил это, спасибо.

>А зачем ltrim? Там разве могут попасть пробелы?


Всегда попадают, там же регулярка с /\s начинается.
#545 #528421
>>527964

И еще, если ты используешь репо для github pages ты можешь удалить master и сделать основной веткой gh-pages, разобравшись с советами тут: http://stackoverflow.com/questions/1485578/change-a-git-remote-head-to-point-to-something-besides-master

>>527981

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

>>527987

Циклом foreach

>>527990

зачем тут яваскрипт, это все делается на стороне PHP

>>527996

> Но как это сделать — не понимаю.


Через if. Ты PHP знаешь?

Почитай еще про шаблоны: http://www.phpinfo.su/articles/practice/shablony_v_php.html
#546 #528426
ОП, ты в архитектуре Zend Framework 2 шаришь?
Не пойму такую конструкцию:

class IndexControllerFactory implements FactoryInterface
{
public function createService(ServiceLocatorInterface $serviceLocator)
{
$ctrl = new IndexController();

$ctrl->setGreetingService(
$serviceLocator->getServiceLocator()->get('greetingService')
);

return $ctrl;
}
}

Вот этот момент:
$serviceLocator->getServiceLocator()

Экземпляр ServiceLocator уже приходит в аргументе функции createService, зачем из него снова getServiceLocator() вызывается? В createService аргументом разве не он уже пришел?
#547 #528432
>>528421

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


Ну я так понял, что ему нужно как раз начисто перезалить репозиторий, потому что он стесняется своего старого говнокода и хочет от него избавиться.
А ты предлагаешь только закоммитить сверху изменения. Старые коммиты ведь будут видны.
16 Кб, 1127x349
24 Кб, 1147x318
#548 #528440
АМЕРИКА ВОТ-ВОТ РАЗРУШИТСЯ!!!

Целый день провозился. Данные за 15 лет.

xml → array → sparklines
#549 #528444
>>528440
Что за данные-то?
#550 #528448
>>528444
Динамика курса валют. Слева мыльный пузырь, проклятые бумажки, а справа — наше всё. Завтра попробуй сложить эти данные, чтобы увидеть разницу.
#551 #528450
Перекат дауунята
https://2ch.hk/pr/res/528349.html
#552 #528453
>>528450
Нахуй пошел.
#553 #528456
Просто игнорьте этого придурка.
#554 #528457
>>528450
Вот вот, дауны, перекатывайтесь. Тру остаются. Как всегда поста до восьмисотого.
#555 #528460
>>528268
ОП дай пояснение, пожалуйста.
#556 #528461
>>528460
Нет, съесть можно только центральную. В этом смысл объединения мышей.
51 Кб, 978x467
#557 #528468
ОП, проблема с заданием #5 по JS (на частичное применение): робот отказывается принимать решение.
Решение: https://jsfiddle.net/sthhauuj/1/
Вроде работает как надо, но что я сделал не так, как ожидалось?
http://maketi.esy.es/ #558 #528524
>>527997

> Прочитал кстати, ОП, тот учебник который ты рекомендовал,


Ну наконец-то! По хоршему ты (и другие аноны, берите на заметку) должен был это читать еще при решении первых задач.

> зато html стал меньше, ведь в том и смысл?


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

Кстати, давай тебе как сообразительному, дадим дополнительное задание: сделай чтобы при переключении категорий портфолио каринки менялись не скачком, а с анимацией (можно использовать как transition так и animation, на выбор). Изучи какие есть способы и возможности и выбери какой-нибудь. Вот статьи для вдохновения:

http://habrahabr.ru/company/nordavind/blog/209462/
http://habrahabr.ru/post/141780/
https://cssanimation.rocks/list-items/
http://www.webmasters.by/images/articles/css/circle-hover-effects/index.html

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

Не забудь про вендорные префиксы -moz- и -webkit- для не совсем новых браузеров (в новых от них отказались, но добавление префиксов добавляет поддержку браузеров выпущенных за последние 2-3 года).

> Сделал переставлние блоков на ширине 800 и 400


Насчет цифры 400, я посмотрел сайт http://mydevice.io/devices/ и вижу что у некоторых телефонов (видимо это «лопаты» с большим экраном) ширина больше 400. Мне кажется вместо 3 версий страницы можно сделать 2, для ширины больше 800 и меньше 800. Или может для ширины больше 1024 и меньше 1024? Если больше то у нас полноценный сайт, если меньше то вертикально сложенный. Таким образом ты облегчишь себе работу.

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

Хотя конечно вертикально выстроенные колонки лучше наверно все же сделать с 2 токами перехода, чтобы было 4 колонки - 2 колонки - 1 колонка.

Для отладки адаптивной верстки (если ты вдруг не знаешь) и в фаероксе, и в хроме в инспекторе есть опции где можно менять размер и DPI экрана. В фаерфоксе вроде бы это доступно без расширний, у меня это Tools - Web Developer - Responsive Design View (или это и есть расширение? не помню).

> Столкнулся с проблемой что если @media в коде выше того, что оно исправляет, то эта медиа не работает. Помогло только использование !important но в коде это выглядит адски.


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

http://habrahabr.ru/post/137588/
http://htmlbook.ru/samcss/kaskadirovanie

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


В мобильном дизайне меню часто убирают в иконку-бутерброд (посмотреть можно тут: http://m.siliconrus.com/ ). Я не люблю эту иконку и думаю что для меню из 5 пунктов удобнее когда они видны. Но ты посмотри как выглядит этот вариант с иконкой и попробуй хотя бы мысленно представить как это реализуется (я думаю что в кнопку придется спрятать чекбокс чтобы реализовать запоминание нажатого/отжатого состояния а далее сделать по аналогии с переключателем в портфолио).

> Оставил в ксс только в одном месте в wrapper. Но пришлось добавить пару дивов-врапперов в html, за что, после прочтения учебника, как я понял, заслуживаю места в аду.


Вообще, можно же проставить ширину нескольким классам сразу (и если ты этого не знал, почитай про синтаксис CSS селекторов):

.wrapper, .something-else {
width: 900px;
}

Если это не работает, можно оставить лишние пару тегов.

> Это мне нужно объяснить какие свойства я там анимирую


Да, в CSS прописать явно, например transition-property: top, width, color;

Почитай http://htmlbook.ru/css/transition
http://htmlbook.ru/css/transition-property

>>По моему тут не нужны nth-of-type.


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


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

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


> Начал переделывать, все развалилось.


Значит придется взять отладчик и разобраться, почему. Что это за верстальщик, у которого магия творится в коде? Магии не должно быть. Я тебе сразу говорю, что вырывать флоат (img) из блока (a) это гиблое дело так как в блоке не остается содержимого (он становится нулевой высоты) и он позиционируется черт знает как. Надо сделать флоатами именно внешний блок у картинки, тег <a>, а саму картинку сделать например блоком чтобы убрать лишние отступы снизу.

> Главное это работает.


Не, надо чтобы ты понимал что и как работает.

> Смотрим на пик. Как исправить не знаю. Сам сижу с хрома, поэтому проблемы не заметил. Теперь все проверяю с разных браузеров.


Ок, я проверю это.

> Логотип сделал точно таким же как и на psd. И теперь вопрос. Все нужно делать пиксель-в-пиксель как и на том изображении?


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

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

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

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

> Это ведь издевательство все высчитывать.


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

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

Надписи «ALL GRAPHIC ILLUSTRATION MOTION» у тебя серые, на макете белые.

Картинки из портфолио увеличены. Не увеличивай растровые картинки так как они мылятся и теряют качество, сравни то что в браузере и то что в макете. Увеличивать можно например как часть эффекта, если человек не успевает заметить искажения, но в твоем случае видно что картинки некачечтвенные. Вырежи из макета их и отображай в размере 1:1.

У тебя картинка http://maketi.esy.es/img/pick1.png имеет размер 160×131 пикс, а отображается как 270×223. И выглядит замыленной (посмотри например на то как выглядит серая мелкая сетка на ней на макете и в браузере или шум на зеленом фоне).

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

Объедини картинки телефона и значка на карте в футере в один спрайт, они все равно одного цвета. Объедини картинки андроида, монитора, часов в один спрайт. Также, лучше сделать их с прозрачным фоном — если например ты захочешь чуть поменять цвет футера тебе не придется переделывать картинки. Это правда их немного утяжелит (так как в них будет содержаться больше информации), но они мелкие и тут мы выбираем удобство изменения верстки, а не размер.
http://maketi.esy.es/ #558 #528524
>>527997

> Прочитал кстати, ОП, тот учебник который ты рекомендовал,


Ну наконец-то! По хоршему ты (и другие аноны, берите на заметку) должен был это читать еще при решении первых задач.

> зато html стал меньше, ведь в том и смысл?


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

Кстати, давай тебе как сообразительному, дадим дополнительное задание: сделай чтобы при переключении категорий портфолио каринки менялись не скачком, а с анимацией (можно использовать как transition так и animation, на выбор). Изучи какие есть способы и возможности и выбери какой-нибудь. Вот статьи для вдохновения:

http://habrahabr.ru/company/nordavind/blog/209462/
http://habrahabr.ru/post/141780/
https://cssanimation.rocks/list-items/
http://www.webmasters.by/images/articles/css/circle-hover-effects/index.html

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

Не забудь про вендорные префиксы -moz- и -webkit- для не совсем новых браузеров (в новых от них отказались, но добавление префиксов добавляет поддержку браузеров выпущенных за последние 2-3 года).

> Сделал переставлние блоков на ширине 800 и 400


Насчет цифры 400, я посмотрел сайт http://mydevice.io/devices/ и вижу что у некоторых телефонов (видимо это «лопаты» с большим экраном) ширина больше 400. Мне кажется вместо 3 версий страницы можно сделать 2, для ширины больше 800 и меньше 800. Или может для ширины больше 1024 и меньше 1024? Если больше то у нас полноценный сайт, если меньше то вертикально сложенный. Таким образом ты облегчишь себе работу.

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

Хотя конечно вертикально выстроенные колонки лучше наверно все же сделать с 2 токами перехода, чтобы было 4 колонки - 2 колонки - 1 колонка.

Для отладки адаптивной верстки (если ты вдруг не знаешь) и в фаероксе, и в хроме в инспекторе есть опции где можно менять размер и DPI экрана. В фаерфоксе вроде бы это доступно без расширний, у меня это Tools - Web Developer - Responsive Design View (или это и есть расширение? не помню).

> Столкнулся с проблемой что если @media в коде выше того, что оно исправляет, то эта медиа не работает. Помогло только использование !important но в коде это выглядит адски.


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

http://habrahabr.ru/post/137588/
http://htmlbook.ru/samcss/kaskadirovanie

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


В мобильном дизайне меню часто убирают в иконку-бутерброд (посмотреть можно тут: http://m.siliconrus.com/ ). Я не люблю эту иконку и думаю что для меню из 5 пунктов удобнее когда они видны. Но ты посмотри как выглядит этот вариант с иконкой и попробуй хотя бы мысленно представить как это реализуется (я думаю что в кнопку придется спрятать чекбокс чтобы реализовать запоминание нажатого/отжатого состояния а далее сделать по аналогии с переключателем в портфолио).

> Оставил в ксс только в одном месте в wrapper. Но пришлось добавить пару дивов-врапперов в html, за что, после прочтения учебника, как я понял, заслуживаю места в аду.


Вообще, можно же проставить ширину нескольким классам сразу (и если ты этого не знал, почитай про синтаксис CSS селекторов):

.wrapper, .something-else {
width: 900px;
}

Если это не работает, можно оставить лишние пару тегов.

> Это мне нужно объяснить какие свойства я там анимирую


Да, в CSS прописать явно, например transition-property: top, width, color;

Почитай http://htmlbook.ru/css/transition
http://htmlbook.ru/css/transition-property

>>По моему тут не нужны nth-of-type.


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


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

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


> Начал переделывать, все развалилось.


Значит придется взять отладчик и разобраться, почему. Что это за верстальщик, у которого магия творится в коде? Магии не должно быть. Я тебе сразу говорю, что вырывать флоат (img) из блока (a) это гиблое дело так как в блоке не остается содержимого (он становится нулевой высоты) и он позиционируется черт знает как. Надо сделать флоатами именно внешний блок у картинки, тег <a>, а саму картинку сделать например блоком чтобы убрать лишние отступы снизу.

> Главное это работает.


Не, надо чтобы ты понимал что и как работает.

> Смотрим на пик. Как исправить не знаю. Сам сижу с хрома, поэтому проблемы не заметил. Теперь все проверяю с разных браузеров.


Ок, я проверю это.

> Логотип сделал точно таким же как и на psd. И теперь вопрос. Все нужно делать пиксель-в-пиксель как и на том изображении?


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

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

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

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

> Это ведь издевательство все высчитывать.


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

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

Надписи «ALL GRAPHIC ILLUSTRATION MOTION» у тебя серые, на макете белые.

Картинки из портфолио увеличены. Не увеличивай растровые картинки так как они мылятся и теряют качество, сравни то что в браузере и то что в макете. Увеличивать можно например как часть эффекта, если человек не успевает заметить искажения, но в твоем случае видно что картинки некачечтвенные. Вырежи из макета их и отображай в размере 1:1.

У тебя картинка http://maketi.esy.es/img/pick1.png имеет размер 160×131 пикс, а отображается как 270×223. И выглядит замыленной (посмотри например на то как выглядит серая мелкая сетка на ней на макете и в браузере или шум на зеленом фоне).

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

Объедини картинки телефона и значка на карте в футере в один спрайт, они все равно одного цвета. Объедини картинки андроида, монитора, часов в один спрайт. Также, лучше сделать их с прозрачным фоном — если например ты захочешь чуть поменять цвет футера тебе не придется переделывать картинки. Это правда их немного утяжелит (так как в них будет содержаться больше информации), но они мелкие и тут мы выбираем удобство изменения верстки, а не размер.
http://maketi.esy.es/ #559 #528525
>>527997

> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />


Слеш в конце тегов не ставится, так же прочитай что она делает, например тут http://xiper.net/manuals/html/meta-tags/http-equiv/x-UA-Compatible или в моем уроке про ИЕ: https://gist.github.com/codedokode/855e3970124687b26a1c

Если кратко то он просит ИЕ не переходить в режим совместимости с древними браузерами и разрешает использование Chrome Frame (это плагин для ИЕ который использует движок от Chrome для отображения страниц как решение проблемы отображения сайтов в этом браузере).

> <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />


Опять же, прочитай описание этого тега (он говорит мобильным устройствам что страница под них адаптирована и им не надо притворяться устройством шириной 1024 пикселя): http://frontender.com.ua/mobile-web/wtf-viewport/

Я не уверен, нужен ли здесь minimun-scale? Почему ты хочешь запретить пользователю уменьшать масштаб?

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

Номер телефона надо сделать кликабельным и звонибельным в мобильной версии. Он распознается браузером автоматически? Если нет, то надо завернуть его в ссылку с протоколом tel:, например tel:012345, как описано тут:

http://html5.by/blog/href-tel-mobile-browser/
http://nikitakiselev.ru/post/49
http://osxdev.ru/blog/ios/9.html (о! там написано про ссылки на карты, сделай-ка адрес тоже ссылкой)

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

> bottom-dark-gray-block


> top-dark-gray-block


> four-pictures-with-text-block


Вот это плохие названия, так как при смене внешнего вида они могут потерять актуальность. Лучше назвать их по смыслу, например block-features, block-contacts, features-list.

> <a href="#rss" id="rss"></a>


> <a href="#facebook" id="facebook"></a>


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

Что я хочу сказать, что если полностью убрать CSS (как это протестировать? отладчик в Chrome на вкладке Sources позволяет редактировать файлы, ты можешь там удалить все содержимое CSS файла), то твоя страница все равно должна быть читабельной. В этом случае и роботам и программам чтения текста гораздо удобнее ориентироваться на сайте. В твоем случае все хорошо, кроме ссылок на соцсети, которые не видны без CSS.

> * {


> padding: 0px;


Вот так делать не стоит. Ты ведь этим удаляешь паддинги по умолчанию, которые есть у разных тегов, вроде списков или ячеек таблиц или инпутов. И соответственно ты потом должен их вернуть назад, чтобы текст с этими тегами корректно отображался (ведь на сайте будут и другие страницы, возможно с текстом который добавляют редакторы а не программисты). Но какой смысл сбрасывать стили чтобы вернуть их потом обратно? Логичнее убирать паддинг только там, где тебе надо, а не везде. Это аналог CSS reset и это в общем плохая штука. Не используй селектор «звездочка», не удаляй лишние стили.

> body {


> font-family: "Open Sans", Arial, sans-serif;


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

> box-sizing: border-box;


Добавь вендорные префиксы. Также, на мой взгляд, для .wrapper можно легко обойтись без этого свойства вообще (и для адаптивных версий тоже, просто убирая max-width).

> .android-with-text, .pc-with-text, .phone-with-text, .clock-with-text {width: 50% !important;}


Тут проще было добавить один общий класс на все элементы или использовать селектор .four-pictures-with-text-block > div

> font: 40pt arial;


Всегда вместе с размером шрифта указывай line-height.

> .light-gray-block {


> display:inline-block;


Зачем это? Имей в виду , что ответ «подобрал опытным путем» не годится. Либо объясняй, либо удаляй.

> .android-with-text {


> .pc-with-text {


> .phone-with-text {


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

> .four-pictures {


> text-align: center;


text-align наследуется от родителя, не надо его переопределять на каждом элементе отдельно.

> .portfolio-text-buttons-and-works input:nth-of-type(1):checked + label > span, .portfolio-text-buttons-and-works input:nth-of-type(2):checked + label > span, .portfolio-text-buttons-and-works input:nth-of-type(3):checked + label > span, .portfolio-text-buttons-and-works input:nth-of-type(4):checked + label > span


А тут точно надо писать это 4 раза, нельзя просто написать .portfolio ... input:checked + label > span ?

> .portfolio-text-buttons-and-works input:nth-of-type(1):checked ~ .graphic, .portfolio-text-buttons-and-works input:nth-of-type(1):checked ~ .illustration, .portfolio-text-buttons-and-works input:nth-of-type(1):checked ~ .motion, .portfolio-text-buttons-and-works input:nth-of-type(2):checked ~ .graphic, .portfolio-text-buttons-and-works input:nth-of-type(3):checked ~ .illustration, .portfolio-text-buttons-and-works input:nth-of-type(4):checked ~ .motion


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

.portfolio-text-buttons-and-works input#button-all:checked ~ .portfolio-item { ... }
.portfolio-text-buttons-and-works input#button-motion:checked ~ .motion { ... }

То есть мы упрощаем выражение для «all» и заменяем номера инпутов на id или классы.

>.bottom-dark-gray-block


> font-size: 0;


Это еще зачем тут?

> &#8194; &#8194; &#8194;


используй margin-right

> <br>


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

> .social-icons {


> height: 30px;


> width: 170px;


Это еще зачем? Пусть вычисляется автоматически.

> #rss:hover, #facebook:hover, #twitter:hover, #pink-boll:hover, #p:hover {


Лучше .social-icons > a - меньше переписывать придется при добавлении новых иконок.

> @font-face {


> font-family: "OpenSansBold";


Тебе надо почитать теорию по @font-face (например http://htmlbook.ru/css/font-face ), тут ты указываешь не имя файла, а имя под которым шрифт будет доступен в CSS (также указываешь font-weight и font-style для которых применим этот шрифт. У тебя там везде стоит normal и это неправильно). Если этот код тебе сгенерировал font squirrel, значит надо его исправить.

То есть правило font-face выглядит так:

@font-face {
font-family: название шрифта которое используется в font-family в других местах
font-weight: вес этого шрифта
font-style: курсивность
src: ссылки на файл с шрифтом в разных форматах и с хаками для ИЕ. Тут же можно указать конструкцию local('name') чтобы поискать шрифт с таким именем на компьютере пользователя
}

Вот про src и хаки тут описано в статье 2011 года: http://habrahabr.ru/post/113136/ и тут

Чуть более новый образец кода тут: https://github.com/CSSLint/csslint/wiki/Bulletproof-font-face и он отличается только добавлением #iefix в хак для ИЕ (чтобы он не видел то, что идет дальше)
http://maketi.esy.es/ #559 #528525
>>527997

> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />


Слеш в конце тегов не ставится, так же прочитай что она делает, например тут http://xiper.net/manuals/html/meta-tags/http-equiv/x-UA-Compatible или в моем уроке про ИЕ: https://gist.github.com/codedokode/855e3970124687b26a1c

Если кратко то он просит ИЕ не переходить в режим совместимости с древними браузерами и разрешает использование Chrome Frame (это плагин для ИЕ который использует движок от Chrome для отображения страниц как решение проблемы отображения сайтов в этом браузере).

> <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />


Опять же, прочитай описание этого тега (он говорит мобильным устройствам что страница под них адаптирована и им не надо притворяться устройством шириной 1024 пикселя): http://frontender.com.ua/mobile-web/wtf-viewport/

Я не уверен, нужен ли здесь minimun-scale? Почему ты хочешь запретить пользователю уменьшать масштаб?

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

Номер телефона надо сделать кликабельным и звонибельным в мобильной версии. Он распознается браузером автоматически? Если нет, то надо завернуть его в ссылку с протоколом tel:, например tel:012345, как описано тут:

http://html5.by/blog/href-tel-mobile-browser/
http://nikitakiselev.ru/post/49
http://osxdev.ru/blog/ios/9.html (о! там написано про ссылки на карты, сделай-ка адрес тоже ссылкой)

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

> bottom-dark-gray-block


> top-dark-gray-block


> four-pictures-with-text-block


Вот это плохие названия, так как при смене внешнего вида они могут потерять актуальность. Лучше назвать их по смыслу, например block-features, block-contacts, features-list.

> <a href="#rss" id="rss"></a>


> <a href="#facebook" id="facebook"></a>


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

Что я хочу сказать, что если полностью убрать CSS (как это протестировать? отладчик в Chrome на вкладке Sources позволяет редактировать файлы, ты можешь там удалить все содержимое CSS файла), то твоя страница все равно должна быть читабельной. В этом случае и роботам и программам чтения текста гораздо удобнее ориентироваться на сайте. В твоем случае все хорошо, кроме ссылок на соцсети, которые не видны без CSS.

> * {


> padding: 0px;


Вот так делать не стоит. Ты ведь этим удаляешь паддинги по умолчанию, которые есть у разных тегов, вроде списков или ячеек таблиц или инпутов. И соответственно ты потом должен их вернуть назад, чтобы текст с этими тегами корректно отображался (ведь на сайте будут и другие страницы, возможно с текстом который добавляют редакторы а не программисты). Но какой смысл сбрасывать стили чтобы вернуть их потом обратно? Логичнее убирать паддинг только там, где тебе надо, а не везде. Это аналог CSS reset и это в общем плохая штука. Не используй селектор «звездочка», не удаляй лишние стили.

> body {


> font-family: "Open Sans", Arial, sans-serif;


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

> box-sizing: border-box;


Добавь вендорные префиксы. Также, на мой взгляд, для .wrapper можно легко обойтись без этого свойства вообще (и для адаптивных версий тоже, просто убирая max-width).

> .android-with-text, .pc-with-text, .phone-with-text, .clock-with-text {width: 50% !important;}


Тут проще было добавить один общий класс на все элементы или использовать селектор .four-pictures-with-text-block > div

> font: 40pt arial;


Всегда вместе с размером шрифта указывай line-height.

> .light-gray-block {


> display:inline-block;


Зачем это? Имей в виду , что ответ «подобрал опытным путем» не годится. Либо объясняй, либо удаляй.

> .android-with-text {


> .pc-with-text {


> .phone-with-text {


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

> .four-pictures {


> text-align: center;


text-align наследуется от родителя, не надо его переопределять на каждом элементе отдельно.

> .portfolio-text-buttons-and-works input:nth-of-type(1):checked + label > span, .portfolio-text-buttons-and-works input:nth-of-type(2):checked + label > span, .portfolio-text-buttons-and-works input:nth-of-type(3):checked + label > span, .portfolio-text-buttons-and-works input:nth-of-type(4):checked + label > span


А тут точно надо писать это 4 раза, нельзя просто написать .portfolio ... input:checked + label > span ?

> .portfolio-text-buttons-and-works input:nth-of-type(1):checked ~ .graphic, .portfolio-text-buttons-and-works input:nth-of-type(1):checked ~ .illustration, .portfolio-text-buttons-and-works input:nth-of-type(1):checked ~ .motion, .portfolio-text-buttons-and-works input:nth-of-type(2):checked ~ .graphic, .portfolio-text-buttons-and-works input:nth-of-type(3):checked ~ .illustration, .portfolio-text-buttons-and-works input:nth-of-type(4):checked ~ .motion


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

.portfolio-text-buttons-and-works input#button-all:checked ~ .portfolio-item { ... }
.portfolio-text-buttons-and-works input#button-motion:checked ~ .motion { ... }

То есть мы упрощаем выражение для «all» и заменяем номера инпутов на id или классы.

>.bottom-dark-gray-block


> font-size: 0;


Это еще зачем тут?

> &#8194; &#8194; &#8194;


используй margin-right

> <br>


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

> .social-icons {


> height: 30px;


> width: 170px;


Это еще зачем? Пусть вычисляется автоматически.

> #rss:hover, #facebook:hover, #twitter:hover, #pink-boll:hover, #p:hover {


Лучше .social-icons > a - меньше переписывать придется при добавлении новых иконок.

> @font-face {


> font-family: "OpenSansBold";


Тебе надо почитать теорию по @font-face (например http://htmlbook.ru/css/font-face ), тут ты указываешь не имя файла, а имя под которым шрифт будет доступен в CSS (также указываешь font-weight и font-style для которых применим этот шрифт. У тебя там везде стоит normal и это неправильно). Если этот код тебе сгенерировал font squirrel, значит надо его исправить.

То есть правило font-face выглядит так:

@font-face {
font-family: название шрифта которое используется в font-family в других местах
font-weight: вес этого шрифта
font-style: курсивность
src: ссылки на файл с шрифтом в разных форматах и с хаками для ИЕ. Тут же можно указать конструкцию local('name') чтобы поискать шрифт с таким именем на компьютере пользователя
}

Вот про src и хаки тут описано в статье 2011 года: http://habrahabr.ru/post/113136/ и тут

Чуть более новый образец кода тут: https://github.com/CSSLint/csslint/wiki/Bulletproof-font-face и он отличается только добавлением #iefix в хак для ИЕ (чтобы он не видел то, что идет дальше)
#560 #528528
>>527997

По шрифтам, тебе надо сделать следующее:

- полностью разобраться с синтаксисом font-face (вот описание на англ: https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face )
- понять что разные браузеры поддерживают разные форматы файла шрифта ( тут есть краткая табличка: https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face#Browser_compatibility )

Суть в том что наше будущее это WOFF (точнее WOFF2) но старые браузеры предпочитают другие форматы: IE это EOT, Хром это TTF, для старого мобильного сафари это SVG. Также надо понимать что конвертация может лишить шрифт некоторых фич, например кернинга (подобранное дизайнером расстояние между парами букв) или оптимизаций для рендеринга на мелких размерах.

- прчитать и скопировать хак в свойстве src для старых ИЕ (который думает что все что идет после src это одно имя файла и который не умеет выбирать из нескольких форматов, потому нам приходится его обманывать)
- пойти на font-squirrel и скрепя сердце сконвертирвать шрифт. При этом можно за счет указания диапазона символов уменьшить вес файлов.
- подправить сгенерированный CSS
- протестировать
#561 #528539
>>528015

Выглядеть может по-разному из-за разных версий браузера. Я затрудняюсь точно ответить почему так произошло и советую прописать явно margin:0, padding: 0 (кроме тех мест где ненулевые значения) на ul и li внутри меню (не на всей странице!) в адаптивном варианте.

Если устройство есть у тебя на руках, то есть такая возможность:

https://developer.chrome.com/devtools/docs/remote-debugging (как видишь придется повозиться но зато получишь доступ к потрохам браузера через отладчик)

В новых iOS устройствах также сделали удаленную отладку: http://stackoverflow.com/a/12762449

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

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

https://www.browserstack.com/screenshots
https://www.browserstack.com/responsive

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

Вот например твой сайт в ИЕ и на айпадах: https://www.browserstack.com/screenshots/7ec55f9e39d8330ac427281f673a1396a34d5b76

Он поможет тебе протестировать поддержку шрифтов.

Также вот мой урок по работе с ИЕ: https://gist.github.com/codedokode/855e3970124687b26a1c (в твоем случае, к счастью, почти все нормально работает в ИЕ)

Я вижу синюю рамку вокруг картинок в ИЕ, он так подсвечивает картинки внутри ссылок, лечится через border: 0 на конкретных картинках (не надо это ко всем применять наверно).

ИЕ9 и выше должны работать безупречно, в ИЕ8 хорошо бы чтобы в общем текст читался и ссылки были, отображение может немного разъехаться, слишком много времени на него тратить не стоит. Для ИЕ7 и ИЕ6 мы ничего не делаем, но как вариант можно засунуть тег link в conditional comment чтобы в этих браузерах CSS не подключался и отображался чистый HTML. Так по крайней мере сайт можно читать в этих браузерах. Не хотят поддерживать CSS3 и CSS2.1 — пусть сидят без CSS вообще.
#561 #528539
>>528015

Выглядеть может по-разному из-за разных версий браузера. Я затрудняюсь точно ответить почему так произошло и советую прописать явно margin:0, padding: 0 (кроме тех мест где ненулевые значения) на ul и li внутри меню (не на всей странице!) в адаптивном варианте.

Если устройство есть у тебя на руках, то есть такая возможность:

https://developer.chrome.com/devtools/docs/remote-debugging (как видишь придется повозиться но зато получишь доступ к потрохам браузера через отладчик)

В новых iOS устройствах также сделали удаленную отладку: http://stackoverflow.com/a/12762449

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

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

https://www.browserstack.com/screenshots
https://www.browserstack.com/responsive

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

Вот например твой сайт в ИЕ и на айпадах: https://www.browserstack.com/screenshots/7ec55f9e39d8330ac427281f673a1396a34d5b76

Он поможет тебе протестировать поддержку шрифтов.

Также вот мой урок по работе с ИЕ: https://gist.github.com/codedokode/855e3970124687b26a1c (в твоем случае, к счастью, почти все нормально работает в ИЕ)

Я вижу синюю рамку вокруг картинок в ИЕ, он так подсвечивает картинки внутри ссылок, лечится через border: 0 на конкретных картинках (не надо это ко всем применять наверно).

ИЕ9 и выше должны работать безупречно, в ИЕ8 хорошо бы чтобы в общем текст читался и ссылки были, отображение может немного разъехаться, слишком много времени на него тратить не стоит. Для ИЕ7 и ИЕ6 мы ничего не делаем, но как вариант можно засунуть тег link в conditional comment чтобы в этих браузерах CSS не подключался и отображался чистый HTML. Так по крайней мере сайт можно читать в этих браузерах. Не хотят поддерживать CSS3 и CSS2.1 — пусть сидят без CSS вообще.
#562 #528551
>>528468

> [].unshift.call(arguments


arguments это не массив и ты не можешь в него засовывать новые элементы. Проверь отладчиком ( https://learn.javascript.ru/debugging-chrome ) работает ли такое вообще и вставляются ли элементы в arguments? И даже если вставляются, все равно замени это на добавление аргументов в массив через concat.

> return func.apply(null, arguments);


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

>>528268
>>528460\t

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

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

>>528450

Не перекатываемся никуда, сидим тут в уютном тредике.

>>528448

Насчет курса рубля, я слышал что есть интересная зависимость если помножить его на цену за нефть, произведение стремится к постоянной величине. http://habrahabr.ru/post/253285/

Насчет самой цены на нефть, есть такая (возможно конечно американцы просто сами себя ободряют) инфографика: http://www.bloomberg.com/graphics/2014-america-shakes-off-oil-addiction/

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

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

>>528432

Тогда надо все удалять, да. Но по моему лучше не удалять.

>>528426

> Экземпляр ServiceLocator уже приходит в аргументе функции createService, зачем из него снова getServiceLocator() вызывается?


Там не ServiceLocator а ServiceLocatorInterface может в этом дело (не, вроде не в этом)? Алсо, это может быть ошибка в коде если ты не официальный мануал смотришь.

Вот тут вот http://framework.zend.com/manual/2.3/en/modules/zend.service-manager.intro.html я ничего подобного не вижу.

Скорее всего просто ошибка.

>>528383

Можно, но придется его доставать и раскодировать средсвами JS/DOM:

var json = div.getAttribute('data-x');
var data = JSON.parse(data); // выбросит исклбчение при ошибке

Для jQuery это будет var json = $(...).attr('data-x');

Для старых браузеров также нужна библиотека jsonтак как в них нет объекта JSON.

Я бы советовал избегать этого, если у тебя несколько свойств просто сделай несколько data-атрибутов.

>>528345

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

Я предпочитаю getElementBoundingRect либов в данной ситуации можно попап засовывать внутрь поста и позиционировать через CSS.

Если ты готов, то можешь исправить и отправить админам патч.
#562 #528551
>>528468

> [].unshift.call(arguments


arguments это не массив и ты не можешь в него засовывать новые элементы. Проверь отладчиком ( https://learn.javascript.ru/debugging-chrome ) работает ли такое вообще и вставляются ли элементы в arguments? И даже если вставляются, все равно замени это на добавление аргументов в массив через concat.

> return func.apply(null, arguments);


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

>>528268
>>528460\t

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

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

>>528450

Не перекатываемся никуда, сидим тут в уютном тредике.

>>528448

Насчет курса рубля, я слышал что есть интересная зависимость если помножить его на цену за нефть, произведение стремится к постоянной величине. http://habrahabr.ru/post/253285/

Насчет самой цены на нефть, есть такая (возможно конечно американцы просто сами себя ободряют) инфографика: http://www.bloomberg.com/graphics/2014-america-shakes-off-oil-addiction/

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

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

>>528432

Тогда надо все удалять, да. Но по моему лучше не удалять.

>>528426

> Экземпляр ServiceLocator уже приходит в аргументе функции createService, зачем из него снова getServiceLocator() вызывается?


Там не ServiceLocator а ServiceLocatorInterface может в этом дело (не, вроде не в этом)? Алсо, это может быть ошибка в коде если ты не официальный мануал смотришь.

Вот тут вот http://framework.zend.com/manual/2.3/en/modules/zend.service-manager.intro.html я ничего подобного не вижу.

Скорее всего просто ошибка.

>>528383

Можно, но придется его доставать и раскодировать средсвами JS/DOM:

var json = div.getAttribute('data-x');
var data = JSON.parse(data); // выбросит исклбчение при ошибке

Для jQuery это будет var json = $(...).attr('data-x');

Для старых браузеров также нужна библиотека jsonтак как в них нет объекта JSON.

Я бы советовал избегать этого, если у тебя несколько свойств просто сделай несколько data-атрибутов.

>>528345

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

Я предпочитаю getElementBoundingRect либов в данной ситуации можно попап засовывать внутрь поста и позиционировать через CSS.

Если ты готов, то можешь исправить и отправить админам патч.
#563 #528555
>>527997

По поводу недостаточно круглых уголков: наблюдаю эффект в старом Хроме, там он лечится убиранием паддинга (паддинг можно поставить на тег <a> например, заодно перенеся на него и флоат). Видимо в старых браузерах радиус как-то учитывал паддинг (возможно виноват также box-sizing). То есть он скругляет не только саму картинку но и паддинг. Поставь например .work { background: yellow } и увидишь что радиус применяется и к паддингу.

Я бы перенес паддинг с флоатом на внешний элемент, <a>.
#564 #528556
>>528524
>>528525
>>528528
>>528539
Чую в следующий раз у меня будет уже 8 полных постов.

>Ну наконец-то! По хоршему ты (и другие аноны, берите на заметку) должен был это читать еще при решении первых задач.


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

><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />


Эти строчки я просто нашел в гугле. Что они обозначают я не знаю. Скопировал, начало работать, оставил. Разберусь.

>.bottom-dark-gray-block


> font-size: 0;


>Это еще зачем тут?


Легче убрать и увидеть. У ссылок социальных иконок появляются левые пробелы в итоге все смещается.

>Выглядеть может по-разному из-за разных версий браузера. Я затрудняюсь точно ответить почему так произошло и советую прописать явно margin:0, padding: 0 (кроме тех мест где ненулевые значения) на ul и li внутри меню (не на всей странице!) в адаптивном варианте.


Пробовал прописывать нулевые паддинги и маргины. Не помогало. Браузер сам задает этот паддинг и игнорирует мои нули. Общее обнуление помогает. Тем более оно ничего кроме этого не меняет.

И да, если что картинки работ в портфолио я уже изменил, загрузил их точный размер и качество по макету.
#565 #528563
>>528041

Второе как более простое. Незачем делать там частный случай для 0 аргументов.

>>528052

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

>>528057

Permission denied значит что ты логин/пароль не ввел.

>>528086

В Оп посте ссылки и задачи смотрел?

>>528096

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

>>528097

По JS что-то есть, вроде Фленаган, но не знаю для новичков ли. learn,javascript.ru — наше все.

>>528123

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

> if (start == undefined){


Надо тройное равно для undefined: https://learn.javascript.ru/comparison#строгое-равенство

>>528161

Неплохой сайт, если ангийский понимать. Но какой там синтаксис регулярок, из PHP или из JS? Это важно.

>>528232

Только ты тут не нужен

>>528556

> Легче убрать и увидеть. У ссылок социальных иконок появляются левые пробелы в итоге все смещается.


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

> Пробовал прописывать нулевые паддинги и маргины. Не помогало. Браузер сам задает этот паддинг и игнорирует мои нули. Общее обнуление помогает.


Скорее всего ты делал как-то так:

padding-left: 0;
padding: 1 2 3 4 // перекрывает предыдущее свойство

Звездочка имеет наименьший приоритет из всех селекторов и значит у тебя просто была какая-то ошибка.
#565 #528563
>>528041

Второе как более простое. Незачем делать там частный случай для 0 аргументов.

>>528052

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

>>528057

Permission denied значит что ты логин/пароль не ввел.

>>528086

В Оп посте ссылки и задачи смотрел?

>>528096

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

>>528097

По JS что-то есть, вроде Фленаган, но не знаю для новичков ли. learn,javascript.ru — наше все.

>>528123

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

> if (start == undefined){


Надо тройное равно для undefined: https://learn.javascript.ru/comparison#строгое-равенство

>>528161

Неплохой сайт, если ангийский понимать. Но какой там синтаксис регулярок, из PHP или из JS? Это важно.

>>528232

Только ты тут не нужен

>>528556

> Легче убрать и увидеть. У ссылок социальных иконок появляются левые пробелы в итоге все смещается.


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

> Пробовал прописывать нулевые паддинги и маргины. Не помогало. Браузер сам задает этот паддинг и игнорирует мои нули. Общее обнуление помогает.


Скорее всего ты делал как-то так:

padding-left: 0;
padding: 1 2 3 4 // перекрывает предыдущее свойство

Звездочка имеет наименьший приоритет из всех селекторов и значит у тебя просто была какая-то ошибка.
#566 #528569
>>528551

>Там не ServiceLocator а ServiceLocatorInterface может в этом дело (не, вроде не в этом)?


Не знаю, я пока в архитектуре Zend Framework 2 плохо ориентируюсь, поэтому и спросил.

>Алсо, это может быть ошибка в коде если ты не официальный мануал смотришь.


Вроде бы нет, я этот код запустил, все работает.
В туториале стояло, чтобы создать свою Factory для создания контроллера, нужно добавить в module.config.php в factories:
'Helloworld\Controller\Index' => 'Helloworld\Controller\IndexControllerFactory'
и потом в файл IndexControllerFactory.php тот код, что в >>528426
Если поменять на $serviceLocator->get('greetingService'), просто перестает все работать, пишет ошибку:
Service "greetingService" has been requested to plugin manager of type "Zend\Mvc\Controller\ControllerManager", but couldn't be retrieved.
A previous exception of type "Zend\ServiceManager\Exception\ServiceNotFoundException" has been raised in the process.
By the way, a service with the name "greetingService" has been found in the parent service locator "Zend\ServiceManager\ServiceManager": did you forget to use $parentLocator = $serviceLocator->getServiceLocator() in your factory code?

Откуда там parent какой-то, я вообще не пойму.
#567 #528570
>>528569
А, все догнал, это наверное какая-то обертка присылается в createService, а не сам ServiceManager или унаследованный от него класс.
#569 #528589
>>528582
Так и должно же быть.
#570 #528590
>>528582
Типо перевод строки не срабатывает?
#571 #528591
>>528582
echo '<pre>'; под <?php поставь
#572 #528593
>>528582

Чтобы переносы строк нормально работали и в браузере и в ideone (и в консоли), можно использовать для этого \n, а в начале программы поставить

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

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

Иначе перенос строки будет в исходном коде страницы (его можно увидеть нажав Ctrl + U), но на самой странице его не будет.
51 Кб, 978x469
#573 #528600
>>528551

>> [].unshift.call(arguments


>arguments это не массив и ты не можешь в него засовывать новые элементы. Проверь отладчиком ( https://learn.javascript.ru/debugging-chrome ) работает ли такое вообще и вставляются ли элементы в arguments? И даже если вставляются, все равно замени это на добавление аргументов в массив через concat.


А метода slice это тоже касается? И лучше создавать новый массив перебирая свойства объекта arguments?
Просто вот что я прочёл в учебнике: http://learn.javascript.ru/call-apply#ещё-пример-slice-call-arguments
Ну и пикрилейтед.
#574 #528604
>>528600
Алсо, MDN противоречит сам себе.
Тут сказано "используйте slice с arguments": https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice#Array-like_objects
а тут предупреждение: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments

>Important: You should not slice on arguments because it prevents optimizations in JavaScript engines (V8 for example). Instead, try constructing a new array by iterating through the arguments object.

#575 #528628
>>528556
Я, пожалуй, какое-то время отдохну от этого макета. 2 часа его сейчас переделывал а в итоге только развалил и уже вообще ничего не понимаю.
Чуть позже вернусь к работе. На свежую голову.
Надеюсь, не у меня одного такое, что желание есть, но не получается вообще ничего. Может сказывается то, что я его без перерыва делал его около двух недель или сколько там, я уже даже не помню сидя по 10-12 часов в сутки и поглощая все статьи и учебники и переделывая макет. Хотя я бы это же время и сидел в интернете тупил, если бы макетом не занимался.

И да, спасибо тебе ОП, не один час на меня потратил. Обещаю, что обязательно всей данной тобою информацией воспользуюсь, но не сейчас. Вообще ничего не могу сделать.
#576 #528632
>>528628
Я вообще фронтэнд ненавижу, у меня уже после 20 минут работы с версткой начинает голова болеть ужасно.
#577 #528643
Как стили в слиме инклудить, если хедер в отдельном шаблоне index.php, а каждый последующий юрл выглядит так index.php/contact, нужно чтобы работало и для индекса и для дочерних урл.
#578 #528650
>>528628

>Чуть позже вернусь к работе. На свежую голову.


PHP пока поучить можешь.

неОП
#579 #528658
>>528632
Аналогично. Я хз, кто себе фронтенд основной профессией выбирает, странные люди. В бэкенде все логично и последовательно, а тут мазохизм же сплошной.
#580 #528667
>>528632
Да уж эти вселенские проблемы уровня У МЕНЯ ФОРМА ПОЕХАЛА НА 2 ПИКСЕЛЯ ВНИЗ В САФАРИ ШТА ДЕЛАТЬ просто убивают. Фронтендеры чистят говно вилкой.
#581 #528668
>>528667
Фронтендеры - это такие боги.
129 Кб, 604x453
#582 #528704
#583 #528710
http://ideone.com/8ClmMn

Объясните как склеить текст по-нормальному. И что делать с первой функцией? Она не работает, а как сделать по-другому не придумал.
#584 #528712
>>528600

slice читает из arguments, не меняет их. А unshift пытается менять.

Вот в Es5 написано что slice применяется к чему угодно: http://es5.javascript.ru/x15.4.html#x15.4.4.10
про unshift тоже написано что можно применять к чему угодно (главное чтобы там было свойство length и свойства 0, 1 .... N): http://es5.javascript.ru/x15.4.html#x15.4.4.13

> ПРИМЕЧАНИЕ Функция slice является нарочито родовой функцией. Она не требует, чтобы её значение this было объектом Array. Поэтому она может передаваться другим типам объектов для использования в качестве метода.



А с помощью unshift ты пытался менять arguments как будто это массив.

Я почитал определение arguments http://es5.javascript.ru/x10.html#x10.6 но не нашел, можно его менять или нет. Думаю, что не стоит.

> Important: You should not slice on arguments because it prevents optimizations in JavaScript engines (V8 for example). Instead, try constructing a new array by iterating through the arguments object.


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

По поводу твоего кода: может быть массивы надо склеивать в обратном порядке? Сначала внешние аргменты, потом внутренние?
57 Кб, 976x526
#585 #528717
>>528712

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


Так вроде так и есть. Переданные в partial() ставятся на первые места в возвращаемой функции.
Заменил slice в теле функции partial() на перебор свойств arguments -- роботу понравилось (пикрилейтед).
#586 #528718
>>528717
...Но предыдущий вариант, как я понимаю, тоже имеет право на жизнь?
#587 #528723
>>528718

Предыдущий вариант неправильный так как в нем ты пытаешься переопределить псевдопеременную arguments:

arguments = ...

Так делать нельзя. Относись к arguments как к псевдопеременной только для чтения. Это вообще не полноценная переменная и с ней нельзя делать что угодно.

Этот вариант кстати тоже неправильный по той же причине.

Также, ты создаешь глобальные переменные: argsAdded = ....

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

Если бы ты использовал строгий режим (поставил "use strict"; в начале функции), эта ошибка бы не осталась незамеченной. Используй строгий режим.

Вместо arguments[0] лучше и нагляднее прописать func в скобках как аргумент функции.

Насчет самого теста, ты можешь попробовать глянуть его исходный код и посмотреть как именно идет проверка (только не подгоняй решение под тесты): https://github.com/dKab/jasmine-tests/blob/gh-pages/5.js#L30

Он не очень очевиден, потому обрати внимание на блок beforeEach: именно его результаты там проверяются. spy это функция-обертка которая фиксирует сколько раз она была вызвана и с какими аргументами (а тест потом проверяет что твоя функция ей передала).

Также, давай я попробую научить тебя как отлаживать такие ситуации. Вообще, это непросто так как там тест запускается так: в шапку <head> добавляется и сразу же удаляется скрипт с кодом теста (это функция globalEval в eval.js). Поставить в таком скрипте точку останова отладчиком нереально, так как отладчик его не видит.

Но мы все же можем найти причину проблемы. При ошибке тест выбрасывает исключение, потому открой отладчик, и на вкладке Script нажми кнопку «pause on exceptions» со значком паузы, и поставь галочку «pause on caught exceptions». Теперь запускай тест, и отладчик остановится на исключении. Посмотри на стектрейс в панели call stack и найди там место в тесте (это будет нелегко, у меня оно помечено в стектрейсе как (anonymous function) VM: 82:32 ). Найдя это место, ты увидишь 2 вещи:

- какой именно тест упал (не буду писать чтобы не лишать тебя удовольствия от самостоятельного поиска)
- подробности ошибки в панели Scope Variables, если раскрыть пункт «exception» и посмотреть на значение поля message.

Это были действия для Хрома, для файерфокса все примерно также должно быть.

Я посмотрел строчку с ошибкой, и у меня есть подозрения что ошибка связана с тем что если несколько раз подряд вызвать твою функцию, она работает неправильно. Посмотри этот код например: https://jsfiddle.net/j1yj8y28/1/ - он выдает неверные результаты, там должно быть не [4, 10, 11] а [2, 3, 10, 11].

И еще советую тебе показать предыдущие задачи, робот не идеален и стиль кода не проверяет, вдруг там тоже что-то не так.
#587 #528723
>>528718

Предыдущий вариант неправильный так как в нем ты пытаешься переопределить псевдопеременную arguments:

arguments = ...

Так делать нельзя. Относись к arguments как к псевдопеременной только для чтения. Это вообще не полноценная переменная и с ней нельзя делать что угодно.

Этот вариант кстати тоже неправильный по той же причине.

Также, ты создаешь глобальные переменные: argsAdded = ....

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

Если бы ты использовал строгий режим (поставил "use strict"; в начале функции), эта ошибка бы не осталась незамеченной. Используй строгий режим.

Вместо arguments[0] лучше и нагляднее прописать func в скобках как аргумент функции.

Насчет самого теста, ты можешь попробовать глянуть его исходный код и посмотреть как именно идет проверка (только не подгоняй решение под тесты): https://github.com/dKab/jasmine-tests/blob/gh-pages/5.js#L30

Он не очень очевиден, потому обрати внимание на блок beforeEach: именно его результаты там проверяются. spy это функция-обертка которая фиксирует сколько раз она была вызвана и с какими аргументами (а тест потом проверяет что твоя функция ей передала).

Также, давай я попробую научить тебя как отлаживать такие ситуации. Вообще, это непросто так как там тест запускается так: в шапку <head> добавляется и сразу же удаляется скрипт с кодом теста (это функция globalEval в eval.js). Поставить в таком скрипте точку останова отладчиком нереально, так как отладчик его не видит.

Но мы все же можем найти причину проблемы. При ошибке тест выбрасывает исключение, потому открой отладчик, и на вкладке Script нажми кнопку «pause on exceptions» со значком паузы, и поставь галочку «pause on caught exceptions». Теперь запускай тест, и отладчик остановится на исключении. Посмотри на стектрейс в панели call stack и найди там место в тесте (это будет нелегко, у меня оно помечено в стектрейсе как (anonymous function) VM: 82:32 ). Найдя это место, ты увидишь 2 вещи:

- какой именно тест упал (не буду писать чтобы не лишать тебя удовольствия от самостоятельного поиска)
- подробности ошибки в панели Scope Variables, если раскрыть пункт «exception» и посмотреть на значение поля message.

Это были действия для Хрома, для файерфокса все примерно также должно быть.

Я посмотрел строчку с ошибкой, и у меня есть подозрения что ошибка связана с тем что если несколько раз подряд вызвать твою функцию, она работает неправильно. Посмотри этот код например: https://jsfiddle.net/j1yj8y28/1/ - он выдает неверные результаты, там должно быть не [4, 10, 11] а [2, 3, 10, 11].

И еще советую тебе показать предыдущие задачи, робот не идеален и стиль кода не проверяет, вдруг там тоже что-то не так.
#588 #528726
>>528723
Спасибо за развёрнутый ответ. С тестом попробую разобраться.
Эх, похоже, не разберусь я с JS по-быстрому, как планировал.

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


Вот они:
№1 http://jsfiddle.net/1qhvmwx6/
№2 http://jsfiddle.net/uf0spa52/
№3 http://jsfiddle.net/mz7ozr0c/
№4 http://jsfiddle.net/o2th9671/
#589 #528727
>>528723

>Также, ты создаешь глобальные переменные: argsAdded = ....


Это я случайно. Привычка, порождённая PHP.
#590 #528730
>>528726
Ну и финальная версия №5: https://jsfiddle.net/tLxehm05/
Робот её принимает.
#591 #528734
>>528730

Включи строгий режим внутри функции и перепроверь:

https://learn.javascript.ru/strict-mode

(в первой строчке функци надо поставить "use strict"; )
#592 #528736
>>528734
Включил. Буду разбираться.
#593 #528748
>>528736

У тебя там переменная глобальная опять.
#594 #528751
>>528748
Точно. Больше ошибок же нет? Робот принимает.
4 Кб, 122x122
#595 #528755
>>528344

> Если второе, то тебе наверно стоит использовать библиотеку


Ну обычно мне требуется делать правки в рамках говнокода. Очень редко я психую и переписываю всё по новой. На данный момент файлики нормально заливаются, идёт проверка по MIME да похуй, тащемта, не такой и важный сайтец, переименовывается файл на юник-время. Просто не могу вписать загрузку в их код, туплю торможу. Сейчас вот снова вернусь к проблеме.
#596 #528761
Оп, поясни. В чем разница? Какой лучше формат использовать в вебе?

DateTime::ATOM
DATE_ATOM
Atom (пример: 2005-08-15T15:52:01+00:00)

DateTime::ISO8601
DATE_ISO8601
ISO-8601 (пример: 2005-08-15T15:52:01+0000)
#597 #528763
>>528761
Кароче, чтобы потом впасть в технозависимость. Какой лучше стандарт выбрать?

DateTime::RSS
DATE_RSS
RSS (example: Mon, 15 Aug 2005 15:52:01 +0000)
#598 #528764
>>528763
не впасть*
#599 #528841
>>528763
RSS же самый распространенный.
#601 #528898
>>528895
Ну и правильно. Даже сраная кошка знает, что такие книжки годятся только для туалета.
#602 #528912
>>528895

У кота отдельный диван, круто.
#603 #528914
>>528895
У кота глаза как у программиста на PHP. Видно прочитать все же успел, прежде чем порвал.
#604 #528964
Может у кого было что-то подобное в практике.
Есть простятская cms, в которой меня попросили добавить раздел добавление/редактирование меню, чтобы было как в wordpress.
Нашел библиотеку - nestable. Отлично подходит для моих нужд.
И все вроде ничего, но! Когда расставляю элементы меню в нужной последовательности, и сохраняю, то они правильно сохраняются. Затем захожу в редактирование созданного меню, там они отображаются точно так же, как я и сохранил. Тут же нажимаю на Сохранить (в смысле не изменяя ничего нажимаю сохранить) и в результате получается что падает последовательность у последних двух элементов.
Выводя массив $_POST, определил что при сабмите последний элемент который должен наследовать parent_id предпоследнего, стоит перед этим предпоследним. А предпоследний, естественно последним. Как такое может быть? Если судя по html все стоят в нужной последовательности.
#605 #528993
Запостил по незнанию в старый тред, копипастю сюда.

Всем привет. Я тут новенький, не кидайте ссаными тряпками.
Погружаюсь в SQL, решаю задачки на sql-ex.ru
Теория там написана сложным для меня языком, наверно я дебил, и она в большинстве случаев мне не помогает.
Сейчас решаю задачу, видел, что некоторые запихивают в FROM скобки с SELECTом. Почему при таком вложении возникает ошибка? Где вообще почитать правила вложения в FROM? В примере я пытаюсь присвоить переменную avg_p первым скобкам и avg_l вторым чтобы позже сложить SUM'ом значения из этих двух переменных в одну. Если интересно, это задание №26 с вышеупомянутого сайта.

SELECT SUM(AVG_Price)
FROM (
SELECT AVG(price) AS AVG_Price
FROM pc p
JOIN product pr ON p.model=pr.model
WHERE maker='A') avg_p, (SELECT AVG(price)
FROM laptop l
JOIN product pr ON l.model=pr.model
WHERE maker='A'
) avg_l

No column name was specified for column 1 of 'avg_l'.
#606 #529016
>>528993
Kek, там задания с подъебками, я уж начал джойны и вложенные селекты на одном писать, а надо было всего лишь другое поле в той же таблице смотреть.
#607 #529018
>>528993
Скинь сюда условие задачи, на сайте требуют регистрацию.

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

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

По sql есть еще несколько неплохих книг, где объясняется теория.
Например мне понравилась "MySQL. Учебное пособие" Люк Веллинг, Лора Томпон.
sage #608 #529020
>>523494 (OP)
Этот тот тредик того некомпетентного пхптушка-опа?
Сежкискрыл.
#609 #529021
>>529020
А ты не можешь отличить?
#610 #529023
>>528964
Что значит "судя по html"? При помощи css можно как угодно отобразить последовательность элементов, неважно как они идут в коде.

Скидывай код, тут нет экстрасенсов.
#611 #529026
>>529021
Нет, но рилли, оп-петух с котиками еще пару сотнетредов знатно обосрался, так что это легко.
sage #612 #529027
Саже опу!
Аноны должны знать своих героев.
sage #613 #529029
sage #614 #529034
>>527541
>>527555
>>527570
Этот даун похоже вообще без стилистических доебываний ничего ответить не может. Сажи пидоры.
#615 #529041
>>529016
Там слева пишут обычно, какие темы пригодятся для решения.
>>529018
Спасибо за ссылку. И бложик и книги почитаю, но пока хотелось бы понять такие базовые вещи как вложение запроса в FROM на практике.

Вот условия самой задачи:

Схема БД состоит из четырех таблиц:
Product(maker, model, type)
PC(code, model, speed, ram, hd, cd, price)
Laptop(code, model, speed, ram, hd, price, screen)
Printer(code, model, color, type, price)
Таблица Product представляет производителя (maker), номер модели (model) и тип ('PC' - ПК, 'Laptop' - ПК-блокнот или 'Printer' - принтер). Предполагается, что номера моделей в таблице Product уникальны для всех производителей и типов продуктов. В таблице PC для каждого ПК, однозначно определяемого уникальным кодом – code, указаны модель – model (внешний ключ к таблице Product), скорость - speed (процессора в мегагерцах), объем памяти - ram (в мегабайтах), размер диска - hd (в гигабайтах), скорость считывающего устройства - cd (например, '4x') и цена - price. Таблица Laptop аналогична таблице РС за исключением того, что вместо скорости CD содержит размер экрана -screen (в дюймах). В таблице Printer для каждой модели принтера указывается, является ли он цветным - color ('y', если цветной), тип принтера - type (лазерный – 'Laser', струйный – 'Jet' или матричный – 'Matrix') и цена - price.

Задание: 26 (Serge I: 2003-02-14)
Найдите среднюю цену ПК и ПК-блокнотов, выпущенных производителем A (латинская буква). Вывести: одна общая средняя цена.

· Справка по теме:
Явные операции соединения
Подзапросы
Объединение
Получение итоговых значений

Вот ссылка на саму схему БД:
http://www.sql-ex.ru/help/select13.php#db_1

Решения гуглятся, но собраны от разных людей, поэтому иногда проще от них не становится.
#615 #529041
>>529016
Там слева пишут обычно, какие темы пригодятся для решения.
>>529018
Спасибо за ссылку. И бложик и книги почитаю, но пока хотелось бы понять такие базовые вещи как вложение запроса в FROM на практике.

Вот условия самой задачи:

Схема БД состоит из четырех таблиц:
Product(maker, model, type)
PC(code, model, speed, ram, hd, cd, price)
Laptop(code, model, speed, ram, hd, price, screen)
Printer(code, model, color, type, price)
Таблица Product представляет производителя (maker), номер модели (model) и тип ('PC' - ПК, 'Laptop' - ПК-блокнот или 'Printer' - принтер). Предполагается, что номера моделей в таблице Product уникальны для всех производителей и типов продуктов. В таблице PC для каждого ПК, однозначно определяемого уникальным кодом – code, указаны модель – model (внешний ключ к таблице Product), скорость - speed (процессора в мегагерцах), объем памяти - ram (в мегабайтах), размер диска - hd (в гигабайтах), скорость считывающего устройства - cd (например, '4x') и цена - price. Таблица Laptop аналогична таблице РС за исключением того, что вместо скорости CD содержит размер экрана -screen (в дюймах). В таблице Printer для каждой модели принтера указывается, является ли он цветным - color ('y', если цветной), тип принтера - type (лазерный – 'Laser', струйный – 'Jet' или матричный – 'Matrix') и цена - price.

Задание: 26 (Serge I: 2003-02-14)
Найдите среднюю цену ПК и ПК-блокнотов, выпущенных производителем A (латинская буква). Вывести: одна общая средняя цена.

· Справка по теме:
Явные операции соединения
Подзапросы
Объединение
Получение итоговых значений

Вот ссылка на саму схему БД:
http://www.sql-ex.ru/help/select13.php#db_1

Решения гуглятся, но собраны от разных людей, поэтому иногда проще от них не становится.
#616 #529046
Котаны нид хелп. Перепост из софтача.
Посоны, поставил апачь на убунту, создал тестовый файл, запустил в браузере localhost/test.php а он мне-

>The requested URL /test.php was not found on this server.


>Apache/2.4.10 (Ubuntu) Server at localhost Port 80


Что может быть не так?
#617 #529047
>>529046
Файл test.php лежит в /var/www или /var/www/html?
Нужно в html.
#618 #529049
>>529046
Открой httpd.conf, проверь DocumentRoot "C:/directory" или поменяй
настрой <Directory "C:/directory">, выставь там права доступа.
И потов эту директорию клади test.php
#619 #529051
>>529047
Ничего не поменялось.
Делаю по этому гайду http://ussoff.narod.ru/, может там что-то не так.
Если можешь, то дай норм гайд для настройки ПХП\апач\мускуль и IDE Eclipse для винды или убунты, пожалуйста.
#620 #529057
>>529051
Тут гайд
http://www.oldnix.org/install-xampp-linux/

>IDE Eclipse


Это ж жопа, юзай Netbeans или PHPStorm.
#622 #529060
>>529057

>Тут гайд


>http://www.oldnix.org/install-xampp-linux/


Но это же сборки типа денвера, тут анон меня отговаривал от них.
А чем эклипс плох, бесплатный же.
34 Кб, 811x609
#623 #529062
>>529060
Eclipse лучше для Java подходит.
Для PHP, насколько я пробовал, netbeans быстрее, проще в освоении и универсальнее, все без шаманств заводится за 5 мин, подсветка везде где надо, лишних назойливых фич нет и доки подробные. Он бесплатный тоже кстати. PHPStorm сложнее нетбинса, возможностей и удобностей поболее, но платный и тормозной, к тому же часто ненужные фичи сами включаются. Также пикрелейтед. Как видишь Eclipse на работах совсем мало юзают в PHP, в основном Netbeans, PHPStorm и Sublime.
#624 #529067
>>529023
Есть li в нем есть данные в input`ах.
Если в li есть еще один li с данными, то он является его чилдреном.
Когда нажимаем сабмит, то по логике в $_POST должны идти данные вначале из первого li, а затем из второго. Но на деле они почему-то меняются местами. Как такое может быть?
через js структура не меняется
#625 #529070
>>529041

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

Тем более в «справка по теме» намекают:

— Явные операции соединения
#626 #529071
>>529067

> то по логике в $_POST должны идти данные вначале из первого li, а затем из второго.


По какой такой логике? Это ты сам придумал. Не надо полагаться на порядок в котором идут данные, пронумеруй их явно, например value[1], value[2] и т д.
#627 #529078
>>529071
Стандарт w3c ведь, что $_POST идет в такой же последовательности как элементы на старинце
#628 #529095
Схема БД состоит из четырех таблиц:
Product(maker, model, type)
PC(code, model, speed, ram, hd, cd, price)
Laptop(code, model, speed, ram, hd, price, screen)
Printer(code, model, color, type, price)

Задание:
Найдите номера моделей и цены всех продуктов (любого типа), выпущенных производителем B (латинская буква).

Мое решение:
SELECT Product.model, price FROM Product JOIN Laptop ON Product.model = Laptop.model WHERE Product.maker = 'B' UNION SELECT Product.model, price FROM PC JOIN Product ON Product.model = Pc.model WHERE Product.maker = 'B' UNION SELECT Product.model, price FROM Printer JOIN Product ON Product.model = Printer.model WHERE Product.maker = 'B'

ОП, а такое решение, как у меня с кучей UNION и JOIN для 3х таблиц, это нормально, или еще как-то проще можно? Смущает, что WHERE условие 3 раза повторяется.
#629 #529106
>>529070
Можно поподробнее?
У меня уже используются два джоина во вложенных запросах. К тому же, в справке по теме есть и использование подзапросов. Да, может некрасиво, но на данном этапе мне в первую очередь нужно понять, как используются вложения во FROM. За оптимизацией я буду гнаться когда смогу решать такие задачи разными способами. Кстати, вероятно, при неиспользовании подзапросов сайт не засчитает мне задачу, потому что там есть не только проверка на совпадение результата, но и проверка правильности запроса "если бы там были другие данные, то результат уже не совпал бы".

Я пытался объединить эти запросы вычисления средней цены через UNION (в справке значатся объединения), но получил соединение в отдельные строки, понял, что это не то, так как мне нужно получить одну строку - сумму этих двух строк.
#630 #529107
>>529095
Если решение прошло, то можешь зайти в форум с обсуждением задания, и там будет несколько страниц вариантов от разных людей, зачастую вводящих меня в панику используемыми операторами и конструкциями. Ну и скорость обработки запроса они любят публиковать к своим вариантам.
#631 #529109
>>529107
А как скорость смотреть?
#632 #529111
>>529109
под ссылкой на обсуждение есть "Анализ плана выполнения решения."
Total cost, как я понимаю, и есть скорость обработки запроса
ВТОРОЕ ЗАДАНИЕ ПО JS #633 #529133
function take(fn, count) {
var arr = [];
for (int i = 0; i<count; i++){
arr=fn();

}
return arr[];
}

Чувствую, я совсем не в ту сторону капаю. Помогите.
129 Кб, 1872x582
#634 #529149
>>529111
>>529109
Нашел, интересно. А там еще табличка пикрелейтед наглядная выводится для каждого запроса, где можно посмотреть сколько каждый подзапрос занял. Кто-то знает, как такую на обычном mysql серваке получить?
#635 #529150
>>529106

>на данном этапе мне в первую очередь нужно понять, как используются вложения во FROM


Ну что же вы, котейки, никто не знает?
#636 #529160
>>524274
Эбать. Вот это палитра. Тёма негодуэ.
59 Кб, 1009x756
#637 #529192
Гайс, поставил себе eclipse, настроил его на денвер, всё вроде заебись, да только почему то дебагинг не останавливается. Жмакнул дебаг, файлвыполнился, я закрыл окошко выполнения и больше дебаг я запустить не могу, пишет web launch already running. И где его это раннинг остановить я хз.
#638 #529200
>>529106

> как используются вложения во FROM


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

SELECT inn.id, inn.x FROM (SELECT ...) inn WHERE inn.y = ....;

Подзапрос можно использовать совместно с другими таблицами (FROM tablre, (SELECT ...) ) и в джойнах (FROM table JOIN (SELECT ...)).

Также позапрос можно использовать в списке полей, в условии WHRE x IN (SELECT), в условии вроде WHERE x > (SELECT ...), и в условиях HAVING. И может где-то еще.

Учебник:

http://www.pyramidin.narod.ru/rusql/ch11.html
http://www.pyramidin.narod.ru/rusql/ch12.html
http://www.pyramidin.narod.ru/rusql/ch13.html

Но писать так не стоит, код с JOIN получается аккуратнее, читабельнее и оптимальнее. Я не понимаю зачем ты так упираешься в подзапросы.
#639 #529204
>>529133

А ты learn.javascript.ru читаешь? Если нет то открой и начинай читать.

arr=fn();

Что это делает? Помещает в переменную arr вместо массива результат вызова функции?

> return arr[];


Где это ты увидел такой синтаксис?

>>529149

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


EXPLAIN SELECT:

http://habrahabr.ru/post/211022/
http://habrahabr.ru/post/31129/
http://habrahabr.ru/post/203320/
https://dev.mysql.com/doc/refman/5.0/en/explain.html

>>529095

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

Помни об этом и не делай такие таблицы как на том сайте.

В твоем случае, да без UNION никак не обойтись. У нас есть 2 варианта:

— сделать 3 индивидуальных выборки и объединить через UNION
— (чуть умнее) объединить таблицы через UNION, а объединенную таблицу джойнить на таблицу производиетлей. Код будет короче.

> ОП, а такое решение, как у меня с кучей UNION и JOIN для 3х таблиц, это нормально, или еще как-то проще можно? Смущает, что WHERE условие 3 раза повторяется.


Можно сначала делать юнион а только потом джойн.
#639 #529204
>>529133

А ты learn.javascript.ru читаешь? Если нет то открой и начинай читать.

arr=fn();

Что это делает? Помещает в переменную arr вместо массива результат вызова функции?

> return arr[];


Где это ты увидел такой синтаксис?

>>529149

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


EXPLAIN SELECT:

http://habrahabr.ru/post/211022/
http://habrahabr.ru/post/31129/
http://habrahabr.ru/post/203320/
https://dev.mysql.com/doc/refman/5.0/en/explain.html

>>529095

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

Помни об этом и не делай такие таблицы как на том сайте.

В твоем случае, да без UNION никак не обойтись. У нас есть 2 варианта:

— сделать 3 индивидуальных выборки и объединить через UNION
— (чуть умнее) объединить таблицы через UNION, а объединенную таблицу джойнить на таблицу производиетлей. Код будет короче.

> ОП, а такое решение, как у меня с кучей UNION и JOIN для 3х таблиц, это нормально, или еще как-то проще можно? Смущает, что WHERE условие 3 раза повторяется.


Можно сначала делать юнион а только потом джойн.
#640 #529205
>>529078

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

Если ты считаешь что браузер не следует стандарту, покажи минимальный готовый HTML с формой которая отправляется в неправильном порядке, я проверю.
#641 #529207
>>529078

$_POST не описан ни в каких стандартах w3c. Стандарты w3c описывают способ кодирования данных формы в теле POST запроса. Массив POST создается интерпретатором PHP и порядок его создания не описан ни в каких стандартах, разве что в документации по PHP.

И интуиция подсказывает мне что у тебя просто кривой код.
#642 #529208
>>529067

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

— кусок HTML кода
— кусок данных, отправляемых при откправке формы, со вкладки Network в отладчике браузера (Ctrl + Shift + I)
— что выводит print_r($_POST) в PHP
Разбор испытаний в школу интерфейсов яндекса #643 #529215
Аноны! У Яндекса есть школа интерфейсов, и там есть вступительные задания на верстку. Те из вас, кто изучает CSS/HTML/JS, я вам советую почитать их и поломать голову (ниже будет ссылка на разбор задач с правильными ответами). Я считаю, задачки неплохие и помогают отличить тех, то хорошо знает фронтенд от тех кто скачет по верхам и учится по видеокурсам.

Задание 1

Автор задания и разбора — Олег Olegbl4 Мохов. В Яндексе руководит разработкой интерфейсов нескольких сервисов, а вне Яндекса организует конференции FrontTalks, EkbJS и ChellyJS и читает спецкурс по разработке интерфесов в УрФу

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

Задание 2

Автор задания и разбора — Максим KidsKilla Гришаев. В Яндексе занимается разработкой Элементов для Firefox

Есть страница с «эквалайзерами» — контейнеры произвольных размеров (квадраты 100px, 200px и 300px) заполняются столбцами шириной по 2px (задаётся параметром).

Каждую секунду столбцам задаётся случайная высота в пределах размеров контейнера. Далее при помощи анимации высота столбцов возвращается к середине контейнера. Реализация находится в файле: http://github.com/yandex-shri-minsk-2014/jade-task . Исходный код работает медленно и приводит к зависанию браузера. Нужно улучшить его так, чтобы анимация стала плавной. Изменять вёрстку необязательно, однако вы можете это сделать, если это поможет решить задачу. Работоспособность в IE ниже 8 не требуется. Желательно добавить помимо анимации «спада» ещё и анимацию «роста». По возможности оформите в качестве jQuery-плагина или напишите без jQuery.

Задача 3

Автор задания и разбора — Илья Довбан. Илья руководит группой поисковых интерфейсов в минском офисе Яндекса

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

При помощи d3.js сделайте интерактивную визуализацию произвольного массива точек, которые плавно и неравномерно меняют цвет от красного к жёлтому и обратно, находятся в броуновском движении и «убегают» от курсора.

Разбор решений и правильные ответы: http://habrahabr.ru/company/yandex/blog/264631/

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

Я в свою очередь могу прокомментировать ваши идеи и решения, если вы не хотите сразу смотреть правильный ответ. Могу дать подсказку если вы зашли в тупик.
Разбор испытаний в школу интерфейсов яндекса #643 #529215
Аноны! У Яндекса есть школа интерфейсов, и там есть вступительные задания на верстку. Те из вас, кто изучает CSS/HTML/JS, я вам советую почитать их и поломать голову (ниже будет ссылка на разбор задач с правильными ответами). Я считаю, задачки неплохие и помогают отличить тех, то хорошо знает фронтенд от тех кто скачет по верхам и учится по видеокурсам.

Задание 1

Автор задания и разбора — Олег Olegbl4 Мохов. В Яндексе руководит разработкой интерфейсов нескольких сервисов, а вне Яндекса организует конференции FrontTalks, EkbJS и ChellyJS и читает спецкурс по разработке интерфесов в УрФу

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

Задание 2

Автор задания и разбора — Максим KidsKilla Гришаев. В Яндексе занимается разработкой Элементов для Firefox

Есть страница с «эквалайзерами» — контейнеры произвольных размеров (квадраты 100px, 200px и 300px) заполняются столбцами шириной по 2px (задаётся параметром).

Каждую секунду столбцам задаётся случайная высота в пределах размеров контейнера. Далее при помощи анимации высота столбцов возвращается к середине контейнера. Реализация находится в файле: http://github.com/yandex-shri-minsk-2014/jade-task . Исходный код работает медленно и приводит к зависанию браузера. Нужно улучшить его так, чтобы анимация стала плавной. Изменять вёрстку необязательно, однако вы можете это сделать, если это поможет решить задачу. Работоспособность в IE ниже 8 не требуется. Желательно добавить помимо анимации «спада» ещё и анимацию «роста». По возможности оформите в качестве jQuery-плагина или напишите без jQuery.

Задача 3

Автор задания и разбора — Илья Довбан. Илья руководит группой поисковых интерфейсов в минском офисе Яндекса

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

При помощи d3.js сделайте интерактивную визуализацию произвольного массива точек, которые плавно и неравномерно меняют цвет от красного к жёлтому и обратно, находятся в броуновском движении и «убегают» от курсора.

Разбор решений и правильные ответы: http://habrahabr.ru/company/yandex/blog/264631/

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

Я в свою очередь могу прокомментировать ваши идеи и решения, если вы не хотите сразу смотреть правильный ответ. Могу дать подсказку если вы зашли в тупик.
#644 #529220
Задания в яндекс этого года https://academy.yandex.ru/events/shri/msk-2015/register/ мы обсуждать не будем чтобы не ставить других поступающих в неравные условия.
#645 #529222
>>529215
Хотел съязвить, но передумал.
Ты неисправим.
14 Кб, 1607x404
#646 #529223
>>529208
В общем имеем такую структуру как на пикче(я про элементы справа).
Составили ее только что, еще не сохраняли. То есть сейчас ее html такой: http://pastebin.com/cFAFk8Zz
Сохраняем. $_POST выглядит следующим образом: http://pastebin.com/YS38m8z1
Все отлично, parent_id - это ключ элемента.
Открываем сохраненную менюху. И блять, тут вылетел баг, которого я еще не видел. Почему-то элемент test4 принадлежит еще и родителю test2, хотя в базе четко сохранилось 4 значения только, с правильной вложенностью. http://prntscr.com/83wxg6
Ладно. Упустим этот момент, где-то ошибка, потом исправлю. Удаляю. html получается такой: http://pastebin.com/xZjqRaFD
То что ключи теперь такие большие - это не важно, просто теперь они берутся из базы.
Так вот. Сейчас данные с ключом 456 идут послу ключа 455 и в parent_id ссылаются на него. То есть по логике все правильно. Но выведем $_POST и... бля. Получим правильный массив. Все как должно быть, того бага про который я говорил нет. Нах все это расписывал...
Значит баг в выводе элементов...
#647 #529224
>>529220

>\tВуз, факультет, специальность, кафедра



>\tГод окончания вуза\t



Это оскорбляет мои плебейские чувства. Отметили бы эти пункты как необязательные.
#648 #529238
Аноны, несмотря на мои попытки переубедить вас, некоторые из вас смотрят видеокурсы. Но если вам нравятся видео/аудиокурсы, почему вы смотрите сделанные непонятно кем, а не например видеолекции от разработчиков компаний вроде Яндекса? Вот например такие:

https://events.yandex.ru/lib/talks/1564/

Или такие:

https://www.lektorium.tv/ (тут правда с поиском беда)

>>529223

Вот и хорошо, что разобрались.

Но все же порядок элементов лучше указывать явно, в твоем случае например там могло бы быть menu[1][order] который хранит номер элемента по порядку. Ну это так, если ты будешь сам такие вещи делать.

>>529224

Я думаю, там можно указать что образования нет.
#649 #529242
>>528726
#6: http://pastebin.com/9jZ6xrUT
Жсфиддл лежит, поэтому пастбин.
#650 #529244
>>528569

Судя по тексту ошибки, там тебе передается не service locator, а Zend\Mvc\Controller\ControllerManager который реализует интерфейс. А уже у него есть метод для получения service locator. Не знаю, почему так сделано.

Тут https://juriansluiman.nl/article/120/using-zend-framework-service-managers-in-your-application написано про разные Service Manager, видимо в зенде их много и для создания контроллеров есть свой менеджер.
#651 #529245
>>528643

Надо указывать ссылки такого типа:

href="/css/style.css"

Ты изучал относительные и абсолютные ссылки в HTML? Почитай: http://www.google.ru/search?sourceid=chrome&ie=UTF-8&q=%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5+%D0%B8+%D0%B0%D0%B1%D1%81%D0%BE%D0%BB%D1%8E%D1%82%D0%BD%D1%8B%D0%B5+%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B8+url

Если твой проект находится не в корне сайта, а в папке (например http://localhost/project/ ) то у Slim есть метод $app->request->getRootUri() для определения пути к папке (/project/).

Тогда ты должен с его помощью формировать ссылки вроде

/project/css/style.css
191 Кб, 964x560
#652 #529248
>>529238

>https://events.yandex.ru/lib


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

>lektorium.tv


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

>Комбинаторные виды и теория представлений симметрической группы


>Группы и теория гомотопий


и т.д.

На русском в принципе вообще материалов нет, что в печатном виде, что в человекоприятном формате.
На английском ситуация гораздо лучше. Зацени курс от Линды по Гиту. Все грамотно и профессионально. https://www.youtube.com/watch?v=o49ywgiM6uA
Уверен, что даже ты не знаешь некоторых вещей, о которых там рассказывается.
Например неделю назад я тут спрашивал как откатить гит на 3-4... коммита назад, то есть стереть изменения. Вы мне предложили хуйню из гугла.
>>526046
>>526077
Нет. Лучше сделать жесткий ресет (reset --hard). Revert действует только на последний коммит, фактически он просто создает копию предпоследнего коммита.

Отложил пока php, засел за английский. Кто-то выше вбросил memrise.com, рекомендую.
Самое то для аутирования, пикрелейтед. За двенадцать часов набампал 1200 слов. Правда там начальный уровень.
Но дело идет споро, я доволен.
#653 #529250
>>529248
Gamification is overrated.
#655 #529255
>>528658

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

>>528667

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

>>528710

> $text = ucfirst($text);


Ты внимально читал мой учебник? ucfirst работает толко с латинницей. Вот подробнее написано: https://gist.github.com/codedokode/ff99e357e9860ea169b8

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

Убрать лишние пробелы перед точкой можно с помощью функции trim()

>>528726

> №1


Ок, верно

> №2


Правильно

> №3


Правильно

> №4


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

>>528727

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

>>528730

> args = argsDefined.concat(argsAdded);


var пропущен

> var func = arguments[0];


Лучше явно указать func в скобках ради читабельности

>>528751

Больше нет

>>528761

Эти форматы сделаны для конкретных случаев, ATOM — как следует из названия, для RSS в формате ATOM, а ISO8601, как показывает гугление (http://microformats.org/wiki/iso-8601 ) используется тоже в RSS и в атрибутах тегов.

Есть еще форматы используемые в HTTP заголовках.

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

Опубликовано 1 сентября 2015 в 12:20

>>528993

> В примере я пытаюсь присвоить переменную avg_p первым скобкам и avg_l вторым чтобы позже сложить SUM'ом значения из этих двух переменных в одну.


Ты неправильно называешь вещи.

- то что в скобках это подзапрос
- avg_l это не переменная, а алиас (синоним, псевдоним) для подзапроса. Он используется чтобы указывать на поля в результате выполнения этого подзапроса, например avg_l.xyz

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

Прочитай например тут про алиасы:

http://dimonchik.com/sql-alias.html

далее, разберем сообщение об ошибке:

> No column name was specified for column 1 of 'avg_l'.


Ты не задал алиас для первой колонки в подзапросе avg_l и из-за этого не можешь к ней обратиться (так как AVG(price) это не имя)

Далее, разберем код:

SELECT SUM(..) FROM (....) avg_p, (.....) avg_l

Объясни что по-твоему происходит, когда мы уакзываем 2 таблицы через запятую в секции FROM? Ответ происходит джойн (объединение таблиц), который генерирует полное декартовое произведение строчек из них

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

Тебе надо почитать теорию вот например тут:

http://www.pyramidin.narod.ru/rusql/index.htm

Или тут:

http://jtest.ru/bazyi-dannyix/sql-dlya-nachinayushhix.html
http://jtest.ru/bazyi-dannyix/sql-dlya-nachinayushhix-chast-2.html
http://jtest.ru/bazyi-dannyix/sql-dlya-nachinayushhix-chast-3.html

У тебя пока недостаточно знаний для решения этой задачи, и надо начать с теории.
#655 #529255
>>528658

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

>>528667

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

>>528710

> $text = ucfirst($text);


Ты внимально читал мой учебник? ucfirst работает толко с латинницей. Вот подробнее написано: https://gist.github.com/codedokode/ff99e357e9860ea169b8

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

Убрать лишние пробелы перед точкой можно с помощью функции trim()

>>528726

> №1


Ок, верно

> №2


Правильно

> №3


Правильно

> №4


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

>>528727

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

>>528730

> args = argsDefined.concat(argsAdded);


var пропущен

> var func = arguments[0];


Лучше явно указать func в скобках ради читабельности

>>528751

Больше нет

>>528761

Эти форматы сделаны для конкретных случаев, ATOM — как следует из названия, для RSS в формате ATOM, а ISO8601, как показывает гугление (http://microformats.org/wiki/iso-8601 ) используется тоже в RSS и в атрибутах тегов.

Есть еще форматы используемые в HTTP заголовках.

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

Опубликовано 1 сентября 2015 в 12:20

>>528993

> В примере я пытаюсь присвоить переменную avg_p первым скобкам и avg_l вторым чтобы позже сложить SUM'ом значения из этих двух переменных в одну.


Ты неправильно называешь вещи.

- то что в скобках это подзапрос
- avg_l это не переменная, а алиас (синоним, псевдоним) для подзапроса. Он используется чтобы указывать на поля в результате выполнения этого подзапроса, например avg_l.xyz

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

Прочитай например тут про алиасы:

http://dimonchik.com/sql-alias.html

далее, разберем сообщение об ошибке:

> No column name was specified for column 1 of 'avg_l'.


Ты не задал алиас для первой колонки в подзапросе avg_l и из-за этого не можешь к ней обратиться (так как AVG(price) это не имя)

Далее, разберем код:

SELECT SUM(..) FROM (....) avg_p, (.....) avg_l

Объясни что по-твоему происходит, когда мы уакзываем 2 таблицы через запятую в секции FROM? Ответ происходит джойн (объединение таблиц), который генерирует полное декартовое произведение строчек из них

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

Тебе надо почитать теорию вот например тут:

http://www.pyramidin.narod.ru/rusql/index.htm

Или тут:

http://jtest.ru/bazyi-dannyix/sql-dlya-nachinayushhix.html
http://jtest.ru/bazyi-dannyix/sql-dlya-nachinayushhix-chast-2.html
http://jtest.ru/bazyi-dannyix/sql-dlya-nachinayushhix-chast-3.html

У тебя пока недостаточно знаний для решения этой задачи, и надо начать с теории.
#656 #529258
>>529192

погугли http://www.google.ru/search?aq=f&sourceid=chrome&ie=UTF-8&q=eclipse+web+launch+already+running

>>529242

> var func = arguments[0];


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

> var args = [].slice.call(argsDefined);


Почему не просто slice? Это же массив а не псевдомассив. Трюк нужен только для псевдомассивов у которых нет метода slice.

Код выглядит верно. Робота проходит? Если да то все ок.

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

>>529248

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


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

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

>>lektorium.tv


> Там ничего нет


Там по базам данных вроде курс есть:

https://www.lektorium.tv/medialibrary?search_api_views_fulltext=%D0%B1%D0%B0%D0%B7%D1%8B+%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&type=All&recorded_from%5Bdate%5D=&recorded_to%5Bdate%5D=&sort_by=created&sort_order=ASC

https://www.lektorium.tv/course/22828

Ну и вот этот список курсов от Computer Science Center: https://www.lektorium.tv/university/2932

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

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

> На английском ситуация гораздо лучше


Согласен. Я сам смотрел курс по AI, там и теория, и задачки над которыми немного придется поломать голову: https://www.udacity.com/course/intro-to-artificial-intelligence--cs271

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

> Уверен, что даже ты не знаешь некоторых вещей, о которых там рассказывается.


Возможно, гит я не очень знаю и сам иногда гуглю. Я например не отвечу даже на вопрос что такое HEAD или FETCH_HEAD, но я знаю что git diff HEAD~1 покажет разницу между с предыдущим коммитом.

> Revert действует только на последний коммит, фактически он просто создает копию предпоследнего коммита.


Боюсь, ты ошибся. В мануале написано можно указать конкретный коммит: http://git-scm.com/docs/git-revert

Да, он отменяет изменения, добавляя новый коммит. И это вполне нормальный вариант.

reset это кое-что другое, reset --hard возвращает состояние рабочей области к указанному коммиту (и далее ты можешь это состояние закоммитить). Получается в общем то же, но за большее число шагов.

Аналогично можно получить файлы из определенного коммита с помощью git checkout SHA.
#656 #529258
>>529192

погугли http://www.google.ru/search?aq=f&sourceid=chrome&ie=UTF-8&q=eclipse+web+launch+already+running

>>529242

> var func = arguments[0];


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

> var args = [].slice.call(argsDefined);


Почему не просто slice? Это же массив а не псевдомассив. Трюк нужен только для псевдомассивов у которых нет метода slice.

Код выглядит верно. Робота проходит? Если да то все ок.

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

>>529248

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


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

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

>>lektorium.tv


> Там ничего нет


Там по базам данных вроде курс есть:

https://www.lektorium.tv/medialibrary?search_api_views_fulltext=%D0%B1%D0%B0%D0%B7%D1%8B+%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&type=All&recorded_from%5Bdate%5D=&recorded_to%5Bdate%5D=&sort_by=created&sort_order=ASC

https://www.lektorium.tv/course/22828

Ну и вот этот список курсов от Computer Science Center: https://www.lektorium.tv/university/2932

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

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

> На английском ситуация гораздо лучше


Согласен. Я сам смотрел курс по AI, там и теория, и задачки над которыми немного придется поломать голову: https://www.udacity.com/course/intro-to-artificial-intelligence--cs271

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

> Уверен, что даже ты не знаешь некоторых вещей, о которых там рассказывается.


Возможно, гит я не очень знаю и сам иногда гуглю. Я например не отвечу даже на вопрос что такое HEAD или FETCH_HEAD, но я знаю что git diff HEAD~1 покажет разницу между с предыдущим коммитом.

> Revert действует только на последний коммит, фактически он просто создает копию предпоследнего коммита.


Боюсь, ты ошибся. В мануале написано можно указать конкретный коммит: http://git-scm.com/docs/git-revert

Да, он отменяет изменения, добавляя новый коммит. И это вполне нормальный вариант.

reset это кое-что другое, reset --hard возвращает состояние рабочей области к указанному коммиту (и далее ты можешь это состояние закоммитить). Получается в общем то же, но за большее число шагов.

Аналогично можно получить файлы из определенного коммита с помощью git checkout SHA.
#658 #529260
>>529248

> Кто-то выше вбросил memrise.com, рекомендую.


О, там и японский есть, хорошо, можно будет попробовать.

> Там мало (по php я вообще ничего не нашел), нет практических занятий.


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


Да, там нет практических занятий по PHP, но зато есть много полезного для расширения кругозора, а по той конкретной ссылке — по фронтенду.

>>529250

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

>>529252

Выглядит верно, если робот примет, то ок.
#659 #529261
>>529259

Выглядит верно.
#660 #529262
>>529258

>> var func = arguments[0];


>ради читабельности этот аргумент лучше указать явно в скобках


>


>> var args = [].slice.call(argsDefined);


>Почему не просто slice? Это же массив а не псевдомассив. Трюк нужен только для псевдомассивов у которых нет метода slice.


>


Это рудименты решения предыдущего задания. Исправил в js-файлах у себя на компьютере.

>Код выглядит верно. Робота проходит? Если да то все ок.


Робота проходит.
#661 #529265
Задачки по JS. Изменение сложности у них нелинейное, однако.
#9: http://jsfiddle.net/qy1Ldbkj/
#10: http://jsfiddle.net/ufafa82x/
#662 #529266
>>529265
А ты думал в сказку попал? Погоди, сейчас оп пригрузит тебя вопросами с собеседований яндекса и гугла.
#663 #529267
>>529265

В 10 варианте стоит сделать проверку через hasOwnProperty чтобы не считать лишние свойства, которые кто-нибудь может добавить на прототип объекта: https://learn.javascript.ru/prototype#%D0%BC%D0%B5%D1%82%D0%BE%D0%B4-hasownproperty

Но так как ты не изучал прототипы (пока) то можно не делать.

А так, верно.
#664 #529268
>>529266
Я имел в виду, что до №5 сложность росла, а дальше -- наоборот.
#665 #529270
>>529268

Это просто ты лучше стал знать JS
#666 #529275
Мало того, что это теперь верстка-тред, так это теперь еще и изучения английского тред?
#667 #529304
>>524236
оп, так можно на аяксе это запилить вместо айфрейма
#668 #529316
>>529238

> Но если вам нравятся видео/аудиокурсы, почему вы смотрите сделанные непонятно кем, а не например видеолекции от разработчиков компаний вроде Яндекса?


Но это не видеокурс. Там стоит мужик и что-то непонятное рассказывает, я даже не всегда догоняю о чем. В нормальном видеокурсе как от Lynda двигают по экрану все, печатают код, тут же показывают что изменилось и акцентируют внимание на элементах, показывают полезные определения или подсказки. Получается наглядно и понятно, хотя бы что-то в голове остается.
2890 Кб, Webm
#669 #529321
>>529316
я пришел спеть тебе
189 Кб, 500x250
#670 #529329
#671 #529494
>>529200
Спасибо большое, аноним. Это то, что мне было нужно.

Если кому-то интересно, решение:

SELECT avg(price) AS 'одна общая средняя цена'
FROM (
SELECT price
FROM pc p
JOIN product pr ON p.model=pr.model
WHERE maker='A'
UNION ALL
SELECT price
FROM laptop l
JOIN product pr ON l.model=pr.model
WHERE maker='A'
) a


>>529255
И тебе спасибо, хоть ты и поздновато ответил. Я понимаю, что бегу вперёд поезда, но на то есть причины.
http://maketi.esy.es/ Кун с макетом. #672 #529587
>>528524

Все-таки решил уже дошаманить этот макет.

>Кстати, давай тебе как сообразительному, дадим дополнительное задание: сделай чтобы при переключении категорий портфолио каринки менялись не скачком, а с анимацией (можно использовать как transition так и animation, на выбор). Изучи какие есть способы и возможности и выбери какой-нибудь.



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

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


>> Начал переделывать, все развалилось.


>Значит придется взять отладчик и разобраться, почему. Что это за верстальщик, у которого магия творится в коде? Магии не должно быть. Я тебе сразу говорю, что вырывать флоат (img) из блока (a) это гиблое дело так как в блоке не остается содержимого (он становится нулевой высоты) и он позиционируется черт знает как. Надо сделать флоатами именно внешний блок у картинки, тег <a>, а саму картинку сделать например блоком чтобы убрать лишние отступы снизу.



Флоаты с img перенес на ссылки.
Проверь, пожалуйста, ОП, как я сделал именно анимацию лично я минут 5 сидел туда-сюда переключал кнопки и на анимацию смотрел и не начудил ли чего с переносом флоатов.
Остальное все после этого буду делать.
#673 #529609
>>529587

А шрифты когда будут? Я бы с этого начал.

Анимация неплохая, но есть один нехороший момент: если мы переходим от graphic к illustration то высота страницы прыгает: сначала уменьшается, потом увеличивается. Реально ли это обойти? Если нельзя это просто решить, то ладно.

Кстати что мне нравится что если инспектором менять классы на портфолио то все обновляется само.

И анимация выглядит интереснее, если классы расположить не по 4 а более хаотично.
#674 #529619
>>529609

>А шрифты когда будут? Я бы с этого начал.


Сделаю обязательно в ближайшее время.

>Анимация неплохая, но есть один нехороший момент: если мы переходим от graphic к illustration то высота страницы прыгает: сначала уменьшается, потом увеличивается. Реально ли это обойти? Если нельзя это просто решить, то ладно.


Как-то нужно заставить блок ссылки развернуться сразу на 100% а картинка в нем чтобы плавно 1 секунду вырастала. Пока поковырялся, не смог сделать. Может попозже мысль придет.
И на самом деле это мне в глаза неочень бросается, а вот что не нравится так это когда переключаешь с ALL на ILLUSTRATION или MOTION. Там видно что вначале 4я работа не влезает и она вылезает на вторую строчку а потом резко встает на место. И уж вот это я понятия не имею как исправлять и можно ли вообще, оставив такую анимацию.
#675 #529621

> И на самом деле это мне в глаза неочень бросается, а вот что не нравится так это когда переключаешь с ALL на ILLUSTRATION или MOTION. Там видно что вначале 4я работа не влезает и она вылезает на вторую строчку а потом резко встает на место. И уж вот это я понятия не имею как исправлять и можно ли вообще, оставив такую анимацию.


Яваскрптом, сделав абс. позиционирование блоков, транзишен для top/left и скриптом вычислять новые позиции блоков при переключении как тут (там впрочем тоже не идеально):

http://vestride.github.io/Shuffle/

> Как-то нужно заставить блок ссылки развернуться сразу на 100% а картинка в нем чтобы плавно 1 секунду вырастала. Пока поковырялся, не смог сделать.


Можно менять размер картинки с помощью transform: scale который не меняет занимаемое место в раскладке, но тогда высота будет прыгать скачками, а не плавно. Наверно, не стоит.
#676 #529623
>>529619

Кстати, интересно, что в ФФ при перезагрузке страницы положение переключателя сохраняетя. А в Хроме вроде нет.
#677 #529624
>>529621
Я яваскрипты еще не начинал. Хотел после CSS начать.
#678 #529626
>>529624

Ну я просто пишу как такое делается, делать это не надо.
#679 #529671
Случайно нашел, смотрите какие китайцы невнимательные: http://www.csagency.com.cn/c:/
#680 #529675
>>529671

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

Мораль: нечего пользоваться порезанным софтом. Качайте только официальный софт, а не левые сборки.
#681 #529790
Реквестирую человеческий задачник по массивам. Меня просто трисёт от абстрактных формулировок.
#682 #529795
>>529671

>config.sys


>autoexec.bat


Проиграно. Давно я их не видел.
#683 #529807
Оп, хочу запилить простенький интернет-магазин. Не на фреймворке. Я его сделаю, и в дальнейшем он мне пригодится. Он должен быть очень легковесным, аж в пределах 1-2мб, включая js плагины для админки и картинки.

Нужна следующие функции:
Разделение на страницы и собственно на сам интернет магазин. Как собственно в любых cms бывает. Страницы под статьи, где могут быть категории и подкатегории.

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

В целом ничего нестандартного и сложного с виду. Оп, с чего начать?

Будет конфиг.php например, где будут заданы данные от базы, а также все функции вывода и статей, категорий, товаров и тд, а в index.php запилю шаблонизатор, который case 'page'; выводит определенный товар, а case 'product_list';, то другую, а также передавать в шаблон необходимые переменные.

А в main.html, я буду выводить этот шаблон. Любой хтмл там написанный будет выводиться на всех страницах, а если я начну писать условия <?php if($cat = 'page') echo $item['text']; ?>, то будет выводиться определенный раздел в нужной мне форме. Что-то типа того.

Оп, что скажешь? Как выше расписал - написать просто, но это же не правильный подход? Нужно ООП, разделение? Оп, с чего начать? Хочу без фреймворка, он будет лишнее место занимать. Мне нужно, что бы был только необходимый функционал, а остальное я мог добавить, когда будет нужно.
#684 #529810
>>529248
memrise.com - там фишка в повторении же, 50 новых слов в день уже считается много, я делаю review 5-6 раз в день, но это кому как. Кстати, по моим наблюдениям сервис не эффективен для запоминания предлогов, местоимений и слов которые похожи между собой и имеют более 5 значений, а вот всякие take, give, keep.. на ура.
#685 #529811
Оп прокомментируй.
https://github.com/Integer64/myTestSite.dev/tree/master/CatMouse
Нужна не большая подсказка. Не могу логически выстроить поведение кошки. Скорей всего придется переписывать ... опять.
#686 #529813
Кстати, у меня возникла идея сделать словарик для anki на основе документации slim. Прошерстить ее на незнакомые слова(для меня это 98% всего текста) и заучить перед тем как дойдут руки до этого фреймворка.
Курс валют #687 #529814
Поясните, как узнать курс по отношению к другой валюте.

Вот курс в 2007-м был 26,1481$ или 34,5390€, но это по отношению к рублю. А как использовать эти данные, чтобы узнать, за сколько покупали казахи доллары и евро, когда известно, что тогда 100 тенге стоили 21,0008 рублей?

не хватает оперативки
#688 #529817
>>529814
А ты курс тенге доллар можешь посмотреть за 2007 год?
Не много не понимаю условия задачи
#689 #529818
>>529817
Нет, есть только эти данные.
http://ideone.com/x4QQYj
#690 #529820
>>529814
Узнай, сколько тенге нужно было отдать за 34 рубля.
100 тен. = 21 руб.
Х тен. = 34 руб.
Помнишь, что перемножать и на что делить?
#691 #529821
>>529820
А дальше? Извини за детский вопрос. Мне не хватает оперативники понять, что делать.
#692 #529826
>>529807
Бери Magento и не еби мозг.
#693 #529832
>>529807
Шаблонизатор не в index.php, а в отдельном .phtml файле лежать должен, причем лучше в отдельной папке. В index.php только контроллер лежит, который вызывает модель из model.php или еще откуда, там вся бизнес логика и возврат переменных в контроллер, контроллер потом их в view класс сует, который потом шаблон просто через include ставитс. Оп выше ссылку кидал, как правильно делать:
http://www.phpinfo.su/articles/practice/shablony_v_php.html
Про MVC еще читани.
#694 #529834
>>529821
>>529820
Я всё понял. Спасибо.
#695 #529836
>>529834
А я как раз код дописал.
Что у тебя получилось?
#696 #529837
>>529814
21.0008/100 = 0.21008 курс тенге к рублю
теперь чтобы посчитать любую сумму в рублях в тенге, просто надо поделить сумму на курс тенге
26.1481 / 0.21008 = 124,467346 тенге к доллару
34,5390 / 0.21008 = 164,4088 тенге к евро
#697 #529925
ОП, читнул твой мануал по ActiveRecord, не понял вот это:
https://gist.github.com/codedokode/c4cbc4d7dc8e45ea074a

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



Зачем там этот метод, т.е. как он используется? Представить что-то не смог. Чтобы запрос составить, просто же метод save() или getNews() какой-нибудь пишут, где уже готовый запрос.
#698 #529934
Что лучше Mysql, PostgreSQL или Firebird?
#699 #529935
>>529925

В ActiveRecord обычно запросы INSERT/UPDATE не пишут руками, а генерируют автоматически. То есть в базовом классе есть универсальный метод save(или update/insert) который работает для всех наследников и может сохранить любую из сущностей в БД. Ну к примеру к нас есть классы

class Post extends ActiveRecordBase { ... }
class User extends ActiveRecordBase { ... }
class Comment extends ActiveRecordBase { ... }

И у них нет своей реализации save(), они используют метод базового класса ActiveRecordBase#save.

Для того чтобы сгенерировать запрос INSERT или UPDATE мы должны знать как минимум список полей (а также их типы если мы хотим например при сохранении автоматически преобразовывать объекты DateTime в строку с датой в формате БД).

Также базовый класс должен знать имя таблицы.

Взять список полей можно 2 способами:

— определить функцию или поле, которую переопределит класс-потомок и которая вернет этот список:

class User extends ActiveRecordBase {

public $name;
public $surname;
public $email;

public funtion getFields() {
return ['name', 'surname', 'email'];
}
...
}

— взять список из базы данных (запросом типа DESC table ) и сопоставить его со списком полей в классе. Эти метаданные часто еще кешируют чтобы не делать такие запросы каждый раз.

В Yii исплоьзуется первый вариант. В ZF вроде бы использовался второй.

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

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

Я думаю, что тебе стоит посмотреть на конкретные реализации ActiveRecord.

Вот первая попавшаяся мне библиотека:

https://github.com/jpfuentes2/php-activerecord

Вот в ней базовый класс модели: https://github.com/jpfuentes2/php-activerecord/blob/master/lib/Model.php

Вот метод insert: https://github.com/jpfuentes2/php-activerecord/blob/master/lib/Model.php#L800

Он сам не генерирует запрос вставки, а использует экзепляр класса Table: https://github.com/jpfuentes2/php-activerecord/blob/master/lib/Table.php#L351

имя таблицы в нем вычисляется по имени класса-наследника вот этой функцией: https://github.com/jpfuentes2/php-activerecord/blob/master/lib/Table.php#L462

Список полей берется из информации о таблице в базе.

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

Имей в виду что AR проще в реализации чем DataMapper, но имеет архитектурные недостатки вроде смешивания кода модели и кода работы с БД. А datamapper позволяет модели ничего не знать о базе данных и мапить любые объекты на любые таблицы.

Если захочешь изучить Data Mapper, придется изучать доктрину 2. Она конечно сложная, но очень продвинутая.
#699 #529935
>>529925

В ActiveRecord обычно запросы INSERT/UPDATE не пишут руками, а генерируют автоматически. То есть в базовом классе есть универсальный метод save(или update/insert) который работает для всех наследников и может сохранить любую из сущностей в БД. Ну к примеру к нас есть классы

class Post extends ActiveRecordBase { ... }
class User extends ActiveRecordBase { ... }
class Comment extends ActiveRecordBase { ... }

И у них нет своей реализации save(), они используют метод базового класса ActiveRecordBase#save.

Для того чтобы сгенерировать запрос INSERT или UPDATE мы должны знать как минимум список полей (а также их типы если мы хотим например при сохранении автоматически преобразовывать объекты DateTime в строку с датой в формате БД).

Также базовый класс должен знать имя таблицы.

Взять список полей можно 2 способами:

— определить функцию или поле, которую переопределит класс-потомок и которая вернет этот список:

class User extends ActiveRecordBase {

public $name;
public $surname;
public $email;

public funtion getFields() {
return ['name', 'surname', 'email'];
}
...
}

— взять список из базы данных (запросом типа DESC table ) и сопоставить его со списком полей в классе. Эти метаданные часто еще кешируют чтобы не делать такие запросы каждый раз.

В Yii исплоьзуется первый вариант. В ZF вроде бы использовался второй.

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

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

Я думаю, что тебе стоит посмотреть на конкретные реализации ActiveRecord.

Вот первая попавшаяся мне библиотека:

https://github.com/jpfuentes2/php-activerecord

Вот в ней базовый класс модели: https://github.com/jpfuentes2/php-activerecord/blob/master/lib/Model.php

Вот метод insert: https://github.com/jpfuentes2/php-activerecord/blob/master/lib/Model.php#L800

Он сам не генерирует запрос вставки, а использует экзепляр класса Table: https://github.com/jpfuentes2/php-activerecord/blob/master/lib/Table.php#L351

имя таблицы в нем вычисляется по имени класса-наследника вот этой функцией: https://github.com/jpfuentes2/php-activerecord/blob/master/lib/Table.php#L462

Список полей берется из информации о таблице в базе.

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

Имей в виду что AR проще в реализации чем DataMapper, но имеет архитектурные недостатки вроде смешивания кода модели и кода работы с БД. А datamapper позволяет модели ничего не знать о базе данных и мапить любые объекты на любые таблицы.

Если захочешь изучить Data Mapper, придется изучать доктрину 2. Она конечно сложная, но очень продвинутая.
#700 #529936
>>529934

Firebird по моему встраиваемая (в приложение) база данных, а postgres и mysql многопользовательские клиент-сервеные. Их сравнивать некорректно. Кстати из встраиваемых сейчас гораздо популярнее открытая база sqlite, она используется в афйфонах, хроме и скайпе.
#701 #529937
>>529936
https://en.wikipedia.org/wiki/Firebird_(database_server)
Вроде бы не только встраиваемая, серваки там под все операционки есть. Просто в одном туториале рекомендовали присмотреться к Postgres и Firebird как альтернативам Mysql, вот и интересно стало.
#702 #529940
Про static в мануале читал, гуглил, не разобрался.
https://ideone.com/eJbXlm
Подскажите, пожалуйста, почему работает 20-я строка и правильное ли объяснение 17-й неработающей строки?
#703 #529941
http://habrahabr.ru/post/259627/
Даже здесь написано, что "можно". Но почему - не написали. Это дебри, в которые лучше не лезть? >>529940
#704 #529942
>>529790

А в учебнике из оп поста не смотрел урок по массивам и урок «Повторим»? там вроде во всех задачах массивы используются. Почитал бы и если что непонятно, спросил бы тут.

Ну а от себя скажу что у массива в PHP есть 2 основных применения (в других языках для каждого назначения есть своя структура, например в JS это массивы и словари, а в PHP решили их объединить):

— список чего-то, например список оценок за четверть:

$marks = [3, 4, 5, 5, 5, 2, 3];

Или список сданных и несданных экзаменов:

$passed = ['физика', 'литература'];
$notPassed = ['математика'];

— карта/словарь, задающая соответствие между 2 величинами. Например предмет и средняя оценка по нему:

$score = [
'математика' => 4,
'физика' => 5
];

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

$user = [
'name' => 'Иван',
'email' => 'ivan@example.com'
];

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

Для работы с массивами в PHP есть множество функций, про некоторые из них написано в моем учебнике, остальные в мануале:

http://php.net/manual/ru/ref.array.php
http://php.net/manual/ru/language.types.array.php
#704 #529942
>>529790

А в учебнике из оп поста не смотрел урок по массивам и урок «Повторим»? там вроде во всех задачах массивы используются. Почитал бы и если что непонятно, спросил бы тут.

Ну а от себя скажу что у массива в PHP есть 2 основных применения (в других языках для каждого назначения есть своя структура, например в JS это массивы и словари, а в PHP решили их объединить):

— список чего-то, например список оценок за четверть:

$marks = [3, 4, 5, 5, 5, 2, 3];

Или список сданных и несданных экзаменов:

$passed = ['физика', 'литература'];
$notPassed = ['математика'];

— карта/словарь, задающая соответствие между 2 величинами. Например предмет и средняя оценка по нему:

$score = [
'математика' => 4,
'физика' => 5
];

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

$user = [
'name' => 'Иван',
'email' => 'ivan@example.com'
];

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

Для работы с массивами в PHP есть множество функций, про некоторые из них написано в моем учебнике, остальные в мануале:

http://php.net/manual/ru/ref.array.php
http://php.net/manual/ru/language.types.array.php
#705 #529943
>>529940
Это называется позднее статическое связывание http://habrahabr.ru/post/23066/
#706 #529944
>>529943
Это я, получается, не дочитал до самого нужного, лол. Спасибо за ответ.
#708 #529951
>>529807

> Он должен быть очень легковесным, аж в пределах 1-2мб


Почему?

> Оп, с чего начать?


C того, почему тебе нужен именно самописный магазин? Я вижу только 2 сценария когда он нужен:

1) маленький магазин всего с несколькими товарами, для которого не подходя большие CMS и для которого мы хотим сделать красивый уникальный дизайн. Например ты делаешь какие-нибудь крутые хендмейд вещи и вид стандартных CMS с рядами картинок и фильтрами слева тебя не устраивает.

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

2) в качестве тестового задания. В этом случае скорее всего фрейморки использовать нельзя, пользоваться подсказками нельзя и тебе придется делать его без нас.

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

Во всех остальных случаях нет никакого смысла писать что-то с нуля когда есть десятки CMS. Цель интернет- магазина — продавать товар и приносить прибыль, а не служить местом для реализации извращенных желаний разработчика. Жизнь не такая длинная чтобы тратить ее на велосипеды.

Какой у тебя слуачай?

> Оп, с чего начать?


С выбора готовой CMS или фреймворка.

> Будет конфиг.php например, где будут заданы данные от базы, а также все функции вывода и статей, категорий, товаров и тд, а в index.php запилю шаблонизатор


Боюсь тебе с такими представлениями рано писать магазины. Посмотри мое задание на список студентов (оно без фреймворка и весит меньше мегабайта) и посмотри сколько там всего надо знать: https://github.com/codedokode/pasta/blob/master/student-list.md

Интернет-магазин раз в 5 сложнее (это самый простой). И его надо писать на фрейморке.

> Нужно ООП, разделение?


Нужно

> Оп, с чего начать?


С изучения ООП и решения задачи про список студентов. Или изучения какой-нибудь CMS. Тебе еще рано писать магазины.

> Мне нужно, что бы был только необходимый функционал, а остальное я мог добавить, когда будет нужно.


Проще взять блоьшую CMS и отключить лишнее.

Я прекрасно знаю. что ты хочешь сделать. Ты не хочешь учиться, а хочешь написать адский велосипед с нечитаемым кодом и забросить его так и не доделав. Не вижу смысла поддерживать это начинание.
#708 #529951
>>529807

> Он должен быть очень легковесным, аж в пределах 1-2мб


Почему?

> Оп, с чего начать?


C того, почему тебе нужен именно самописный магазин? Я вижу только 2 сценария когда он нужен:

1) маленький магазин всего с несколькими товарами, для которого не подходя большие CMS и для которого мы хотим сделать красивый уникальный дизайн. Например ты делаешь какие-нибудь крутые хендмейд вещи и вид стандартных CMS с рядами картинок и фильтрами слева тебя не устраивает.

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

2) в качестве тестового задания. В этом случае скорее всего фрейморки использовать нельзя, пользоваться подсказками нельзя и тебе придется делать его без нас.

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

Во всех остальных случаях нет никакого смысла писать что-то с нуля когда есть десятки CMS. Цель интернет- магазина — продавать товар и приносить прибыль, а не служить местом для реализации извращенных желаний разработчика. Жизнь не такая длинная чтобы тратить ее на велосипеды.

Какой у тебя слуачай?

> Оп, с чего начать?


С выбора готовой CMS или фреймворка.

> Будет конфиг.php например, где будут заданы данные от базы, а также все функции вывода и статей, категорий, товаров и тд, а в index.php запилю шаблонизатор


Боюсь тебе с такими представлениями рано писать магазины. Посмотри мое задание на список студентов (оно без фреймворка и весит меньше мегабайта) и посмотри сколько там всего надо знать: https://github.com/codedokode/pasta/blob/master/student-list.md

Интернет-магазин раз в 5 сложнее (это самый простой). И его надо писать на фрейморке.

> Нужно ООП, разделение?


Нужно

> Оп, с чего начать?


С изучения ООП и решения задачи про список студентов. Или изучения какой-нибудь CMS. Тебе еще рано писать магазины.

> Мне нужно, что бы был только необходимый функционал, а остальное я мог добавить, когда будет нужно.


Проще взять блоьшую CMS и отключить лишнее.

Я прекрасно знаю. что ты хочешь сделать. Ты не хочешь учиться, а хочешь написать адский велосипед с нечитаемым кодом и забросить его так и не доделав. Не вижу смысла поддерживать это начинание.
#709 #529953
>>529950
Обосрался и подправил номинал. Теперь всё правильно.
#710 #529955
>>529811

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

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

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

Заметь что этот же алгоритм подход и мыши, только надо поменять функцию оценки.

Что скажешь?
#711 #529958
>>529811

Сама формула оценки может быть примерно такой:

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

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

Дополнительно можно учитывать (делая небольшую попраку к числу балллов):

— наличие собаки рядом
— наличие других кошек (они могут състь мышей раньше нас)

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

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

Аналогичный алгоритм, с взвешиванием всех вариантов ходов можно написать например для игры в крестики-нолики, блекджек или шашки — хотя играть он сможет только против очень слабого игрока (из-за отстуствия памяти). преимущество алгоритма — простота и скорость работы.
#712 #529963
>>529813

Попробуй. Тут кто-то предлагал сделать перевод документации по Слиму.

>>529814

Можно попробовать написать формулы и вывести через них. Ну например если R это число рублей, а D число долларов то их можносвязать формулой

R = D × 26,1481

А из нее можно вывести обратную формулу:

D = R / 26,1481

Теперь имея форулы для R и D мы можем подставлять их в другие формулы и получить формулу перевода любой валюты в любую. Ну например переведем доллары в евро. Формула для евро это

E = R × 34,5390

Поставим сюда вместо R выражение D × 26,1481 из формул выше и получим:

E = ( D × 26,1481 ) × 34,5390

Вот мы и получили формулу перевода долларов в евро.

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

>>529937

Никогда ее не исплоьзовал и не слышал где используют. В википедии написано:

> Это коммерчески независимый проект C и C++ программистов, технических советников и разработчиков мультиплатформенных систем управления базами данных, основанный на исходном коде, выпущенном корпорацией Borland 25 июля 2000 года в виде свободной версии Interbase 6.0.



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

>>529940

> правильное ли объяснение 17-й неработающей строки? Да



> $obj->staticMethod(); //а это почему-то зработало


Это потому что разработчики делавшие ООП в PHP сами толком в нем не разбираются и наломали там дров. Разумеется в правильном ООП нельзя (и нет смысла) вызывать статические методы как обычные, это просто странность PHP. Я не советую так писать так как возникает вопрос, почему ты не хочешь вызвать метод как положено, через двоеточие и все ли с тобой в порядке.

>>529941

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

>>529943

Нет, неверно, позднее статическое связывание это когда мы пишем

static::someMethod() вместо self::someMethod()

мануал: http://php.net/manual/ru/language.oop5.late-static-bindings.php

Я от себя замечу что эта идея тоже не очень здоровая и лучше не переопределять статические методы вообще, тем более в праивльном ООп они не часто используются. Если ты хочешь переопределять методы в потомке то сделай их нестатическими и не путай людей.
#712 #529963
>>529813

Попробуй. Тут кто-то предлагал сделать перевод документации по Слиму.

>>529814

Можно попробовать написать формулы и вывести через них. Ну например если R это число рублей, а D число долларов то их можносвязать формулой

R = D × 26,1481

А из нее можно вывести обратную формулу:

D = R / 26,1481

Теперь имея форулы для R и D мы можем подставлять их в другие формулы и получить формулу перевода любой валюты в любую. Ну например переведем доллары в евро. Формула для евро это

E = R × 34,5390

Поставим сюда вместо R выражение D × 26,1481 из формул выше и получим:

E = ( D × 26,1481 ) × 34,5390

Вот мы и получили формулу перевода долларов в евро.

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

>>529937

Никогда ее не исплоьзовал и не слышал где используют. В википедии написано:

> Это коммерчески независимый проект C и C++ программистов, технических советников и разработчиков мультиплатформенных систем управления базами данных, основанный на исходном коде, выпущенном корпорацией Borland 25 июля 2000 года в виде свободной версии Interbase 6.0.



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

>>529940

> правильное ли объяснение 17-й неработающей строки? Да



> $obj->staticMethod(); //а это почему-то зработало


Это потому что разработчики делавшие ООП в PHP сами толком в нем не разбираются и наломали там дров. Разумеется в правильном ООП нельзя (и нет смысла) вызывать статические методы как обычные, это просто странность PHP. Я не советую так писать так как возникает вопрос, почему ты не хочешь вызвать метод как положено, через двоеточие и все ли с тобой в порядке.

>>529941

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

>>529943

Нет, неверно, позднее статическое связывание это когда мы пишем

static::someMethod() вместо self::someMethod()

мануал: http://php.net/manual/ru/language.oop5.late-static-bindings.php

Я от себя замечу что эта идея тоже не очень здоровая и лучше не переопределять статические методы вообще, тем более в праивльном ООп они не часто используются. Если ты хочешь переопределять методы в потомке то сделай их нестатическими и не путай людей.
#713 #529964
>>529950

〒 это же символ японской почты!

Кстати тогда можно было и вместо USD/EUR использоват их символы. Хотя не, не стоит, как потом код править.
#714 #529969
>>529963

>Разумеется в правильном ООП нельзя (и нет смысла) вызывать статические методы как обычные, это просто странность PHP.


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

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


Так и буду, благодарю ещё раз.
#715 #529970
>>529969

Но на собеседовании тебя будут все равно спрашивать про позднее статическое связывание, имей в виду.
#716 #529991
>>529963

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


http://www.itexto.net/devkico/?p=398
Вот нашел наконец описание внятное. Пишут что вполне современная, по производительности между Mysql и Postgres, но документация плохая и никто ее не продвигает из крупных фирм, поэтому популярность низкая.
Большой плюс, что можно нахаляву в коммерческих проектах юзать и экономить по 40к долларов на заказах. С PHP нельзя в pdo юзать, т.к. реализация pdo ее в PHP вся забагована, поэтому вся работа только через ibase_ (аналог mysqli_). В конце 2015 выходит версия 3 с новой архитектурой.
#717 #530097
>>529951

> Почему?


Чем меньше вес, тем лучше, нет? Если это на качество не влияет.

> Какой у тебя слуачай?


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

> Посмотри мое задание на список студентов


Окей, выполню это задание сначала.
#718 #530099
test
#719 #530115
>>530097

Лучше не меньший общий вес а меньший вес написанного лично тобой кода. Понимаешь разницу?
#720 #530201
ТруОП давал годную статью по древовидным коментам.

Может кто опять кинуть?
#722 #530308
>>530227
Да, большой респект тебе
#723 #530370
https://github.com/blackberryJam/abiturients
Абитуриенты. Допилил.
#724 #530460
>>529969
>>529970
>>529991
>>530097
>>530099
>>530115
>>530201
>>530227
>>530308
>>530370
Хули вы под шконкой зашкерились, петухи что ли?
#725 #530535
Оставляйте почту, кого заинтересовало.

Надо сделать основу сайта по металлообработке бесплатно с постоянными последующими доработками. Сайт должен работать по принципу интернет банка, т.е. общая информация для всех. Работа, обсуждение заказов, сам заказ делается на закрытой странице. От вас умение делать такие сайты, постепенно дорабатывая под мои запросы уже за деньги. Сайт визитка не интересует! От вас примеры сайта, разрисовывать не нужно! Достаточно предоставить ваши потенциал. Например сайт пустая страница, в любом месте кнопка. Нажимаем на кнопку, входим без регистрации, видим картинку, рядом список из трех пользователей. Пользователей 3 шт. 1, 2 и 3. У каждого свой вход на сайт. Любой из трех заходит, видит картинку, пишет в неком месте свою стоимость. Далее заходит другая тройка пользователей, загружает фото и видит цену за это фото. Рядом трех первых юзеров и их цены, наводят мышку на юзеров и видят информацию о них, пусть будут любые буквы. Нажимаем на юзеров и развернутую информацию о них на отдельной странице. Нажимает кнопку заказать. Думаю для начала достаточно.
#726 #530538
>>530535

>Надо сделать основу сайта по металлообработке бесплатно

#727 #530554
<?php
class A {
private function foo() {
echo __CLASS__ . " class ! <br>";
}
public function test() {
$this->foo();
}

}

class B extends A {
}

class C extends A {
public function foo() {
\techo __CLASS__ . ' !<br>';
}
}

$b = new B();
$b->test();
$c = new C();
$c->test();

Чому так получается, если в этом коде в классе A поставить private foo(), то печатается A class! 2 раза, а если поставить public foo(), то печатается A class! C class!
#728 #530557
>>530535

>Например сайт пустая страница


Такое могу бесплатно сделать.

>в любом месте кнопка


Тебе чудится. Нет там кнопки, это же сайт пустая страница.
#729 #530561
>>530535

>Пользователей 3 шт. 1, 2 и 3.


Можно в MySQL их в ENUM хранить.
#730 #530578
>>530535
Вот ты какой, русский фриланс!
#731 #530582
>>530535

>Пользователей 3 шт. 1, 2 и 3


>У каждого свой вход на сайт


>Далее заходит другая тройка пользователей


На сайт только группами по 3 пускают?
#732 #530762
Аноны, не заню, правда или нет, но смотрите какие зарплаты предлагаются Москве (возможна удаленка): http://careers.stackoverflow.com/jobs/93540/front-end-architect-100k-crossover?utm_source=stackoverflow.com&utm_medium=ad&utm_campaign=large-sidebar-blue-looking

> Salary: 50 USD/hr



Странно правда что в названии написано Crossover а в тексте другое название

> Join DevFactory and you’ll be given



Кому интересно, можете требования почитать. Всего то HTML/CSS/JS.

>>530554

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

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

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

Так как foo приватный то конструкция в методе test:

$this->foo();

может пониматься только одним образом: «вызвать метод foo класса A» (а не «поискать метод с именем foo в текущем классе и его предках»). От того что ты в наследнике добавил (не переопределил!) метод foo ничего не меняется.

Таким образом в первом случае у тебя 2 метода: приватный foo{A} и публичный foo{C}. Во втором у тебя один метод foo{A}, который переопределен в классе C.

Я посмотрел, в яве то же самое: http://stackoverflow.com/questions/10623913/can-i-override-a-private-method-in-java

И еще раз напомню, код пищется для человека. Использовать такие трюки в реальном коде недопустимо. Кстати, мне пришлось гуглить чтобы ответить на вопрос. Если бы ты спросил что выведет данный код, я бы мог ошибиться (и увы, такие вопросы любят на собеседованиях и из-за этого у людей создается ощущение что ООп это что-то сложное хотя это всего лишь концепция хранения свойств сущностей и методов для работы с ними в одном объекте).
#732 #530762
Аноны, не заню, правда или нет, но смотрите какие зарплаты предлагаются Москве (возможна удаленка): http://careers.stackoverflow.com/jobs/93540/front-end-architect-100k-crossover?utm_source=stackoverflow.com&utm_medium=ad&utm_campaign=large-sidebar-blue-looking

> Salary: 50 USD/hr



Странно правда что в названии написано Crossover а в тексте другое название

> Join DevFactory and you’ll be given



Кому интересно, можете требования почитать. Всего то HTML/CSS/JS.

>>530554

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

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

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

Так как foo приватный то конструкция в методе test:

$this->foo();

может пониматься только одним образом: «вызвать метод foo класса A» (а не «поискать метод с именем foo в текущем классе и его предках»). От того что ты в наследнике добавил (не переопределил!) метод foo ничего не меняется.

Таким образом в первом случае у тебя 2 метода: приватный foo{A} и публичный foo{C}. Во втором у тебя один метод foo{A}, который переопределен в классе C.

Я посмотрел, в яве то же самое: http://stackoverflow.com/questions/10623913/can-i-override-a-private-method-in-java

И еще раз напомню, код пищется для человека. Использовать такие трюки в реальном коде недопустимо. Кстати, мне пришлось гуглить чтобы ответить на вопрос. Если бы ты спросил что выведет данный код, я бы мог ошибиться (и увы, такие вопросы любят на собеседованиях и из-за этого у людей создается ощущение что ООп это что-то сложное хотя это всего лишь концепция хранения свойств сущностей и методов для работы с ними в одном объекте).
30 Кб, 493x266
#733 #530890
Смотрите, какое интересное интерфейсное решение (реддит заставляет прежде чем задать вопрос, сделать поиск по уже заданным).
#734 #530903
>>530762

>Приватный метод — это метод который принадлежит и видим только одному классу


Спасибо, понятно. Видимо лучше вместо $this->foo() в классах с наследованием писать self::foo() или static::foo(), чтобы было однозначно и не запутаться потом с областями видимости.
#735 #530918
>>530762
Все правильно там, Crossover шарага по найму, ищет народ для DevFactory в Техасе, которая сама дочка https://en.wikipedia.org/wiki/Trilogy_(company)
Судя по объяве, им вообще американец на удаленку нужен и не в Москве.
#736 #530944
Что такое CQRS? Послал резюме на фирму, там пишут у них все на CQRS построено. Как это выглядит на практике?
#737 #530955
>>530762
Требования читал, клоун?
Skills & Requirements

Qualifications for this Opportunity

A successful Front End Architect at DevFactory will demonstrate the following qualifications:

At least 6 years of hands-on experience working with front-end web development of custom web content (This should be custom HTML/CSS and animations, NOT Wordpress, CMS based, or template based work)

At least 4 years of hands-on experience working with data backed front-end web applications (REST, Soap, etc)

At least 4 years of front-end experience where you were the one responsible for architecture decisions

You should be familiar with the tried and true JS best practices / frameworks, as well as recent developments in web development tools. You should be having an opinion on when the use of these tools is necessary, and pushing for their adoption.

Good working knowledge of back-end web development. You should have an opinion about what a good UX focused API is, and push back on non-optimal APIs

While not proficient in use, at least a working knowledge of the various types of databases, and what they should be used for (Think TDD, NoSQL (MongoDB or Cassandra), Relational DBs (MSSQL, MySQL, Oracle ), SOA, EDA, etc)

Excellent understanding of current enterprise software technologies and development practices/tools, including virtual environments, source control, remote development, issue tracking, build and test automation, and networking management

Ability to engage sophisticated global customers in deep technical discussions, making them confident that you know their problem better than they do

Bachelor’s Degree or above in Computer Science or related field

Excellent communication skills (in English)

Proficiency in the following skills and technologies is mandatory:

HTML5, CSS2/3 (including animations), JQuery

Deep knowledge in at least 1 MV* JS Framework (Angular, BackendJS, Ember, etc)

Deep knowledge in at least 1 Responsive Framework (Bootstrap, Toast, Less)

Knowledge in Sass and at least 1 Framework built on it (Compass, Bourbon, Susy)
#737 #530955
>>530762
Требования читал, клоун?
Skills & Requirements

Qualifications for this Opportunity

A successful Front End Architect at DevFactory will demonstrate the following qualifications:

At least 6 years of hands-on experience working with front-end web development of custom web content (This should be custom HTML/CSS and animations, NOT Wordpress, CMS based, or template based work)

At least 4 years of hands-on experience working with data backed front-end web applications (REST, Soap, etc)

At least 4 years of front-end experience where you were the one responsible for architecture decisions

You should be familiar with the tried and true JS best practices / frameworks, as well as recent developments in web development tools. You should be having an opinion on when the use of these tools is necessary, and pushing for their adoption.

Good working knowledge of back-end web development. You should have an opinion about what a good UX focused API is, and push back on non-optimal APIs

While not proficient in use, at least a working knowledge of the various types of databases, and what they should be used for (Think TDD, NoSQL (MongoDB or Cassandra), Relational DBs (MSSQL, MySQL, Oracle ), SOA, EDA, etc)

Excellent understanding of current enterprise software technologies and development practices/tools, including virtual environments, source control, remote development, issue tracking, build and test automation, and networking management

Ability to engage sophisticated global customers in deep technical discussions, making them confident that you know their problem better than they do

Bachelor’s Degree or above in Computer Science or related field

Excellent communication skills (in English)

Proficiency in the following skills and technologies is mandatory:

HTML5, CSS2/3 (including animations), JQuery

Deep knowledge in at least 1 MV* JS Framework (Angular, BackendJS, Ember, etc)

Deep knowledge in at least 1 Responsive Framework (Bootstrap, Toast, Less)

Knowledge in Sass and at least 1 Framework built on it (Compass, Bourbon, Susy)
#738 #530958
>>529807

>Будет конфиг.php например, где будут заданы данные от базы, а также все функции вывода и статей, категорий, товаров и тд, а в index.php запилю шаблонизатор


кекнул
someApprentice #739 #531055
А это официальный php-тред? ОПчик ты не обижаешься, что я забросил писать в твой тред?
#740 #531076
>>531055

>А это официальный php-тред?


Ага.
#741 #531116
>>530903

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

>>530918

Зачем тогда Москва указана? Мне кажется это америнкацев только отпугнет и она указана именно для россиян.

>>530944

Первый раз слышу так что могу посоветовать только Google: http://www.google.ru/search?aq=f&sourceid=chrome&ie=UTF-8&q=%D1%81%D0%B9%D0%BA%D1%8B#newwindow=1&q=cqrs

Вот тут напимер подробная, хоть и малопонятная статья: http://blog.byndyu.ru/2014/07/command-and-query-responsibility.html

Вот тут еще статья, там есть важный момент: http://habrahabr.ru/post/146429/

> Первое что бросается в глаза это то что у вас уже две модели данных, одна для чтения (Queries), одна для записи (Commands). И обычно это значит что у вас еще и две базы данных. И так как мы используем CQRS + Event Sourcing, то write-база (write-модель) — это Event Store, что-то вроде лога всех действий пользователя (на самом деле не всех, а только тех которые важны с точки зрения бизнес-модели и влияют на построение read-базы). А read-база — это в общем случае денормализировнное хранилище тех данных, которые вам нужны для отображения пользователю.



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

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

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

>>530955

ЧТо ты сказкть-то хотел?

>>531055

Пока официальный. Нет, не обижаюсь, с чего бы? У нас все аноны рано или поздно уходят дальше своей дорогой.
#741 #531116
>>530903

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

>>530918

Зачем тогда Москва указана? Мне кажется это америнкацев только отпугнет и она указана именно для россиян.

>>530944

Первый раз слышу так что могу посоветовать только Google: http://www.google.ru/search?aq=f&sourceid=chrome&ie=UTF-8&q=%D1%81%D0%B9%D0%BA%D1%8B#newwindow=1&q=cqrs

Вот тут напимер подробная, хоть и малопонятная статья: http://blog.byndyu.ru/2014/07/command-and-query-responsibility.html

Вот тут еще статья, там есть важный момент: http://habrahabr.ru/post/146429/

> Первое что бросается в глаза это то что у вас уже две модели данных, одна для чтения (Queries), одна для записи (Commands). И обычно это значит что у вас еще и две базы данных. И так как мы используем CQRS + Event Sourcing, то write-база (write-модель) — это Event Store, что-то вроде лога всех действий пользователя (на самом деле не всех, а только тех которые важны с точки зрения бизнес-модели и влияют на построение read-базы). А read-база — это в общем случае денормализировнное хранилище тех данных, которые вам нужны для отображения пользователю.



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

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

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

>>530955

ЧТо ты сказкть-то хотел?

>>531055

Пока официальный. Нет, не обижаюсь, с чего бы? У нас все аноны рано или поздно уходят дальше своей дорогой.
#742 #531139
>>531116

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


Тогда я продолжу писать. Прошлый раз забросил работать над кодом с кошками-мышками, потому что я ни как не мог понять много вещей. Сейчас я пробежался по коду и вспомнил что именно это было. Скоро я вылажу тот старый код и задам вопросы которые мне непонятны.
#743 #531162
>>531139
Ждем с нетерпением.
#744 #531169
Как не нарушать принципы SOLID при разработке? Есть какой-нибудь туториал?
Второе задание по JS #745 #531214
Почему задания для JS такие ебанутые????
Как решить второе задание. Перечитал уже все что можно
function take(fn, count) {
var arr = [];
var x = count;
for (int i = 0; i<x; i++){
arr=fn;

}
return arr;
}
#746 #531238
>>531214
А блять.

>int


это я лох
#747 #531255
>>531214

Ты учебник learn.javascript.ru читал? В частности, работу с массивами? Без чтения теории, а по аналогии или переставляя слова наугад, ты задачи не решишь.

Что например это значит?

arr = fn ;

?
#748 #531333
ОП, придумай пожалуйста какое-то задание на изучение фреймворка.
Я где-то неделю ковырял YII, более менее ориентируюсь, какие там классы.
Но с этими твоими хелловорлдными заданиями я до сих пор не представляю, как выглядит реальный сайт.
Что можно придумать сделать попроще? Ну блог с регистрацией и комментариями, идет в демках в комплекте с фреймворком. Что еще?
Все, я больше даже не знаю, какой вообще может быть функционал.

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

Ну в общем придумай какой-то квест, чтобы можно было попрактиковаться.
#749 #531337
>>531333
А из ОП поста тебе чем не нравятся задания?
- Простая, но полезная задача сделать список студентов: https://github.com/codedokode/pasta/blob/master/student-list.md
- Более сложная задача сделать файлообменник на микрофреймворке Slim: https://gist.github.com/codedokode/9424217
- Еще более сложная и долгая задача на Yii/Yii2: https://gist.github.com/codedokode/8733007
#750 #531338
>>531337
Первые две сделал. Третья сулит трехмесячное задротство, у меня нет времени и желания.
Нет, нужно что-то простое, тупо набить руку, чтобы с уверенностью можно было сказать, что я знаю фреймворк.
Что мне теперь, дублировать файлообменник на yii? А вообще не помешало бы, да. Я например еще не разобрался, как там происходит загрузка файлов. Кажется, нужно тянуть какое-то расширение.

Какие вообще бывают виды функционала на сайте?
1. Поиск.
2. Регистрация / аутентификация.
3. Пагинация.
4. Загрузка файла.
5. Комментарии.
???
Дополни список, ты жопытный.
Я буду считать что знаю фреймворк, когда смогу реализовать на нем все виды функционала.
У меня крыша походу едет, перечитываю свои посты, какой-то даунский стиль и тон. Вот до чего доводят двачи и недопсыание.
#751 #531358
Читаю мануал php. Подобный код имеет право на жизнь в реальных проектах?

><?php if ($expression == true): ?>


><p>Это будет отображено, если выражение истинно.</p>


><?php else: ?>


><p>В ином случае будет отображено это.</p>


><?php endif; ?>

#752 #531359
>>531358
Это специальный код для шаблонов же. Читай http://www.phpinfo.su/articles/practice/shablony_v_php.html
#753 #531360
>>531359
Спасибо. Так и подумал, но показалось что это нарушает принципы MVC. Очевидно, я не шарю, а автор там упомянул про таких

>Так получилось, что огромная программистская общественность в буквальном смысле слова не поняла посыл неизвестного автора — отделять PHP от HTML не нужно! Нужно отделять логику приложения от логики отображения

#754 #531363
>>531360
В MVC же за вывод отвечает View. Вот это View и есть, точнее шаблон в нужном View подключается.
#755 #531386
Всё вроде хорошо, да только регулярное выражение огромное получилось(хоть и простое). Как в реальности практикуют?

>$regexp = '#\\d-?\\(?\\d{3}\\)?-?\\d{2,3}\\s?-?\\d{2,3}\\s?-?\\d{2,3}\\s?-?$#';



http://ideone.com/4t6fb2

новый-анон
#756 #531389
>>531386
В реальности по 10 цифрам проверка, плюс префикс 8 или +7 спереди. У тебя кстати ^ отсутствует.
#757 #531396
>>531389

>Благодарю.


>У тебя кстати ^ отсутствует.


Пофиксил.
#758 #531402
>>531396
А код где? Если не понял - 10 цифр, между которыми может быть любое количество скобок, пробелов и дефисов. У тебя твоя регулярка ловит непонятные группы разной длины, это совсем другое задание.
#759 #531409
Расскажите про внешний ключ.
Если просто FOREIGN KEY (parent_id) REFERENCES parent(id) без указания ON DELETE CASCADE, то что будет, если удалить строку с ключем в parent таблице?
А если поставить RESTRICT, то что будет?
#760 #531411
>>531409
Еще чем NO ACTION от RESTRICT отличается?
#761 #531420
>>531402
Код
http://ideone.com/4t6fb2
Задание:

>Дан текст, который по идее должен быть номером телефона в виде 8-(911)-506 56 56 (т.е. человек может ввести не только цифры, но и скобки, минусы, может что-то еще). Но в реальности, пользователь может вместо номера написать что угодно. Напиши скрипт для проверки правильности введенного номера («8(911)-506 56 56» — правильный номер, «8-911-50-656-56» — правильный, «89115065656» — праивльный, «02» — неправильный, «89115065656 позвать Люду» — неправильный).



Я сделал регулярку только под данные примеры т.е. не верно?
#762 #531424
>>531420
$goodnumbers = 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');

$badnumbers = 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' // нет +
);

По этим прогони. Если норм, то пойдет. Если нет, пиши по 10 цифрам.
#763 #531432
>>531409

http://denis.in.ua/foreign-keys-in-mysql.htm
https://dev.mysql.com/doc/refman/5.5/en/create-table-foreign-keys.html

> Если просто FOREIGN KEY (parent_id) REFERENCES parent(id) без указания ON DELETE CASCADE, то что будет, если удалить строку с ключем в parent таблице?


Запрет на удаление:

> Specifying RESTRICT (or NO ACTION) is the same as omitting the ON DELETE or ON UPDATE clause.



> А если поставить RESTRICT, то что будет?


Смотри ссылки

> Еще чем NO ACTION от RESTRICT отличается?


Ничем:

> NO ACTION: A keyword from standard SQL. In MySQL, equivalent to RESTRICT.

#764 #531508
ОП, если ты здесь, задачку про вектор проверь пожалуйста.
https://github.com/never3ver/vector
maketi.esy.es #765 #531566
>>528524
>>528525
>>528528
>>528539
>>528556
>>528563
>>528628
>>529587
>>529619
>>529621

Все, ОП, сдаюсь.

>Не забудь про вендорные префиксы -moz- и -webkit- для не совсем новых браузеров


Запомнил это.
transition border-radius и box-sizing теперь с ними.

>> Сделал переставлние блоков на ширине 800 и 400


>Насчет цифры 400, я посмотрел сайт http://mydevice.io/devices/ и вижу что у некоторых телефонов (видимо это «лопаты» с большим экраном) ширина больше 400. Мне кажется вместо 3 версий страницы можно сделать 2, для ширины больше 800 и меньше 800. Или может для ширины больше 1024 и меньше 1024? Если больше то у нас полноценный сайт, если меньше то вертикально сложенный. Таким образом ты облегчишь себе работу.


С табличкой ознакомился, сохранил. Сделал адаптивный дизайн на ширине 720 для мобильных устройств и 480 для переставления работ и блока преимуществ по 1 работе в ряд.

>Надписи «ALL GRAPHIC ILLUSTRATION MOTION» у тебя серые, на макете белые.


Исправил.

>Картинки из портфолио увеличены. Не увеличивай растровые картинки так как они мылятся и теряют качество, сравни то что в браузере и то что в макете. Увеличивать можно например как часть эффекта, если человек не успевает заметить искажения, но в твоем случае видно что картинки некачечтвенные. Вырежи из макета их и отображай в размере 1:1.


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

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


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

>> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />


Слеш в конце тегов не ставится, так же прочитай что она делает, например тут http://xiper.net/manuals/html/meta-tags/http-equiv/x-UA-Compatible или в моем уроке про ИЕ: https://gist.github.com/codedokode/855e3970124687b26a1c

>Если кратко то он просит ИЕ не переходить в режим совместимости с древними браузерами и разрешает использование Chrome Frame (это плагин для ИЕ который использует движок от Chrome для отображения страниц как решение проблемы отображения сайтов в этом браузере).


>> <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />


>Опять же, прочитай описание этого тега (он говорит мобильным устройствам что страница под них адаптирована и им не надо притворяться устройством шириной 1024 пикселя): http://frontender.com.ua/mobile-web/wtf-viewport/


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

>> bottom-dark-gray-block


>> top-dark-gray-block


>> four-pictures-with-text-block


>Вот это плохие названия, так как при смене внешнего вида они могут потерять актуальность. Лучше назвать их по смыслу, например block-features, block-contacts, features-list.


Сменил на смысловые.

>> <a href="#rss" id="rss"></a>


>> <a href="#facebook" id="facebook"></a>


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


Не лишено смысла, сделал и взял на заметку.

>> * {


>> padding: 0px;


>Вот так делать не стоит. Ты ведь этим удаляешь паддинги по умолчанию, которые есть у разных тегов, вроде списков или ячеек таблиц или инпутов. И соответственно ты потом должен их вернуть назад, чтобы текст с этими тегами корректно отображался (ведь на сайте будут и другие страницы, возможно с текстом который добавляют редакторы а не программисты). Но какой смысл сбрасывать стили чтобы вернуть их потом обратно? Логичнее убирать паддинг только там, где тебе надо, а не везде. Это аналог CSS reset и это в общем плохая штука. Не используй селектор «звездочка», не удаляй лишние стили.


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

>> .light-gray-block {


>> display:inline-block;


>Зачем это? Имей в виду , что ответ «подобрал опытным путем» не годится. Либо объясняй, либо удаляй.


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

>> &#8194; &#8194; &#8194;


>используй margin-right


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

>> .social-icons {


>> height: 30px;


>> width: 170px;


>Это еще зачем? Пусть вычисляется автоматически.


Там же только фон, исчисляться нечему.

>> #rss:hover, #facebook:hover, #twitter:hover, #pink-boll:hover, #p:hover {


>Лучше .social-icons > a - меньше переписывать придется при добавлении новых иконок.


Сделал.

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


>о! там написано про ссылки на карты, сделай-ка адрес тоже ссылкой


Телефон скликабельным сделал. Протестировал с мобильного, все работает.
А вот с картой я не знал какой адрес нужно указать, Там ведь Юпитер указан. Сделал ссылку на поиск той улицы. Ну главное, если дать адрес, я пойму как его прикрутить.

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

А вот шрифты так и не осилил. До сих пор не понимаю что там нужно загружать на font-squirrel, какие критерии выставлять. Все как-то сложно. Да и на английском, а я его не понимаю.
Единственное что сделал это переименовал корневую папку font в fonts как и должно быть, возможно это поможет.

Вообще ОП я в бэкэнд изначально хотел как и сейчас хочу, даже уже начинал когда-то твой учебник по php, правда совсем недолго около двух недель всего изучал, недалеко даже ушел, только до регулярных выражений. Но понял тогда, что хочу все с самых основ начать изучать, так как в программировании вообще ничего не смыслил, вот и пошел по курсу HTML\CSS. Я не говорю, что фронтенд это плохо, он мне даже понравился, но наверное это не мое, не осилю. Да и знакомый мой говорит, что для бэкенда мне полученных знаний уже достаточно и что я сейчас просто на месте стою, а мог бы уже и дальше продвигаться. Может действительно уже хватит и стоит идти дальше, а не ковырять этот макет?
maketi.esy.es #765 #531566
>>528524
>>528525
>>528528
>>528539
>>528556
>>528563
>>528628
>>529587
>>529619
>>529621

Все, ОП, сдаюсь.

>Не забудь про вендорные префиксы -moz- и -webkit- для не совсем новых браузеров


Запомнил это.
transition border-radius и box-sizing теперь с ними.

>> Сделал переставлние блоков на ширине 800 и 400


>Насчет цифры 400, я посмотрел сайт http://mydevice.io/devices/ и вижу что у некоторых телефонов (видимо это «лопаты» с большим экраном) ширина больше 400. Мне кажется вместо 3 версий страницы можно сделать 2, для ширины больше 800 и меньше 800. Или может для ширины больше 1024 и меньше 1024? Если больше то у нас полноценный сайт, если меньше то вертикально сложенный. Таким образом ты облегчишь себе работу.


С табличкой ознакомился, сохранил. Сделал адаптивный дизайн на ширине 720 для мобильных устройств и 480 для переставления работ и блока преимуществ по 1 работе в ряд.

>Надписи «ALL GRAPHIC ILLUSTRATION MOTION» у тебя серые, на макете белые.


Исправил.

>Картинки из портфолио увеличены. Не увеличивай растровые картинки так как они мылятся и теряют качество, сравни то что в браузере и то что в макете. Увеличивать можно например как часть эффекта, если человек не успевает заметить искажения, но в твоем случае видно что картинки некачечтвенные. Вырежи из макета их и отображай в размере 1:1.


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

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


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

>> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />


Слеш в конце тегов не ставится, так же прочитай что она делает, например тут http://xiper.net/manuals/html/meta-tags/http-equiv/x-UA-Compatible или в моем уроке про ИЕ: https://gist.github.com/codedokode/855e3970124687b26a1c

>Если кратко то он просит ИЕ не переходить в режим совместимости с древними браузерами и разрешает использование Chrome Frame (это плагин для ИЕ который использует движок от Chrome для отображения страниц как решение проблемы отображения сайтов в этом браузере).


>> <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />


>Опять же, прочитай описание этого тега (он говорит мобильным устройствам что страница под них адаптирована и им не надо притворяться устройством шириной 1024 пикселя): http://frontender.com.ua/mobile-web/wtf-viewport/


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

>> bottom-dark-gray-block


>> top-dark-gray-block


>> four-pictures-with-text-block


>Вот это плохие названия, так как при смене внешнего вида они могут потерять актуальность. Лучше назвать их по смыслу, например block-features, block-contacts, features-list.


Сменил на смысловые.

>> <a href="#rss" id="rss"></a>


>> <a href="#facebook" id="facebook"></a>


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


Не лишено смысла, сделал и взял на заметку.

>> * {


>> padding: 0px;


>Вот так делать не стоит. Ты ведь этим удаляешь паддинги по умолчанию, которые есть у разных тегов, вроде списков или ячеек таблиц или инпутов. И соответственно ты потом должен их вернуть назад, чтобы текст с этими тегами корректно отображался (ведь на сайте будут и другие страницы, возможно с текстом который добавляют редакторы а не программисты). Но какой смысл сбрасывать стили чтобы вернуть их потом обратно? Логичнее убирать паддинг только там, где тебе надо, а не везде. Это аналог CSS reset и это в общем плохая штука. Не используй селектор «звездочка», не удаляй лишние стили.


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

>> .light-gray-block {


>> display:inline-block;


>Зачем это? Имей в виду , что ответ «подобрал опытным путем» не годится. Либо объясняй, либо удаляй.


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

>> &#8194; &#8194; &#8194;


>используй margin-right


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

>> .social-icons {


>> height: 30px;


>> width: 170px;


>Это еще зачем? Пусть вычисляется автоматически.


Там же только фон, исчисляться нечему.

>> #rss:hover, #facebook:hover, #twitter:hover, #pink-boll:hover, #p:hover {


>Лучше .social-icons > a - меньше переписывать придется при добавлении новых иконок.


Сделал.

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


>о! там написано про ссылки на карты, сделай-ка адрес тоже ссылкой


Телефон скликабельным сделал. Протестировал с мобильного, все работает.
А вот с картой я не знал какой адрес нужно указать, Там ведь Юпитер указан. Сделал ссылку на поиск той улицы. Ну главное, если дать адрес, я пойму как его прикрутить.

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

А вот шрифты так и не осилил. До сих пор не понимаю что там нужно загружать на font-squirrel, какие критерии выставлять. Все как-то сложно. Да и на английском, а я его не понимаю.
Единственное что сделал это переименовал корневую папку font в fonts как и должно быть, возможно это поможет.

Вообще ОП я в бэкэнд изначально хотел как и сейчас хочу, даже уже начинал когда-то твой учебник по php, правда совсем недолго около двух недель всего изучал, недалеко даже ушел, только до регулярных выражений. Но понял тогда, что хочу все с самых основ начать изучать, так как в программировании вообще ничего не смыслил, вот и пошел по курсу HTML\CSS. Я не говорю, что фронтенд это плохо, он мне даже понравился, но наверное это не мое, не осилю. Да и знакомый мой говорит, что для бэкенда мне полученных знаний уже достаточно и что я сейчас просто на месте стою, а мог бы уже и дальше продвигаться. Может действительно уже хватит и стоит идти дальше, а не ковырять этот макет?
#766 #531680
https://github.com/MindiMakridi/RESTFUL задачка на превьюшки.
#767 #531740
http://ideone.com/VRVd8d

Как преобразовать эти строки в массив?
#768 #531752
>>531566

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



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

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

Потому предлагаю все же собраться с силами и решить проблему. Может быть, удобнее сначала подключить шрифты не к макету, а просто сделать HTMl файл с одним заголовком и абзацем текста и потренироваться на нем. И вместо 8 начертаний использовать только одно. И не конвертировать файл в разные форматы, а использовать тот, что у тебя есть (ttf).

Начни с теории. В CSS есть правило @font-face, которое указывает браузеру где надо брать шрифт с данными именем если его нет на компьютере. В нем ты указываешь имя шрифта (которое используется в другиъх местах CSS), его начертание (жирность/курсивность) и ссылку на скачивание с указанием формата файла.

http://htmlbook.ru/blog/svoi-shrift-na-stranitse
http://xiper.net/collect/html-and-css-tricks/typographics/font-face-non-standart-fonts-on-css

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

Когда ты с этим разберешься, надо разобраться как конвертировать шрифт в разные форматы и как указать ссылки на них в CSS коде. Конвертирует файлы font squirrel, и есть статьи про это:

http://htmlbook.ru/blog/vstraivaem-shrifty-pri-pomoshchi-font-squirrel-font-fac

Он же генериурет CSS код с правилами @font-face, но его возможно придется править.

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

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

Есть конечно еще вариант подключать шрифт через Google Fonts но это слишком просто и неинтересно. Это не поможет тебе разобраться как работают кастомные шрифты и потому не подойдет для нашего задания.

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

> Может действительно уже хватит и стоит идти дальше, а не ковырять этот макет?


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

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

> До сих пор не понимаю что там нужно загружать на font-squirrel, какие критерии выставлять. Все как-то сложно. Да и на английском, а я его не понимаю.


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

- жмешь Upload fonts, выбираешь файлы шрифтов
- жмешь галочку что ты не нарушаешь лицензии: Yes, the fonts I'm uploading are legally eligible for web embedding.
- из вариантов выбираешь Optimal (она уже выбрана)
- жмешь Download и получаешь архив с сконвертированными файлами шрифтов и CSS кодом, который надо чуть подправить и добавить на сайт. А также в архиве лежит HTML файл на котором можно увидеть работает ли шрифт.

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

Также, там есть вариант «Expert» который предлагает больше опций и который гораздо интереснее. Раз ты не знаешь ангийский, опишу какие там есть опции:

— Font Formats: какие форматы файлов генерировать

— Truetype Hinting: откуда брать информацию для хинтинга (хинтинг это выравнивание шрифта относительно границ пикселей на экране на маленьких размерах, чтобы шрифт смотрелся более четко, а не размыто, вики:https://ru.wikipedia.org/wiki/%D0%A5%D0%B8%D0%BD%D1%82%D0%B8%D0%BD%D0%B3 ). FontSquirrel позволяет либо оставить информацию для хинтинга, взятую из шрифта, либо сгенерировать ее автоматически (я сильно сомневаюсь что в этом есть польза так как хинтинг в хороших шрифтах делают люди на глаз. Например многие стандартные шрифты из Windows содержат информацию для хинтинга).

— Rendering: дополнительные опции
— Fix Vertical Metrics не знаю, как это работает
— Fix GASP Table не знаю что это
— Remove Kerning удалить из шрифта информацию для кернинга. Кернинг это индивидуально задаваемое дизайнером расстояние между отдельными парами букв. Ну например дизайнеру шрифта может показаться что определенные буквы должны быть ближе или дальше друг от друга. Это помогает тексту выглядеть более читаемо и красиво. опять же, в хороших шрифтах эта информация есть. Вырезать ее имеет смысл только если это какой-то некачественный шрифт где эта информация неточная. Вики: https://ru.wikipedia.org/wiki/%D0%9A%D0%B5%D1%80%D0%BD%D0%B8%D0%BD%D0%B3

— Fix Missing Glyphs: добавить в шрифт автоматически сгенерированные символы пробела и дефиса если их там нет. Наверно это нужно для исправления некачественных шрифтов

— X-height Matching: изменить метрики шрифта чтобы он выглядел крупнее или мельче при данном размере. Скорее всего нужно для исправления некачественных шрифтов.

— Protection: добавить в шрифт пометку о запрете использования не на веб-страницах

— Subsetting: вырезать из шрифта часть символов для уменьшения веса
— Western languages — оставить только символы латинницы
— Custom Subsetting.. — указать диапазон символов явно
— No Subsetting — не трогать ничего

— OpenType Features позволяет удалять из шрифта информацию о лигатурах, альтернативные начертания того же символа и другие open type фичи. Что это за фичи, ты можешь увидеть на картинках тут: http://ilovetypography.com/OpenType/opentype-features.html

Лигатуры это более тесный вариант написания 2 или более букв: https://ru.wikipedia.org/wiki/%D0%9B%D0%B8%D0%B3%D0%B0%D1%82%D1%83%D1%80%D0%B0_(%D1%81%D0%BE%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B1%D1%83%D0%BA%D0%B2)

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

— OpenType Flattening что-то аналогичное

— CSS: опции для генерации CSS кода

— Advanced Options: Em Square Value, Adjust Glyph Spacing — настройки для исправления кривых шрифтов.

Что-то тут получился довольно тяжелый для понимания текст. Ну что поделать, типографика это отдельная наука. Тебе все равно из всех этих опций не надо ничего менять, разве что Subsetting (удаление лишних символов из шрифта) и то в твоем макете это можно не делать.
#768 #531752
>>531566

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



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

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

Потому предлагаю все же собраться с силами и решить проблему. Может быть, удобнее сначала подключить шрифты не к макету, а просто сделать HTMl файл с одним заголовком и абзацем текста и потренироваться на нем. И вместо 8 начертаний использовать только одно. И не конвертировать файл в разные форматы, а использовать тот, что у тебя есть (ttf).

Начни с теории. В CSS есть правило @font-face, которое указывает браузеру где надо брать шрифт с данными именем если его нет на компьютере. В нем ты указываешь имя шрифта (которое используется в другиъх местах CSS), его начертание (жирность/курсивность) и ссылку на скачивание с указанием формата файла.

http://htmlbook.ru/blog/svoi-shrift-na-stranitse
http://xiper.net/collect/html-and-css-tricks/typographics/font-face-non-standart-fonts-on-css

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

Когда ты с этим разберешься, надо разобраться как конвертировать шрифт в разные форматы и как указать ссылки на них в CSS коде. Конвертирует файлы font squirrel, и есть статьи про это:

http://htmlbook.ru/blog/vstraivaem-shrifty-pri-pomoshchi-font-squirrel-font-fac

Он же генериурет CSS код с правилами @font-face, но его возможно придется править.

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

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

Есть конечно еще вариант подключать шрифт через Google Fonts но это слишком просто и неинтересно. Это не поможет тебе разобраться как работают кастомные шрифты и потому не подойдет для нашего задания.

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

> Может действительно уже хватит и стоит идти дальше, а не ковырять этот макет?


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

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

> До сих пор не понимаю что там нужно загружать на font-squirrel, какие критерии выставлять. Все как-то сложно. Да и на английском, а я его не понимаю.


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

- жмешь Upload fonts, выбираешь файлы шрифтов
- жмешь галочку что ты не нарушаешь лицензии: Yes, the fonts I'm uploading are legally eligible for web embedding.
- из вариантов выбираешь Optimal (она уже выбрана)
- жмешь Download и получаешь архив с сконвертированными файлами шрифтов и CSS кодом, который надо чуть подправить и добавить на сайт. А также в архиве лежит HTML файл на котором можно увидеть работает ли шрифт.

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

Также, там есть вариант «Expert» который предлагает больше опций и который гораздо интереснее. Раз ты не знаешь ангийский, опишу какие там есть опции:

— Font Formats: какие форматы файлов генерировать

— Truetype Hinting: откуда брать информацию для хинтинга (хинтинг это выравнивание шрифта относительно границ пикселей на экране на маленьких размерах, чтобы шрифт смотрелся более четко, а не размыто, вики:https://ru.wikipedia.org/wiki/%D0%A5%D0%B8%D0%BD%D1%82%D0%B8%D0%BD%D0%B3 ). FontSquirrel позволяет либо оставить информацию для хинтинга, взятую из шрифта, либо сгенерировать ее автоматически (я сильно сомневаюсь что в этом есть польза так как хинтинг в хороших шрифтах делают люди на глаз. Например многие стандартные шрифты из Windows содержат информацию для хинтинга).

— Rendering: дополнительные опции
— Fix Vertical Metrics не знаю, как это работает
— Fix GASP Table не знаю что это
— Remove Kerning удалить из шрифта информацию для кернинга. Кернинг это индивидуально задаваемое дизайнером расстояние между отдельными парами букв. Ну например дизайнеру шрифта может показаться что определенные буквы должны быть ближе или дальше друг от друга. Это помогает тексту выглядеть более читаемо и красиво. опять же, в хороших шрифтах эта информация есть. Вырезать ее имеет смысл только если это какой-то некачественный шрифт где эта информация неточная. Вики: https://ru.wikipedia.org/wiki/%D0%9A%D0%B5%D1%80%D0%BD%D0%B8%D0%BD%D0%B3

— Fix Missing Glyphs: добавить в шрифт автоматически сгенерированные символы пробела и дефиса если их там нет. Наверно это нужно для исправления некачественных шрифтов

— X-height Matching: изменить метрики шрифта чтобы он выглядел крупнее или мельче при данном размере. Скорее всего нужно для исправления некачественных шрифтов.

— Protection: добавить в шрифт пометку о запрете использования не на веб-страницах

— Subsetting: вырезать из шрифта часть символов для уменьшения веса
— Western languages — оставить только символы латинницы
— Custom Subsetting.. — указать диапазон символов явно
— No Subsetting — не трогать ничего

— OpenType Features позволяет удалять из шрифта информацию о лигатурах, альтернативные начертания того же символа и другие open type фичи. Что это за фичи, ты можешь увидеть на картинках тут: http://ilovetypography.com/OpenType/opentype-features.html

Лигатуры это более тесный вариант написания 2 или более букв: https://ru.wikipedia.org/wiki/%D0%9B%D0%B8%D0%B3%D0%B0%D1%82%D1%83%D1%80%D0%B0_(%D1%81%D0%BE%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B1%D1%83%D0%BA%D0%B2)

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

— OpenType Flattening что-то аналогичное

— CSS: опции для генерации CSS кода

— Advanced Options: Em Square Value, Adjust Glyph Spacing — настройки для исправления кривых шрифтов.

Что-то тут получился довольно тяжелый для понимания текст. Ну что поделать, типографика это отдельная наука. Тебе все равно из всех этих опций не надо ничего менять, разве что Subsetting (удаление лишних символов из шрифта) и то в твоем макете это можно не делать.
#769 #531761
>>531752
Ты понимаешь, что ты поехавший максималист, или ты не понимаешь этого?
Зачем ты грузишь нубов до посинения?
Да, нужно знать много. Но это требуется от разраба с over пятилетним стажем, который претендует на соответствующую зарплату.
Я понимаю, что тебя заебала "конвеерная" работа, но для джуна-стажера который в жизни не написал ни одного проекта кроме твоего всратого файлообменника полгода-год такой рутинной работы не то что не помешают, даже необходимы чтобы твердо и уверенно стоять на ногах и ориентироваться в охулиарде технологий со всеми их нюансами.
#770 #531773
>>531761

>Ты понимаешь, что ты поехавший максималист, или ты не понимаешь этого?


Это моя любимая черта в ОПе. ОП, ипошь в том же стиле.
#771 #531774
>>531752
Да, ОП, ты в очередной раз прав. Я закончу все это. Опять какие-то отмазки детские себе придумал.
Сегодня уже не успеваю, но завтра точно весь день потрачу, но сделаю. Сайт создать и на нем результат показать успехи тоже не проблема.
И да, спасибо большое за подробное разъяснение, теперь все более-менее понятно стало, осталось статьи прочитать. А то я даже и не знал где информацию брать.

>>531761
А как еще учить если не загружать? По верхам прыгать? Все ОП правильно сказал, надо разбираться а не на полпути бросать.
#772 #531775
>>531752

>Насчет PHP, почему бы и нет, ты можешь параллельно его изучать или после того как разберешься с макетом.



PHP я бы в последнюю очередь хотел начать изучать. Имея уже знания в остальном. По крайней мере планировал после HTML/CSS приступить к Яваскриптам. И спросить какие темы мне там нужно затронуть, а то ведь это полноценный язык. Не изучать же его весть? Или изучать?
#773 #531777
>>531775

>Не изучать же его весь?


хехе
#774 #531778
>>531740

Вообще, для работы с XML есть несколько расширений:

— DOM
— SimpleXML (работает поверх дома, так что придется изучить его)
— XMLReader/XMLWriter (для потокового чтения/записи гигантских файлов)

Также, есть язык XPath для поиска узло в дереве DOM.

Соответственно ответ на твой вопрос, научиться работать с XML и использовать DOM или SimpleXML.

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

>>531386

Смотри внизу:

> PHP Notice: Undefined offset: 0 in /home/uXGGcK/prog.php on line 30



Это ошибка. ты обращаешься к элементу с индексом 0 которого нет в массиве.

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

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

>>531338

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

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

> Что мне теперь, дублировать файлообменник на yii?


Юи слишком большой для такого просто сайта.

В Юи много всего, например:

— работа с Бд и ActiveRecord
— миграции
— связи (отношения) в БД
— права/роли (RBAC)
— админка
— виджеты (например виджет таблицы с сортировкой и поиском)
— расширения

> Я буду считать что знаю фреймворк, когда смогу реализовать на нем все виды функционала.


Предлагаю тогда начать с чтения мануал где этот функционал описан: https://github.com/yiisoft/yii2/tree/master/docs/guide-ru
#774 #531778
>>531740

Вообще, для работы с XML есть несколько расширений:

— DOM
— SimpleXML (работает поверх дома, так что придется изучить его)
— XMLReader/XMLWriter (для потокового чтения/записи гигантских файлов)

Также, есть язык XPath для поиска узло в дереве DOM.

Соответственно ответ на твой вопрос, научиться работать с XML и использовать DOM или SimpleXML.

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

>>531386

Смотри внизу:

> PHP Notice: Undefined offset: 0 in /home/uXGGcK/prog.php on line 30



Это ошибка. ты обращаешься к элементу с индексом 0 которого нет в массиве.

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

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

>>531338

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

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

> Что мне теперь, дублировать файлообменник на yii?


Юи слишком большой для такого просто сайта.

В Юи много всего, например:

— работа с Бд и ActiveRecord
— миграции
— связи (отношения) в БД
— права/роли (RBAC)
— админка
— виджеты (например виджет таблицы с сортировкой и поиском)
— расширения

> Я буду считать что знаю фреймворк, когда смогу реализовать на нем все виды функционала.


Предлагаю тогда начать с чтения мануал где этот функционал описан: https://github.com/yiisoft/yii2/tree/master/docs/guide-ru
#775 #531780
>>531333

Если хочешь простое с виду задание, но с подвохом, как насчет сделать клон ютуба? Функционал: загрузка видео, просмотр видео, комментирование, поиск видео по названию, админка модерации роликов и комментариев, статистика. Регистрация не нужна, дизайн в стиле черный текст на белом фоне, структура аналогична существующему сайту. Необходимо также сделать очередь задач на основе Gearman или аналогичной библиотеки для конвертации видео в фоновом режиме в нужные форматы. Конвертирвать можно с помощью ffmpeg, он кроссплатформенный вроде бы. Очередь должна быть организована качественно, с обработкой и логгированием ошибок и таймаутами.

Если ты не знаком с командной строкой, с тем что такое процесс, стандартный поток вывода, код возврата, сигнал, то тебе предстоит изучить много нового.
#776 #531781
>>531780

Хотя конечо тут Юи выглядит лишним звеном. Мне все же кажется задание на TestHub лучше.
#777 #531783
>>531774

>А как еще учить если не загружать?


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

Впрочем дело ваше конечно. Если есть время месяцами заниматься хелловордлами, то почему бы и нет.
#778 #531787
>>531775

> PHP я бы в последнюю очередь хотел начать изучать.


Давай я тебе зависимости напишу, чтобы ты мог выстроить карту:

Чистый PHP + ООП (весь мой учебник): не требует предв. знаний
HTML/CSS: не требует знаний
JS: не требует предв. знаний
SQL: не требует знаний
Написание простых приложений на PHP (Задача на студентов): PHP, HTML/CSS, SQL
Написание простых приложений 2 (файлообменник): PHP, HTML/CSS, SQL, JS, DOM
DOM: надо знать JS, HTML/CSS
jQuery: надо знать DOM

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

По JS есть отличный сайт learn.javascript.ru и есть задачи на JS в шапке треда.
#779 #531794
>>531761

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

Почитай программу любого западного вуза по Computer Science. Все задания из нашего треда уместятся в одно полугодие курса «Веб программирование». Все что мы тут изучаем. И причем это будет где-то на первом-втором курсе, чисто для разминки, потому что дальше идет совсем другой уровень знаний.

Но зато эти выпускники потом идут в топовые стартапы, делают свои стартапы и тд. И Билл Гейтс, и Цукерберг учились по подобным программам. А у нас люди только ноют как им трудно жить, и мы имеем то что имеем.

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

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

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


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

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

>>531783

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

Более того, во многих странах рынок разработки ориентирован на аутсорсинг на западных заказчиков. В таких компаниях хорошие условия труда, но требования к кандидатам выше чем в нашем треде. Со знаниями уровня провинциальной вебстудии тебя даже на собеседование не позовут.
#779 #531794
>>531761

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

Почитай программу любого западного вуза по Computer Science. Все задания из нашего треда уместятся в одно полугодие курса «Веб программирование». Все что мы тут изучаем. И причем это будет где-то на первом-втором курсе, чисто для разминки, потому что дальше идет совсем другой уровень знаний.

Но зато эти выпускники потом идут в топовые стартапы, делают свои стартапы и тд. И Билл Гейтс, и Цукерберг учились по подобным программам. А у нас люди только ноют как им трудно жить, и мы имеем то что имеем.

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

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

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


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

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

>>531783

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

Более того, во многих странах рынок разработки ориентирован на аутсорсинг на западных заказчиков. В таких компаниях хорошие условия труда, но требования к кандидатам выше чем в нашем треде. Со знаниями уровня провинциальной вебстудии тебя даже на собеседование не позовут.
#780 #531797
>>531787

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

>По JS есть отличный сайт learn.javascript.ru и есть задачи на JS в шапке треда.


Помню когда сдал макет в первый раз на проверку и было нечего делать, я спросил по чему мне изучать JS, ты советовал http://learn.javascript.ru/ а аноны что-то другое, где побыстрее курс, но я все-таки по твоей рекомендации пошел. Даже успел пару тем пройти и небольшой скриптик написать. Язык в принципе мне понравился. Не отторгает, думаю так же с удовольствием учить буду. А то помню когда только выбирал что изучать JAVA или PHP, глянул JAVA и уже на первых уроках понял, что это идиотизм какой-то а не язык. Все с самого начала какое-то громоздкое, конструкции непонятные и большие. То ли дело PHP, мне он показался очень легким, интуитивно понятным даже.

И еще, я задам сейчас, наверное, даже еще более нубовский вопрос чем "А сколько я все это примерно буду изучать?". Что такое ООП? Да гугл выдает "Объектно-ориентированное программирование". Но что это? Стиль написания кода? Какие-либо программы? Языки? Что значит изучать ООП? Вообще это понять не могу.
Так же еще непонятно что такое фреймворки. Знаю, что лезу куда-то вперед и что это только предстоит выучить, но все-таки часто здесь вижу эти понятия, а значения не знаю.
#781 #531802
>>531794
Я тебе о том, что информацию нужно давать постепенно, от простого к сложному, а ты мне про дноконторы и быдлокодеров.
Ну и хуй с тобой. Ты же поехавший.
>>531797

>Что такое ООП? Да гугл выдает "Объектно-ориентированное программирование". Но что это?


> что такое фреймворки


Не хочешь порешать задачки с собеседования гугла или яндекса?
#782 #531804
>>531797

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


Тем не менее есть много сфер где PHP не конкурент Яве. Например, банковский или телекомовский софт никто не рискнет писать на PHP, а Ява вполне подходит. Гугл и Яндекс используют Яву. Смартфоны андроид работают на Яве.

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

Может быть он просто не очень подходит в качестве первого языка для начинающего, конечно, яваскрипт, питон или PHP гораздо проще освоить. Но кто знает, потом может тебе захочется и за Яву или C# bkb какой-нибудь Rust взяться.

> Что такое ООП? Да гугл выдает "Объектно-ориентированное программирование". Но что это? Стиль написания кода?


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

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

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

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

ООП нужен для того чтобы большие, сложные программы были разбиты на отдельные кусочки (классы) а не выглядели как огромная куча спутанного кода в которой невозможно разобраться. Так как почти все веб приложения это большие программы то без ООП их писать трудно и неудобно. Запутанный код значит что надо много времени чтобы в нем разобраться и что в нем легко наделать ошибок.
#782 #531804
>>531797

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


Тем не менее есть много сфер где PHP не конкурент Яве. Например, банковский или телекомовский софт никто не рискнет писать на PHP, а Ява вполне подходит. Гугл и Яндекс используют Яву. Смартфоны андроид работают на Яве.

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

Может быть он просто не очень подходит в качестве первого языка для начинающего, конечно, яваскрипт, питон или PHP гораздо проще освоить. Но кто знает, потом может тебе захочется и за Яву или C# bkb какой-нибудь Rust взяться.

> Что такое ООП? Да гугл выдает "Объектно-ориентированное программирование". Но что это? Стиль написания кода?


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

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

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

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

ООП нужен для того чтобы большие, сложные программы были разбиты на отдельные кусочки (классы) а не выглядели как огромная куча спутанного кода в которой невозможно разобраться. Так как почти все веб приложения это большие программы то без ООП их писать трудно и неудобно. Запутанный код значит что надо много времени чтобы в нем разобраться и что в нем легко наделать ошибок.
#783 #531809
>>531802

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

>>531797

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

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

Также если сайт написан на фреймворке то в нем проще разбираться так как часть кода (функции фреймворка) ты уже знаешь. А в самописном коде тебе придется разбирать его весь.
#784 #531810
Аноны, этот тред закрыт, пожалуйста переходите холиварить в новый: >>531765 (OP)

Если я кому-то не ответил или не проверил задачу, напомните о себе в новом треде
263 Кб, 900x900
#785 #531857
Хочу стать бекэнд программистом.
Зачем мне еще учить верстку?
#786 #531859
>>531857

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

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

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

Алсо мы уже в новом треде.
#787 #536430
>>523494 (OP)
Что такое нужно доставть в arch, что бы БЛЕАТЬ появилась библиотека с slqite3? И какого хуя ебаные ментейнеры пишут на своем ебаном сайте в документации что все идет из коробки, если из коробки там >> Fatal error: Class 'SQLite' not found in /srv/http/index.php on line 3
У меня багет с этого
#788 #536433
>>536430
php-sqlite
сам нашел только что, но потратил на это минут 40, настучите кто-нибудь разрабам по башке, что б, ссуки, думали перед тем как писать что то в документации и/или вкидывать/выкидывать что то из ядра.
Совсем охуели.
#789 #542452

>>503607

Тред утонул или удален.
Это копия, сохраненная 14 сентября 2015 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски