- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
class/View.php
<?php
class View {
...
public function compile() {
$view_src = file_get_contents(VIEW_SRC_PATH . $this->full_name . EXT);
// echo
$view_src = preg_replace("/\{\{(\w+)\}\}/", "<?php echo \$$1; ?>", $view_src);
$view_src = preg_replace("/\{\{(\w+)\|(\w+)\}\}/", "<?php echo \$$1['$2']; ?>", $view_src);
$view_src = preg_replace("/\{\{(\w+)\.(\w+)\}\}/", "<?php echo \$$1->$2; ?>", $view_src);
// foreach
$view_src = preg_replace("/<!--each\s+(\w+)\s+in\s+(\w+)-->/", "<?php foreach(\$$2 as \$$1): ?>", $view_src);
$view_src = preg_replace("/<!--each\s+(\w+)\s+in\s+(\w+)\|(\w+)-->/", "<?php foreach(\$$2['$3'] as \$$1): ?>", $view_src);
$view_src = preg_replace("/<!--each\s+(\w+)\s+in\s+(\w+)\.(\w+)-->/", "<?php foreach(\$$2->$3 as \$$1): ?>", $view_src);
$view_src = preg_replace("/<!--each\s+(\w+)\s+(\w+)\s+in\s+(\w+)\.(\w+)-->/", "<?php foreach(\$$3->$4 as \$$1 => \$$2): ?>", $view_src);
$view_src = preg_replace("/<!--each\s+(\w+)\s+(\w+)\s+in\s+(\w+)-->/", "<?php foreach(\$$3 as \$$1 => \$$2): ?>", $view_src);
$view_src = preg_replace("/<!--each-->/", "<?php endforeach; ?>", $view_src);
// switch
$view_src = preg_replace("/<!--select\s+(\w+)\.(\w+)-->\s*<!--when\s+(.+)-->/", "<?php switch(\$$1->$2): case $3: ?>", $view_src);
$view_src = preg_replace("/<!--when\s+(.+)-->/", "<?php break; ?><?php case $1: ?>", $view_src);
$view_src = preg_replace("/<!--otherwise-->/", "<?php break; ?><?php default: ?>", $view_src);
$view_src = preg_replace("/<!--select-->/", "<?php endswitch; ?>", $view_src);
if (!file_exists(VIEW_PATH . $this->path)) mkdir(VIEW_PATH . $this->path, 0777, true);
$fp = fopen(VIEW_PATH . $this->full_name . EXT, 'w');
fwrite($fp, $view_src);
fclose($fp);
}
...
?>
view-src/ShadeType.php
{{type.name}}
<!--each k d in type.diameters-->
<h1>{{k}}</h1>
<!--each s in d-->
<div>
{{s.bottom}} × {{s.top}} × {{s.height}}
<div>
<!--select s.mode-->
<!--when 'u'-->(на ушках)
<!--when 'p'-->(только подвес)
<!--otherwise-->
<!--select-->
</div>
</div>
<!--each-->
<!--each-->
view/ShadeType.php
<?php echo $type->name; ?>
<?php foreach($type->diameters as $k => $d): ?>
<h1><?php echo $k; ?></h1>
<?php foreach($d as $s): ?>
<div>
<?php echo $s->bottom; ?> × <?php echo $s->top; ?> × <?php echo $s->height; ?>
<div>
<?php switch($s->mode): case 'u': ?>(на ушках)
<?php break; ?><?php case 'p': ?>(только подвес)
<?php break; ?><?php default: ?>
<?php endswitch; ?>
</div>
</div>
<?php endforeach; ?>
<?php endforeach; ?>
На хостинге PHP 5.2, а старые версии фреймворков не хочется. Решил запилить свой.
Vasiliy 13.11.2015 15:36 # +2
1. фреймворк
2. CMS
3. социальную сеть.
someone 13.11.2015 15:39 # +2
Vasiliy 13.11.2015 15:44 # 0
3_14dar 16.11.2015 22:04 # 0
Ну в основе регулярок, как и нормальных парсеров, лежит конечный автомат, так что это еще не преступление. Тот же pyparsing на них работает. Другое дело что там парсинг будет примитивный.
guest 17.11.2015 00:57 # +1
kgm-rj 13.11.2015 15:45 # 0
А вообще, хочу комиксы рисовать и запилить для них сайтик с бложиком на N2O (эрланг-фреймворк). Уж очень я эрланг люблю. Паттерн-матчинг с хвостовой рекурсией за выходные довели меня до того, что в понедельник мне пришлось заново привыкать к си-подобному синтаксису в функциях и циклах.
kgm-rj 13.11.2015 16:01 # 0
Vasiliy 13.11.2015 16:11 # 0
Я очень похоже на
http://bootstrap-3.ru/components.php#thumbnails
kgm-rj 13.11.2015 16:21 # 0
<div class="row">
<div class="col-xs-6 col-md-3"></div>
<div class="col-xs-6 col-md-3"></div>
<div class="col-xs-6 col-md-3"></div>
<div class="col-xs-6 col-md-3"></div>
</div>
В foundation достаточно просто указать количество элементов в строке:
<ul class="small-block-grid-2 medium-block-grid-4">
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
А thumbnail это лишь способ красиво оформить какой-то блок с картинкой. Типа, карточки получается.
guest 13.11.2015 21:37 # +2
Вот если я сверстаю табличку из 6 ячеек и колспанов, то меня заклюют. А если я напишу "col-xs-6 col-md-3" это норма
barbarbar 20.11.2015 06:44 # 0
guest 13.11.2015 21:37 # 0
com1 15.11.2015 23:14 # 0
и прег уже не работает.
строить вьюху на комментах - паранойя?
kgm-rj 16.11.2015 09:41 # 0
kegdan 16.11.2015 10:21 # −1
Ну тогда тебе тут самое место, друг
1024-- 16.11.2015 14:49 # 0
kegdan 16.11.2015 15:39 # 0
kgm-rj 16.11.2015 15:50 # 0
Привычки писать
int x; // целое число
нет )
guest 17.11.2015 01:06 # 0
Stallman 16.11.2015 19:57 # 0
>PHP
1024-- 16.11.2015 20:30 # 0
1. Неявная динамическая типизация: function f($a, $b) вместо int f(const std::string&a, const std::list<std::map<std::string, int>>& b)
2. Низкий порог вхождения: среднестатистический ПХП-программист с меньшей вероятностью продумает интерфейс, чтобы он был простым и достаточным.
Vasiliy 16.11.2015 20:55 # 0
null или false.
Даже инстанс объекта или массив не особо критично.
kgm-rj 16.11.2015 21:34 # 0
kgm-rj 16.11.2015 21:36 # 0
kgm-rj 16.11.2015 21:37 # 0
bormand 16.11.2015 21:55 # 0
kegdan 16.11.2015 22:04 # 0
bormand 16.11.2015 22:18 # +2
kegdan 16.11.2015 22:23 # 0
Stallman 16.11.2015 22:25 # 0
guest 17.11.2015 00:12 # 0
3_14dar 17.11.2015 00:26 # +1
Stallman 17.11.2015 00:28 # +2
3_14dar 17.11.2015 00:48 # +1
guest 17.11.2015 00:54 # +4
guest 17.11.2015 00:33 # +1
3_14dar 17.11.2015 00:49 # 0
guest 17.11.2015 00:52 # +2
inkanus-gray 17.11.2015 01:01 # 0
guest 17.11.2015 01:04 # +1
Stallman 17.11.2015 01:06 # +3
guest 17.11.2015 01:07 # 0
Stallman 17.11.2015 01:18 # 0
Stallman 17.11.2015 02:22 # +2
340 опций! У шаблонизатора! Это почти в 7 раз больше, чем известных видов геев.
guest 17.11.2015 02:28 # +1
inkanus-gray 17.11.2015 02:29 # 0
guest 17.11.2015 02:30 # 0
3_14dar 17.11.2015 01:07 # 0
guest 17.11.2015 01:13 # 0
3_14dar 17.11.2015 01:15 # 0
guest 17.11.2015 01:17 # 0
3_14dar 17.11.2015 01:44 # +3
kegdan 17.11.2015 05:42 # +1
Наверное это свойственно всем мужчинам
guest 17.11.2015 11:09 # 0
kegdan 17.11.2015 11:35 # 0
Vasiliy 17.11.2015 12:53 # 0
1024-- 17.11.2015 15:13 # +1
Stallman 17.11.2015 15:19 # −2
Или у вас в экмамирке нормально, когда погромист пишет хуйню, которую сам не в состоянии запустить?
1024-- 17.11.2015 15:40 # +2
В экмамирке (по крайней мере, в мире JScript/JavaScript) всё сделано для людей.
В браузерах всё работает сразу. Node.js и пакеты устанавливаются без проблем (Да и Node.js даже компилируется без проблем, стоит лишь распаковать исходники да кликнуть мышью по одному файлику); скрипты легко запускаются. Под WSH тоже всё сразу работает. Вроде бы Node даже легко и просто со Студией работает, но я не пробовал.
Но задача программиста - написать код, который решает поставленную задачу. Разрабатывать процессоры, собирать компьютеры, мыть полы, поддерживать электростанции и готовить еду должны другие специалисты.
Тыжпрограммист, иди принтер мне запаяй!
Stallman 17.11.2015 16:33 # +1
>нормально, когда погромист пишет хуйню, которую сам не в состоянии запустить?
И не надо пытаться тянуть за яйца кривые аналогии, у тебя это стабильно хуёво получается.
Ты хуй.
kegdan 17.11.2015 17:46 # +2
guest 17.11.2015 17:53 # 0
А еще моему приложению нужна база данных, так что наймите пожалуйста DBA.
И кстати наймите мне админа, чтобы он поставил операционку мне на комп, и IDE тоже пускай поставит
1024-- 17.11.2015 17:59 # +2
Где лопата? Уж подготовить рабочее место сотрудника должен администратор, если это не контора "Мы пишем всё за 3 пачки роллтона".
guest 17.11.2015 18:37 # 0
bormand 17.11.2015 18:32 # +1
Пока будешь такой неженкой - "ставка программиста" выше джуниорской не поднимется.
guest 17.11.2015 18:33 # −1
"Я не буду делать foo, потому что мне за это не платят" следует читать как "я не умею делать foo и не собираюсь учиться"
3_14dar 18.11.2015 05:04 # 0
потому что мне за это не платят
1024-- 18.11.2015 10:18 # +1
Плохо слышно? Нет надобности искажать смысл только потому, что хочется.
"Я не буду делать foo, потому что мне за это не платят" следует читать как "Я не буду делать foo, потому что мне за это не платят"
При этом совершенно не важно, умеет ли человек делать foo. Он может уметь, а может и не уметь, но foo - не его работа.
Vasiliy 18.11.2015 13:48 # −1
Вопрос в том как ты научишься делать foo так хорошо что бы тебе за это платили?
Ведь что бы научится, что делать надо это сделать несколько раз в различных условиях.
3_14dar 18.11.2015 17:35 # +2
kegdan 18.11.2015 19:26 # +1
Троеточие - подумал Штирлиц
kegdan 17.11.2015 20:08 # +2
Хотя все это просто словесная эквилибристика
bormand 17.11.2015 21:51 # 0
Ну ок, принцессой на горошине, которая по каждой мелочи, с которой можно справиться минут за 5, будет дрочить админа, верстальщика, тестировщика и т.п. и тратить их время.
kegdan 17.11.2015 22:16 # 0
Тем более если это работа админа, верстальщика, тестировщика и т.п., то он перекидывает ее на меня и тратит мое время.
3_14dar 18.11.2015 05:05 # +3
1024-- 17.11.2015 18:03 # +1
Лечиться надо, Stallman, может тогда мысли о х..ях отпустят.
guest 17.11.2015 18:14 # −1
1024-- 17.11.2015 19:05 # 0
>> Или у вас в экмамирке нормально, когда программист пишет фигню, которую сам не в состоянии запустить?
> В экмамирке (по крайней мере, в мире JScript/JavaScript) всё сделано для людей.
В браузерах всё работает сразу. Node.js и пакеты устанавливаются без проблем (Да и Node.js даже компилируется без проблем, стоит лишь распаковать исходники да кликнуть мышью по одному файлику); скрипты легко запускаются. Под WSH тоже всё сразу работает. Вроде бы Node даже легко и просто со Студией работает, но я не пробовал.
bormand 17.11.2015 19:09 # +2
Просто, если программист не может продемонстрировать, как будет работать его прога/сайт и вообще ничерта не смыслит в её деплойменте - это хуёвый программист. Максимум на джуниора тянет.
3_14dar 18.11.2015 05:06 # 0
Дев сервер есть прямо изкоробки. У пыхомакак для тестов есть XAMPP, у питонистов нету нихуя.
Stallman 17.11.2015 19:16 # 0
bormand 17.11.2015 19:19 # 0
1024-- 17.11.2015 20:45 # +1
Как-то так.
3_14dar 18.11.2015 05:03 # +1
Запустить на локалхосте - конечно должен, как-то же проверить работу надо. Остальное - пусть одмины настраивают.
3_14dar 18.11.2015 05:00 # +1
Вот плюсану, по крайней мере с порогом вхождения в запуск там все в порядке, да и инструменты очень нуб-френдли, в отличие от фитона - коншоль под шиндой говно, остальное - наколеночное.
guest 17.11.2015 16:41 # +1
Я бы сказал так: любишь поесть? Научить мыть посуду и разогревать еду. Ты можешь конечно есть в ресторане, но это дорого.
Повар это автор компилятора. Никто не говорит тебе "хочешь писать на пайтоне? Напиши сипайтон!". Но разогреть еду (поставить пайтон) и выложить её на тарелку (настроить веб сервер) ты должен.
Еще раз: не обязательно уметь высоконагруженные сервера, не обязательно делать тонкую подстройку файловой системы или io шедулера или знать что такое tickless kernel, но для веб разработчика жизненно важно уметь хотя бы настроить свой веб сервер.
Вы на своем JS когда пишите Вы npm как-то ставите?
1024-- 17.11.2015 17:58 # +1
Да. Пара кликов мышью - и node с npm уже установлены.
> Но разогреть еду (поставить пайтон) и выложить её на тарелку (настроить веб сервер) ты должен.
Должен, если это - пара кликов мышью. Поставить node/python - действительно можно. Остальное - дело специалиста.
Т.е. если возвращаться к аналогии с поваром, настройка apache - это не "разогрейте и положите в тарелку", а "храните при температуре 8 градусов в винном погребе 4 месяца, откупорите, снимите пенку, положите 40 граммов соли, закупорите, оставьте на год при температуре 9 градусов, откупорите, выложите на тарелку, держите при температуре 150 градусов и давлении в 1/2 атмосферы час и три минуты". Соответственно, делать это должен отдельный специалист.
Vasiliy 17.11.2015 18:05 # +2
Сразу чувствуешь себя человеком.
1024-- 17.11.2015 18:59 # +1
guest 17.11.2015 18:07 # +1
А если тупо делать по туториалу, то можно и за час управиться.
Если веб программист не в состоянии настроить себе примитивный веб сервер то яб поостерегся ему что либо вообще доверять.
А что он еще не умеет? Может он не умеет профилировать свои запросы в БД? Это же работа DBA, как никак.
Не умеет никакой HTML, он же не фронт эндер.
Не умеет комментарии на английском, он же не переводчик.
bormand 17.11.2015 18:14 # +1
А проверять свой сайт он тоже не умеет, он же не тестер.
Проектировать - тоже. Он же архитектор.
И даже пользоваться своим сайтом он не умеет - он же не пользователь.
bormand 17.11.2015 18:20 # 0
P.S. Писать тексты он тоже не умеет, он же не машинистка.
3_14dar 18.11.2015 05:09 # −1
1024-- 17.11.2015 19:03 # 0
А вот тут есть крайне большая доля правды. Программист, который (а) обладает знаниями программиста и (б) постоянно работает над сайтом т.е. знает его возможности - очень хреновый пользователь.
guest 17.11.2015 19:39 # +2
Я конечно против того чтобы тыжпрограммист айфоны чинил, но я и против веб программиста который "я не буду даже пытаться изучить как работает апаче, потому что мне за это не платят".
Человек должен вокруг своей специальности очертить круг, и в нем боль-мень разбираться. Админ дешевого вебхостинга должен хотябы уметь читать код на пхп и написать хеллоу ворлд чтоб проверить что всё работает, а пхпшник должен хотябы уметь читать httpd.conf и запустить апаче хотябы с дефалтными настройками.
3_14dar 18.11.2015 05:11 # +1
kgm-rj 17.11.2015 18:37 # 0
guest 17.11.2015 18:40 # +2
Блин! Если кто-то заставит программиста настраивать сетевое оборудование, которое должно перебрасывать запросы на разные сервера, или тянуть оптику или настраивать автономную систему я первый будут против!
Ну уж веб сервер-то поставить не должно быть проблемой
kgm-rj 17.11.2015 18:48 # 0
kgm-rj 17.11.2015 18:55 # 0
kgm-rj 17.11.2015 18:57 # 0
guest 17.11.2015 19:01 # +3
inkanus-gray 17.11.2015 19:32 # 0
kgm-rj 17.11.2015 20:18 # 0
kegdan 17.11.2015 20:25 # 0
inkanus-gray 17.11.2015 20:32 # 0
IPv4, например, до сих пор используют. А IPv6 вообще 128-битный.
Ты же не хочешь сказать, что IPv6 распространяется медленно, потому что 128-битные процессоры непопулярны?
kegdan 17.11.2015 20:34 # 0
guest 17.11.2015 20:35 # +2
Да что Вы! Он и ipv3-то с т рудом тянет
kegdan 17.11.2015 20:36 # 0
--Ну Крузис на максималках идет...
guest 17.11.2015 20:37 # 0
--какой у тебя процессор?
--core i5.
а раньше было "пентиум"
kegdan 17.11.2015 20:39 # 0
Интел Инсиде тм
guest 17.11.2015 20:42 # 0
--виндуос
inkanus-gray 17.11.2015 23:10 # 0
1024-- 17.11.2015 20:47 # 0
bormand 17.11.2015 21:59 # 0
Ну core i5 - понятие растяжимое. Даже если забить на частоты, core i5 позапрошлого поколения != core i5 текущего.
kegdan 17.11.2015 22:28 # 0
Sandy Bridge - 32
Skylake - 16 или даже 14
Там еще были между ними Ivy Bridge и Haswell но цифры не помню а гуглить лень
guest 17.11.2015 22:30 # 0
Капитан Очевидность говорил мне что Интел использует политику тик-так. Сначала меняется арихитектура, затем -- нанометраж.
например сенджи и айви это одна архитектура, но разный метраж.
kegdan 17.11.2015 22:35 # 0
Там еще бродвелл был или типа того - уменьшенный хасвелл
bormand 17.11.2015 22:37 # 0
kegdan 17.11.2015 22:38 # 0
guest 17.11.2015 22:40 # 0
в каждой архитектуре бывает
цел
пень
i3
i5
i7
иногда еще i7 K (для разгона)
и всякие EE (типа для экстремалов)
еще есть xeonы, но это уже другая песня для серверов
bormand 17.11.2015 22:49 # 0
Нахуй нужны эти тормозные обрезки?
guest 17.11.2015 22:51 # 0
Впринципе, хватило бы и компа 15ти летней давности, но к нему не найти ни памяти, ни чипсетов
guest 17.11.2015 22:31 # 0
guest 17.11.2015 22:00 # 0
Это все равно что сказать "у меня пентиум" и не объяснить какой: первый на 75Mhz или тот же самый Skylake.
Но программистам такие вещи знать не нужно, им же за это не платят. Пускай железячники разбираются.
1024-- 17.11.2015 22:20 # +3
Я: Core i5.
Гость: да ты ламер, ты ещё скажи, что у тебя пентиум, мне это ничего не говорит!!!!11111 Ща в спортлото напишу о том, какой ты лаааамер!!!111
Я: На рабочей машине у меня Core i5-MCG345LU8, в ноутбуке - Core i5-U2800D, на домашнем десктопе - Core i5-Z835ペニスС!
Гость тянется в карман за смартфоном. Мы входим в лифт. Сеть пропадает.
Гость: Хм... Ну... То есть у тебя Core i5 (записывает в блокнотик). Эм... Понял.
Гость: А параметры-то какие? Понимаешь, тут Интел подсуетился... Тут буквы... Я по этим буквам ни черта не понимаю, логичной системы нет... Надо гуглить.
guest 17.11.2015 22:26 # 0
Но я хотя бы знаю что нужно указывать архитектуру и где можно найти всю инфу по конкретному номеру модели. Хорошо что теперь и ты это знаешь. Ты каждый день узнаешь что-то новое. Это здорово.
1024-- 17.11.2015 22:48 # 0
А кроме архитектуры - ещё несколько параметров, да. Либо опускаться до загадочных буковок, либо быть готовым назвать десяток циферок и запустить десяток тестов.
В итоге надо говорить "у меня Core i5" и не выпендриваться.
guest 17.11.2015 22:58 # 0
Говорить "i5" все равно что говорить "у меня интел" или "у меня PC".
Если ты этого не понял, то можешь почитать сообщения выше.
bormand 17.11.2015 23:02 # 0
inkanus-gray 17.11.2015 23:15 # 0
roman-kashitsyn 17.11.2015 23:37 # +1
Чтобы точно сразу отстали, нужно говорить, что процессор обычный, серый/белый/чёрный, и вообще он под столом.
bormand 18.11.2015 00:09 # 0
kegdan 18.11.2015 04:36 # 0
kgm-rj 17.11.2015 20:15 # 0
3_14dar 18.11.2015 05:08 # 0
inkanus-gray 17.11.2015 00:59 # 0
guest 17.11.2015 01:00 # 0
Что лучше -- вопрос.
Вообще если отдавать статику нгинксом то апач не так уж страшен.
3_14dar 17.11.2015 01:08 # 0
Иксперт. Ты что из этого настраивал?
guest 17.11.2015 01:11 # 0
Ну вообще о чем я говорю? Конечно ты мне не поверишь
3_14dar 17.11.2015 01:20 # 0
Ну ладно: чем mod_wsgi лучше гуникорна? И что из этого можно попробовать под видной?
guest 17.11.2015 01:32 # +1
На винде точно не работает daemon process, точно не работает гуникорт, и точно работает обычный Modwsgi+apache.
Так что на винде можно поставить apache, modwsgi и python и все должно завестись. Есть так же модвизги под iis, но он какой-то в глубокой бете, и ну его в жопу (апаче достаточно стабильно работает под виндой, хотя для высоконагруженных проектов конечно не подходит).
Важно только убедиться что у тебя верная версия питона, апача и модвизги (собранная верным компилятором), но туториалов дохрена с указанием конкретных бираников для скачки: самому можно ничего не компилировать.
https://github.com/GrahamDumpleton/mod_wsgi/blob/develop/win32/README.rst
inkanus-gray 17.11.2015 01:34 # 0
guest 17.11.2015 01:41 # +1
Flask, кажется, умеет.
3_14dar 17.11.2015 01:43 # 0
Дык в чем разница между апач+мод и nginx+gunicorn? nginx вроде шустрее.
guest 17.11.2015 01:46 # 0
Просто апаче во-первых везде работает, во-вторых под него дофигища модулей (хотя под нгинкс тоже очень много).
Можешь погуглить на тему gunicorn vs modwsgi, боюсь есть сторонники у обоих подходов.
guest 17.11.2015 01:49 # 0
Можно ставить то, что больше нравится / проще изучить.
Наверное nginx + gunicorn проще (тем более что nginx все равно нужен -- не отдавать же статику жырным апачем??).
А гуникорн достаточно прост.
ну вот только плохо что под винду не работает
3_14dar 17.11.2015 02:13 # 0
3_14dar 17.11.2015 02:13 # 0