[ /b/ /u/ /rf/ /dt/ /vg/ /r/ /cr/ /lor/ /mu/ /oe/ /s/ /w/ /hr/ ] [ /a/ /ma/ /sw/ /hau/ /azu/ ] [ /tv/ /cp/ /gf/ /bo/ /di/ /vn/ /ve/ /wh/ /fur/ /to/ /bg/ /wn/ /slow/ /mad/ ] [ /d/ /news/ ] [ Главная | Настройки | Закладки | Плеер ]

Ответ в тред 23225. [Назад]
 [ Скрыть форму ]
Имя
Не поднимать тред 
Тема
Сообщение
Капча Капча
Пароль
Файл
Вернуться к
  • Публикация сообщения означает согласие с условиями предоставления сервиса
  • В сообщениях можно использовать разметку wakabamark
  • На данной доске отображаются исходные имена файлов!
  • Разрешенные типы файлов: text, video, code, image, pdf, flash, vector, music, archive
  • Тред перестает подниматься после 500 сообщений.
  • Треды с числом ответов более 100 не могут быть удалены.
  • Старые треды перемещаются в архив после 40 страницы.

No.23225 Ответ
Файл: JESUS-php.jpg
Jpg, 67.58 KB, 640×480 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
JESUS-php.jpg
Обыскал всю /s/, не нашёл треда.
Собственно хотелось бы освоить пхп и поднимать на нём лёгкие деньги. Какие создать себе условия с литературой, испытательным полигоном для большего удобства? И сколько времени уйдёт на это у неофита со средним IQ вроде меня? Пока даже не знаю с чего начинать, но буду каждый день или два отписываться о прогрессе.
>> No.23227 Ответ
>>23225
> пхп
> лёгкие деньги
У мальчиков на побегушках не бывает легких денег - адский труд, пот и мозоли.
>> No.23228 Ответ
> Обыскал всю /s/, не нашёл треда
> со средним IQ вроде меня
Но ведь у тебя низкий IQ.

Вот же треды:
>>23209
>>23130
>>23028
>> No.23229 Ответ
>>23225
> Собственно хотелось бы освоить пхп и поднимать на нём лёгкие деньги.
Ты меня раздражаешь. По необъяснимым причинам ты думаешь, что программирование - это лёгкая работа, а все, кто занимается программированием - бездельники, получающие деньги ни за что. На самом деле программирование - один из самых сложных видов деятельности с бешеной конкуренцией. Результат, конечно, весьма поощряет, но не потому, что деятельность проста, а потому, что программисты впахивают по хардкору и к тому же имеют огромный врождённый талант. Сообщения в духе "я дурак, но я освою быдлокодинг за два дня и пойду делать лёгкие деньги" выглядят как "то, чем вы, парни, так гордитесь, на самом деле безумно легко". Вот сейчас ты прочитаешь книжку "быдлокодинг для начинающих", а потом попробуешь устроиться на работу, увидишь реальные требования к программисту и будешь плакать на форумах и бордах от того, что от тебя требуют, по-твоему, слишком многого. Лучше устройся дворником, дворник зарабатывает пятнадцать штук в месяц, а работает по два часа в день.
>> No.23237 Ответ
Файл: php53_hosting_diagram[1].png
Png, 27.30 KB, 366×413 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
php53_hosting_diagram[1].png
>>23229
Я не говорю что кодинг лёгкий, а то что пхп лёгкий в сравнении с другими языками, но возможностей у него достаточно. И по объявлениям смотрю - нужен кодер пхопе, сделать клон сайта и т.д. Слишком много ненависти к этому языку, потому что крутые кодеры учились в вузах, учили Си(я тоже, но меня он просто из*бал, я не крут), а потом появился такой простой язык как пхп, что даже мимопроходящий дизайнер-верстальщик может в него. Как раз по мне, я уже полтора года ничем таким не занимался, работал за 15к по 2 часа в день, отупляет. Может потом перейду на что-то по-тяжелее, если возможности мне понравятся, но пока я не вижу общей картины в этой сфере, начну с того, что называют лёгким, так?
> "быдлокодинг для начинающих"
Читаю http://www.softtime.ru/bookphp/gl1_1.php и записываю нужное.
Думал найти с озона что-нибудь про пхп, но их слишком много изданий-переизданий, не понятно какая из главная.
>>23228
Конечно, не такой высокий как у тебя. Смешно. Один тред мой, нужно перестать плодить треды и успокоиться.
>> No.23238 Ответ
Файл: x_048c8a49.jpg
Jpg, 46.74 KB, 604×453 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
x_048c8a49.jpg
>>23225
> освоить пхп и поднимать на нём лёгкие деньги
> Какие создать себе условия с литературой, испытательным полигоном
   А. Шень, "Программирование: теоремы и задачи."
   Ч. Уэзерелл, "Этюды для программистов."
   А. Ахо, Д. Хопкрофт, Д. Ульман, "Структуры данных и алгоритмы."
   Т. Кормен, Ч. Лейзерсон, Р. Ривест, "Алгоритмы: построение и анализ."
   Д. Кнут, "Искусство программирования."
   Таненбаун все классические труды
   Первый три пункта копипасты про Python очень даже годные для любого из языков программирования, даже для PHP.
   Cоздавай свои проекты, сайты и т.д.
>> No.23239 Ответ
>>23237
> Я не говорю что кодинг лёгкий, а то что пхп лёгкий в сравнении с другими языками, но возможностей у него достаточно
> и далее по тексту
Голословно звучит, учитывая, что ты только учишь его, а из других языков, чтобы сравнивать, ты будто знаешь один лишь C.
>> No.23240 Ответ
>>23238
> Год издания: 1982
Почти как Линуксу.
Я думаю решать заказы бесплатно и очень долго на сайтах фриланса. Но это потом.
>> No.23241 Ответ
>>23240
> 1982
> Почти как Линуксу
Лол, может хватит позориться?
>> No.23242 Ответ
>>23239
> Голословно звучит
Так пишут.
>> No.23244 Ответ
>>23242
Во-первых, ядро линукса появилось в 1991 году, а нормальной десктопной операционной системы на базе этого ядра, по моему мнению, до сих пор нет
Во-вторых, php сложен. Намного сложнее, чем пишут на сайтах "а теперь мы вместе напишем хелловорд".
>> No.23245 Ответ
>>23244
> нормальной десктопной операционной системы на базе этого ядра, по моему мнению, до сих пор нет
а они вообще есть, по-твоему?
>> No.23246 Ответ
>>23245
О чёрт, отстань от меня! Надоели холивары.
>> No.23248 Ответ
>>23244
А у меня генту+кде на десктопе, по-моему норм.
>> No.23260 Ответ
Файл: fistNya.gif
Gif, 295.38 KB, 424×240 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
fistNya.gif
>> No.23279 Ответ
>>23225
Php как язык говно говном, но если обмазываться mvc-фреймворками типа yii или симфони, то жить можно.
>> No.23300 Ответ
Файл: html_logo[1].gif
Gif, 1.53 KB, 270×72 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
html_logo[1].gif
Не хочу создавать новый тред, так что напишу тут. Объясните по хардкору, чому табличная верстка хуже блочной.
>> No.23301 Ответ
>>23300
Фиксированная позиция элементов, криво выглядит (это про табличную).
нуб
>> No.23302 Ответ
Файл: 2cd0ee626a0882c84bebb0976a134543.jpg
Jpg, 529.00 KB, 1000×1000 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
2cd0ee626a0882c84bebb0976a134543.jpg
>>23300
Создатели языка гипертекстовой разметки думали, что таблица - это таблица. То есть, всего лишь "ФИО и номер телефона сотрудников компании", а не целый сайт, но пользователи решили иначе.

Табличный сайт:
1) Хреново индексируется поисковыми машинами, будьте уверены, что пользователей откроет Ваш сайт последним, если откроет.
2) Таблицу сложнее сопровождать нежели блоки.
3) В наше время никто не делает табличные сайты, делайте блоками - это проще и эффективней, к тому же блоки подобны слоям в графическом редакторе, можно ставить значение прозрачности и прочие радости.
>> No.23311 Ответ
>>23225
> Пока даже не знаю с чего начинать
http://php.net/docs.php
Ваш К. О.
>> No.23318 Ответ
>>23302
А насколько эти значения прозрачности кроссбраузерны?
>> No.23321 Ответ
>>23318
Честно говоря, ни в одном из браузеров не видел, чтобы сайты отображались одинаково. Но если ты попробуешь запустить йоба сайтец в IE 6, то думаю тебя ожидает фейл.
>> No.23349 Ответ
>>23300
Обе "верстки" хуже: http://www.flownet.com/ron/css-rant.html

Примеры правильной верстки:

- http://antsp2p.sourceforge.net/
- http://nethack.org/
- http://www.mutt.org/
- http://litcave.rudi.ir/
>> No.23350 Ответ
>>23302
> Табличный сайт:
> 1) Хреново индексируется поисковыми машинами, будьте уверены, что пользователей откроет Ваш сайт последним, если откроет.
Ебаный сеошник.
> 2) Таблицу сложнее сопровождать нежели блоки.
Осиль шаблоны, PHPблядь.
> 3) В наше время никто не делает табличные сайты, делайте блоками
Миллионы мух жрут говно, жрите говно.
> - это проще и эффективней
Хуита.
> к тому же блоки подобны слоям в графическом редакторе, можно ставить значение прозрачности и прочие радости.
Свистелки-перделки.
>> No.23351 Ответ
Файл: b3a32f82d24c69128115f46686246576fb8d3f44.jpg
Jpg, 128.62 KB, 480×640 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
b3a32f82d24c69128115f46686246576fb8d3f44.jpg
>> No.23356 Ответ
>>23349
>>23350
Два луддита, не умеющих в красивый дизайн.
>> No.23357 Ответ
>>23351
> Тем временем http://www.w3schools.com/html5/tag_header.asp
При чем тут это? header — семантический элемент, он вообще не имеет отношение к верстке.
>> No.23358 Ответ
>>23356
Какое отношение красивый/некрасивый дизайн имеет к способу создания раскладки?
>> No.23359 Ответ
>>23356
А вот и третий с половиной.
>> No.23364 Ответ
>>23357
Он работает как див, и его таким образом рикомендуют применять.
>> No.23367 Ответ
Файл: ca11cb5ad158dd1b7e91688b1aae305b.png
Png, 2532.81 KB, 2305×2808 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
ca11cb5ad158dd1b7e91688b1aae305b.png
>>23350
Мой друг, я умею делать только СSS-спрайты, поэтому не понимаю о чём вы говорите. Если Вам не нравится данная информация обращайтесь к моей учительнице информатики.
>> No.24174 Ответ
Файл: tiger.jpg
Jpg, 49.05 KB, 547×363 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
tiger.jpg
Суп, котаны.
Появилась у меня в голове такая шальная мысль: сделать транслятор coffeescript'а в php, но результурующий пых-код будет не простой, а со всеми забокшенными POD'ами, ну почти как в руби.
Мотивейшон: компактный код исходников, везде отступы в 2 пробела (а не тот разбод и шатания что приняты в похэпэ).
За основу наверно возьму https://github.com/alxlit/coffeescript-php и http://pecl.php.net/package/SPL_Types

В общем это будет достаточно по хистоте?
>> No.24179 Ответ
>>24174
Чего?
>> No.24188 Ответ
>>23300
Тем, что используется не по назначению. Таблицы необходимо использовать для таблиц.
>> No.24189 Ответ
>>24174
Зачем упираться в coffeescript для этого?
>> No.24190 Ответ
>>24189
У него синтаксис няшнее чем у пхп.
>> No.24191 Ответ
>>23237
> > Учебник по PHP 4
> PHP 4
> 2012 год
Нашел что читать, лол.
http://manual.php.net
>>23300
Табличные верстка хуже. Об этом сто раз писали. В любой книжке по верстке, по-моему. Потому что несемантично, больше кода и если вставлять таблицы одну в другую будешь - задолбаешься потом все разгребать. Плюс оверхед от табличного рендеринга в браузерах и то как таблицы загружаются, что страница будет съезжать пока все то, что в таблице не загрузится.
Таблицы лучше использовать только для табличных данных.
>> No.24192 Ответ
>>24191
> Табличные верстка хуже. Об этом сто раз писали.
Напиши ещё, что для ускорения работы php-скриптов нужно использовать в echo одинарные кавычки, а не двойные.
>> No.24198 Ответ
>>24192
Не в тему сравнение.
>> No.24201 Ответ
>>24198
В тему. Такая же фраза-индикатор.
>> No.24202 Ответ
>>24192
Не, ну конечно это экономия на спичках, однако я всегда названия ключей (и все прочие ситуации, не требующие интерполяции или конкатенации) пишу с одинарными, привычка уже. Да и шифт нажимать не надо :3
>> No.24240 Ответ
Файл: Православная-старушка.JPG
Jpg, 17.08 KB, 420×281 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
Православная-старушка.JPG
>>24202
Ну ты понел.
>> No.24631 Ответ
Файл: 350317.jpg
Jpg, 233.12 KB, 850×1280 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
350317.jpg
>>23225
Суп, пыхопач.
А можно ли в пыхе сделать модульную систему как в пейтоне или нодеджыэс например?

Т.е. чтоб было приблизительно так:
/* some_module.php */
class Foo {
  function sum($x, $y) {
    return $x + $y;
  }
}

/* some_script.php */
import 'some_module' as 'smth';

$foo = new smth::Foo();
var_dump($foo->sum(13, 666));

/* или */
$smth = import('some_module');
$foo = new $smth->Foo();
>> No.24637 Ответ
>>24631
Шалом!
>> No.24647 Ответ
>>24631
include
include_once
require
require_once
>> No.24649 Ответ
>>24647
Это всё не то, они тупо впендюривают куски кода в место вызова, как в ссаной сишке, мне же нужно нечто завернутое в динамически именованный неймспейс. Ферштейн?
Кстати почему в пыхе синтаксис неймспейсов такой слегка припизднутый? Нельзя было использовать :: вместо бэкслеша?
>> No.24651 Ответ
>>24649
Разве в php есть неймспейсы?
>> No.24652 Ответ
>> No.24657 Ответ
>>24649
Ты наркоман штоле?
//Yoba.php
<?php
  class yoba {
    function foo($x) {
      echo $x;
    }
  }
?>

//fgsfds.php
<?php
  require_once 'Yoba.php';
  $y = new yoba;
  $y->foo(10);
?>
>> No.24661 Ответ
>>24657
И чо? Оно взяло и запихнуло класс yoba (кстати, в большинстве конвеншенов названия классов должны быть УпперКамельКейсе) в глобальный неймспейс. Вот зареквайишь ты два файла одноименными классами и будет тебе фатал блять еррор. Ты совсем не понимаешь что такое неймспейс?
>> No.24662 Ответ
>>24661
Считаю, что два класса с одинаковым названием — это один класс, а уебков, называющих одинаково разные сущности, рекомендую поить грузинским чаем шестой заварки.
>> No.24664 Ответ
Файл: sleeping-cat-in-shoe.jpg
Jpg, 57.84 KB, 538×656 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
sleeping-cat-in-shoe.jpg
>>24631
Вроде разобрался. Всем спасибо за моральную поддержку, лол.
% cat some_script.php 
<?php

function import($module, $as = '') {
  if ($as == '') {
    $as = $module;
  }
  $module = str_replace('\\', '/', $module);
  $as = str_replace('/', '\\', $as);
  eval("namespace $as;?>" . file_get_contents("$module.php"));
}

import('some_module_1');
some_module_1\foo();

import('some_module_1', 'smth_1');
smth_1\foo();

import('some_module_2');
some_module_2\foo();

import('some_module_2', 'smth_2');
smth_2\foo();

% cat some_module_1.php 
<?php

function foo() {
  echo __NAMESPACE__ . " lol\n";
}

% cat some_module_2.php 
<?php

function foo() {
  echo __NAMESPACE__ . " ololo\n";
}

% php some_script.php                    
some_module_1 lol
smth_1 lol
some_module_2 ololo
smth_2 ololo
>> No.24674 Ответ
>>24661
Я тебе про нэймспэйсы вообще ничего не отвечал. Ты в >>24631 спросил про импорт? На, блять, получи импорт! Вопросы надо ставить корректно сразу, сука.
>> No.24676 Ответ
>>24674
Океюшки.
>> No.27158 Ответ
Файл: pinknblue.jpg
Jpg, 43.15 KB, 583×769 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
pinknblue.jpg
>>23225
Еле блядь откопал.

Суп, котанчики.

Мне тут по наследству досталась охапка неструктурированного пхп-говнокода (который является серверной частью одной игрушки для айпадов/айфонов), зачесалось у меня это дело перевести на какой-нибудь mvc-фреймворк. Что порекомендуете: yii, symfony, zend или еще что? Главное чтоб было всё в паттернах, DRY, модно, молодежно и удобно.
>> No.27159 Ответ
>>27158
> Главное чтоб было всё в паттернах, DRY, модно, молодежно и удобно.
А нахуя это надо, ты понимаешь?
>> No.27160 Ответ
>>27158
Чтобы система была целостной, расширяемой и позволяла юнит-тестировать всё это говно, например.
>> No.27162 Ответ
>>27160
А о том, что система при этом должна быстро и точно работать, мало кто вспоминает.
>> No.27163 Ответ
>>27158
> зачесалось у меня это дело перевести на какой-нибудь mvc-фреймворк.
Работает - не трогай.
>> No.27165 Ответ
>>27163
Люто доброчую.
>> No.27170 Ответ
Файл: gray8.gif
Gif, 247.94 KB, 800×600 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
gray8.gif
>>27165
>>27163
>>27162

Скучные вы. А как же стремление к прекрасному?

к: волосат зеленый
>> No.27171 Ответ
>>27170
> PHP
> прекрасное
Зачем тебе mvc для серверной части игрушки? У тебя там вьюх так много, не боишься в производительности проиграть нагородив кучу всего ненужного поверх?
>> No.27173 Ответ
>>27170
> А как же стремление к прекрасному?
А зачем старое-то ломать? Напиши что-нибудь новое.
>> No.27176 Ответ
Файл: 1240293416081.jpg
Jpg, 22.42 KB, 231×251 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
1240293416081.jpg
>>27158
Серверную часть?
На mvc-фреймворк?
Да ты поехавший!
>> No.27188 Ответ
>>27176
А что не так то?
>> No.27189 Ответ
>>27188
А то, что он хочет впихнуть кучу ненужных кода, абстракций туда, где это все не нужно.
>> No.27190 Ответ
>>27170
> к прекрасному
Какое это отношение имеет к программированию?
>> No.27193 Ответ
Файл: котанчики.jpg
Jpg, 238.68 KB, 844×510 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
котанчики.jpg
>>27189
Может тогда переписать всё в один файл без функций, классов, в гребаном глобальном скоупе типичной пэхэпэшной лапшой?
>> No.27195 Ответ
Файл: 10.jpg
Jpg, 14.56 KB, 343×365 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
10.jpg
>>27193
Ты, если понадобится сложить два числа, используешь целый пека вместо калькулятора, который в тумбочке лежит? И неважно что: неудобно, с собой не взять, времени на старт больше уходит, но ведь модно (ололо, посаны считают на своем крутом ПэКа за доли секунды) и можно писать тесты.

Но если так хочется, то вперед. Потом не забудь отписаться, может мы тут тебя зря отговаривали, добра тебе анон.
>> No.27196 Ответ
>>27158
Фреймворки - дело личное, если у тебя нет требований от заказчика. Попробуй все, найди тот, что тебе будет более удобен. Я удобных похапе-фреймворков вообще не встречал, но это просто я питоновыми испорчен.

