- 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, а старые версии фреймворков не хочется. Решил запилить свой.
1. фреймворк
2. CMS
3. социальную сеть.
Ну в основе регулярок, как и нормальных парсеров, лежит конечный автомат, так что это еще не преступление. Тот же pyparsing на них работает. Другое дело что там парсинг будет примитивный.
А вообще, хочу комиксы рисовать и запилить для них сайтик с бложиком на N2O (эрланг-фреймворк). Уж очень я эрланг люблю. Паттерн-матчинг с хвостовой рекурсией за выходные довели меня до того, что в понедельник мне пришлось заново привыкать к си-подобному синтаксису в функциях и циклах.
Я очень похоже на
http://bootstrap-3.ru/components.php#thumbnails
<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 это лишь способ красиво оформить какой-то блок с картинкой. Типа, карточки получается.
Вот если я сверстаю табличку из 6 ячеек и колспанов, то меня заклюют. А если я напишу "col-xs-6 col-md-3" это норма
и прег уже не работает.
строить вьюху на комментах - паранойя?
Ну тогда тебе тут самое место, друг
Привычки писать
int x; // целое число
нет )
>PHP
1. Неявная динамическая типизация: function f($a, $b) вместо int f(const std::string&a, const std::list<std::map<std::string, int>>& b)
2. Низкий порог вхождения: среднестатистический ПХП-программист с меньшей вероятностью продумает интерфейс, чтобы он был простым и достаточным.
null или false.
Даже инстанс объекта или массив не особо критично.
340 опций! У шаблонизатора! Это почти в 7 раз больше, чем известных видов геев.
Наверное это свойственно всем мужчинам
Или у вас в экмамирке нормально, когда погромист пишет хуйню, которую сам не в состоянии запустить?
В экмамирке (по крайней мере, в мире JScript/JavaScript) всё сделано для людей.
В браузерах всё работает сразу. Node.js и пакеты устанавливаются без проблем (Да и Node.js даже компилируется без проблем, стоит лишь распаковать исходники да кликнуть мышью по одному файлику); скрипты легко запускаются. Под WSH тоже всё сразу работает. Вроде бы Node даже легко и просто со Студией работает, но я не пробовал.
Но задача программиста - написать код, который решает поставленную задачу. Разрабатывать процессоры, собирать компьютеры, мыть полы, поддерживать электростанции и готовить еду должны другие специалисты.
Тыжпрограммист, иди принтер мне запаяй!
>нормально, когда погромист пишет хуйню, которую сам не в состоянии запустить?
И не надо пытаться тянуть за яйца кривые аналогии, у тебя это стабильно хуёво получается.
Ты хуй.
А еще моему приложению нужна база данных, так что наймите пожалуйста DBA.
И кстати наймите мне админа, чтобы он поставил операционку мне на комп, и IDE тоже пускай поставит
Где лопата? Уж подготовить рабочее место сотрудника должен администратор, если это не контора "Мы пишем всё за 3 пачки роллтона".
Пока будешь такой неженкой - "ставка программиста" выше джуниорской не поднимется.
"Я не буду делать foo, потому что мне за это не платят" следует читать как "я не умею делать foo и не собираюсь учиться"
потому что мне за это не платят
Плохо слышно? Нет надобности искажать смысл только потому, что хочется.
"Я не буду делать foo, потому что мне за это не платят" следует читать как "Я не буду делать foo, потому что мне за это не платят"
При этом совершенно не важно, умеет ли человек делать foo. Он может уметь, а может и не уметь, но foo - не его работа.
Вопрос в том как ты научишься делать foo так хорошо что бы тебе за это платили?
Ведь что бы научится, что делать надо это сделать несколько раз в различных условиях.
Троеточие - подумал Штирлиц
Хотя все это просто словесная эквилибристика
Ну ок, принцессой на горошине, которая по каждой мелочи, с которой можно справиться минут за 5, будет дрочить админа, верстальщика, тестировщика и т.п. и тратить их время.
Тем более если это работа админа, верстальщика, тестировщика и т.п., то он перекидывает ее на меня и тратит мое время.
Лечиться надо, Stallman, может тогда мысли о х..ях отпустят.
>> Или у вас в экмамирке нормально, когда программист пишет фигню, которую сам не в состоянии запустить?
> В экмамирке (по крайней мере, в мире JScript/JavaScript) всё сделано для людей.
В браузерах всё работает сразу. Node.js и пакеты устанавливаются без проблем (Да и Node.js даже компилируется без проблем, стоит лишь распаковать исходники да кликнуть мышью по одному файлику); скрипты легко запускаются. Под WSH тоже всё сразу работает. Вроде бы Node даже легко и просто со Студией работает, но я не пробовал.
Просто, если программист не может продемонстрировать, как будет работать его прога/сайт и вообще ничерта не смыслит в её деплойменте - это хуёвый программист. Максимум на джуниора тянет.
Дев сервер есть прямо изкоробки. У пыхомакак для тестов есть XAMPP, у питонистов нету нихуя.
Как-то так.
Запустить на локалхосте - конечно должен, как-то же проверить работу надо. Остальное - пусть одмины настраивают.
Вот плюсану, по крайней мере с порогом вхождения в запуск там все в порядке, да и инструменты очень нуб-френдли, в отличие от фитона - коншоль под шиндой говно, остальное - наколеночное.
Я бы сказал так: любишь поесть? Научить мыть посуду и разогревать еду. Ты можешь конечно есть в ресторане, но это дорого.
Повар это автор компилятора. Никто не говорит тебе "хочешь писать на пайтоне? Напиши сипайтон!". Но разогреть еду (поставить пайтон) и выложить её на тарелку (настроить веб сервер) ты должен.
Еще раз: не обязательно уметь высоконагруженные сервера, не обязательно делать тонкую подстройку файловой системы или io шедулера или знать что такое tickless kernel, но для веб разработчика жизненно важно уметь хотя бы настроить свой веб сервер.
Вы на своем JS когда пишите Вы npm как-то ставите?
Да. Пара кликов мышью - и node с npm уже установлены.
> Но разогреть еду (поставить пайтон) и выложить её на тарелку (настроить веб сервер) ты должен.
Должен, если это - пара кликов мышью. Поставить node/python - действительно можно. Остальное - дело специалиста.
Т.е. если возвращаться к аналогии с поваром, настройка apache - это не "разогрейте и положите в тарелку", а "храните при температуре 8 градусов в винном погребе 4 месяца, откупорите, снимите пенку, положите 40 граммов соли, закупорите, оставьте на год при температуре 9 градусов, откупорите, выложите на тарелку, держите при температуре 150 градусов и давлении в 1/2 атмосферы час и три минуты". Соответственно, делать это должен отдельный специалист.
Сразу чувствуешь себя человеком.
А если тупо делать по туториалу, то можно и за час управиться.
Если веб программист не в состоянии настроить себе примитивный веб сервер то яб поостерегся ему что либо вообще доверять.
А что он еще не умеет? Может он не умеет профилировать свои запросы в БД? Это же работа DBA, как никак.
Не умеет никакой HTML, он же не фронт эндер.
Не умеет комментарии на английском, он же не переводчик.
А проверять свой сайт он тоже не умеет, он же не тестер.
Проектировать - тоже. Он же архитектор.
И даже пользоваться своим сайтом он не умеет - он же не пользователь.
P.S. Писать тексты он тоже не умеет, он же не машинистка.
А вот тут есть крайне большая доля правды. Программист, который (а) обладает знаниями программиста и (б) постоянно работает над сайтом т.е. знает его возможности - очень хреновый пользователь.
Я конечно против того чтобы тыжпрограммист айфоны чинил, но я и против веб программиста который "я не буду даже пытаться изучить как работает апаче, потому что мне за это не платят".
Человек должен вокруг своей специальности очертить круг, и в нем боль-мень разбираться. Админ дешевого вебхостинга должен хотябы уметь читать код на пхп и написать хеллоу ворлд чтоб проверить что всё работает, а пхпшник должен хотябы уметь читать httpd.conf и запустить апаче хотябы с дефалтными настройками.
Блин! Если кто-то заставит программиста настраивать сетевое оборудование, которое должно перебрасывать запросы на разные сервера, или тянуть оптику или настраивать автономную систему я первый будут против!
Ну уж веб сервер-то поставить не должно быть проблемой
IPv4, например, до сих пор используют. А IPv6 вообще 128-битный.
Ты же не хочешь сказать, что IPv6 распространяется медленно, потому что 128-битные процессоры непопулярны?
Да что Вы! Он и ipv3-то с т рудом тянет
--Ну Крузис на максималках идет...
--какой у тебя процессор?
--core i5.
а раньше было "пентиум"
Интел Инсиде тм
--виндуос
Ну core i5 - понятие растяжимое. Даже если забить на частоты, core i5 позапрошлого поколения != core i5 текущего.
Sandy Bridge - 32
Skylake - 16 или даже 14
Там еще были между ними Ivy Bridge и Haswell но цифры не помню а гуглить лень
Капитан Очевидность говорил мне что Интел использует политику тик-так. Сначала меняется арихитектура, затем -- нанометраж.
например сенджи и айви это одна архитектура, но разный метраж.
Там еще бродвелл был или типа того - уменьшенный хасвелл
в каждой архитектуре бывает
цел
пень
i3
i5
i7
иногда еще i7 K (для разгона)
и всякие EE (типа для экстремалов)
еще есть xeonы, но это уже другая песня для серверов
Нахуй нужны эти тормозные обрезки?
Впринципе, хватило бы и компа 15ти летней давности, но к нему не найти ни памяти, ни чипсетов
Это все равно что сказать "у меня пентиум" и не объяснить какой: первый на 75Mhz или тот же самый Skylake.
Но программистам такие вещи знать не нужно, им же за это не платят. Пускай железячники разбираются.
Я: Core i5.
Гость: да ты ламер, ты ещё скажи, что у тебя пентиум, мне это ничего не говорит!!!!11111 Ща в спортлото напишу о том, какой ты лаааамер!!!111
Я: На рабочей машине у меня Core i5-MCG345LU8, в ноутбуке - Core i5-U2800D, на домашнем десктопе - Core i5-Z835ペニスС!
Гость тянется в карман за смартфоном. Мы входим в лифт. Сеть пропадает.
Гость: Хм... Ну... То есть у тебя Core i5 (записывает в блокнотик). Эм... Понял.
Гость: А параметры-то какие? Понимаешь, тут Интел подсуетился... Тут буквы... Я по этим буквам ни черта не понимаю, логичной системы нет... Надо гуглить.
Но я хотя бы знаю что нужно указывать архитектуру и где можно найти всю инфу по конкретному номеру модели. Хорошо что теперь и ты это знаешь. Ты каждый день узнаешь что-то новое. Это здорово.
А кроме архитектуры - ещё несколько параметров, да. Либо опускаться до загадочных буковок, либо быть готовым назвать десяток циферок и запустить десяток тестов.
В итоге надо говорить "у меня Core i5" и не выпендриваться.
Говорить "i5" все равно что говорить "у меня интел" или "у меня PC".
Если ты этого не понял, то можешь почитать сообщения выше.
Чтобы точно сразу отстали, нужно говорить, что процессор обычный, серый/белый/чёрный, и вообще он под столом.
Что лучше -- вопрос.
Вообще если отдавать статику нгинксом то апач не так уж страшен.
Иксперт. Ты что из этого настраивал?
Ну вообще о чем я говорю? Конечно ты мне не поверишь
Ну ладно: чем mod_wsgi лучше гуникорна? И что из этого можно попробовать под видной?
На винде точно не работает daemon process, точно не работает гуникорт, и точно работает обычный Modwsgi+apache.
Так что на винде можно поставить apache, modwsgi и python и все должно завестись. Есть так же модвизги под iis, но он какой-то в глубокой бете, и ну его в жопу (апаче достаточно стабильно работает под виндой, хотя для высоконагруженных проектов конечно не подходит).
Важно только убедиться что у тебя верная версия питона, апача и модвизги (собранная верным компилятором), но туториалов дохрена с указанием конкретных бираников для скачки: самому можно ничего не компилировать.
https://github.com/GrahamDumpleton/mod_wsgi/blob/develop/win32/README.rst
Flask, кажется, умеет.
Дык в чем разница между апач+мод и nginx+gunicorn? nginx вроде шустрее.
Просто апаче во-первых везде работает, во-вторых под него дофигища модулей (хотя под нгинкс тоже очень много).
Можешь погуглить на тему gunicorn vs modwsgi, боюсь есть сторонники у обоих подходов.
Можно ставить то, что больше нравится / проще изучить.
Наверное nginx + gunicorn проще (тем более что nginx все равно нужен -- не отдавать же статику жырным апачем??).
А гуникорн достаточно прост.
ну вот только плохо что под винду не работает