класс определяет лексическое пространство имен. т.е. класс фактически является неймспейсом. поэтому синтаксис App::Lib2::MyClass::WhoAmI() был бы логичен (равно как и вложенные классы).
— Ты зачем притащил десять булок хлеба!?
— Потому, что яйца были.
— !??
— Сама же просила: «сходи в магазин, купи хлеба, если будут яйца, возьми десяток».
Ваша модель позволяет сократить время разработки, за счет того, что сама может достраивать пути запроса. Однако, у меня создалось впечатление, что в процессе эксплуатации это может приводить к появлению не очевидных багов, поскольку добавление новых связей может изменять пути уже существующих запросов (а следовательно, и семантику их результатов).
Связный граф без колец (циклов) называется деревом. Эта модель подходит лишь для каких-то вырожденных случаев. Понятийные связи в реальных моделях образуют сети.
В общем, для меня многое осталось не ясным. Буду ждать релиза в опенсорц, для того чтобы посмотреть как это работает на практике.
и как понять, какие же регионы в итоге выбираются:
1. где человеки имеют подключеные симки к региональным тарифам
2. где прописаны человеки
?
будет выбран самый легкий путь?
ок. допустим, изначально (во время реализации) в графе существовал только первый путь (через тарифы). что происходит с приложением, выполняющим этот запрос, после добавления в БД нового, более «легкого», пути (через прописку, в данном случае)?
на месте google, сам бы заплатил за такой «инцидент». для них это классная реклама. даже если, в итоге, они будут вынуждены «слить» данные получателя банку. кто узнает?
на месте спамеров и вир.мейкеров, срочно бы подорвался рассылать письма «от банка» с вложением *.xls. даже на не гугло-адреса.
По прежнему не понимаю. Но теперь уже две вещи. :)
1. Зачем указывать ключ -E venv? Мне попадалось много статей, где ключ указан. Но показалось, если пакет устанавливается в то же самое виртуальное окружение, где находится и pip, то ключ не обязателен. Необходимые настройки подключаются благодаря кастомному интерпретатору ./bin/python, который размещен там же.
2. Нужно было установить lxml system-wide от root, создав *.deb пакет, но зачем? Я считаю, что это сложнее и вносит неразбериху в apt. Поэтому для экспериментов использую виртуальные окружения. У меня еще не было проблем ни с lxml, ни с mysqldb, установленными таким способом. Где ждать неприятностей?
Ситуация с Gem тоже не однозначна, поскольку пакетный менеджер, имеющий собственные представления о зависимостях и путях инсталляции, неизбежно вступает в конфликт с пакетными менеджерами операционных систем (тем же apt). В последнее время появилось много аналогичной критики и в адрес setuptools, пытающихся вобрать в себя функционал инсталятора, пакетного менеджера и менеджера зависимостей. Плюс setuptools долгое время находится практически в заброшенном состоянии. Сейчас активно ведется переработка pypi.python.org/pypi/distribute (соответствующий фрок virtualenv pypi.python.org/pypi/virtualenv-distribute), но до завершения еще долго. Virutalenv, pip и yolk это классический unixway подхода к решению проблемы.
хабра требует специфичное html форматирование с использованием тегов <font>, а pygments генерирует <style class=«el» >. в общем, сходу не разобрался. да и задача была другая. познакомившись с virtualenv и pip я потратил определенное время, в поисках удобного решения для быстрого создания изолированных окружений и кеширования загружаемых исходников. в итоге появился этот скрипт на shell.
что касается lxml. перепробовал несколько библиотек. wwwsearch.sourceforge.net/mechanize/ на использованном сервисе не распознает инпут «use_font», соответственно глючат и другие библиотеки, использующие mechanize (http://pypi.python.org/pypi/zc.testbrowser, например). у pypi.python.org/pypi/BeautifulSoup/ вроде отдельный парсер, но вылезла та же самая проблема. lxml.html оказалось первым, кто смог правильно распарсить страницу.
/\w+?@\w+?\.\w+?/
Обычно в таком случае я задаю «вопрос на засыпку» — «какой недопустимый символ пройдет эту проверку?». В ответ я хочу услышать «подчеркивание». Не отвечает практически ни один.
какой, допустимый символ, не пройдет эту проверку? =)
это так, пока вы остаетесь единственным автором, т.е. не принимали патчи со стороны (если так, то зачем вам опенсорц?). как только в проекте появляются сторонние патчи, то вопрос авторства сильно усложняется. а следовательно и — смены политики лицензирования.
В крупных конторах для этого есть специальные люди, которые занимаются тем, что пишут…
спецификации. тесты это переложение спецификаций в программный код.
Согласитесь, если класс на 100 строк, то писать тесты на 200 строк кажется лишней тратой времени
Часто встречаются штуки, которые проще написать, чем описать. Кстати, пример калькулятора из их числа. :)
* @assert (15,0) == 0.
*/
public function div($a,$b)
…
/**
* Generated from @assert (15,0) == 0.
* @expectedException Exception
*/
public function testDiv4()
Вот это полная хрень. Если в спецификации написано «assert (15,0) == 0», значит функция div при аргументах 15 и 0 _обязана_ вернуть 0. И Netbeans генерировал правильный код теста. Но Вы, вместо того, чтобы исправить реализацию, всех обманули, переделав сам тест.
Условие неверных спецификаций не рассматриваем, по очевидным причинам.
Это абстрактная ситуация. На практике такое сложно представить. Я, печатаю это сообщение, долбя по клавишам ноута. А Я, сидящий в метре от ноута уже не способен дотянуться до клавиш, и занимается совсем другими делами. :) Эта хабра-страничка, создается одним и тем же алгоритмом, но выглядит по-разному для каждого пользователя, из-за одного мелкого нюанса — куки. Ну и т.п.
<?phpnamespace foo
class A {}
?>
B.php:
<?php
class B {}
?>
<?php
include "A.php";
include "B.php"; # В каком нейспейсе class B: 'foo' или 'global' ?
?>
Ваша модель позволяет сократить время разработки, за счет того, что сама может достраивать пути запроса. Однако, у меня создалось впечатление, что в процессе эксплуатации это может приводить к появлению не очевидных багов, поскольку добавление новых связей может изменять пути уже существующих запросов (а следовательно, и семантику их результатов).
Связный граф без колец (циклов) называется деревом. Эта модель подходит лишь для каких-то вырожденных случаев. Понятийные связи в реальных моделях образуют сети.
В общем, для меня многое осталось не ясным. Буду ждать релиза в опенсорц, для того чтобы посмотреть как это работает на практике.
например так:
@should.throw(Exception).when(1,0)
@should.give(7).when(5,2)
но думаю, есть лучшие варианты.
и как понять, какие же регионы в итоге выбираются:
1. где человеки имеют подключеные симки к региональным тарифам
2. где прописаны человеки
?
будет выбран самый легкий путь?
ок. допустим, изначально (во время реализации) в графе существовал только первый путь (через тарифы). что происходит с приложением, выполняющим этот запрос, после добавления в БД нового, более «легкого», пути (через прописку, в данном случае)?
так на онтологии похоже. :)
на месте спамеров и вир.мейкеров, срочно бы подорвался рассылать письма «от банка» с вложением *.xls. даже на не гугло-адреса.
пофик.
1. Зачем указывать ключ -E venv? Мне попадалось много статей, где ключ указан. Но показалось, если пакет устанавливается в то же самое виртуальное окружение, где находится и pip, то ключ не обязателен. Необходимые настройки подключаются благодаря кастомному интерпретатору ./bin/python, который размещен там же.
2. Нужно было установить lxml system-wide от root, создав *.deb пакет, но зачем? Я считаю, что это сложнее и вносит неразбериху в apt. Поэтому для экспериментов использую виртуальные окружения. У меня еще не было проблем ни с lxml, ни с mysqldb, установленными таким способом. Где ждать неприятностей?
почему?
что касается lxml. перепробовал несколько библиотек. wwwsearch.sourceforge.net/mechanize/ на использованном сервисе не распознает инпут «use_font», соответственно глючат и другие библиотеки, использующие mechanize (http://pypi.python.org/pypi/zc.testbrowser, например). у pypi.python.org/pypi/BeautifulSoup/ вроде отдельный парсер, но вылезла та же самая проблема. lxml.html оказалось первым, кто смог правильно распарсить страницу.
какой, допустимый символ, не пройдет эту проверку? =)
спецификации. тесты это переложение спецификаций в программный код.
Часто встречаются штуки, которые проще написать, чем описать. Кстати, пример калькулятора из их числа. :)
Вот это полная хрень. Если в спецификации написано «assert (15,0) == 0», значит функция div при аргументах 15 и 0 _обязана_ вернуть 0. И Netbeans генерировал правильный код теста. Но Вы, вместо того, чтобы исправить реализацию, всех обманули, переделав сам тест.
Условие неверных спецификаций не рассматриваем, по очевидным причинам.
Это абстрактная ситуация. На практике такое сложно представить. Я, печатаю это сообщение, долбя по клавишам ноута. А Я, сидящий в метре от ноута уже не способен дотянуться до клавиш, и занимается совсем другими делами. :) Эта хабра-страничка, создается одним и тем же алгоритмом, но выглядит по-разному для каждого пользователя, из-за одного мелкого нюанса — куки. Ну и т.п.