>>27189>>27176>>27171
Любой крупный проект даже на похапе (впрочем, не "даже", а "особенно") пишется сейчас в рамках MVC-паттерна или его вариаций. Если вы до сих пор пишете быдлокод без отдельных моделей и разделения бизнес-логики и отображения - то вам пора в музей, а не советовать ОПу что-то.
>> No.27197 Ответ
Файл: 12728974033986.jpg
Jpg, 19.49 KB, 332×314 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
12728974033986.jpg
>>27196
Ты либо не читал то, что нужно анону или просто еще один прочитавший в интернетах "MVC — это панацея, пихайте его везде". Ему никто не предлагает писать все одним файлом, но использовть mvc-паттерн и монстроподобные фреймворки для для работающей серверной части игры потому что модно, это слишком.
>> No.27198 Ответ
>>27197
Для похапе - панацея. Ну, точнее, есть и альтернативы, но в любом случае чистый похапе слишком уёбищен, чтобы им пользоваться.
>> No.27203 Ответ
>>27198
Мнение зазомбированного человека, пардон. Пользоваться можно всем, и бейсиком, и PHP. Лишь бы платили.
>> No.27204 Ответ
>>27203
Сколько тебе нужно заплатить, чтобы ты нажрался ослиного дерьма на камеру с супом паспорта?
>> No.27205 Ответ
Файл: Jimmy_jacket_forest.png
Png, 61.03 KB, 206×172 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
Jimmy_jacket_forest.png
>>27204
Если у тебя программирование с использованием PHP вызывает такие ассоциации, то у тебя что-то не в порядке с психикой, бро.
>> No.27206 Ответ
>>27205
У меня с ней как раз все в порядке. Но раз ты говоришь, что тебе пофигу чем заниматься, лишь бы деньги платили, то...
>> No.27207 Ответ
Файл: 132097213596.jpg
Jpg, 577.60 KB, 1023×1012 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
132097213596.jpg
>>27206
> Пользоваться можно всем, и бейсиком, и PHP
> ты говоришь, что тебе пофигу чем заниматьс
> всё в порядке с психикой
>> No.27212 Ответ
>>27196
> Любой крупный проект даже на похапе (впрочем, не "даже", а "особенно") пишется сейчас в рамках MVC-паттерна или его вариаций
А вот здесь я проиграл.

>>27198
А вот здесь я проиграл во второй раз.

Пусть похапе уёбищен в оригинале, но это не повод накрывать кучку говна красивым чужим монстроидальным фантиком и гордится тем, что, вроде как, всё стало лучше.
>> No.27218 Ответ
>>27212
Няш, с тобой никто не играет. И PHP не уёбищен, языки вообще не бывают уёбищными.
>> No.27219 Ответ
>>27218
> PHP не уёбищен
me.veekun.com/blog/2012/04/09/php-a-fractal-of-bad-design/
>> No.27221 Ответ
>>27219
Xort.
>> No.27242 Ответ
Файл: scepticNigra.jpg
Jpg, 61.05 KB, 720×951
Ваши настройки цензуры запрещают этот файл.
unrated
>>27218
> языки вообще не бывают уёбищными
>> No.27243 Ответ
>>27242
Форман, ты не в теме, ты врач.
>> No.27250 Ответ
>>27243
Я не форман. Это во-первых. Во-вторых одни языки могут быть по всем параметрам хуже других. Поэтому и уёбищные могут быть.
>> No.27251 Ответ
>>27250
Эти "параметры" живут только у тебя в голове, милоняш. Они не самоочевидны для всех людей вообще. А поскольку они не очевидны, то и однозначно сравнить один язык с другим нельзя.
>> No.27255 Ответ
>>27251
PL-1 не уёбищен?
>> No.27257 Ответ
>>27255
Нет.
>> No.27269 Ответ
>>27158
А еще я хочу перевести с mysql на postgres, но начальник говорит, что без хорошего доклада на тему "почему мускуль сосёт у постгреса" не разрешит такие вольности.
>> No.27270 Ответ
>>27269
> Работает - не трогай.
>> No.27383 Ответ
>>27269
А правда, что у mysql нет триггеров и хранимых процедур, совсем нет?
>> No.27391 Ответ
>> No.27392 Ответ
>>27383
Триггеры и процедуры - хрен бы с ними, а вот божественных сиквенсов, увы, нет.
>> No.27395 Ответ
>>27392
а как тогда id генерировать?
>> No.27396 Ответ
>>27395
AUTO_INCREMENT, не?
>> No.27398 Ответ
>>27396
auto_increment не есть sequence
>> No.27452 Ответ
>>27395
> а как тогда id генерировать?
А никак.
>> No.28367 Ответ
Файл: mr-bump.jpg
Jpg, 167.14 KB, 843×658 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
mr-bump.jpg
Суп, котанчики.
Не совсем по языку вопрос: вот в последнее время во многих дистрах /run монтируется в tmpfs, а /var/run является симлинком на не него; например я настраиваю php-fpm с пулом инстансов для нескольких виртуальных хостов, у каждого там свой чрут, юникс-сокет и всё такое; если я захочу складировать эти сокет файлы не корень /var/run, а например в /var/run/php/, то после перезагрузки эта директория будет удаляться к ебеням, т.е. мне ее придется снова создавать; может быть для этого еще какая не монтируемая в tmpfs директория предназначена? Есть тут знатоки FHS?
>> No.28368 Ответ
>>28367
mkdir -p /var/tun/php спасет отца русской демократии
>> No.28369 Ответ
>>28368
Плохое решение. Но для быдлокода сойдет.
>> No.28373 Ответ
>>28369
А умный вспомнит про runlevel
>> No.28374 Ответ
>>28373
Думаешь от ранлевела запускаемого в генте php-fpm будет что-то зависеть?
>> No.29286 Ответ
Файл: metaprogramming.png
Png, 38.08 KB, 607×383 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
metaprogramming.png
>>23225
Котаны, а накидайте примеров годного/полезного/угарного метапрограммирования на сабжевом ЯП.
Вот я тут сделал хернюшку, которая какбы кеширует результаты функций и методов, если добавлять 3 строчки кода к каждому из них. http://ideone.com/S9B8Un
>> No.30681 Ответ
Файл: 136519191706961.jpg
Jpg, 21.29 KB, 336×400 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
136519191706961.jpg
Суп, товарищи. Задумал я тут сомнительное предприятие: сделать транслятор php в llvm-ассемблер. Не слишком ли ебанутая затея? От сорцов пыха у меня нетбинс умер, да и код у них какой-то пиздецовый, так что наверно буду писать почти с нуля, только слегка попижу бнф.
Мотивейшон: 1) а чисто от нехуй делать, 2) может будет быстрее чем стандартная реализация.
Виш ми лак!
>> No.30683 Ответ
>>30681
> может будет быстрее чем стандартная реализация
Как тебе этот проект?
enwiki://HipHop_for_PHP
>> No.30684 Ответ
>>30681
гугли phc и подобные проекты.
>> No.30688 Ответ
Файл: 168986756_640.jpg
Jpg, 14.12 KB, 640×360 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
168986756_640.jpg
>>30681
> Не слишком ли ебанутая затея?
ПХП дурной язык. Никто не хотел бы к 30 годам стать веб-макакой или 1С-мартыхой. И вылететь из профессии к 40 годам.
>> No.30693 Ответ
>>30688
Программист всегда знаком со всеми актуальными языками программирования. Я, веб-программист, умею писать программы на таких языках как ассемблер (для x86; диалекты tasm, nasm и gnu), Fortran, Basic, Pascal (стандарт, экстендед и обжект), C(89), C++(98), C#, Java, Objective-C, Tcl, Smalltalk, Eiffel, D, Scala, Lisp (Common), Haskell, F#, Erlang, Curl, Prolorg и таки да 1C.
А ещё, конечно, знаю сам PHP, JavaScript, Perl, Python, Lua, Ruby и SQL (и оракловский диалект тоже), XSLT и прочие вещи.
Я считаю, что дурных языков не бывает. Все языки одинаковы. Знаешь один - знаешь все. Если называешь себя программистом на каком-то определённом языке, то ты должен знать его в совершенстве. В этом плане PHP не хуже и не лучше других языков. Называешь себя программистом на PHP - необходимо обязан знать наизусть все функции дефолтной библиотеки PHP, все официальные расширения, быть знакомым с основными фреймворками, уметь писать модули расширений PHP и так далее. Разницы, на каком языке специализироваться, нет. Но за PHP платят, десу.
>> No.30694 Ответ
>>30692
> Все языки одинаковы.
Глупости. Все языки разные.
И есть много критериев, по которым их можно сравнивать, в частности дизайн самого языка. И тут ПХП в полной жопе — это бессмысленное, бессистемное нагромождение функций из разных языков и библиотек вообще "дизайном" назвать язык не поворачивается.
>> No.30695 Ответ
>>30694
Нет, няша. Все языки одинаковые. В конечном итоге, всего лишь набор символов, который заставляет машину действовать. Разницы между прологом и брейнфаком нет.
> И тут ПХП в полной жопе — это бессмысленное, бессистемное нагромождение функций из разных языков и библиотек вообще "дизайном" назвать язык не поворачивается.
Хейтерство, бессмысленное и беспощадное.
>> No.30696 Ответ
>>30693
> Все языки одинаковы. Знаешь один - знаешь все.
Не согласен. Одни языки из твоего списка хранят данные вместе с кодом (в объектах, плавающих в куче), другие предпочитают хранить их в виде дерева, отдельно от кода, третьи вообще предлагают создать блок "var" в заголовке программы (как в Алгол-58). Одни закрывают данные от дальнейших изменений, после того, как они созданы, другим это безразлично, третьи допускают даже несколько ссылок на данные, с возможностью изменения их откуда угодно.
> основными фреймворками
Я уже говорил в одном из соседних тредов: так называемые "фреймворки" - повод к тому, чтобы заканчивать с языком программирования и искать новый язык и новую нишу. В большинстве случаев "фреймворки".equalsTo("нагромождения костылей").
> Разницы, на каком языке специализироваться, нет.
Это не так для начинающего, т.к. различаются занимаемые ими ниши. Похапе - не средство для написания алгоритмов. Это, скорее, часть стандартного оборудования фирмы, её снаряжение, т.н. equipment. Наряду с принтером и факсом, столами и канцелярскими приборами на них, системой виденаблюдения и Web-сайтом. Программистишка, - юродивый, деревенский дурачок, - тоже входит в этот набор.
> Но за PHP платят, десу.
Подпишись и ты на рассылку "php or python" на ru.indeed.com - скоро изменишь своё мнение. Во всяком случае, мне помогло.
>> No.30698 Ответ
>>30695
Я не знаю, что ты курил, чтобы прийти к такому выводу, но я точно знаю, что это курить тебе больше не следует, потому что твой вывод разбивается сразу о его же следствие: если бы ссе языки были бы одинаковы, то их было бы 1 штука.
>> No.30699 Ответ
>>30695
> Все языки одинаковые. В конечном итоге, всего лишь набор символов, который заставляет машину действовать. Разницы между прологом и брейнфаком нет.
Главная разница — стоимость разработки. И она ОЧЕНЬ разная. И этот вопрос предельно принципиален для любого вменяемого человека.
> Хейтерство, бессмысленное и беспощадное.
Нет, не хейтерство, а вполне рациональная оценка той кучи говна, которую они называют стандартной библиотекой.
Во всем должно быть единство стиля и внутренняя логика, системность. В похапе же никакой логики вообще нет. Спиздили из C strpos() когда классов не было, потом спиздили откуда-то еще str_rot13() (уже с подчеркиванием), потом кое-как приделали классы сбоку и поналепили поверх сишных функций еще и методы. Аналогично с ошибками и эксепшнами, аналогично с параметрами. Тут даже не нужно иметь опыта работы с языком, чтобы сразу увидеть, что никакого единого дизайна у него никогда не существовало — это франкенштейн, которого слиши как попало и потом еще дошивали сверху всякими стразиками так, что оно все время расползается.
>> No.30700 Ответ
>>30688
У меня такое ощущение, что завсегдатаи досок /s на чанах живут в своём мирке.
>> No.30701 Ответ
Файл: 090112_0009.jpg
Jpg, 29.14 KB, 337×497 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
090112_0009.jpg
>>30700
Но уж вы-то, Настоящие Программеры - живёте в настоящем.
Там, где жизнь - борьба. То с пропавшим именем функции, то с потерянным объявлением переменной...
На дворе у вас 2003 год. От перловки все устали, у вас есть новый препроцессор страниц. Теперь даже с MySQL.

Тупость.
>> No.30702 Ответ
>>30701
Я к тому, что на улице людям во многом похер как заработать, лишь бы с голоду не подохнуть, фигурально выражаясь.
>> No.30705 Ответ
Файл: Oriflame.png
Png, 6.87 KB, 333×227 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
Oriflame.png
>>30702
В том-то и дело, что те немногие, кто мог бы занять нишу быдлокодера, редко испытывают желание писать на Пыхе и ему подобном. Работодатели держатся за свой код, не имеющий ни малейших шансов на продолжение его бренного существования. Работодатели присылают тестовые задания: "выполнить такой-то объём работы бесплатно". Лично я, естественно, не буду присылать во второй раз те же самые скрипты для админки, которые я только что присылал в качестве примера к резюме. Другие делают то же самое, и очень скоро вокруг этих фирм не остаётся никого, кто бы хотел (и был способен) что-то делать. В итоге, какой-нибудь Имхонет или Лекспро (те ещё уроды, кстати) годами не могут найти программиста. На самом деле, программист - он только что был. И не один. Просто, во второй и третий раз в ту же самую фирму он обращаться не будет.

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

Так было.
Назад дороги нет.
>> No.30711 Ответ
>>30699
У меня такое же ощущение сложилось когда после шарпа попробовал джаву. Депрекейтеды на депрекетедах, десяток функций делающих одно и то же, внезапно депрекейтедная нормальная функция и "замена", требующая писать на 10 строк кода больше. Хотя, может я что-то не понял.
>> No.30712 Ответ
Суп!
Я тут почитал тред и понял, что у прогера есть два пути:
1. Выучить мейнстримовые языки и писать на них мейнстримовый код, получая за это бабло.
2. Выучить немейнстримовые языки и всем хвастаться своим длинным и толстым IQ, умирая от голода.

Какой вариант посоветуете?
>> No.30713 Ответ
>>30712
Язык хранимых процедур DB2. Какой он?..
>> No.30714 Ответ
>>30712
3.1 Выучить мейнстримовые языки и писать на них мейнстримовый код, получая за это бабло.
3.1 Выучить немейнстримовые языки и писать на них в свободное время собственные поделки, увеличивая за счет этого ЧСВ.
>> No.30715 Ответ
>>30713
Императивный?
>> No.30716 Ответ
>>30712
ПЛ/1
>> No.30717 Ответ
>>30714
> 3.0
Починил У Вас индекс сломался.
>> No.30725 Ответ
>>30717
копипаст, он такой. спасибо
>> No.30770 Ответ
Файл: vvp.PNG
Png, 269.26 KB, 340×497 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
vvp.PNG
>> No.31341 Ответ
Файл: scrin.png
Png, 34.95 KB, 977×617 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
scrin.png
Подскажи Доброкодер, в чём проблема(ошибка) или так всё и должно быть,если да,то скажи как вывести на cmd.exe фразу "Авторизация прошла успешно" если она действительно прошла успешно, а если нет, то "Неверный пароль"

http://pastebin.com/5Ey9gztw
>> No.31342 Ответ
>>31341
Добавь в начало
ini_set('display_errors', true);
error_reporting(E_ALL);
и узри
CIRLOPT_POSTFIELDS
Ороро, наивный
'CHROME'); //чтобы сайт думал, что мы - браузер.
Кстати закрывающий пхп тег необязателен в конце файла, но это к делу не оче относится.
>> No.31426 Ответ
Файл: Strange-Bodies-Exhibit-Hirshorn.gif
Gif, 724.33 KB, 1156×904 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
Strange-Bodies-Exhibit-Hirshorn.gif
>>23225
Анон, чому после подключения Symfony этот код выдает два Hello?

<?
require_once 'vendor/autoload.php';

echo "Hello";
?>
>> No.31427 Ответ
>>31426
У тебя какой-то неправильный хелловорлд, не МВЦшный.
>> No.31428 Ответ
>>31427
Это понятно, но разве это причина?
>> No.31429 Ответ
>>31426
cat composer.json
плиз.
>> No.31433 Ответ
>>30716
Можно я тебя обниму?
not gay
>> No.31435 Ответ
Файл: chto.png
Png, 17.59 KB, 1306×105 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
chto.png
>>23225
Анон, что оно от меня хочет?

<?
require_once "model/Requests.php";
require_once "model/Responses.php";
require_once "model/Database.php";
?>
>> No.31436 Ответ
>> No.31437 Ответ
>>31435
Очевидно, файла "Requests.php" в папке "model" не существует.
>> No.31438 Ответ
>>31436
>>31437
Он там есть, капитаны. Права доступа 777.
>> No.31439 Ответ
>>31438
require_once __DIR__ . '/model/Requests/php';
попробуй.
>> No.31440 Ответ
Файл: 11:59.png
Png, 19.06 KB, 1375×83 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
11:59.png
>>31439
Не вышло. Может include path нужно изменить?
>> No.31443 Ответ
Файл: 1329897685_60.jpg
Jpg, 32.97 KB, 500×375 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
1329897685_60.jpg
>>31440
Нет, не нужно - там уже есть . В той же папке, в которой лежит скрипт, находится папка model, верно? Сам скрипт основной и никуда в свою очередь не включается? Проверь имя. Ещё раз проверь. И ещё раз.

>>31438
> капитаны
Где же твоё уважение?
>> No.31446 Ответ
>>31443
Простите, Дон Корлеоне. Папка model была с заглавной буквы.
>> No.31453 Ответ
>>31446
Добра тебе.
>> No.31454 Ответ
Файл: 53b095f6189c09e750c15a9ba11ba86cfddd6.jpeg
Jpeg, 17.68 KB, 292×302 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
53b095f6189c09e750c15a9ba11ba86cfddd6.jpeg
>>31438
> Права доступа 777
Но зачем?
>> No.31461 Ответ
>>31454
От греха подальше.
>> No.31462 Ответ
>>31461
От греха подальше это chroot и setfacl с минимальными атрибутами.
>> No.31571 Ответ
Файл: coo.jpg
Jpg, 113.55 KB, 1100×400 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
coo.jpg
А вчера эта штука работала.
Что это с ней может быть? Cookie не хочет мне отправляться.
С: общению штатного
>> No.31575 Ответ
>>31462
Нет, от греха подальше - это как раз 777, потому что система безопасности в этом вашем Линуксе концептуально поломана.
>> No.31576 Ответ
>> No.31577 Ответ
>>31571
Ты мог случайно сохранить файл в кодировке UTF-8 с BOM.
>> No.31590 Ответ
>>31571
Или у тебя пустая строка или символ перед <?php.
>> No.31593 Ответ
>>31575
> от греха подальше - это как раз 777, потому что система безопасности в этом вашем Линуксе концептуально поломана.
Лал, сначала делают полные привилегии на все файлы, а потом кричат что система безопасности поломана.
>> No.31595 Ответ
>>31575
> система безопасности в этом вашем Линуксе концептуально поломана
В чём суть поломки?
>> No.31596 Ответ
Алсо, на самом деле система безопасности действительно неидеальна, но не в том смысле, что концептуально поломана. Вы часто делаете chmod -rw ~/.local например? Я уже не говорю про то, что программы должны декларировать все файлы, к которым хотят доступ, на этапе установки/обновления
>> No.31632 Ответ
Какие, блядь, дозаписи ещё, ёбаный PHP? Какие, блядь, ARRAY? Какие, блядь, хуита нейм?
Ну ты и говно, блядь. В ушах от тебя ломит. Как в школу вернулся, когда на математике цифры считали.
Ебануться.
Ненавижу, презираю.
Как на этом изъёбистом говне нормальные люди программы пишут, блджад?
>> No.31637 Ответ
>>31632
Именно так и пишут. c:хочется зеленые поступок гнойный физически.
>> No.31638 Ответ
>>31596
> Я уже не говорю про то, что программы должны декларировать все файлы
Надеюсь, не буквально?
>> No.31640 Ответ
>>31596
Давай задекларируй все файлы, которые можно открыть вимом например.
>> No.31647 Ответ
>>31638
>>31640
любой файл тоже декларация. Так же можно декларировать право на чтение (либо rw) любого элемента ARGV, например. А вот при установке библиотеки, которая хочет универсальные права, хотя поидее вообще не взаимодействует с ОС универсальная декларация будет смотреться не очень круто
>> No.32078 Ответ
Файл: lalka.jpg
Jpg, 12.31 KB, 493×122
edit Find source with google Find source with iqdb
lalka.jpg
Файл: cat_laptop.jpg
Jpg, 44.94 KB, 523×700
edit Find source with google Find source with iqdb
cat_laptop.jpg

Суп, котанчики!

Есть один говнокод, в нем используется какая-то ОРМ, абстрактный класс сущностей и определенный класс сущностей. Всё вроде зачипись работает, но идещка пхп-шторм не желает определять переменную $yo как экземпляр такого-то класса. Как эту херню побороть?

Говнокод вот такого вида: http://ideone.com/lVD17O
>> No.32083 Ответ
>>32078
Функция find в докблоке (@return object) как-бы возвращает object, собственно шторм и подсказывает по object, а не по Yoba.
>> No.32085 Ответ
>>32083
Ненене, файнд подсказывает то что надо, а блядский олл нихуя, что бы я не вписывал в 31ю строку. Походу это баг в шторме. Ебаная проприетарщина. Из-за этого просрал полдня впустую. -_-
>> No.32410 Ответ
Пыханы, как мне в РНР можно сделать, чтобы в регулярном выражении искалось что-то, что мне нужно, а в переменную сразу же записывалось что-нибудь другое?
Пока приходится делать так:
   preg_match('/e">.*/', $blabla, $yoba);
   $name = substr_replace($yoba, "", 0, 3);
А я хочу в одну строчку.
>> No.32411 Ответ
>>32410
Ололо, preg_replace с eval'ом, хотя не знаю, взлетит ли в похапэ.
мимоизвращенец
>> No.32431 Ответ
>>32410
Написала тебе решение в одну строчку:
pregmatch('/e">.*/', $blabla, $yoba); $name = substrreplace($yoba, "", 0, 3);
>> No.32473 Ответ
>>32085
Баг в шторме - очень вряд ли, тем более в таких банальных вещах. Какой еще файнд? IDE не запускает код, а только его инспектирует. $allthatyobas == object[], $yo - object, подсказывание идет по object. попробуй @var?
>> No.32477 Ответ
Файл: Cat_on_a_Laptop.jpg.scaled500.jpg
Jpg, 74.05 KB, 500×334 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
Cat_on_a_Laptop.jpg.scaled500.jpg
>>32473
У метода find по аннотации в 39 строке шторм догадывается, что возвращается экземпляр дочернего класса (позднее статическое связывание или как его там), т.е. $y есть SomeYobaEntity. Для метода all, который возвращает массив экземпляров дочернего класса, он такую догадку делать отказывается. Я конечно аннотацией @var или @type для таких объектов как $yo могу указать класс, но это то.
>> No.32494 Ответ
>>32431
Отличная шутка.
>> No.32500 Ответ
>>32494
Какой вопрос, такой ответ.
>> No.32505 Ответ
Анон, а что нужно минимально знать, чтобы устроиться студентом php-кодером на тыщ 15 хотябы. Знаю с++, умею писать код и ООП на энтри-левел. Если выучу пхп, sql, одну какую-нибудь CMS и один какой-нибудь MVC-фреймворм и доучу паттерны в книге четырёх, этого хватит для начала?
>> No.32506 Ответ
>>32505
Анон, а что нужно минимально знать, чтобы угробить свою карьеру. Знаю фьолетовое окаменевшее говно шерстистого носорога, умею писать циклы и операторы "if..else-if..else-if..else" и нагромождения костылей на энтри-левел. Если выучу пхп, sql, одну какую-нибудь CMS и один какой-нибудь MVC-фреймворм и доучу паттерны в книге четырёх, проще ли будет вылезти из-под железнодорожной платформы и положить голову под поезд, этого хватит для начала?
>> No.32507 Ответ
>>32505
> Если выучу пхп
От пхп нужно знать только синтаксис. С sql нужно понимать синтаксис и гуглить нужные запросы. За джуниора сойдешь, наверняка кому-нибудь нужны обезьянки на обучение.
>> No.32508 Ответ
>>32507
> От пхп нужно знать только синтаксис.
Неправда. Нужно ещё знать стандартную библиотеку.
>> No.32515 Ответ
>>32508
В которой всё неочевидно и припизднуто и ты каждый раз будешь гуглить вопросы типа "как в пхп найти длину строки".
Но в последнее время в пых тянут всякую всячину из приличных ЯП например генераты - я чуть не кончил радугой, isset и empty для выражений - слеза радости скатилась по небритой щеке, пакетный менеджер composer вместо ебаного pear, вот бы еще взамену pecl что-нибудь изобрели, лет через несколько он даже станет не таким полным говном, что не может не радовать.
>> No.32516 Ответ
>>32515
> и ты каждый раз будешь гуглить
Нужно знать, а не гуглить.
>> No.32519 Ответ
>>32516
Все эти функции с названиями типа strdosmthng($arg0, $arg1, $flags, [&$result]) абсолютно невозможно запомнить.
>> No.32525 Ответ
>>32519
У тебя очень слабая память, анон.
>> No.32532 Ответ
>>32515
> лет через несколько он даже станет не таким полным говном, что не может не радовать
И что изменится? На цены посмотри!
>> No.32533 Ответ
>>32532
А что с ценами? Опять гречка дорожает, поди? Так я кофем питаюсь, мне не страшно.
>> No.32537 Ответ
>>32533
Насколько можно видеть из форумов SQL.ru и RSDN более опытные товарищи называют работодателю среднюю заработную плату (её показывает в том числе и Яндекс) и не соглашаются на меньшее. Таких не берут, конечно.
>> No.32585 Ответ
Файл: 001.jpg
Jpg, 82.06 KB, 600×450 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
001.jpg
怎麼可以這樣理解嗎?
>> No.32586 Ответ
Файл: 001.jpg
Jpg, 82.06 KB, 600×450 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
001.jpg
怎麼可以這樣理解嗎?
>> No.32588 Ответ
>>32585
Да, пиздоглазые вконец охуели.
>> No.34116 Ответ
Файл: d-g-hugo-2.png
Png, 783.87 KB, 1173×635 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
d-g-hugo-2.png
>>23225
Привет иисусач. Такой вопрос, что будет, если джва посетителся сайта выполнят запрос одновременно?
>> No.34118 Ответ
>>34116
Гугли транзакции и их защиту.
>> No.34119 Ответ
>> No.34135 Ответ
>>34116
Это вопрос не к иисусачу, а к вебсервачу, т.к. он отвечает за распределение и распараллеливание запросов.
>> No.34186 Ответ
Файл: apple-touch-icon-114.png
Png, 2.44 KB, 114×114 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
apple-touch-icon-114.png
Привет анон. Пишу аналог сайта чатвдвоем для себя. Суть в том, что после того как оба пользователя нажмут "Готов к чату" их коннектит друг с другом и начинается собственно чат. Вопрос в том, как правильнее всего его реализовать? Создавать новую таблицу для каждого нового чата?
>> No.34187 Ответ
>>34186
Да сразу на текстовых файлах делай, чо там.
Все с єтого начинали, ага.
>> No.34188 Ответ
Файл: apple-touch-icon-114.png
Png, 2.44 KB, 114×114 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
apple-touch-icon-114.png
>>34187
Хватит стебать, так как? В тех исходниках которые я видел есть только один общий чат и никакие комнаты не создаются. Там используется одна таблица для чата, а как поступить в этом случае?
>> No.34189 Ответ
>>34188
Одна табличка, в ней индекс по столбику chat_id, ещё индексы по времени добавления (чтобы чистить её) и пользователям, и всё.
>> No.34191 Ответ
Файл: zsmall.jpg
Jpg, 10.70 KB, 223×229 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
zsmall.jpg
>>34189
Аа, спасибо анон, жаль сам не допер.
>> No.34345 Ответ
Файл: 4176945523_8d7843e148.jpg
Jpg, 86.52 KB, 280×500 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
4176945523_8d7843e148.jpg
Суп-мисо, котаны. Посоветуйте годный ORM. Желательно чтобы имел следующие качества: был отдельным от фреймворков; имел удобный механизм кеширования в memcaced и redis; не нужно писать сеттеры/геттеры как в доктрине; умел в мускуль и постгрес; без тормозных аннотаций.

Пока вот присматриваюсь к doctrine2, yii active record, propel.
>> No.34350 Ответ
>>34345
Я, конечно, не знаю, что для тебя "годный", потому что для быдлопехапешников, например, очень годна доктрина, но правда в том, что для РНР НЕТ годного ОРМ. Серьёзно, вообще. Говно и ещё говнее. У нас в проекте написан свой, дома я на пехопе не пишу, но если буду писать (нахуя, лол?), то, опять же, набросаю что-нибудь сам, ввиду столь омерзительных вкусов членов пехопе комьюнити.

Из виденного мной более-менее сносен Propel.
>> No.34351 Ответ
>>34350
Алсо, да, зачем я вообще отвечать стал: ух ты, впервые вижу няшную косплейщицу.
>> No.34353 Ответ
>>34350
Да, похэпэ такое-то днище, но в моем Мухосранске особо не повыебываешься на тему выбора ЯП. Мне скоро пришлют тестовое задание, хочу сразу писать с использованием не самого уебищного ORM.
А кстати лучше Propel 1.6 или 2.0?
>> No.34749 Ответ
Файл: awesomely-cute-kitten-1500.jpg
Jpg, 127.91 KB, 1024×768 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
awesomely-cute-kitten-1500.jpg
Котаны, я тут открыл для себя волшебную силу аннотаций! Теперь мои больные фантазии можно элегантно воплощать в коде. В инете пишут, что парсер аннотаций doctrine медленный ибо пхп, поэтому решил запользовать из phalcon. Но тут возникает маленький нюанс: доктрина ставится через композер, а фалькон через ссаный пекл.
Пойду дальше писать свой супер-пупер-мега-крутой ORM для redis.
>> No.34992 Ответ
Файл: Perfect-Blue.jpg
Jpg, 81.70 KB, 1024×550 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
Perfect-Blue.jpg
Вечер, котанчики.
Я тут смотрю на популярные mvc-фреймворки для пхп и не понимаю почему люди используют yii. Эти пиздоглазые уёбки кладут хуй на psr-0, 1 и 2. Как можно этим говном пользоваться?
>> No.34999 Ответ
>>34749
> Котаны, я тут открыл для себя волшебную силу аннотаций!
Чурт тебя, чур! Сгинь, нечистый!
>>34992
> psr-0, 1 и 2
Появились гораздо позже, чем yii и на них всем похуй, лолка. То есть, ну реально почти всем, кроме всяких упоротых ньюфагов. Я вообще работаю в компании с каким-то уёбищным кодинг-стандартом с табами вместо пробелов и переносом скобок на другую строку (даже в JS, о Аллах!). Все (даже молодые и сорт оф современные) удивляются и не понимают, почему я называю их стандарт говном. Конечно, мне бы больше понравилось писать по-нормальному (даже хуй на них на скобки — хоть бы пробелы вместо табов, чтоб с настройками в виме не путаться). И знаешь что? Мне похуй. Если б я внезапно посчитал бы что-то подобное критически важным, то я в первую очередь перестал бы писать на пехопе, а потом бы уже беспокоился о стиле кодирования и стандартах, которые даже толком не признаны в коммьюнити. Вот только всё это погоды не делает. Мир вообще дохуя неидеален.

Хотя yii я тоже не пользуюсь, конечно.
>> No.35000 Ответ
>>34999
> с табами вместо пробелов и переносом скобок на другую строку
Компания моей мечты полгода назад. А потом я пописал под ведро, ну и решил соблюдать ихние стандарты, раз уж такое дело, и всё заверте...
>> No.35001 Ответ
>>34999
Там самое критичное это psr-0, т.е. файлы классов расположены хуй пойми как, без неймспейсов (и даже без псевдонеймспейсов) и некоторые из них блядь одноименные.
Несоответствие psr-1 и 2 выражено у них в табах, отступах по Олману, отсутствии пробелов вокруг операторов, что уродливо, но похуй.
Ладно, можно просто обходить этот фреймворк стороной.
>> No.35002 Ответ
>>35001
> отступах по Олману
Гомофоб что ли?
>> No.35077 Ответ
Файл: 138314044985831.jpg
Jpg, 16.52 KB, 1280×1024 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
138314044985831.jpg
Аноны, здравствуйте. К вам перекачусь. Посоветуйте пожалуйста движок магазина.
Основные требования:
1) Бесплатность
2) Легкость в освоении
3) Гибкость настройки (необходима возможность создания категорий товара и задания параметров категорий. Например категория "Холодильники", параметры - высота, ширина, глубина, вес; категория "Презервативы", параметры - размер, цвет)
4) Доступность тем в интернете (чтобы можно было всё красиво сделать)
5) Не сильно кривой код (Пожалуйста не предлагайте друпала и вордпреса - я с них блюю).
Спасибо.
Или может быстрее свою шняжку на YII запердолить и не перить мозги?
с: доставлять смертных
>> No.35312 Ответ
Читаю статью об установке связки Apache+PHP+MySql+PHPMyAdmin+Symphony на Ubuntu. Собираюсь ставить то же только вместо Symphony - Zend Framework 2. Взлетит это у меня? Планирую затем запускать для теста мой сайт на локал-хосте. Потом планирую перенести тоже самое на домашний сервер(тоже убунту).
http://folkprog.net/ustanovka-i-nastroyka-apache-php-mysql-v-ubuntu/
Тут сказано сделать
apc.shm_size = 128M
Какой-то размер каких-то сегментов какой-то разделённой памяти. Что это такое и почему автор так решил?

Вообще ставит в тупик установка этих комбинаций из ПО. Есть документация, как ставить каждую из них, но как их вообще связывать неясно толком. И почему они все так любят писать инструкции без объяснения, что и зачем?
>> No.35313 Ответ
>>35312
> The Alternative PHP Cache (APC) is a free and open opcode cache for PHP. Its goal is to provide a free, open, and robust framework for caching and optimizing PHP intermediate code.
>> No.35314 Ответ
>>35312
Кстати Symfony через f пишется.
>> No.35315 Ответ
>>35313
Я спрашиваю, зачем менять размер этого самого сегмента кеша? И чем здесь при этом руководствуются?

Чёрт, вторая проблема. Тут дана команда a2enmod rewrite. После её запуска написало, что надо сделать service apache2 restart. Но когда я его делаю, то мне пишет
  • Restarting web server apache2 [fail]
Хотя если зайти на локалхост в браузере, то пишет "It works!"
>> No.35316 Ответ
>>35315
Ну вот и команда sudo apache2ctl -M говорит, что rewrite в наличии. И ит воркс, но не хочет рестартиться. Что за прикол такой?
>> No.35320 Ответ
>>35315
> Restarting web server apache2 [fail]
cat /var/log/апач-что-то-там.log
>> No.35321 Ответ
>> No.35327 Ответ
>>35321
ОК, я решил проблему. Я дурак. Надо было запустить apache2ctl, чтобы он дал сообщение об ошибке. А ошибка была в том, что надо было определить дменное имя, так как через IP 127.0.0.1 он его не определял.
>> No.35347 Ответ
>>35327
Нет, я идиот. ошибка которую я исправил была лишь пустым предупреждением. На деле я просто должен был рестартить с sudo. Ну блин, я думал, он мне напишет в таком случае прямо, что прав нет, как он обычно делает.
>> No.35348 Ответ
>>35347
Хм, а я обычно рестартую через /etc/init.d/apache2 restart, наверно олдфаг.
>> No.35353 Ответ
Не пользовался раньше фреймворками для веба. Пытаюсь изучить Zend Framework 2 по Getting started на официальном сайте. Скачивание самого зента и скелетон-апликейшн и их запуск прошли успешно. Создание файлов и вставка кода завершились тем, что первая страничка из 4-х, которая должна получиться не получилась. Вместо неё ошибка:
http://pastebin.com/0tbkUkAc
Уж очень много непонятного кода приходится вставлять, который при том не всегда ясно, почему не был вставлен заранее автоматически. И непонятно как проверять, что всё правильно после каждого очередного редактирования. Правильно ли я понимаю, что после каждой инструкции запуск не должен вызывать никаких ошибок? Или же всё сможет запуститься, когда я навставляю весь код?

Я точно что-то делаю не так. Алсо, мои инструменты включали пока только gedit, nautilus и браузер. Какие используются приличные редакторы/IDE с автокомплитом, которые можно было использовать с приличным дебагером? Думал разобраться с зендом, а потом разобраться с редакторами и дебагерами, но подозреваю, что я выбрал не тот порядок.
>> No.35355 Ответ
http://habrahabr.ru/post/77902/
Почти 70% пхп-кодеров с хабра не пользуются дебаггером. У меня культурный шок.
>> No.35356 Ответ
>>35355
А нахрена?
>> No.35357 Ответ
>>35356
Получать понятные подробные сообщения об ошибках, полезные предупреждения, трассировать, ставить брейкпойнты, просматривать содержимое переменных, включая все поля и массивы, не вводя новые команды для вывода. Так было у меня при программировании на С++ на VisualStudio и QtCreator+gdb+gcc. В вебе ничего этого нет? Мне что, самому что ли программировать?
>> No.35358 Ответ
>>35357
В вебе нахер не сдалось это. Фаст дебаг при помощи echo() а там похер. Дешево и сердито.
>> No.35359 Ответ
Файл: 221.jpg
Jpg, 1113.72 KB, 1400×1000 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
221.jpg
>>35355
Пф. Культурный шок у него. Ламер.

Я лично не пользуюсь дебагером. На пехопе я стал писать вместе со сменой работы, до того момента не будучи с ним особенно знаком. На предыдущей работе писал на жабе и был несколько удивлён, что всем в моём новом окружении похуй на дебагер, тем более что я знал, что для пехопе он есть (у нас там инфраструктура, высокие технологии, так что нельзя так просто взять и поставить самому XDebug на девелопмент-сервер). У меня ещё бывали порывы таки его там организовать (типа, ну, высокие технологии, новый миллениум, хуле мы как пещерные люди), но в итоге оказалось, что в случае со сложным и плохо написанным легаси-кодом у XDebug-а бывают моменты взаимного недопонимания, а вообще дебагер и правда не нужен. Пиши var_dump($ololo); и делов-то. Потом я ещё прозрел и понял, что ИДЕ тоже нинужны.

Впоследствии было добавлено несколько улучшений. Во-первых, читать огромные трейсы в js-консольке неудобно (в случае со всяким там Аяксом), поэтому когда запрос к джейсон-сервису не удаётся раскодировать, лепится сплэшскрин с ним поперёк всего экрана. Удобней листать и копировать. Во-вторых, выяснилось, что неудобно дебажить всякие-там http-API сервисы, которыми пользуются другие проекты. Особенно, если писал ты их давно, а теперь внезапно у кого-то что-то не так. Поэтому в качестве грубого и эффективного решения персонально для себя я создал MyDebug::log($ololo), (часто используемый как MyDebug::log(var_export($ololo, TRUE))) который вместо того, что срать на экран, срёт в базу. Вот, собственно, и всё. Даже не знаю, что ещё нужно. В смысле, бывали случаи, когда всё было как-то печально, но это была магия совершенно иного уровня, и дебагер бы всё равно не помог.

Вот куда больше мне хотелось бы как-то оптимизировать процесс дебага жабоскрепта. Может быть я не умею готовить фаербаг, я не знаю, но толку с его трейса и т.п. фич "настоящего дебагера" я ни разу не поимел. Особенно неприятны две ситуации. Первая: какая-нибудь дурацкая ошибка вроде опечатки в имени переменной эвалуируется в какое-нибудь "e is not a function" (ну или что-то подобное) где-нибудь в недрах какого-нибудь underscore.js. Вторая: фиксил что-то сразу в 10-ти файлах, где-то что-то прозевал (задумался, например, на var foo =, — а потом забыв об этом пошёл фиксить другой файл), а после склейки JS получил невменяемую ошибку о неправильном синтаксисе где-нибудь в другом конце проекта. Понимаю, что именно произошло всегда только читая локал дифф или файлы, который только что менял. Это представялется как-то не слишком эффективным.

Такие дела.
>> No.35363 Ответ
>>35359
> дебаг жабоскрепта
Линт и юнит-тесты. Пользуй их.
>> No.35385 Ответ
>>35359
> Это представялется как-то не слишком эффективным.
Это представляется как основная причина, почему люди уходят с динамических языков.
Больше просто не могут.
>> No.35386 Ответ
В чём разница между CGI, fastCGI и запуском PHP-интерпретатора в апаче без них? Почему столько способов запуска? IDE PhpStorm выдаёшь ошибку при запуске, так как мол не включен CGI/fastCGI. Как его включить? Правильно ли я понимаю, что в Server API в phpinfo() он должен тогда высветится?
>> No.35388 Ответ
>>35386
На http://stackoverflow.com, быжло!
CGI - запуск скрипта при каждом запросе. FCGI - запуск скрипта единожды и передача ему всех запросов через сокет/standard IO. В Апаче, как я понял, еще есть модуль-DLL-ка-интерпретатор PHP.
>> No.35389 Ответ
>>35388
Меня в первую очередь интересует, как же его всё таки включить.
>> No.35390 Ответ
>>35389
В смысле включить FastCGI/FPM.
>> No.35391 Ответ
>>35389
apt-get install php5-fpm
/etc/init.d/php-fpm start
например.
>> No.35392 Ответ
>>35391
> apt-get install php5-fpm
Уже
> /etc/init.d/php-fpm start
-bash: /etc/init.d/php-fpm: Нет такого файла. Есть php5-fpm. Стартнул его. В локалхосте запускаю phpinfo(). В Server API продолжает светится Apache 2.0 Handler. Рестартнул апач - то же самое.
>> No.35393 Ответ
>>35392
Стоп, так PHP-FPM - это альтернатива апач и одновременно с ним не запускается? Или один из режимов работы самого апача?
>> No.35394 Ответ
Ну всё, у меня паника. Ни zend framwork, ни symfony, ни fpm, ни phpstorm, ни xdebug как таковые я не могу запустить и использовать вообще никак. Мои охуительные знания решения дифур, алгоритмов и ООП мне нисколечко не помогают. Ну нахуя я трахал себе мозги этим сраным универом, когда от него толку ноль без палочки? Не понимаю вообще, чё от меня хотят во всех этих мануалах и документациях, ничё вообще не работает. Приходит на ум, что тогда нужна какая-то глубокая книга. Только какая. Какие книги есть по этим злободневным темам?
>> No.35395 Ответ
>>35394
Не истери.
Что ты пытаешься сделать и что получается, а что нет?
> и использовать вообще никак
Ось хоть какая? Если винда, то ставь сборку http://open-server.ru http://endels.ru
Если линупс, то спрашивай, если чо не получается. Но уж лучше более конкретно.
Асло в /u/ есть кафедра сайтостроя >>u/104773 а в ней тонны ссылкоты
> Ну нахуя я трахал себе мозги этим сраным универом, когда от него толку ноль без палочки?
Действительно. Универ нинужен. Недавно вот с одноклассницей, что сейчас учится на третьем курсе бюджета топового технарского ДС-вуза, общался. В общем нинужен универ. Теперь я в этом убедился.
>> No.35398 Ответ
Файл: 22f7ef0a72895f7c4271dfd048cea457[1].jpg
Jpg, 3022.84 KB, 2000×2963 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
22f7ef0a72895f7c4271dfd048cea457[1].jpg
>>23225
Доброчан, выручай. Сейчас я занимаюсь версткой одного сайта и вроде все должно близиться к концу, но Flash не дает мне сделать это. Дело в том, что я прописал вертикальное, правостороннее меню с подкатегориями, все должно быть хорошо, но Flash прикрывает своей интегрированной тушей эти всплывающие подкатегории. Скажи, что мне сделать?
>> No.35399 Ответ
>>35395
Линупс. Ситуация с попытками запуска fastcgi с fpm не изменилась. Я взялся за это потому, что при открытии файлов в phpstorm вылазила ошибка "Включите CGI". Сейчас в phpinfo по-прежнему стоит Apache 2.0 Handler, но ошибка, просящая CGI в phpstorm пропала куда-то.

Как должны выставляться владельцы и права в папке /var/www и её подпапках? При открытии свойств папок в sudo nautilus после изменений пользователя на не-рут наутилус умудряется падать с ошибкой "не могу определить владельца".
>> No.35400 Ответ
>>35395
> Асло в /u/ есть кафедра сайтостроя >>u/104773 а в ней тонны ссылкоты
В основном только о языках и кодинге. Да, это любой идиот судя по всему может легко нарыть и понять. А вот о запуске и настройке апача, ИНТЕРПРЕТАТОРА пхп, об IDE.
>> No.35401 Ответ
>>35400
И о фреймворках ещё.
C:решимость коллайдер десы унылый полный
>> No.35402 Ответ
>>35399
> Как должны выставляться владельцы и права в папке /var/www и её подпапках?
На домашней машине как угодно. А вообще мог бы подредактировать конфиги апача и переместить локалхост в район ~/www
> наутилус умудряется
Пользуйся консолькой во имя добра.
Ставь на рабочий стол google://linux+cheat+sheet+wallpaper

>>35400
> о запуске и настройке апача, ИНТЕРПРЕТАТОРА пхп
google://how+to+install+lamp+ubuntu
https://help.ubuntu.com/community/ApacheMySQLPHP
Или хинт: ставить xampp
> об IDE
Об IDE нужно читать доки этой самой IDE. А так многие предпочитают пользоваться обычными текстовыми редакторами.

>>35401
> И о фреймворках ещё.
О фреймворках лучше читать в документациии этих фреймворков. Для всех популярных есть туториалы на русском. Можешь читнуть код ещё. Для общего развития.
>> No.35423 Ответ
Я знаю, что это дурацкий вопрос тем не менее. Тут описывается система безопасности Symfony2:
http://symfony.com/doc/current/book/security.html
Вопрос - в каких случаях эта штука используется и для чего? Для любой авторизации пользователя, которая только бывает на сайте или не для всей? Если я просто буду принимать по POST логины и пароли и запоминать авторизацию в сессии, то будет небезопасно? Если создаётся форум на симфони(предположим), то вся база аккаунтов будет тоже идти через эту систему секьюрити?
>> No.35430 Ответ
Как на убунту13.10/апач2.4 перенести /var/www в хомяк? Простое изменение DocumentRoot в sites_available/000-default.conf приводит к тому, что при обращении на страницу выдаётся "Forbidden". Вся папка вместе со всем содержимым установлена в 777 и принадлежит самому пользователю.
>> No.35432 Ответ
>>35430
Говорят, надо ещё добавить в этот же конфиг строку с AssignUserId. Эта штука должна заработать благодаря apache2-mpm-itk, которую я уже установил через apt-get. Но вот при перезагрузки апача, он пишет, что не знает никакой AssignUserId. Может, этот apache2-mpm-itk надо как-то подключить к апачу?
>> No.35433 Ответ
>>35432
На силу подключил через a2enmod mpmitk. Апач перед этим потребовал отключить mpmprefork через a2dismod. Прописал AssignUserId на "пользователь пользователь"(имя пользователя). Рестартнул апач. Всё равно форбиден.
>> No.35436 Ответ
>>35433
Прописал везде DirectoryIndex. Проекты без фреймворка заработали. Проект на symfony так и остался форбиден. Попытался очистить его кеш ресурсов с помощью встроенной в него app/console. Так он пытается зайти в папку кеша в старом каталоге на /var/www/. А в доках написано, что все пути относительные и можно переносить по каталогам, сколько влезет! Фрактальный ад какой-то.
>> No.35927 Ответ
>>23225
В php вообще есть нормальный ассоциативный массив типа map в С++? Обычный массив только строки и числа для ключей использует, а SplObjectStorage просто убила меня тем, что он содержит только ссылки на объекты и считает равными только ключи, ссылающиеся на один объект, но не ключи, ссылающиеся на два одинаковых.
>> No.35932 Ответ
>>35927
1. В php нет обычных массивов. И это проблема похуже, чем твои проблемы с ограниченностью массивов ассоциативных. Про SplFixedArray не надо говорить - почему я должен им пользоваться? Почему в самом языке нет нормальных массивов?
2. php тебе не нужен. Возьми Ruby, там в качестве ключа может быть что угодно, что обладает методом hash. Из коробки нормально можно использовать в качестве ключа даже массив произвольных объектов.
>> No.35933 Ответ
>>35927
wait... Или тебе обязательно нужна упорядоченность по ключам?
>> No.36036 Ответ
Файл: disappointed-cat-is-disappointed-lolcats-yeyF7P.jpg
Jpg, 34.34 KB, 510×327 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
disappointed-cat-is-disappointed-lolcats-yeyF7P.jpg
Суп, котаны.
Сколько в Москве не стремно просить junior/middle похэпэ-погроммисту? А то я 100тыр поставил в hh, меня только на сеньора/тим-лида собеседуют.
Может вернуться в родной Мухосранск?
>> No.36037 Ответ
>> No.36039 Ответ
>>36037
Как-то уныленько.
>> No.37093 Ответ
Как правильно выглядит workflow разработки сайтов на популярных похапешных CMS? Правильно ли я понимаю, что про git можно забыть? Из-за того что надо работать отчасти в админке и половина разрабатываемого сайта в БД. Выходит, так круто расписанную историю изменений с возможностью вернуться к любой точке не сделаешь?

На CMS обычно работают локально или прямо на ftp хостинга. Работодатели говорят работать на ftp, но так у меня IDE и редакторы тупят и я вообще не знаю, как дебаггер запускать. Можно дебаггер запустить на хостинге?
>> No.37144 Ответ
>>37093
Если у тебя бд однозначно описывается моделями или имеется механизм миграции, то гит не помешает.
>> No.37145 Ответ
>>37093
> круто расписанную историю изменений с возможностью вернуться к любой точке не сделаешь?
Если не реализовано в самой CMS, то в твоем случае, полагаю, никак.
Git имеет смысл использовать, если, например, ты меняешь какие-либо файлы. Будь это скрипты самой CMS, или если шаблоны CMS хранятся в файлах...
> На CMS обычно работают локально или прямо на ftp хостинга.
У CMS обычно есть веб-интерфейс, на то она и CMS.
> я вообще не знаю, как дебаггер запускать.
И зачем тебе дебаггер? У популярных CMS должен быть вывод ошибок в лог.
>> No.37149 Ответ
>>37145
> Git имеет смысл использовать, если, например, ты меняешь какие-либо файлы. Будь это скрипты самой CMS, или если шаблоны CMS хранятся в файлах...
Я одновременно и это делаю и в админке что-то. Потому, что что-то делается только в файлах, а что-то только в админке.
> У CMS обычно есть веб-интерфейс, на то она и CMS.
Ну и как я буду шаблоны переопределять в веб-интерфейсе? Учитывая, что это большая часть работы.
> И зачем тебе дебаггер?
Чтобы дебажить шаблоны эффективнее. Просматривать, что происходит.

CMS создают у меня ощущение, что с ними только в quirks-режиме работать можно. Ни гита, ни дебаггера. Кстати, недавно познакомился с LocomotiveCMS на руби. Там разделены разработка и работа с сайтом через админку. Сначала ты генерируешь, конфигурируешь и кодишь шаблоны через консолько и текстовый редактор без БД, а потом уже консольной командой натягиваешь админку, подключающуюся к БД. Но рынок, конечно, чихал на рубистские CMS для хипстеров. Так что хуй тебе.
>> No.37153 Ответ
>>37149
> Просматривать, что происходит.
Лей в лог.
> CMS создают у меня ощущение
СMS сделаны для управления контентом, а не для разработки. Если ты вносишь изменения в СMS и как частный случай изменения в структуру базы, то нужно заводить саму CMS или шаблоны в git писать миграции на базу.
>> No.37154 Ответ
>>37153
Я не вношу измнения в структуру базы, я шаблоны натягиваю, верстаю, пишу css и js.
> Лей в лог.
Но ведь это дольше! И не так удобно! И так информативно! Почему похапешники такие простые люди, не стремящиеся вообще никак к увеличению производительности труда?
>> No.37166 Ответ
>>37154
> похапешники - обезьяны, не стремящиеся вообще никак к увеличению производительности труда
Пофиксил тебя.
>> No.38102 Ответ
Файл: June_odd-eyed-cat_cropped.jpg
Jpg, 560.33 KB, 1858×1565 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
June_odd-eyed-cat_cropped.jpg
Котаничи, есть один говнокод. Как мне сделать так чтобы у классов B и C были разные значения статической переменной lalka?

http://ideone.com/WyXYkY
>> No.38225 Ответ
Файл: Tengen.Toppa.Gurr...
Jpg, 212.42 KB, 1920×1050
edit Find source with google Find source with iqdb
Tengen.Toppa.Gurren-Lagann.full.174481.jpg
Файл: 1395395614020.png
Png, 1.02 KB, 300×20
edit Find source with google Find source with iqdb
1395395614020.png

Это прорыв, посоны!
http://www.opennet.ru/opennews/art.shtml?num=39368
> Facebook представил новый язык программирования Hack, основанный на синтаксисе языка PHP и предназначенный для выполнения с использованием виртуальной машины HHVM (HipHop Virtual Machine). Приложения на языке Hack могут бесшовно взаимодействовать и сочетаться с существующим кодом на языке PHP, так как окружение HHVM поддерживает выполнение и немодифицированных PHP-скриптов. Код Hack распространяется под свободной лицензией PHP. Реализация языка уже опробована в промышленной эксплуатации, в частности, Facebook уже перешёл на использование Hack и перевёл на данный язык практически весь код своих PHP-проектов.
>> No.38234 Ответ
Файл: six_string_car.jpg
Jpg, 31.87 KB, 720×395 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
six_string_car.jpg
>>38225
Пых целиком состоит из фич, бездумно утащенных из других языков. Прорыв заключается в том, что к ним прибавили ещё статическую типизацию, украденную из турбопаса, и дженерики, украденные из шарпа. Пикрелейтед.
>> No.38244 Ответ
>>38234
Горбатого могила иправит. Что все так за него держутся? Применяй они вместо него жс, и то лучше было б.
>> No.38247 Ответ
Файл: meme-costume-hipster-ariel.jpg
Jpg, 39.58 KB, 400×475 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
meme-costume-hipster-ariel.jpg
>>38244
Или руби например.
>> No.38248 Ответ
>>38247
Почему любое отклонение от MySQL+PHP ассоциируется с хипстерами? Что заставляет так безумно держаться за это говно? А ещё говорят:"В вебе всё быстро развивается".
>> No.38250 Ответ
Файл: 6456760-se-470-new.jpg
Jpg, 226.95 KB, 470×628 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
6456760-se-470-new.jpg
>>38248
Ну а ты чего хотел? Стереотипы и штампы везде же. Например лисп/эрланг/хацкель-программисты представляются людям как суровые бородатые дядьки.
>> No.38252 Ответ
>>38250
Я не это имел в виду. Я говорю, почему так держатся за MySQL+PHP. Тэхнологии развываются не так быстро как мне обещали. Я разочарован.
>> No.38256 Ответ
Файл: 610836089.png
Png, 135.54 KB, 363×443 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
610836089.png
>>38225
Лет через 5 пхп превратится в сисярп.
>> No.38257 Ответ
>>38256
Что ты имеешь в виду?
>> No.38258 Ответ
>>38257
В пых несут всё больше фич из сисярпа, осталось сделать linq например, скоро своего пыхового говна останутся жалкие крохи (типа $ и ->).
>> No.38259 Ответ
>>38258
Нубовопрос: а что в php делает ->? Неужели там есть указатели (см. значение оператора -> в C/C++)?
>> No.38260 Ответ
>>38259
В пыхе точка - это конкатенация, поэтому доступ в неймспейсу через бэкслеш, к статическим элементам через двойное двоеточие, а стрелка - доступ к элементам объекта. Упорото, неправда ли?
>> No.38261 Ответ
>>38260
А эту ссаную точку как оператор конкатенации сделали из-за того что оператор плюс неявно приводит операнды к числовому типу. Вообще в пыхе все эти неявные преобразования являются причиной непонятных логических ошибок, нежели помогают кодить.
>> No.38262 Ответ
>>38261
В том же жабаскрипте ещё более наркоманско с одним плюсом, так что это ещё ничего.
>> No.39049 Ответ
Есть ли хоть какой-то способ вызвать приватный метод внутри лямбды, созданной внутри метода класса в php 5.3? В методе я могу воспользоваться приватным методом, а в лямбде, которая написана в этом методе, - нет. Нельзя как-нибудь протянуть туда объект или сам приватный метод? Пришлось пока открыть эти методы. Я просто в ахуе с вашего языка. Кроме верстальщика и манагеров больше на нём никто и не может писать, это не для кодеров. Надо найти другую работу, эх...
>> No.39050 Ответ
>>38260
> Упорото, неправда ли?
это заимствовано из перл.
>> No.39085 Ответ
>>39049
А почему бы не использовать >= 5.4?
>> No.39088 Ответ
>>39085
Начальники считают, что нам надо держаться 5.3. Их любимый хостинг из коробки имеет 5.3. И 5.3 - это минимум для их любимой цмски.
>> No.39089 Ответ
Файл: 3Window95_Reuters.jpg
Jpg, 177.46 KB, 940×676 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
3Window95_Reuters.jpg
>> No.39095 Ответ
Файл: 484-dicaprio-inception.jpg
Jpg, 14.20 KB, 350×350 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
484-dicaprio-inception.jpg
>>39049
> Есть ли хоть какой-то способ вызвать приватный метод внутри лямбды, созданной внутри метода класса в php 5.3?
>> No.39106 Ответ
>>39095
Ну ты же даже не представляешь, для чего нужны лямбды, я же уверен. И небось считаешь, что это "ненужное говно". Я прав?
>> No.39123 Ответ
>>39106
> Я прав?
Нет, не прав. Просто я считаю, что ты ░░░░░░░░░░░ ░░░░░░.
>> No.39125 Ответ
>>39123
Что же я делаю не так? Для чего по-твоему лямбды?
>> No.39328 Ответ
Няши, кто может закомментить index.php шаблона джумлы? С меня много доброты.
>> No.39342 Ответ
>>39125
Для того, чтобы не выделять имя под функции непонятного или минимального функционала, например инлайнить return 0 для функций с колбеком. Ты реализовал какую-то жирную лямбду со своим методом.
Я бы не ожидал от безкостыльных языков существования обращения к анонимным функциям, но это же php, так что твой вопрос таки имеет смысл.
В нормальных ЯП даже мультистрочные лямбды запилить нельзя, и это совершенно правильно.
>> No.39343 Ответ
Файл: un.jpg
Jpg, 575.59 KB, 1400×785 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
un.jpg
>>39342
> считает, что анонимные функции должны чем-то отличаться от именованных
> В нормальных ЯП даже мультистрочные лямбды запилить нельзя, и это совершенно правильно.
> нормальные языки
> Пытхон
>> No.39344 Ответ
>>39343
Типичный форчанец детектед.
>> No.39345 Ответ
>>39344
Ну как ещё реагировать на рассуждения питонокодера о дизайне языков?
>> No.39346 Ответ
>>39345
Питон - идеальный язык, тащемто. Решительно не понимаю твоей истерики.
>> No.39347 Ответ
>>39346
Да, человеку, знакомому только с кубейсиком, он действительно таким может показаться.
>> No.39349 Ответ
>>39347
Кресты, жаба, шарп, жс, пыха. Говори свой идеальный язык или иди нахуй.
>> No.39351 Ответ
Файл: locksmith.jpg
Jpg, 61.06 KB, 400×291 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
locksmith.jpg
>>39349
> Кресты, жаба, шарп, жс, пыха.
Ну, что я говорил. Одна убогая императивщина, один сраный интерпрайз. Это как судить об онеме по полутора хентайным тайтлам: естественно, кейон после этого идеалом покажется.
>> No.39352 Ответ
Файл: 29010.jpg
Jpg, 54.52 KB, 225×350 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
29010.jpg
>>39346
Вот например в сисярпе, скале и руби норм ООП, а в питухоне днище какое-то сбоку припека.
>> No.39353 Ответ
>>39352
> ООП
> 2014
>> No.39354 Ответ
>>39353
Ваши предложения?
>> No.39359 Ответ
>>39351
Лол. Чому ты такой жирный?
>> No.39360 Ответ
>>39359
Жирный? Я просто в курсе про blup paradox. Бесполезно что-то объяснять человеку с таким гигантским кругозором: жс, кресты, пайтон. Расскажешь ему про системы типов и статическую верификацию, он тебе ответит "а у нас тест-драйвен дивелопмент". Расскажешь ему про модели исполнения, отличные от фортрановской, он ответит "это усложняет код, ненужно". Про чистые функции - "хлебни борща". Всё, что тут можно делать - издеваться.
>> No.39361 Ответ
>>39360
> Всё, что тут можно делать - издеваться.
Ну вот и не обижайся.
>> No.39368 Ответ
>>39360
Что за blup paradox?
>> No.39369 Ответ
Файл: ЛампочкаСырно.jpeg
Jpeg, 39.07 KB, 400×400 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
ЛампочкаСырно.jpeg
>>39368
Ну это как ебаться_
>> No.39370 Ответ
Файл: talking_captcha.png
Png, 0.84 KB, 300×20
edit Find source with google Find source with iqdb
talking_captcha.png
Файл: kimonotocat.png
Png, 135.35 KB, 896×896
edit Find source with google Find source with iqdb
kimonotocat.png

>>39346
> Питон - идеальный язык
<страшная сказка про строки и кодировки>
Кроме того утиная типизация ни когда не была хороша.
А ещё GIL. А ещё... Да много чего. У каждого ЯП дофига проблем. Нет единственного языка, который можно считать идеальным же. Есть ЯП, которые хорошо решают свои задачи.

Например PHP неплохо умирает, но плохо подходит джля постоянно запущенных прог.
Ruby любят за сладкий синтаксис. До тех пор, пока не заработают диабет.
Кресты. Это целых два языка в одном. Посмотрите код boost и вы поймёте о чём я. Это сильное колдунство. Это чёрная магия.
Няшный просто создан для разговоров с железом без посредников. Только ты, Си, свеча, бокал вина и кусок кремния.
Лисп просто необходим вам если вы любите смайлики. Вы можете изменять программу не вырубая её. Если вы не любите смайлики, то можете попробовать TCL если конечно у вас пол-литра чистого спирта под боком.
Хаскел просто необходим вам в спорах об илитарности. Некоторые используют его в коммерческих разработках, но не вы. Плак плак.
Джаваскрипт используют просто изза отсутствия альтернатив. Кстати это единственный ЯП в мейнстриме с прототипным ООП.
Ява, Сисярп просто необходимы ежели хочется немного абстракционизма. Именно тут лучшее место для применения паттернов. Ты можешь применить все из них и всё равно будет мало.
Perl. Просто Perl. Ты знаешь о чём я.
Лично я стараюсь проповедовать знание множества ЯП. Впрочем я упоролся Golang. С этой дряни сложно слезть. Там есть минимализм. Там только один цикл вместо двух или трёх. Там нет полноценного ООП. Там указатели реальны, но не имеют арифметики. Там хорошая стандартная библиотека и удобный инструментарий. Он хорошо выполняет те задачи, которые мне требуются. Но выбор инструмента зависит от задачи. Иногда выбора нет и ты программируешь на паскале нет, это был лишь кошмарный сон.

:wq
>> No.39371 Ответ
Файл: 764329736.jpg
Jpg, 30.34 KB, 455×301 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
764329736.jpg
>> No.39374 Ответ
>>39360
> blub paradox
Во первых, опечатка.
Во вторых - я с ним не согласен. Ты же не хочешь покушать говна? Ты же не отрицаешь, что человек неспособен использовать неточные критерии годности?
С точки зрения логики - безумно считать правильной точку зрения только потому, что ее отстаивает тот человек, который её знает. Но выход из парадокса предлагается именно этот. *Я ЕМ ГОВНО, А ЕСЛИ ВАМ ЭТО НЕ НРАВИТСЯ ПОПРОБУЙТЕ ПОЕСТЬ ГОВНО, ЧТОБЫ ЭТО ДОКАЗАТЬ.*
В третьих - языки имеют общие парадигмы и инструменты. Зная некоторую часть их набора, можно аппроксимировать.
>> No.39376 Ответ
>>39374
> языки имеют общие парадигмы и инструменты
В тех языках, которые он перечислил, парадигм в сумме наскребётся где-то на полторы.
> Зная некоторую часть их набора, можно аппроксимировать.
Этот набор 1) должен быть полным 2) чёрта с два ты в т.н. "мультипарадигменных" языках изучишь парадигму, которую не знаешь. Дай паскалисту скалу, он будет писать на ней как на паскале, и нахрен ему не сдались остальные фичи.
> безумно считать правильной точку зрения только потому, что ее отстаивает тот человек, который её знает
Дурак что ли? Никто так не считает. Парадокс о том, что человек не может понять, нужно ему знать что-то или нет до тех пор, пока он это не узнает. Правильная, не правильная точка зрения - об этом вообще ничего не говорится. Этот парадокс только говорит, что невежды не должны судить о том, чего не знают.
> Я ЕМ ГОВНО, А ЕСЛИ ВАМ ЭТО НЕ НРАВИТСЯ ПОПРОБУЙТЕ ПОЕСТЬ ГОВНО, ЧТОБЫ ЭТО ДОКАЗАТЬ.
Только на самом деле ты ешь говно прямо сейчас, потому что в жизни не видел никакого хлеба, кроме сладкого. Людская ненависть к познанию чего-то нового вообще забавна.
>> No.39377 Ответ
Как я обожаю эти все споры.

>>39376
> невежды не должны судить о том, чего не знают.
Обычно подобное незнание ведёт к срачам о синтаксисах и парадигмах.
> ешь говно прямо сейчас
> не видел никакого хлеба, кроме сладкого
Лол.
> Людская ненависть к познанию чего-то нового вообще забавна.
Попробуй попрограммировать ня Няшном и js до состояния понимания как оно работает в деталях. Заделай маленькую операционку на обоих. Пару игор на яве заделай под ведро. Ещё чегонить заделай. Робота на ардуинке там.

На самом деле декларативное программирование далеко не всем и не всегда подходит. Не инструменты выбирают задачу, а задача инструменты.
>> No.39386 Ответ
>>39377
Няша, я где-то полгода занимался мэйнтенансом кода ня няшной. Я починил десятки, пожалуй, самых неочевидных ошибок, которых не было бы в нормальном языке. Няшную пора закапывать вместе с половиной кода на ней.
> js, andriod, arduino
В треде запахло школьными завтраками.
>> No.39399 Ответ
>>39386
Няшная нужна железячникам. Для разных задач лучше подходят разные ЯП. А жаль что нет такой серебряной пули, чтоб сразу все парадигмы, норм синтаксис, компиляция в бинарь для продакшена и запуск с jit-компиляции для быстрой разработки.
>> No.39400 Ответ
>>39399
> Для разных задач лучше подходят разные ЯП.
Дурень! Я про это в >>39370 написал уже.
>> No.39405 Ответ
>>39399
Хватит повторять эту мантру. Няшная придумывалась в те времена, когда альтернативой ей был дырокол. Тогда это был хороший язык. Сейчас на языке, где нет вообще никакой защиты памяти, где с абстракциями можно работать только путём каста в void*, где оптимизирующий компилятор вынужден ванговать желания программиста, может программировать только упоротый мазохист. CS шагнула далеко с тех пор, возможность придумать язык для низкоуровневых вещей с большей защитой от дурака и UB уже есть. Возможно, такие языки уже есть, не интересовался.
Няшная не нужна. Хватит насиловать труп.
>> No.39406 Ответ
>>39405
> нет вообще никакой защиты памяти
Есть много мест, где она и ненужна и даже вредна.

Кроме того у Си не отнять возможность превращаться в код на любой платформе. Начиная от arm, avr, x86 и компании, явамашины и заканчивая другими языками включая js.
> Возможно, такие языки уже есть, не интересовался.
D, Rust на сколько я знаю. По меньшей мере.
>> No.39407 Ответ
>>39406
> Есть много мест
Как всегда с тебя примеры.
> Кроме того у Си не отнять возможность превращаться в код на любой платформе.
Только работать одинаковый код на разных платформах может по-разному, ага. Кастани, к примеру, указатель на инт в указатель на чар и наслаждайся секасом с endianness. И это обычная практика.
> явамашине
С для jvm? О боги, скажите, что это дело запилил пьяный компиляторщик в шутку.
>> No.39413 Ответ
>>39407
> Кастани, к примеру, указатель на инт в указатель на чар
и получи от меня в ебало.
> С для jvm?
Насчет этого не знаю, а вот "C to JS", похоже, есть. Компилируется в JS, требующий либу "asm.js".
>> No.39436 Ответ
>>39413
> и получи от меня в ебало.
Это, типа, твой аргумент в пользу того, что на сишке можно писать кроссплатформенный код? Негусто.
Няшка, без этого ты, к примеру, со linux kernel списками работать не сможешь. Короче, я понял: ты очередной даун, думающий, что человек умнее машины и что bondage&discipline должен осуществляться средствами тимлида, а не компилятора. Желаю тебе закончить дни в мейнтенансе дохнущего проекта. Никогда не занимайся разработкой чего-то нового, особенно вещей, связанных с безопасностью и криптографией.
>> No.39437 Ответ
>>39413
> Компилируется в JS, требующий либу "asm.js".
Это не либа, а подмножество JS, которое легко оптимизировать. Полноценно есть только в лисе, но и хром неслабо оптимизирует код, написанный в таком стиле. http://asmjs.org/spec/latest/
>> No.40006 Ответ
Файл: 5280788451_8d9bedcb61_z.jpg
Jpg, 126.28 KB, 427×640 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
5280788451_8d9bedcb61_z.jpg
Вечер в хату, котаны.
Мне тут на работе для юнит-тестирования пришлось в проекте всё, что вызывает курл, обернуть. Я значит сделал интерфейс CurlWrapperInterface с двумя классами CurlWrapper и CurlTestWrapper данный интерфейс реализующие. Типа сервайс-локатор их потом инстанцирует.
Дык вот, тим лид мне говорит что лучше было вместо интерфейса наследование сделать.
Как по-вашему более феншуйно такую вещь следовало бы с делать?
>> No.40007 Ответ
>>40006
Без ООП вообще. В php оно нахуй не сдалось.
>> No.40011 Ответ
>>40007
Не смешно. Вообще не смешно нихуя. Что у тебя на работе за задачи и на каком языке? Серьёзно. Если бы ООП было не нужно, то и юнит-тесты и подавно. Тем более как эту задачу решать без ООП уже даже не понятно.
>>40006
А что конкретно тимлид говорит? Если сделать просто CurlTestWrapper наследником CurlWrapper, то вместо трёх сущностей только две и часть CurlWrapper в CurlTestWrapper может быть использована прямо.
>> No.40013 Ответ
Файл: tachikoma2.jpg
Jpg, 311.25 KB, 800×604 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
tachikoma2.jpg
>>40011
Он говорит, что наследование проще и понятнее, типа интерфейс там ни к чему. В принципе оставили пока мой вариант, ибо юнит-тесты работают, что главное.
>> No.40584 Ответ
Файл: PHP.JPG
Jpg, 2750.18 KB, 4320×3240 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
PHP.JPG
PHP: сила, с которой надо считаться!
>> No.40585 Ответ
>>40584
Лойс.
>> No.40586 Ответ
Файл: Cirno.jpg
Jpg, 63.97 KB, 550×550 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
Cirno.jpg
Кстати, а где бы почитать о планах разрабов по пхп7?
>> No.40587 Ответ
Файл: Random-cirno-(35).jpg
Jpg, 139.93 KB, 1599×926 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
Random-cirno-(35).jpg
>> No.40588 Ответ
Файл: 560.png
Png, 466.21 KB, 600×450 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
560.png
>> No.40589 Ответ
Файл: !1302970426478.png
Png, 363.68 KB, 896×1074 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
!1302970426478.png
>>40588
В каждой шутке есть доля шутки.
>> No.40590 Ответ
Файл: 1236199911451.jpg
Jpg, 50.57 KB, 333×450 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
1236199911451.jpg
>> No.40600 Ответ
>>40584
CAUTION SITE ENTRANCE
>> No.43133 Ответ
Можно ли сделать чтобы функция запускалась там где она прописана в коде, а не там где её вызвали ?

Ну то есть:

<?php

function showText()
{
echo("222");
}

echo("111");

showText();

?>

В результате в окне браузера 222 будет идти после 111.

А если мне нужно чтобы 222 шёл перед 111 ? При этот запись "showText();" в коде по прежнему должна быть прописана после "echo("111");" ?





Капча убиваю жалею
>> No.43134 Ответ
>>43133
Не хочу тебя обидеть, но это звучит как полный бред. Настолько, что мне стало интересно. Зачем ей идти перед и так вызываться?

Интуиция подсказывает, что возможно у тебя какая-то проблема с имеющимся кодом, которую можно решить, если отловить echo("111"); с помощью ob_ функций. Но это костыль, который используют только в абсолютно исключительных случаях. В пхп арсенале много таких костылей.
>> No.43139 Ответ
>>43134
Чёрт, мне всё ещё любопытно, зачем это было нужно.
>> No.43156 Ответ
>>43134

Можно еще так сделать:
call_user_func(function() {
    echo "222\n";
});

echo "111\n";
>> No.43204 Ответ
Ребята, нуб ИТТ. Что нужно, чтобы написать качалку картинок со страницы?
У меня такое представление:
1. Получить исходный код страницы.
2. С помощью регулярок вычленить все img src=...
3. Адрес засовывать в fileputcontents
4. Продолжать, пока находятся соответствия регулярке на странице.
>> No.43207 Ответ
>>43204
Типа того. Но лучше сразу переходи на curl и simplehtmldom.
>> No.43208 Ответ
>>43204
Напиши в командной строке:
wget -r -p -np http://страни.ца
>> No.43209 Ответ
>>43204
> Адрес засовывать в fileputcontents
Адрес засовывать в массив, а потом просто file_put_contents(json_encode($addresses)). Не нужно думать, что внутри текстового файла, сериализацию уже изобрели.
Кроме того парсеры html уже изобрели и их, вообще говоря, нельзя лепить из регулярок. Есть SimpleHtmlDom, но у меня с ним были траблы, было вроде получше что-то. На поддоменах он у меня рушился вроде.
http://stackoverflow.com/questions/3577641/how-do-you-parse-and-proces[...]n-php
Регулярками ты забудешь про пробелы между img и src, порядком атрибутов в теге, кавычках двойных и одинарных и прочем.
>> No.43210 Ответ
>>43204
За использование регулярок для разбора XML/HTML нужно кастрировать столовым ножом.
>> No.43211 Ответ
>>43210
Зачем так резко, могут быть причины какие-то. Особенно если хтмл-ку уже кто-то кастрировал чем-то.
>> No.43220 Ответ
Ребята, спасибо за ответы. Скриптик с использованием SimpleHtmlDom уже в кроне и ворует картинки с анимешными девочками.
>> No.43263 Ответ
Файл: 14334131747083.jpg
Jpg, 49.91 KB, 604×455 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
14334131747083.jpg
Спрошу тут. Посоветуйте хорошую книжечку по пехепе для начинающих. Желательно написанную живым языком, с большим кол-вом примеров и их детальным разбором. Просьба не рекомендовать сайт, который на "народ.ру", знаю его, не понравился..

И ещё глупый вопрос. Что такое библиотеки и как ими пользоваться?

картинка случайная
>> No.43264 Ответ
>>43263
> Посоветуйте хорошую по пехепе
/0
> хорошую для начинающих
Снова /0

На php.net есть тьюториал. Сначала учить питон или что-то по нормальной книге, потом полистать php.net. По=хорошему придётся учить ещё и ООП отдельно. Всё остальное, цсс и прочее - тоже отдельно от пехепе.
> Просьба не рекомендовать сайт, который на "народ.ру", знаю его, не понравился
Вообще без понятия, что это мог быть за сайт, если честно
>> No.43265 Ответ
>>43263
Скляр Д., Трахтенберг А. PHP. Сборник рецептов.
>> No.43268 Ответ
>>43265
Говно мамонта. PHP в этой книге и PHP сейчас - почти как два абсолютно разных языка. 2005 год, лол. Да ещё к тому же хорошие практики и стиль кода вообще не рассматриваются. Даже самые элементарные косяки при написании кода не рассматриваются.
> Однако тот, кто хочет, чтобы PHP был настоящим ОО языком, возможно, будет разочарован. По своей сути PHP - язык процедурноориентированный. Это не Java.
На костёр, лол.

Неймспесы? Автолодер классов? Исключения? Спецификаторы доступа? Анонимные функции? mb_ и utf-8? И т.д. и т.п.

Пишет про global - подтягивание глобальных переменных в функциях и даже не думает написать что-нибудь про то, что это лучше делать как можно реже хотя бы.
> Посимвольная обработка строк
работа с utf-8-строками не разобрана. Решение, которое там указано на кириллице не будет вообще работать.
>> No.43273 Ответ
>>43268
> Неймспесы? Автолодер классов? Исключения? Спецификаторы доступа? Анонимные функции? mb_ и utf-8?
Это всё в похапе нинужно. Для задач на таком уровне есть C#, Java, Scala, D, Rust, C++11 наконец.
>> No.43274 Ответ
>>43273
Ну так учи C#, Java, Scala, D, Rust, C++11 наконец и не еби вола. Похапе вообще ненужно в принципе, если так. Все задачи уровнем ниже решены в виде готовых решений. На рынке в вакансиях всё вот это нужно. И они решают задачи на таком уровне, нравится тебе(и мне) это или нет. А всякие Scala, D и Rust вообще на задворках. Тем более, речь о синтаксисе, ты без этого чужой код не поймёшь.
>> No.43394 Ответ
>>43274
Scala - это подсахаренная Java. Синтаксис учится за час.
>> No.43395 Ответ
>>43394
Синтаксис любого языка учится за час. Scala - это gateway drug to Haskell. Вот не надо говорить о том, в чем не разбираешься. Вводишь доброчанек в заблуждение только, хоть прям тред посвященный скале открывай, что жеж такое-то.
>> No.43396 Ответ
>>43395
Я прочитал книжку scala for the impatient и полистал исходники ЛОРа например. Да, чуток прифункционаленная, но жаба жабой.
>> No.43397 Ответ
>>43396
Вы уже обсуждали это миллион раз. И ни одного нового аргумента.
>> No.43458 Ответ
Файл: PHP.png
Png, 100.07 KB, 309×360 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
PHP.png
>> No.43528 Ответ
Файл: 1288789691171.png
Png, 482.64 KB, 600×401 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
1288789691171.png
Посоны, накидайте плиз статей о вреде array oriented programming, я на работе тимлиду хочу раскидать за ооп, контракты и всю фигню. А то меня заебали эти блядские массивы в коде повсюду. Кстати коды ошибок возвращать вместо кидания исключений мне тоже не нравится.
>> No.43529 Ответ
>>43528
У Мейера долго и муторно в его книге по ООП объясняется, зачем это всё нужно. Но ты их не переучишь. Потому что на изучение ООП можно потратить много времени. Легче сменить работу. Тем более если у вас cmsка вместо фреймфорка, там вообще ооп особо не запилишь.
>> No.43636 Ответ
>>43528
> Хочу заставить всех писать строго в ООП-стиле
> Не могу пояснить, чем оно лучше
Вся суть.
>> No.43671 Ответ
>>43528
Скажи ему, что php это не тот ЯП, с которым надо думать о производительности. Если нужна производительность, то в первую очередь стоит сменить язык например на golang. Посчитай, сколько времени займёт переписывание и сколько времени это позволит выиграть в будущем. При этом дай пессимистичную и оптимистичную оценку того и другого. Кроме всего этого сделай набросок той архитектуры, которую ты хочешь предложить в замен. Смотри в первую очередь на те участки кода, которые изменяются больше всего с течением времени. На этих участках архитектура должна проявлять гибкость. На остальных не должна. При создании архитектуры следует помнить, что многие в команде могут про твоё ооп не знать. Следовательно архитектуру надо делать максимально простой.
>> No.43672 Ответ
>>43671
> с которым надо думать о производительности
Они и так о ней не думают.
> Следовательно архитектуру надо делать максимально простой.
Это люди, для которых написать слово class и extends пару раз, значит написать мега-супер-систему. Они хотят начать вверху файла и внизу закончить. Больше всего бесит, что они реально экономят слова class, extends и function. И файлы экономят. Ну что мешает взять и написать слово function хотя бы ещё раз. Можно подумать, что их бьёт током, каждый раз, когда они видят эти слова. И что плохого, когда много маленьких файлов? Нравится смотреть на портянки длиной в километр с одинм и тем же набором изменяемых переменных на весь файл?
>> No.43675 Ответ
>>43672
> Это люди, для которых написать слово class и extends пару раз, значит написать мега-супер-систему.
В таком случае у тебя действительно мало шансов. Я бы применил такую стратегию: рефакторить те части, которые больше всего привлекают моё внимание и на все возгласы не делать подобное, потребовать предъявить веские причины этого не делать. Веские с точки зрения самого кода и его качества, а не с точки зрения "работает - не трожь".
> Они хотят начать вверху файла и внизу закончить.
Само по себе это не является плохим. На мой взгляд разумно делать каждый файл читаемым сверху вниз, а не в рандомной последовательности.
> И что плохого, когда много маленьких файлов?
Смотря на сколько маленьких. Нет особых причин излишне дробить сущности.
>> No.43680 Ответ
Добрый день, Доброкодеры.
Полгода назад вернулся из армии и не знаю с чего начать, чтобы сублимировать полтора года отсутствия практики, что вышло нового и интересного? Какие фреймворки интересные появились паттерны и т д... С связи с новой %%дерьмовой, низкооплачиваемой 16ти часовой%% работой думаю вернуться в стезю быдлокодирования программирования в вебе... В перспективе для побега смены работы... За плечами есть опыт, но он уже неактуален - хочу наверстать.
>> No.43684 Ответ
>>43680
За полтора года ничего не изменилось, скорее твои знания были устаревшими/недостаточными и до армии.
>> No.44256 Ответ
Файл: php7-logos.jpg
Jpg, 21.72 KB, 599×666 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
php7-logos.jpg
Поздравляю, товарищи!
>> No.44257 Ответ
>>44256
Пожалуй, пора всё-таки апгрейдиться с php3.
>> No.44258 Ответ
>>44257
Пхп7 слишком быстрый для своих задач. Такая скорость нинужна, страницы открываются слишком быстро.
>> No.44259 Ответ
>>44258
А ты слипов навставляй.
>> No.44260 Ответ
>>44259
Лучше убрать пару индексов.
>> No.44269 Ответ
>>44256
Они там совместимость ломают постепенно:
http://www.tonymarston.net/php-mysql/please-do-not-break-our-language.html
There are two things I expect from a language if I am going to continue using it for any length of time - stability and longevity. This means that code which I wrote 10 years ago should still run today, and should still run 10 years from now. There may be new features added to language, but the choice of whether or not to use these new features should be mine and mine alone. If I am forced to modify my code with each new version of PHP then I am unlikely to adopt each new version of PHP.
>> No.44270 Ответ
>>44269
Если бы пхп был с самого начала был спроектирован нормальными дядьками, а не был стихийно образовавшеся кучей мусора, то с этим бы проще было. А так приходится со временем выгребать мусор. Мы портировали с 5.5 на 7 проект в 200 тыщ строк без особых проблем.
>> No.44271 Ответ
>>44269
Пхп это такой дом в много слоев говна и палок.
Теперь разработчики пробуют заменить это на что-то нормальное, а поселившимся бомжам и так норм, они привыкли.
>> No.44280 Ответ
>>44271
> заменить это на что-то нормальное
Но зачем? Он же держится на этих бомжах, а для "чего-то нормального" есть другие языки.
>> No.44281 Ответ
>>44280
Ответ на этот вопрос никто не знает. Я пошёл в пхп, так как думал, что там вакансий больше. работадатели выбирают его, думая, что там больше кадров. Лучше бы я пошёл в джаву. Хочу как-нбудь всё таки пересть на неё или куда-нибудь.
>> No.44283 Ответ
>>44280
Что ломают совместимость, это хорошо. Ибо всё, что можно было написать, уже написано по десять-двадцать раз. Чтобы дать программистам работу, нужно поломать совместимость. Тогда работодатели начнут снова платить программистам, чтобы исправили вновь появившиеся ошибки.
>> No.44284 Ответ
>>44281
Большинство ЯП похожи друг на друга, главное - знать и понимать основные концепции и технологии программирования.
>> No.44288 Ответ
>>44283
Честно говоря эта параноидальная байка вымораживает. У меня от неё бровь дёргается. Ничего ещё не написали. И всех программ никогда не напишут. Программисты - это не люди, которые пишут код, это люди, которые определяют сущности и связи между ними в строго формализованной форме. Серебряных пуль, решающих все возможные задачи, не существует и не существовало. У Брукса ещё в 80-х было очень много написано на эту тему. Причём, чем больше задач начинает решать программа, и чем больше разных входных данных она может брать, и чем больше у неё гибкости, тем сложнее она становится в обращении и тем сложнее и дольше на ней решается отдельно взятая задача. Если увеличивать функциональность бесконечно, то никто кроме программистов уже не сможет её использовать.
>> No.44289 Ответ
>>44288
За последние годы вообще такой зоопарк всяких технологий развели, что специалистов даже не хватает. А тут работы нет, лол.
>> No.44291 Ответ
>>44289
Да вряд ли это из-за зоопарка.
>> No.44292 Ответ
>>44288
> Ничего ещё не написали.
Всё написано. Всегда есть библиотека (фреймворк, CMS, движок), которая решает задачу твоей программы эффективнее, чем твоя программа.
>> No.44293 Ответ
>>44292
Отлично, буду устанавливать клиентам фреймворк или движок и говорить:"Вот вам фреймворк, документация - там, счастливо оставаться".
>> No.44294 Ответ
>>44293
Так всегда и делают. Ставят CMS, натягивают шаблон и не пишут ни страницы кода.
>> No.44295 Ответ
>>44294
Для сайтов-визиток и интернет-магазинов - да, но, прикинь, на рынке есть и другие ниши, особенно энтерпрайз всякий. К тому же всегда кому-то дико печёт от того, что в его движке нет фичи Х и пошло-поехало.
>> No.44296 Ответ
>>44295
Именно для энтерпрайза характерно доминирование коробочных решений. Визитку можно написать самостоятельно, или на самописной CMS. А в каком-нибудь битриксе программирования будет нуль.
Программисты уже давно перестали собственно программировать.
>> No.44298 Ответ
>>44296
Зачем ты пытаешься мне объяснить, что я "уже давно перестал собственно программировать"? Энетерпрайз в смысле системы расчёта расходов, бух. учёт, эффективность, автоматизация бумажной волокиты и т.п. Пых стал меняться, когда его стали туда пихать.
>> No.44303 Ответ
>>44292
Ты ретард, фреймворк - это инфраструктурный каркас разрабатываемого веб-приложения, дающий тебе немного абстракции над источниками данных.
>> No.44308 Ответ
>>44289
Фокус в том, что современный зоопарк может сам себя обслуживать, имеет встроенные средства диагностики и выучиться управлять им - всё равно что научиться ездить на автомобиле. Может ты не будешь пилотом Формулы или асом езды по бездорожью, но в стандартных применениях ты всяко вырулишь. И в итоге как раз работы нет для специалистов, потому что тех, кто может копаться в кишочках, требуется не так много, как тех, кто может прочитать инструкцию, поставить галочки где надо или ввести нужные команды.
>> No.44319 Ответ
>>44308
Работы полно.
>> No.44320 Ответ
>>44319
Почему тогда в моём регионе нужны только эникеи для выездов к заказчику для переустановки Уиндоуз?
>> No.44324 Ответ
>>44320
Ну регионы - они такие. В миллионниках полно работы. Электричка, переезд или удалёнка.
>> No.44326 Ответ
>>44319
Большинство задач, стоявших перед веб-программистами несколько лет назад, решены джумлой.
>> No.44331 Ответ
>>44326
Веб не для сайтов.
>> No.44357 Ответ
>>44326
А оставшихся задач им хватит на безбедное существование еще лет так 30-40...
>> No.44583 Ответ
>>23244
> Во-первых, ядро линукса появилось в 1991 году, а нормальной десктопной операционной системы на базе этого ядра, по моему мнению, до сих пор нет
> Ubuntu
> Mint
> Debian
> ArcLinux
Парень, ты вообще опыт в работе хоть с одним дистрибутивом имел дело?
>> No.44584 Ответ
Я читаю вас и вижу, что большинство из вас дилетанты. Понимаю, кровь бурлит и всё такое, но заставьте себя не делать чёрно-белые выводы, особенно если знаете, что в вопросе нет.
>> No.44585 Ответ
>>44326
Ты с джумлой много работал? А с другими CMS? Ты понимаешь, что джумла это довольно популярная, но крайне уязвимая система?
>> No.44754 Ответ
В пхп есть нормальный способ сделать такое? http://ideone.com/3WGK6T
Т.е. прогнать некоторый код для списка значений и записать результат обратно.
Хотя там даже map через жопу.
>> No.44755 Ответ
>>44754
Чем тебя array_walk не устраивает, ёбт?
>> No.44756 Ответ
>>44755
Надо делать промежуточный массив и потом распиливать обратно. А если в числе значений и массив прокрутить нужно, то придется отдельную функцию заводить, а не инлайновую.
>> No.44757 Ответ
>>44754
В пыхе даже нормальной функции, чтобы проитерировать по строке с UTF-8 символами нет. Она у всех тупо где-то написана и лежит. К слову, странно, что в php мало(я не слышал о них) каких-то популярных библиотек со вспомогательными функциями.
>> No.44772 Ответ
>>44757
> чтобы проитерировать по строке
Пиши в функциональном стиле. В функциональном. Не надо итерировать строки.
>> No.44776 Ответ
>>44772
Что ты несёшь? Нахуй ты придираешься? Итерировать в любом смысле нельзя их, никаких мапов и редьюсов для них нет. Сука, заебали уже эти студенты, поработайте немного.
>> No.44826 Ответ
>>44776
Ну вот нафига тебе итерировать по строке? Хоть один пример приведи.
>> No.44832 Ответ
>>44826
Я уже и не помню, зачем нужно было. Согласен, не очень то часто нужно. Но тем не менее.
>> No.44949 Ответ
>>23260
debian+kde норм?
>> No.44998 Ответ
>>44583
Я имею и что тебе не нравится?
>> No.46416 Ответ
Начал обмазываться CodeIgniter, у кого-нибудь может есть готовые проекты, глянуть исходники, почерпнуть опыта?
>> No.46424 Ответ
>>46416
Обмазывался этим говном на прошлой работе, после чего пытался устроиться джуном в продвинутые конторы в которых все дрочат на юи и прочие симфони и пососал хуй там, наверное не сколько из-за знаний а из-за того что хуево в целом общаюсь, и не прохожу через hr-шкур.

В общем вроде как устроился на новую сейчас, тоже на игнайтере буду писать. Спрашивай ответы если что. Проектов показать не могу, но на вопросы отвечу по мере сил.
>> No.46429 Ответ
>>46424
Как у вас реализована авторизация юзверей?
>> No.46432 Ответ
>>46429
Ну как и везде наверное.
Есть страничка с логином, юзер вбивает туда свой логин/мыло + пароль.
Жмет кнопочку, это улетает постом на какой-нибудь контроллер авторизации по типу site/auth

Собственно этот контроллер делает запрос в модель, для выяснения, есть ли такой юзер в базе, если есть и его можно пускать на сайт, то ставишь ему куки, которые потом будут аутентифицироваться другими твоими контроллерами и редиректишь куда ему нужно. Задавай вопросы поточнее в след раз.
>> No.46439 Ответ
>>46432
У вас самописный код, или взяты уже готовые либы? Например Auth уже есть готовая.
>> No.46440 Ответ
>>46432
Эм, где-то тут ещё должно было быть шифрование пароля. Оно там есть?
>> No.46442 Ответ
Файл: 07e454.jpg
Jpg, 71.54 KB, 604×460 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
07e454.jpg
>>46440
Нет, мы так пороли в базе храним, прям.
>> No.46443 Ответ
>>46440
php.net/manual/en/function.password-hash.php и http://php.net/manual/en/function.password-verify.php
>> No.46444 Ответ
>>46442
> пороли
Недостаточно, видимо.
>> No.46445 Ответ
>>46439
Да всё самописное. Просто используется игнайтеровская архитектура и встроенные вещи.
Auth я тебе как пример привел. В игнайтере ты создаешь контроллер name
И вызывается он по урлу your.site/name

Контроллер выглядит примерно так, там и писать-то нечего (хотел ссылку на ideone.com дать, но он упал и проебал мой код который написал тебе в торопях, так что сори)

>>46440
Ну как бы по умолчанию всегда есть.
Шифруешь пароль как тебе угодно, складываешь в базу хэш, потом когда тебе приходит от логинящегося юзера пароль, то ты его тоже шифруешь и сравниваешь эти хеши.
>> No.46447 Ответ
>>46445
Это все на первых страницах мануала написано. Может есть моменты которые не описаны в официальной документации, но на которые стоит обратить внимание?
>> No.46448 Ответ
>>46447
Обрати внимание на то, как сделать так что бы вместо дефолтного
site.com/index.php/controller/method

делать красивые урлы
site.com/controller/method

А так рассказал бы чем занимаешься, показал бы код какой-нибудь сомнительный для тебя и почему вообще начал на игнайтере писать?
>> No.46449 Ответ
>>46448
Так это маршрутизация простейшая, в конфиге правится.

Пишу простейшую автоматизацию предприятия.
>> No.46467 Ответ
Файл: php-noob-1.png
Png, 33.40 KB, 500×500
edit Find source with google Find source with iqdb
php-noob-1.png
Файл: cat-cafe-osaka.jpg
Jpg, 157.58 KB, 1024×683
edit Find source with google Find source with iqdb
cat-cafe-osaka.jpg
Файл: cat-sad.jpg
Jpg, 194.05 KB, 1024×768
edit Find source with google Find source with iqdb
cat-sad.jpg
Файл: Imagery-hitagi-se...
Png, 364.37 KB, 1920×1080
edit Find source with google Find source with iqdb
Imagery-hitagi-senjougahara-34535417-1920-1080.png

Всем привет.

Мы - клуб любителей изучать php (на самом деле не только php, но и html/css, js, mysql, в общем, все, что связано с сайтостроением). К сожалению, наш уютный тредик на известном форуме последние несколько дней недоступен, потому мы решили временно перебраться сюда. Надеюсь, никто не будет против.

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

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

Оригинальный тред с 700 постов выглядел так: http://arhivach.org/thread/197740/ Никто не забыт, ни один ваш пост или вопрос не потерян. Там же есть ОП пост с множеством полезных ссылок.

Мы пришли не с пустыми руками. У нас есть уроки (немного), задачки (много) и полезные ссылки для изучающих PHP:

- учебник по основам php для начинающих: http://archive-ipq-co.narod.ru/
- после него стоит прочесть урок про то, как работает веб-сервер https://github.com/codedokode/pasta/blob/master/soft/web-server.md
- далее, пора переходить от изучения основ php к написанию веб-приложений. Для этого у нас есть задача про список студентов с подробными комментариями: https://github.com/codedokode/pasta/blob/master/student-list.md
- более сложная задача сделать файлообменник на микрофреймворке Slim: https://gist.github.com/codedokode/9424217
- задачки для изучения HTML/CSS: https://github.com/codedokode/pasta/blob/master/html/html.md
- задачки для изучения JS: https://gist.github.com/codedokode/ce30e7a036f18f416ae0
- задачки по MySQL: https://github.com/codedokode/pasta/blob/master/db/databases.md
- еще более сложная задача на Yii или Symfony: https://gist.github.com/codedokode/8733007
- еще сложнее надо? Ну держи, сам попросил, задача про SPA: https://github.com/codedokode/pasta/blob/master/js/spa.md - пока никто не решил
- Мануал по PHP — http://www.php.net/manual/ru/langref.php
- Сайт phptherightway (перевод на русский: http://getjump.me/ru-php-the-right-way/ )
- Книги по PHP: Профессиональное программирование на PHP Джордж Шлосснейгл
- Книги по PHP: Мэтт Зандстра — PHP: Объекты, шаблоны, методики программирования

Еще у нас есть уютный гитхаб с разными черновиками уроков. Интересно, что такое dependency injection, как хранить древовидные комментарии в базе данных, как защититься от XSS, что такое active record, как использовать композер для автозагрузки - все это описано тут: https://github.com/codedokode/pasta/

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

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

Платиновые вопросы:

- Что надо знать чтобы найти работу - разработчику: PHP, SQL, HTML/CSS, JS, ООП, Git, композер, MVC, фреймворк. Верстальщику - HTML/CSS, JS, jQuery
- Сколько времени надо изучать все это? - все зависит от тебя, но не меньше 6-8 месяцев
- Посоветуйте редактор кода - Sublime Text 3, Notepad++, PhpStorm
- Нужен ли ООП, фреймворки, MVC, git, composer? — Да, однозначно. Посмотри любую вакансию.
- Что самое главное для программиста? Умение аккуратно оформлять код.
- ОП, сделай за меня мою работу или домашнее задание? — Это конечно, хорошая идея, но нет.
- Подскажи сайты для поиска работы, я не умею гуглить? — hh.ru, geekjob.ru, moikrug.ru (склеен с brainstorage.me), fl.ru, upwork.com (бывший одеск). Имей в виду, что кроме фриланса есть еще постоянная удаленная работа (remote job) когда тебе не надо тратить время на поиск заказов и переговоры с неадекватными заказчиками.
>> No.46468 Ответ
>>46449
У тебя до игнайтера уже был опыт кодинга?
>> No.46469 Ответ
>>46468
Да. Тот же PHP, Python, C, Basic, Java.
>> No.46470 Ответ
>>46469
Тогда моя помощь тебе вряд ли нужна :(
>> No.46506 Ответ
>>46467
> редактор кода - Sublime Text 3, Notepad++, PhpStorm
А где вим и емакс, охуели чтоли хипсторы сиране?
>> No.46507 Ответ
>>23225
Кодинг это не легкие деньги. Это плата за кровоточащие глаза, бессонные ночи и перегруженный мозг. Последнее это самый ад. Восемь ,а у кого-то четырнадцать часов в день ты должен думать. Что бы ты понял что это: попробуй весь день решать задачи по алгебре за 11 класс, например. Это выматывает, это монотонный труд, это конкуренция со всех сторон, и уж тем более в том стаке, который ты выбрал. Уйдут годы прежде чем ты сможешь сказать что освоил PHP, или вообще любой язык. Если тебе нужны легкие деньги - займись продажами, бизнесом, чем угодно, но не программированием.
>> No.46508 Ответ
>>46507
Но когда тебе под 30 и умеешь только кодить на трех с половиной ЯП, обратной дороги уже нет.
>> No.46509 Ответ
>>46508
Это не про ОПа
>> No.46510 Ответ
>>46509
Опенинг пост был запилен в 2012, может уже про него.
>> No.46511 Ответ
>>46506
Ну-ка надень цак!
>>46507
> кровоточащие глаза, бессонные ночи
Мои глаза и ночи нормальные, не знаю, о чём ты. Да и мозг не грузят тупые люди как на других работах типа кассира.
> Уйдут годы прежде чем ты сможешь сказать что освоил PHP
Осваивать PHP годами не выглядит хорошей идеей. Тем более PHP вообще не для этого придуман.
>> No.46520 Ответ
Репост с кафедры сайтостроения.
Насколько имеет смысл для небольшого проекта на php делать его не в одном файле, а в множестве модулей? В одном файле я и так использовал MVC почти правильно, весит меньше 50кб. Правильнее разбивать на несколько файлов, но целесообразно ли?
>> No.46523 Ответ
>>46520
Почти всегда нужно. Исключение - консольный скриптик, который делает исключительно небольшую задачу в строк 100 кода.
>> No.46524 Ответ
>>46520
Почему у новичков всё время пылает жаром эта мания что-нибудь убрать? Зачем много файлов, зачем IDE, зачем то, зачем это. Посоветуйте мне ЯП для новичков, книгу для тупых, редактор кода для дибилов. А давайте без jQuery, давайте без фреймворка, давайте без CMS. Это какая-то абсолютно иррациональная тенденция. Причём постоянно аргумент, что надо учить что-то. Мне кажется, они и и унитаз смывать ведром должны, потому что бачком же ещё учиться надо пользоваться! И вообще он не нужен, так как можно и без него!
>> No.46525 Ответ
>>46524
Потому что ты накропал свою хуитку на коленке в блокноте и всё работает, а тут тебе говорят, что нужно иде, фреймворк, мвц, композер, гит и прочая сотона. Он хочет зделоть сайт, а не академиком быть.

В этом плане алтфакам больше повезло, потому что раньше такая дичь была в порядке вещей, и этот тулчейн нарастал понемногу и повышал удобство. А сейчас нужно дохуя всего сразу знать, чтобы просто начать, без особого понимания, зачем это вообще надо.
>> No.46526 Ответ
>>46524
В школе сначала числа складывать учат, а только потом брать производную. Так же и тут.
>> No.46528 Ответ
>>46526
Да но числа складывают с самого начала самые настоящие. И даже после окончания школы ты всегда складываешь одинаково. И не было никаких чисел для новичков. И всегда была тетрадь и ручка обязательно. И линейка, и карандаш с циркулем.
>> No.46529 Ответ
>>46528
Ну так и приложения пишут без фреймворков настоящие (только маленькие), чтобы сначала самому научиться разбивать код на классы и изучить MVC, а потом уже пользуются фреймворком, где уже это разделение сделано.

Есть такие люди, которые не изучают материал последовательно, а пропускают какие-то темы, их немало, но фактически они ведь не умеют программировать, а умеют править код "по аналогии" с увиденным где-то. Чуть что не так или надо что-то нестандартное - они запутались.
>> No.46531 Ответ
>>46520
Именно в этом языке "программирования" все переменные попадают в общую область видимости, так что дели программу хотя бы на классы в пространствах имён. MVC может и нинужно, у меня целое Домащнее СТРОНИЧИЩШЕ написано без MVC и у меня всё работает.
>> No.46533 Ответ
>>46531
Во всяком случае в функциях области видимости нормальные в пыхе. Внутри функций переменные нормально скрыты. Так что классы и, тем более, пространства имён теоретически не обязательны. Одних функций достаточно для областей видимости переменных.
>> No.46534 Ответ
>>46531
Я в однофайловом движке создал три класса - Model, View и Controller, в них уже конкретные функции. Неправильно сделал то, что клиент может запрашивать вид (если видимая страница) либо контроллер (если посылает данные), а должен запрашивать только контроллер, который в простейшем случае отдает вид. Ну и логики в виде как-то много получилось. Первая попытка использования MVC, поэтому каша получилась.
>> No.46535 Ответ
Файл: Снимок-экрана-от-2016-10-06-20-43-41.png
Png, 84.53 KB, 991×809 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
Снимок-экрана-от-2016-10-06-20-43-41.png
Знание PHP у меня как хобби не гуманитарий, просто технология-то несложная, стыдно совсем не знать, тем более около-айтишник, в следующем проекте буду использовать пикрилейтед. Велосипедист, да.
с: неплохо стыдно
>> No.46536 Ответ
>>46535
У меня это тоже не основной язык, но иногда требуют, поэтому я перекатился на http://www.slimframework.com/ и делаю минимальный бэкенд, а морды полностью фронтендовые на ангулярах, лол.
>> No.46537 Ответ
>> No.46538 Ответ
>>46536
Я слышал слух что ангуляр вообще не решает, но решает реакт.
>> No.46539 Ответ
>>46537
Какие-нибудь пояснения к ссылке? Что ты этим хотел сказать?
>> No.46540 Ответ
>>46538
А ещё раньше были всякие бэкбоны. Ещё не устаканилась область, прыгает с одного на другое.
У меня наработки уже есть, использую ангуляр. Можно будет и реакт посмотреть по случаю.
>> No.46541 Ответ
>>46539
The closing ?> tag MUST be omitted from files containing only PHP.
Code MUST use an indent of 4 spaces, and MUST NOT use tabs for indenting.
Control structure keywords MUST have one space after them; method and function calls MUST NOT.
The body of each structure MUST be enclosed by braces.
Вместо того костыля с загрузкой файлов в оперативу и эвал http://www.php-fig.org/psr/psr-4/
>> No.46542 Ответ
>>46541
Зачем человеку без знания базовых принципов эти подсчёты пробелов? ну зачем? Тут бы сначала с eval и global разобраться, а ты тут со своими пробелами. Чтение PSR ему в самую последнюю очередь поможет.
>> No.46543 Ответ
>>46542
Ну ок, пусть пишет как хочет, я же ему не тимлид.
>> No.46544 Ответ
Файл: Снимок-экрана-от-2016-10-06-22-47-03.png
Png, 201.54 KB, 1920×1080 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
Снимок-экрана-от-2016-10-06-22-47-03.png
>>46541
Спасибо за советы, все же буду писать правильней. За автолодер читал раньше, но руки не дошли, а сейчас использовал. Дальше еще покурю неймспейсы.
>> No.46545 Ответ
>>46544
Автолодер, автолодер... Вместо eval(filegetcontents можно было элементарно использовать include/require для начала. Если не знаешь, зачем нужны классы, и как их использовать, то от автолодера толку почти никакого. А это ещё учить и учить, и лучше вообще не в книгах по пыхе.
>> No.46546 Ответ
>>46545
С requireonce и includeonce у меня проблема была - как путь не указывал, относительный или абсолютный, файл не находился, если я инклуд использовал в функции, а если без once, тогда некоторые файлы подключались дважды. Впрочем, попробую просто без функции подключать.
Да, а есть ли толк от ООП, если собственно много объектов не создается, а просто нужно работать со страницами, используя MVC?
>> No.46547 Ответ
>>46546
Чтобы узнать толк в ООП придётся идти и читать книги по нему.
1) MVC - это уже ООП
2) Для якобы просто страниц можно было без MVC обойтись, не то что остального ООП. Вообще можно было накидать html-файлов без php и всё, или установить готовую CMS
3) Количество созданных объектов - это не часть задачи, а часть решения. Решение по задаче, а не решение по решению, туды его мать.
4) Объекты и есть ООП
>> No.46548 Ответ
>>46547
Я к тому, что если разделить сущности на модели, виды и контроллеры, то можно же создавать функции, к примеру Model_MainPage, так же все остальные, и собственно классы не обязательно нужны. Выглядеть только будет криво, так?
>> No.46550 Ответ
>>46548
"Выглядеть криво" - это дет. сад. Должны быть более точные критерии качества ПО. У всех приёмов есть описанные преимущества и недостатки.
Вью далеко не во всех фреймворках имеет свой класс какой-то. Контроллер можно теоретически заменить на функцию. Модель без класса или абстрактного типа - это не модель.
>> No.46553 Ответ
Что скажите о курсах специалист по php?
>> No.46554 Ответ
>>46553
Скажу, что любой рашкованский пережёванный (в лучшем случае) скам нинужен. Потрать время или деньги на английский язык и весь мир для тебя открыт.
Хотя в рашке до сих пор даже в школе навязывают империализм и русскоязычную челюсть, так что тут всё печально.
>> No.46555 Ответ
>>46554
Зачем так грубо. Ты сам(и я и собеседник) россияне. Не надо так.
По php всё равно нет хороших книг даже на Инглише. Учи английский - не учи, на ёлку не похоже. Учишься программировать, потом осваиваешь php по документации на офф. сайте за пару дней, как-то так.
>> No.46556 Ответ
>>46555
Я не россиянин.
На русском языке годных книг нет. Есть переведенные книги с задержкой в n лет, умноженные на долбоебизм переводчика, который в 90% не в курсе, о чем он переводит. Есть оригинальная российская хуйня, которая как мода Усть-Залупинска на фоне Москвы.

Учишь английский язык - получаешь актуальную информацию об айти-технологиях, которые уже давно 100% англоязычные.
>> No.46557 Ответ
>>46556
Усть-Залупинск - это где?
>> No.46558 Ответ
>>46557
За МКАДом, очевидно же.
>> No.46561 Ответ
>>46520
Файл на 50к - это ведь больше 1000 строк? Многовато.

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

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

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

>>46525

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

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

Раньше просто программы были проще и меньше, и писать их мог 1 человек, и недостатки не бросались в глаза.
>> No.46562 Ответ
>>46531
Насчет переменных - неправда, не все, а только созданные вне функций. Их потому и называют глобальными. Ты тащишь концепты из другого языка и удивляешься почему в php они не работают.

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

>>46535

Если честно, не очень. Ты не PHP, ни даже HTTP не знаешь (при ошибке надо отдавать код ошибки, а не 200!). eval там не нужен, есть require, а также автозагрузка. Стандарты PSR-1,2 не соблюдаются.

>>46538

Это немного разные вещи вообще-то.

>>46542

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

>>46544

Если что, у меня есть статья про неймспейсы и PSR-4 (правда она для новичков, может слишком простым языком написана, тогда читай оф мануал): https://github.com/codedokode/pasta/blob/master/php/autoload.md

>>46546

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

А с абсолютным именем все ок.

>>46546

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

>>46548

В MVC вряд ли может быть Model_MainPage, разве что Controller\Main. Модели не соответствуют страницам сайта, они соответствуют сущностям предметной области. И не путай модель в смысле "часть приложения MVC" и "модель сущности предметной области". В первом случае модель это набор классов, во втором - один класс.

Вью обычно это просто шаблон страницы.

>>46554

Вообще, конечно, если бы качественная литература была на русском, было бы лучше. Я вот часто вижу в мануалах технических, что есть японская версия. Немецкая, испанская, французская. А русской нет.
>> No.46563 Ответ
>>46562
> Я вот часто вижу в мануалах технических, что есть японская версия. Немецкая, испанская, французская.
Не так уж и часто. Все учат один язык, где бы они ни обитали, и не парятся.
>> No.46564 Ответ
>>46562
ModelMainPage по ошибке написал, ViewMainPage конечно. За статью спасибо.
>> No.46573 Ответ
>>46564
MVC не требует использования ООП. Просто с ООП удобнее разбивать код на классы, чем на просто функции.
>> No.46576 Ответ
Сап
>> No.46578 Ответ
>>46576
Привет.
>> No.46589 Ответ
>>46578
Как дела? Что делаешь?
>> No.46596 Ответ
>>46589
Захожу в тред по утрам пока завтракаю, прежде чем отправиться в рабство
>> No.46602 Ответ
>>46596
Ясно.
>> No.46611 Ответ
Никто не хочет кулстори рассказать, о том как докатились до кодинга и какое место он в жизни занимает?
>> No.46612 Ответ
>>46611
Это категорически неинтересно.
>> No.46647 Ответ
На двачах тихо, залью сюда может код?
>> No.46648 Ответ
>>46647
Для заливки кода есть гитхаб/битбакет.
>> No.46649 Ответ
>>46648
Няша, я про ссылочки на идеон же )
>> No.46692 Ответ
>>46647
Если ты про клуб php, то там тред вполне себе жив (просто надо пару страниц прокрутить до него), и можно запостить все там, ОП дойдет и проверит рано или поздно.
>> No.46884 Ответ
Файл: 22172b280ac75fa3388e2e3b63218dcc_lrg.jpg
Jpg, 30.00 KB, 257×300 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
22172b280ac75fa3388e2e3b63218dcc_lrg.jpg
PHP 7.1 релизнулся.
Из новых фич самый смак: нулабельные типы, тип void для результата, сахарок в дестракчеринге через list, видимость констант.
>> No.46885 Ответ
>>46884
Ололо.
Блеск и нищета php. Эволюция языка от 4.x к 7.1
https://habrahabr.ru/post/316506/
>> No.46886 Ответ
>>46884
То, что в других языках было лет 25 назад.
>> No.47006 Ответ
Файл: Screenshot_20161224_204841.png
Png, 59.55 KB, 940×391 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
Screenshot_20161224_204841.png
Котаны, вопрос не совсем про пых, я тут делаю небольшой наколенный mvc-недофреймворк типа для портфолио, сделал замеры через apache benchmark. Там цифры про 1000 запросов в зависимости от параметра -c. Столбцы A, B - с включенным opcache; C, D - без opcache. A, C - time per request; B, D - time per request (mean, across all concurrent requests).
Не совсем понимаю что значит эти across all concurrent requests, кто-нибудь может подсказать?
>> No.47097 Ответ
Пожалуйста посоветуйте что-нибудь простое по основам PHP.
>> No.47098 Ответ
>>47097
Оф документация?
>> No.47118 Ответ
>>47097
Лиспачую php.net, сам по этой штуке изучал пхп в далеком 2003 году.
>> No.47147 Ответ
>>47006
https://httpd.apache.org/docs/2.4/programs/ab.html

> Time per request
> The average time spent per request. The first value is calculated with the formula concurrency timetaken 1000 / done while the second value is calculated with the formula timetaken * 1000 / done

Это не то?
>> No.47413 Ответ
Файл: 25756.jpg
Jpg, 87.12 KB, 300×455 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
25756.jpg
>>47097
Прям ваще для нубов. Ну и офф.дока само собой.
>> No.47425 Ответ
Так как ОП пока забанен на другой борде, он будет пока писать ответы на задания здесь.

Вот некоторые ответы из предыдущего треда, которые остались в архиваче:

- https://github.com/never3ver/fileshare - проверено 19 марта: http://arhivach.org/thread/245785/#956732
- DOM который построил Джек, 5: http://arhivach.org/thread/245785/#956739

----

Вопрос

http://arhivach.org/thread/245785/#958664
22/03/17 Срд 00:55:27 №958664

Решаю задачу с регулярками, где надо из номера телефонов привести к единому виду, "8" и 10 цифр, без пробелов и так далее, но не могу додуматься, как в одно действие заменить и на "8" - "+7", и в то же время заменить символы "- ()" на пустоту, делаю в два действия. Это нормально или не очень? (строки 31-34)

http://ideone.com/xkk3U1

Ответ

Не требуется делать это в одно действие, можно в два.

> [- \\)\\(]
Внутри квадратных скобок специальное значение имеют только символы: [ ] \ - ^

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

> ([0-9])
Тут круглые скобки вокруг квадратных не требуются. Ну и вообще что-то многовато круглых скобок, там, где они не требуются для группировки, их стоит убрать.

> '/\\+7/ui';
Здесь лучше добавить условие, что это должно быть в начале строки

Так, в общем, верно.
>> No.47426 Ответ
Вопрос

http://arhivach.org/thread/245785/#957320

ОП ПАМАХИ Аноним 20/03/17 Пнд 08:57:35 #973 №957320

оп, посмотри, пожалуйста, и подскажи, в чем проблема
https://github.com/sylenien/students-exercise/tree/master

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

Ответ

> you need database called 'students' with table called 'students' which will includes 4 columns: id, firstname, lastname, group, points
Не, так не годится. По моему это написано в комментариях к задаче, надо сделать дамп в формате SQL, с кодом для CREATE TABLE. Код создания БД (CREATE DATABASE) там не должен быть.

> iniset('displayerrors', 1);
Это наверно лучше в php.ini задавать. А то ты на реальный сайт тоже с включенным отображением ошибок выгружать будешь?

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

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

https://github.com/sylenien/students-exercise/blob/master/vendor/moonframe/core/autoload.php#L7
> if (is_dir($rootDir))
> else return false;
У тебя функция возвращает массив/false, но при ее вызове ты никак не проверяешь, что она вернула. Вопрос, а какой смысл тогда их возвращать?

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

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

Также вместо изобретения велосипедов советую опять же почитать комментарии к задаче и про стандарт PSR-4.

Также, попробуй написать код вроде

vardump(classexists('\model\x\y\z'));

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

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

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

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

Это вообще никак не связано и причина в другом. Натыкай там echo и посмотри, что в какой переменной приходит.

> include_once(ROOT.'/app/components/Database.php');
Зачем это нужно когда есть автозагрузка?

> session_start();
Сессии плохо использовать для логина так как они умирают через полчаса бездействия.

https://github.com/sylenien/students-exercise/blob/master/app/components/Database.php
Зачем нужен этот класс, есдли можно просто написать $pdo = new PDO? Или ты где-то это увидел и бездуимно скопировал? Для чего нужен объект этого класса?

> $this->Connect();
Почему ты вызываешь статический метод через стрелку? И какой смысл вызывать эту функцию если ты никуда не сохраняешь результат?

https://github.com/sylenien/students-exercise/blob/master/app/components/router.php
Имя файла и класса не совпадают в плане регистра букв.

> $controllerName = ucfirst(array_shift($parts).'Controller');
По моему выгоднее писать в конфиге имя контроллера целиком, так как в этом случае его можно найти поиском.

> $controllerFile = ROOT.'/controller/'.$controllerName.'.php';
Почему не автозагрузка?

https://github.com/sylenien/students-exercise/blob/master/app/components/router.php
зачем в роутер прописывать путь к конфигу? Логично убрать у класса ответственность за поиск и загрузку конфига, и передавать конфиг снаружи. да и вообще почему настройки роутинга должны браться именно из отдельного php-файла?

То же касается обращения к $_SERVER. Как тестировать твой роутер, если он сам берет URL? Как ему передать произвольнй УРЛ?

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

Метод run() написан неправильно, так как не написано, что делать если ни один маршрут не совпал с URL. Надо выдавать 404.

> if (fileexists($controllerFile)) includeonce($controllerFile);
Та же проблема. Если файла нет, ты скрываешь информацию об этом, никак об этом не говоришь, чтобы труднее было найти ошибку. Зачем ты сам себе усложняешь обнаружение ошибок?

https://github.com/sylenien/students-exercise/blob/master/app/model/Student.php
за что отвечает этот класс? Он и с БД работает, и логином занимается?

Ты кладешь в сессию имя и группу студента. А когда их обновят в БД, ты не забудешь обновить их и в сессии?

> for($i=0; $row = $result->fetch(); $i++) {
> $costudents[$i]['id'] = $row['id'];
Тут надо использовать foreach. Более того, все данные можно получить одной строчкой без цикла. Вместо создавания массивов непонятной структуры лучше возвращать массив объектов.

https://github.com/sylenien/students-exercise/blob/master/view/index.php
Вью не должен обращаться к внешним переменным вроде сессии.Ты пока по-старому пишешь все вперемешку.
>> No.47427 Ответ
Я специально пишу тут не только ответ, но и вопрос: на случай, если кому-то еще интересно посмотреть код, или дать какой-то дополнительный совет.

----

Вопрос

>>956975 | http://arhivach.org/thread/245785/#956975

Я тут уже всплывал со своим говноблогом, пытаюсь вот его переписать согласно mvc.
В общем, я написал такой контроллер, в нем стартует сессия и инстанцируются общие для всех страниц классы.
https://github.com/honeydev/s-blog/blob/master/app/Controllers/MainController.php

Этот класс наследуют все остальные классы контроллеры. Которые в свою очередь уже запускаются роутером. Все ли я правильно делаю?

Ответ

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

Вообще, мне кажется неправильно в конструкторе заполнять какие-то массивы данными. А вдруг ничего выводиться не будет? зачем их было получать? Лучше в функции render() получать и добавлять эти данные.

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

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

> Set assoc array with keys title, author, email
Вместо того, чтобы делать массив, удобнее просто передать сервис и пусть вью берет что ему нужно. Ну или передавать это как отдельные элементы. А ты зачем-то все передаешь через массив. Неудобно же, по твоей логике, надо все методы убрать и оставить только один, возвращающий огромный массив со всеми данными сразу?

Лучше просто сделать getTitle(), getAuthor и так далее.

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

https://github.com/honeydev/s-blog/blob/master/app/Services/AdminService.php
Не очень понятно назначение класса.

https://github.com/honeydev/s-blog/blob/master/tests/forsanitize.php
Это тестировать удобнее не наколенными скриптами, а юнит-тестами под phpunit. codeception кстати содержит в себе phpunit.

Все твои сервисы удобно тестировать именно юнит-тестами. Снаружи, через интерфейс, их тестировать будет не удобно.

https://github.com/honeydev/s-blog/blob/master/tests/tests/acceptance/ChangeRegistrationStatusCept.php
Тут много копипасты. Если у тебя есть специальный тестовый аккаунт гораздо логичнее в тестовом хелпере сделать один метод для залогинивания под этим аккаунтом, а не копипастить логин 20 раз по коду.

https://github.com/honeydev/s-blog/blob/master/tests/tests/acceptance/AddPostCept.php#L12
Не уверен, что этот тест реально тестирует появление поста. Ведь увидеть текст поста можно например и если форма заполнена неправильно и она выведется для исправления ошибок.

> $I->see('Hi');
Тоже хлипко так как эти буквы вполне могут быть частью другого слова. То есть на любой случайно взятой странице они вполне могут найтись.

> require_once 'mytestslib.php';
В codeception есть тестовые хелперы, надо сделать нормальный класс, а не городить велосипеды. Там можно сделать класс со статическими методами, а также расширять сам объект $I новыми методами.

В тестах на правильное/неправильно заполнение формы много копипасты, надо от нее избавляться, либо через вспомогательные функции, либо через объединение тестов.

https://github.com/honeydev/s-blog/blob/master/sql_cfg.php
тут какие-то костыли. Почему конфиг перемешан с кодом соединения с БД?

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

https://github.com/honeydev/s-blog/tree/master/vendor
Этой папки не должно быть в репозитории. Как и composer.phar и https://github.com/honeydev/s-blog/blob/master/composer-setup.php

https://github.com/honeydev/s-blog/blob/master/sblog.sql#L66
> ENGINE=MyISAM
Почитай самостоятельно про отличия MyISAM и InnoDB

> userid
Как тут выделить отдельные слова если все написано слитно?

> picuri
Слишком сокращено. Не экономь буквы.

Где внешние ключи в базе?

> CHARSET=latin1;
Почему все только на латиннице? Кирилица не нужна?

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

> `accesslvl` tinyint(1) NOT NULL DEFAULT '0',
Непонятно что значит эта колонка.

Непонятно чем папка components отличается от app и вообще что такое "компонент"

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

https://github.com/honeydev/s-blog/blob/master/setup.php
тут дублирование информации из дампа.

https://github.com/honeydev/s-blog/blob/master/public/index.php#L6
> 'display_errors', 1);
Это удобнее прописать в php.ini. Или ты на реальном сайте тоже включишь отображение всех ошибок?

https://github.com/honeydev/s-blog/blob/master/app/Services/UserService.php
тут все очень плохо, советую перечитать все комментарии к задаче про студентов, неохота пересказывать. Используй DI, не подставляй переменыне в SQL запросы, почитай про паттерны работы с SQL.

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

SQL запросы у тебя не собраны в отдельные классы, а размазаны по всему коду.

> public function authorizeFromPost
Все смешано в кучу, ты пока не можешь разделить процесс входа на отдельные независимые действия, а пишешь код вперемешку. Тут и чтение данных из POST, и вызов валидации и обработка исключений и чего только нет. Это не MVC.

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

Ты не делал нашу задачу про Вектор? Стоит сделать, если не делал. И почитать комментарии к задаче про студентов, там много полезного.
>> No.47428 Ответ
Вопрос

http://arhivach.org/thread/245785/#956914

p-sch Аноним 19/03/17 Вск 15:04:01 #962 №956914

Вот я делаю студентов и уткнулся в проблему. Есть bootstrap.php и в нем перехват ошибок/исключений вида http://ideone.com/EkC1Qr . И все было хорошо и лампово, пока я не начал делать скрипты для вызова из консоли, что бы заполнять базу фейками (да я узнал про fzaninotto/faker и уже не мог остановится). В скриптах конечно вывод в консоль, а значит при возникновении ошибок обработчик исключений крошится при попытке отдать заголовки.
Завести глобальную переменную с флагом для консольных скриптов? Сделать отдельный bootstrap для них с другим обработчиком? Как это лучше исправить?

Ответ

Можно проверять через phpsapiname() например.

> fileputcontents(DIR . "/../logs/error.log",
есть стандартный лог ошибок и функция error_log(), не изобретай велосипед.

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

> require_once "../src/View/503.html";
Тут не указан конкретный путь к файлу. Это относительный путь, а относительно какой папки он указан? Это вообще работать не будет.

> header("HTTP/1.1 503 Service Unavailable", true, $timeout);
Почитай мануал по функции header и что идет 3-м параметром.
>> No.47429 Ответ
Вопрос

http://arhivach.org/thread/245785/#956891

Просьба проверить код

Ответ

https://github.com/grigoryMovchan/auth/blob/auth_mvc/app/core/Model.php
Зачем нужен этот класс? Никто не говорит что ты обязан наследовать все модели от одного общего класса.

И определись, что ты назваешь моделью. Ты по моему все подряд классы этим словом называешь. Что такое MysqlModel?

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

У тебя наследуется непонятно что от непонятно чего. Класс для соединения с БД и класс для проверки авторизации наследуются оба от Model. Что у них общего? Ровно ничего, это разные классы для разных задач. Следовательно, наследование тут реализовано неправильно.

Идея с MysqlModel неудачная, так как ты смешиваешь загрузку каких-то конфигов и работу с базой. А зачем, если это можно делать в разных классах и просто передавать в класс для работы с базой уже созданный и настроенный объект PDO? У тебя просто все как-то переусложнено.

$config = loadinifile(...);
$pdo = new PDO(...);

Вот и все. Нет необходмости писать целый класс, чтобы создать объект PDO.

Каждый класс должен заниматься своим делом. Класс не должен одновременно занматься поиском пользователей в БД, валидацией и чтением конфигов.

Далее, почитай комментарии к задаче про студентов, я не хочу тут все пересказывать, в частности, про Dependency Injection. Именно она нужна в AuthModel.

https://github.com/grigoryMovchan/auth/blob/auth_mvc/app/models/MysqlModel.php#L82
Эта функция сделана неудачно, надо сделать вместо нее 4 отдельных функции (вроде queryNum(), queryAssoc() и тд) а не объединять функции с разным алгогритмом работы и разным типом возвращаемых значений. Это ненормально, когда одна функция может возвращать значения разных типов и это неудобно.

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

https://github.com/grigoryMovchan/auth/blob/auth_mvc/app/models/MysqlModel.php#L70
> } catch (PDOException $e) {
Почитай урок про исключения.

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

И если ты не делал ООО Вектор, то советую начать с этой задачи, она помогает изучить основы ООП.
>> No.47430 Ответ
Вопрос

http://arhivach.org/thread/245785/#956741
Аноним 19/03/17 Вск 08:05:18 #959 №956741

На постгрес меня хероку заставил перебраться. Ты писал о том, что в постгрес можно использовать regex-ограничения для полей, но я не совсем понимаю зачем. Мне кажется, если злоумышленник обойдёт PHP-ограничения, то продублированные регулярки на стороне БД вряд ли чем-то помогут. Про CI прочитал, попробую поднять. Насчёт уровня покрытия тестами, то мне кажется, что чем он выше, тем более хрупкими будут тесты (так как их придётся постоянно подстраивать под изменения в проекте).

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

Просьба проверить:

- скидки http://arhivach.org/thread/245785/#946704 | https://bitbucket.org/learning_acc/discounts/
- http://arhivach.org/thread/245785/#947452 | https://github.com/kubk/students

Ответ

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

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

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

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

> Ну и можно делать файлообменник на Симфони?
А не хочешь сделать testhub из ОП поста? Хотя бы частично. Файлообменник на Симфони это стрельба из пушки по воробьям. Там Slim/Silex + Twig + Doctrine лучше подойдет. И так как ты почти все это использовал в студентах, то это по сути будет то же самое и ничему новому не научит. Не думаю, что тебе стоит вообще делать файлообменник. Он предназначен для тех, кто студентов делал без микрофреймворков.

Testhub по сложности близок к реальным проектам.

А еще, в ОП посте есть задание на SPA (никто пока не осилил), если ты хочешь поработать с JS и решал более простые задачи по этой теме.

> Настораживает, что функция автора статьи при epsilon 0.00001 считает, что 1000000 и 1000001 равны: http://floating-point-gui.de/errors/NearlyEqualsTest.java
epsilon это ведь не абсолютная разница, а относительная, относительно сравниваемых чисел. Ну то есть epsilon умножаем на 1000000 чтобы получить абсолютную разницу, получается 10 по моему.

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

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

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

Скидки

Задача про скидки тут: http://www.cyberforum.ru/php-oop/thread1459985.html
Решение анона: https://bitbucket.org/learning_acc/discounts/
Пост анона: http://arhivach.org/thread/245785/#946704
Комментарии:

> Мне кажется есть смысл сделать её неизменяемой, а не надеяться, что пользователь вспомнит вызвать clone (вот я как раз забыл).

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

https://bitbucket.org/learning_acc/discounts/src/be3e1a13fda16af5b5397c94428c4d9b25632d29/src/DiscountResult.php?at=master&fileviewer=file-view-default
> if ($priceWithDiscount < 0) {
> throw new \LogicException(
Вообще для такого случая лучше подходит InvalidArgumentException. Вот тут есть объяснение где используется LogicException: http://stackoverflow.com/questions/5586404/logicexception-vs-runtimeexception/5586510#5586510 и InvalidArgumentException как раз наследуется от него, и уточняет причину ошибки.

Еще один подвох в твоем коде - переменная в конструкторе скидок называется $percent, но она хранит число от 0 до 1. Стоило бы добавить проверку что она в этом диапазоне, так как кто-то может подумать что там именно проценты от 0 до 100. Или использовать там проценты.

> $originalSum = $matchedProducts->calculatePricesSum();
> return new DiscountResult($matchedProducts, $originalSum - $originalSum * $this->percent);
Это так часто встречается, что может стоило сделать в DiscountResult статический конструктор для группы товаров и скидки в N%?

Насчет неизменяемости ProductCollection: там же по-прежнему есть addProduct, какая-то неизменяемость получилась не совсем полноценная.

> $products = clone $this->products;
> $products->detach($product);

> return self::fromSplObjectStorage($products);
Тут в fromSplObjectStorage происходит лишнее копирование объекта Spl, тоже не очень удачно. Лучше наверно обойтись без addAll().

Но это все мелкие советы по улучшению, так-то задача хорошо решена.
>> No.47431 Ответ
Вопрос

Просьба проверить код, пост анона http://arhivach.org/thread/245785/#947452

Ответ

Не знаю, заметил ли ты, но при добавлении CI около коммита появляется галочка, если тесты пройдены успешно: https://github.com/kubk/students/commits/master , причем клик по ней ведет на подробности. Сразу видно, если кто-то сломал код.

Также, галочка ставится для отдельных веток: https://github.com/php/php-src/branches

Ну и если например кто-то делает пулл-реквест с предложением изменений, то опять же, прогоняются тесты и пишется, не сломались ли тесты, как тут: https://github.com/php/php-src/pull/2427

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

https://github.com/kubk/students/blob/master/tests/StudentGatewayTest.php#L97
> public function searchProvider()
Я тут еще подумал, что можно было проверять не найденные id, а найденные имена/фамилии - тогда данные для теста выглядели бы более наглядно. Хотя и id можно использовать, там все равно нужны тестовые данные.

> > - передаем строку с тегом и проверяем, что на выходе тега нет
> > - вызываем htmlentitydecode на результате и проверяем, что получилась исходная строка
> Если правильно понимаю, то второй пункт работает, только если искомая строка не будет найдена. В противном случае результат будет содержать тег b или mark, и исходную строку от такого результата не получим
Я имел в виду под htmlentitydecode еще и вырезание тегов наверно. Но это все равно не универсально, так как например найденное слово может выделяться не только тегами,а например добавлением каких-нибудь скобок. Совсем универсально тест тут не написать, получается.

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

> Теперь html в php нет https://github.com/kubk/students/blob/master/src/LinkGenerator.php#L47
> , но как мне кажется, тут https://github.com/kubk/students/blob/master/templates/student-list.twig#L14+L15
> какой-то низкоуровневый код в шаблоне. Ну и ссылка генерируется только в одном месте, нужен ли макрос, который будет использоваться лишь один раз?
Теперь не нужен.

https://github.com/kubk/students/blob/master/scripts/publish-frontend.sh#L3
> mkdir public/vendor public/vendor/{css,js}
Тут стоит добавить флаг на случай если папка существует. Также, в bash-скриптах полезно ставить в начало set -e чтобы при первой ошибке скрипт завершался. Иначе он будет продолжать работать все равно.

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

https://boiling-brook-29265.herokuapp.com/form
Пол лучше делать радиокнопками, так как в них все опции видны и доступны сразу, без лишних кликов. Выпадающий список используют, чтобы сэкономить площадь ценой более сложного доступа к опциям, но для 2 пунктов там экнономить особо нечего.

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

> https://boiling-brook-29265.herokuapp.com/?notify=%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%20%D0%BD%D0%BE%D0%B2%D1%8B%D0%B9%20%D1%81%D1%82%D1%83%D0%B4%D0%B5%D0%BD%D1%82%21
Ты указываешь текст в GET-параметре. Тут есть риск: злоумышленник может вывести произвольный текст и как-то использовать это для обмана пользователя, который доверяет сервису. Если бы это было в популярном сервисе вроде вконтакте - это однозначно была бы уязвимость и наверняка как-то использовалось бы.

https://github.com/kubk/students/blob/master/src/StudentGateway.php#L14
> private $table = 'students';
Тут ты вынес название таблицы, но зачем? Менять ты его вряд ли будешь, и скорее всего в итоге просто будет менее удобно искать где она используется, а также читать SQL запросы.

> public function studentsAreTheSame(Student $studentA, Student $studentB): bool
Возможно, эту функции логичнее поместить в Student. Вроде $a->isSame($b) или Student::areSame(). Второй вариант позволяет принимть null.

Насчет PageObject, да, у тебя они довольно удобно сделаны.

https://github.com/kubk/students/blob/master/tests/ControllerTest.php#L41
> $this->assertTrue($client->getResponse()->isRedirect());
Вот эта проверка, что мы залогинились, мне кажется, не очень точная. Если бы мы писали сценарий для тестера-человека, мы бы вряд ли писали там "проверить, что произошел редирект".

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

А после разлогинивания - соответственно проверить пропадение этого признака.

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

Задание про игру сапер с использованием MVC
Код: https://github.com/greenTea242/MinesweeperMVC
Пост: http://arhivach.org/thread/245785/#945676

Ответ

> if (typeof strCell != "string") {
> throw new ConsoleGameControllerException("Неправильный тип аргумента strCell. Ожидается" +

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

assert(typeof strCell == "string");
Assert.hasType(strCell, "string");
Assert.notEmpty(x);

Так и компактнее, и читабельнее. И может быть есть готовые библиотеки.

> new ConsoleGameControllerException
Для такого случая, если совсем строго смотреть, логично исплоьзовать что-то вроде InvalidArgumentException, или TypeError, который вроде бы уже есть в яваскрипте. То есть это исключение не привязано к конкретному контроллеру. Потому что это ошибка в написании кода в общем, а не специфичная для этого контроллера ошибка.

> } catch(error) {
> console.log(error.name + ":" + error.message);
Ты зря это делаешь, так как консоль по умолчанию выводит непойманные исключения, да еще со ссылками на код и стектрейсом, а в твоем случае данных меньше.

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

https://github.com/greenTea242/MinesweeperMVC/blob/master/src/controllers/DomGameController.js#L103
> DomGameController.prototype._setEvents = function() {
Вот эта функция должна быть в view, а не в controller, так как это вью знает на что он должен подписываться в DOM, а контролллер это знать не должен. То есть это стоило перенести во вью.

> DomGameView.prototype._createDevTools = function() {
> DomGameView.prototype._createHeader = function() {
Вот эти функции, которые по кусочкам создают интерфейс, можно было бы обойтись без них, если бы у нас был нормальный шаблонизатор, который умеет инклудить подшаблоны. Им можно было бы и поле создать.

> DomGameView.USERTOOLSOPTION_1 = "1";
> DomGameView.DEVTOOLSOPTION_1 = "1";
Есть риск что эти константы где-то перепутаются, так как у них одинаковое значение. Лучше делать разное.

> DomGameView.prototype._setGame = function(game) {
Не уверен что эта функция так уж нужна, может проще было в конструкторе написать this._game = ... ? Но так, ошибки конечно нет, вдруг когда-нибудь понадобится подменять модель на другую.

> this._field.querySelector("td[data-x=" + x + "][data-y= " + y + "]");
Быстрее наверно было бы использовать словарь со ссылками на нужную ячейку, чем запускать поиск по DOM перебором всех ячеек. Хотя на маленьких полях разница вряд ли будет заметна.

В событии DomGameViewEvent.POPUP_CREATED возможно имело смысл передавать ссылку на попап как параметр события.

> for (var i = 0; i < classList.length; i++) {
> div.classList.add(classList[i]);

А можно так: x.className = classList.join(' ');

> var keys = Object.keys(dataAttr);
> for (i = 0; i < keys.length; i++) {

А можно for (key in dataAttr). Что-то ты основы JS подзабыл.

> Util.repeatString
раз уж ты используешь ES5 (Array.isArray), там есть функция и для повтора строк.

> CellSet.prototype.hasCell
> return this._parentContainer[y][x] !== undefined;
Для проверки ключа в словаре есть оператор in, его логичнее использовать. так например

return y in this.pc && x in this.pc[y];

или

return !!(this.pc[y] && this.pc[y][x]);

!! - приведение к boolean

https://github.com/greenTea242/MinesweeperMVC/blob/master/src/models/CellSet.js
Тут у тебя в нескольких функция скопипащен вложенный цикл по клеточкам. Возможно, стоило его вынести в функцию или использовать forEach.

parentContainer лучше было назвать cells.

Еще, у тебя там в модели есть куча проверок, что разные cellSet не равны null. может было проще в конструкторе создать эти CellSet, а при рестарте игры просто их очищать, например вызовом метода clear(). Тогда просто код был бы чуть проще, так как это поле не могло бы быть пустым.

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

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

Советую дальше изучать Knockout, Anlular 2 или React. В первых 2 проблема рутинного кода работы с DOM решается через data binding, в последнем через перерендеринг страницы.

Сделать на них можно какую-нибудь форму с валидацией или страницу конфигурации чего-нибудь (вроде сборки заказа с разными параметрами). Или какой-нибудь мессенджер (это вроде модно сейчас в стартап-среде). Или можешь посмотреть на задание на SPA в ОП посте и попробовать кусочек из него сделать. Никто пока не осилил.
>> No.47433 Ответ
>>47432
Норкоман штоле?
>> No.47435 Ответ
>>47432
Весело у вас там, а за что зобанили?
>> No.47438 Ответ
>>47435
Скорее всего по ключевым словам или по ошибке:

> Ошибка постинга: Постинг запрещён. Бан: 701768. Причина: Общее 9 - Вайп, спам, обход спам-листа

В /d/ тоже никто ничего не отвечает.
>> No.47439 Ответ
>>47431
>>47430
Спасибо большое за ответы!

> Ты указываешь текст в GET-параметре. Тут есть риск: злоумышленник может вывести произвольный текст и как-то использовать это для обмана пользователя, который доверяет сервису.
Исправил так: https://github.com/kubk/students/commit/1e649bacaf548c63471862be726c81dfcaae49b6
Правда, строки "edited" и "registered" нигде не документированы.

По поводу служебного URL, проверяющего залогиненость - что он должен возвращать для залогиненого, а что для не залогиненого пользователя?

> А не хочешь сделать testhub из ОП поста? Хотя бы частично.
Я ещё не все задачи по SQL сделал и по вёрстке, не хотелось бы прыгать через задания, у меня по файлообменнику много вопросов.
Например, мне нравится лёгкость использования наследования в Доктрине, можно ли использовать наследование вместо объекта MediaInfo? Основные типы файлов (картинка/аудио/видео/архив) будут иметь по своему классу, с такими объектами удобнее работать, так как мы точно знаем какие свойства и методы у них есть. Есть ли смысл тут использовать Class Table Inheritance? Понимаю, что получение одной сущности - это джойн вместо селекта, а для вывода списка всех файлов - куча джойнов. Для пользователей планирую использовать Single Table Inheritance.
>> No.47440 Ответ
>>47439
> Правда, строки "edited" и "registered" нигде не документированы.

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

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

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

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

> Основные типы файлов (картинка/аудио/видео/архив) будут иметь по своему классу, с такими объектами удобнее работать, так как мы точно знаем какие свойства и методы у них есть.
Я думаю, тут выгоднее вместо наследования просто сделать для MediaInfo хранение JSON-данных в колонке. В сущности хранить объект MediaInfo. А в Доктрине настроить автоматическое конвертирование MediaInfo в JSON-данные при загрузке/записи в БД.

Тут просто проблема в том что у медиаданных может быть много разных свойств, в зависимости от формата файла (попробуй сам посмотреть дампы данных в демо getId3: http://www.getid3.org/demo/ ). В таких ситуациях, сложно и неудобно реализовывать наследование и гигантские таблицы с 50 полями. Тут проще использовать либо EAV (Entity–attribute–value) либо, как я написал, сериализацию (кодирование в виде строки) данных с помощью JSON.

Наследование пригодится в тестхабе, для разных типов вопросов и ответов.

> По поводу служебного URL, проверяющего залогиненость - что он должен возвращать для залогиненого, а что для не залогиненого пользователя?

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

> Понимаю, что получение одной сущности - это джойн вместо селекта, а для вывода списка всех файлов - куча джойнов.

Джойны нужны, но не так много:

SELECT FROM base LEFT JOIN class1 ON ... LEFT JOIN class2 ON ... LEFT JOIN class3 ON ...

Для Concrete TI можно сделать N выборок, объединенных в UNION:

SELECT FROM class1
UNION
SELECT FROM class2
UNION
...

Вообще, у 3 подходов к наследованию есть свои сильные и слабые стороны, и надо их изучить. Ну например, у Concrete TI трудно обеспечить уникальность id в нескольких таблицах (в БД вроде Postgres, где генератор id - отдельная от таблицы сущность, это возможно), нельзя сделать внешний ключ на сущность не из одной конкретной таблицы. Где-то выборки становятся сложнее, и тд.


Пароль:

[ /b/ /u/ /rf/ /dt/ /vg/ /r/ /cr/ /lor/ /mu/ /oe/ /s/ /w/ /hr/ ] [ /a/ /ma/ /sw/ /hau/ /azu/ ] [ /tv/ /cp/ /gf/ /bo/ /di/ /vn/ /ve/ /wh/ /fur/ /to/ /bg/ /wn/ /slow/ /mad/ ] [ /d/ /news/ ] [ Главная | Настройки | Закладки | Плеер ]