Имхо, в большинстве случаев, когда говорят о тестировании кода, говорят о юнит-тестировании. Например, в той статье habrahabr.ru/company/infopulse/blog/177581/, откуда вы, похоже, взяли первый пример про helloWorld.
Есть юнит-тесты, а есть функциональные тесты. Не надо их путать. Юнит-тест тестирует не ситуацию, которую можно обработать внутри функции (bmp внутри jpg), юнит-тесты тестируют сами функции — передаём параметр и сравниваем результат с ожидаемым. Если у вас такие функции, которые нужно проверять десятками тестов, то, возможно, эти функции перегружены, и стоит разбить такие функции на несколько отдельных попроще, с 1-2 параметрами. Их и тестировать будет проще.
Юнит-тесты предназначены для тестирования конкретного участка программы — не взаимодействия нескольких юнитов, а одного юнита — функции/метода, как мельчайшего элемента программы, не путать с модулями (например, в Паскале unit — модуль программы, отдельный файл со множеством классов/функций).
Тестируют взаимодействие разных подсистем программы друг с другом функциональные тесты, а они пишутся совсем по другому, чем юнит-тесты.
Отдельно если говорить про TDD — там у тестов появляются ещё несколько важнейших назначений, помимо собственно проверки работоспособности кода.
Имею домен angular.ru. Могу пожертвовать на дело перевода. Как-то взял по случаю, когда начал изучать ng, думал тоже сделать перевод офсайта. А потом сменил вид деятельности, и теперь не сильно нужен — на него времени нет теперь…
Подождите-ка. Эти «космические скорости» — это не скорость, которую должен развить космический корабль. Это скорость, с которой минимально достаточно запустить с земли предмет, чтобы вывести на орбиту (1 — вокруг Земли, 2 — вокруг Солнца, 3 — в межзвёздное пространство). Например, катапультой выкидывать объект на орбиту (представьте себе, какое ускорение будет!). По указанной ссылке же и написано: «Предполагается, что после приобретения телом этой скорости оно более не получает негравитационного ускорения (двигатель выключен, атмосфера отсутствует).»
Что запретит покоящемуся на земле телу с ускорением в 1,05 «же» покинуть Землю? Ничего. Потихоньку вылетит на орбиту, на 100 км поднимется за 24 минуты, на тысячу км за 1 час 15 минут (h = (a-g) * t ^ 2).
Единственно что — даст ли сабжевый двигатель такое ускорение (больше 10 м/с^2) для корабля массой 150 тонн.
Интересно, изнутри робота есть ограничения на доступный код? Можно ли получить код робота противника и проанализировать его (например, для расчёта упреждения)?
По событию onScannedRobot(e) можно получить ссылку на обнаруженного робота e.robot, и у него уже получить код:
Robot.prototype.onScannedRobot = function(ev) {
var r = ev.robot;
var enemyCode = ev.scannedRobot.onIdle;
r.rotateCannon( analyzeEnemyMovement(enemyCode) );
r.fire();
//…
};
Понятно, что функция analyzeEnemyMovement получится непростой, но всё же…
Да, я понял уже. Нам это практически ничем не может повредить.
Но интересен сам факт, упомянутый в той передаче, что современная наука не может пересадить ОДИН ген, а пересаживается сразу довольно большой участок ДНК. Утверждается, что кроме требуемого гена переносится ещё несколько с неизвестным эффектом.
Я хотел уточнить, не встречались ли вы с такими фактами. Может, там в передаче вообще нагнали (любят телевизионщики это дело) и уже умеют точечно перемещать конкретные гены (о чём вы в статье и говорите).
А, да, я понял, вы правы. Я что-то забыл, что у нас всё «в котёл» попадает…
Там в программе говорилось, что проблема может быть в самой ДНК с обрывком, торчащим в середине, что они будут химически активны и смогут разрушать окружающие молекулы. Что приведёт к болезням того ГМ-организма.
Если в форме регистрации есть второе поле с паролем для проверки — можно ли сделать так, чтобы при генерации пароля второе поле автоматически тоже заполнялось?
Кстати, тот плагин simplePassMeter (который с «more»), зря вы сразу его отсеяли, очень даже неплохой. У него есть пару интересных фишек — проверки matchField (указываем поле с pass2, чтобы оба введённых пароля совпадали) и noMatchField (указываем поле с логином, чтобы не совпадали). Самый большой недостаток — плохая модульность, сложно переводить и ещё сложнее сделать его мультиязычным.
Спасибо за статью, отлично!
Я примерно так всё и представлял, аргументация и методичность рассмотрения темы понравились.
Не знал такие подробности про селекцию.
Я вообще считаю, что без ГМ невозможно решить проблему голода на земле, особенно с учётом продолжения увеличения населения нашей планеты. Исследования генной инжинетрии не просто хорошо бы продолжать, их необходимо продолжать.
В одной передаче про ГМО (не помню, какая именно, вроде «Среда обитания», но там не было «ужас-ужас») была интересная инфа. Какой-то профессор говорил, что современные методы перемещения генов несовершенны, невозможно взять именно один ген и пересадить только его. При перемещении у донора вырезается целый кусок ДНК и пересаживается реципиенту. Причём кусок отрезается не ровно «по границе генов», а как придётся, от чего в итоговой ДНК могут появиться оборванные цепочки — свободные радикалы, имеющие ненулевой электрический потенциал и химическую активность.
Именно это я вижу как наибольшую опасность. Не сами ГМО, не гипотетическое «свиное рыло от ГМ-свниниы», а повышенную аллергичность (особенно для аллергиков).
Хотя, в случае «жёсткой» селекции должны появляться такие же «хвосты» из радикалов…
Интересно было бы услышать мнение топикстартера по этому поводу.
Классная статья, спасибо! Есть один вопрос.
В файле /etc/nginx/templates/php параметр
fastcgi_pass unix:/tmp/wwwpool.sock;
этот конфиг подходит, если nginx стоит на той же машине, где и php-fpm. Если php-fpm на другой машине, то нужно писать
fastcgi_pass 10.0.0.1:9000;
А что делать, если используется несколько машин с php через upstream? Можно ли написать так:
upstream backend-php {
server 10.0.0.1:9000;
server 10.0.0.2:9000;
}
…
fastcgi_pass backend-php;
Есть интересный сервис xeround.com/lp/free-cloud-database/ — бесплатный облачный хостинг MySQL, как они говорят. Я не нашёл у них, за что деньги брать собираются и какие ограничения. Может, уже после регистрации скажут?
К сожалению, не могу проверить.
Я себе поставил на сервер систему виртуализации Proxmox (была на хабре пара статей о ней. Коротко — класс!), которая поддерживает OpenVZ- и kvm-виртуализацию. Но у меня только одна машина, поэтому миграцию не могу попробовать… А хотелось бы.
Но по прикидкам — нужно записать память в файл, передать по сети на соседнюю машину и там распаковать обратно в память. Пару секунд сохранять память, чуть дольше передавать и там ещё пару секунд запускать.
В общем, несколько секунд, вряд ли больше 2-3 минут. Но зависит от объёма памяти.
По крайней мере в технологии OpenVZ возможен перенос процессов на другую физическую машину без потери сетевых соединений. ru.wikipedia.org/wiki/OpenVZ#Чекпоинтинг_и_миграция_на_лету
>Так как все детали состояния VE, включая открытые сетевые соединения, сохраняются, то с точки зрения пользователя VE процесс миграции выглядит как задержка в ответе: скажем, одна из транзакций базы данных заняла больше времени, чем обычно, и далее работа продолжается как обычно; таким образом, пользователь не замечает, что его сервер баз данных работает уже на другом физическом сервере.
Есть юнит-тесты, а есть функциональные тесты. Не надо их путать. Юнит-тест тестирует не ситуацию, которую можно обработать внутри функции (bmp внутри jpg), юнит-тесты тестируют сами функции — передаём параметр и сравниваем результат с ожидаемым. Если у вас такие функции, которые нужно проверять десятками тестов, то, возможно, эти функции перегружены, и стоит разбить такие функции на несколько отдельных попроще, с 1-2 параметрами. Их и тестировать будет проще.
Юнит-тесты предназначены для тестирования конкретного участка программы — не взаимодействия нескольких юнитов, а одного юнита — функции/метода, как мельчайшего элемента программы, не путать с модулями (например, в Паскале unit — модуль программы, отдельный файл со множеством классов/функций).
Тестируют взаимодействие разных подсистем программы друг с другом функциональные тесты, а они пишутся совсем по другому, чем юнит-тесты.
Отдельно если говорить про TDD — там у тестов появляются ещё несколько важнейших назначений, помимо собственно проверки работоспособности кода.
Что запретит покоящемуся на земле телу с ускорением в 1,05 «же» покинуть Землю? Ничего. Потихоньку вылетит на орбиту, на 100 км поднимется за 24 минуты, на тысячу км за 1 час 15 минут (h = (a-g) * t ^ 2).
Единственно что — даст ли сабжевый двигатель такое ускорение (больше 10 м/с^2) для корабля массой 150 тонн.
var enemyCode = ev.scannedRobot.prototype.onIdle;
По событию onScannedRobot(e) можно получить ссылку на обнаруженного робота e.robot, и у него уже получить код:
Robot.prototype.onScannedRobot = function(ev) {
var r = ev.robot;
var enemyCode = ev.scannedRobot.onIdle;
r.rotateCannon( analyzeEnemyMovement(enemyCode) );
r.fire();
//…
};
Понятно, что функция analyzeEnemyMovement получится непростой, но всё же…
Но интересен сам факт, упомянутый в той передаче, что современная наука не может пересадить ОДИН ген, а пересаживается сразу довольно большой участок ДНК. Утверждается, что кроме требуемого гена переносится ещё несколько с неизвестным эффектом.
Я хотел уточнить, не встречались ли вы с такими фактами. Может, там в передаче вообще нагнали (любят телевизионщики это дело) и уже умеют точечно перемещать конкретные гены (о чём вы в статье и говорите).
Там в программе говорилось, что проблема может быть в самой ДНК с обрывком, торчащим в середине, что они будут химически активны и смогут разрушать окружающие молекулы. Что приведёт к болезням того ГМ-организма.
Если в форме регистрации есть второе поле с паролем для проверки — можно ли сделать так, чтобы при генерации пароля второе поле автоматически тоже заполнялось?
Кстати, тот плагин simplePassMeter (который с «more»), зря вы сразу его отсеяли, очень даже неплохой. У него есть пару интересных фишек — проверки matchField (указываем поле с pass2, чтобы оба введённых пароля совпадали) и noMatchField (указываем поле с логином, чтобы не совпадали). Самый большой недостаток — плохая модульность, сложно переводить и ещё сложнее сделать его мультиязычным.
Я примерно так всё и представлял, аргументация и методичность рассмотрения темы понравились.
Не знал такие подробности про селекцию.
Я вообще считаю, что без ГМ невозможно решить проблему голода на земле, особенно с учётом продолжения увеличения населения нашей планеты. Исследования генной инжинетрии не просто хорошо бы продолжать, их необходимо продолжать.
В одной передаче про ГМО (не помню, какая именно, вроде «Среда обитания», но там не было «ужас-ужас») была интересная инфа. Какой-то профессор говорил, что современные методы перемещения генов несовершенны, невозможно взять именно один ген и пересадить только его. При перемещении у донора вырезается целый кусок ДНК и пересаживается реципиенту. Причём кусок отрезается не ровно «по границе генов», а как придётся, от чего в итоговой ДНК могут появиться оборванные цепочки — свободные радикалы, имеющие ненулевой электрический потенциал и химическую активность.
Именно это я вижу как наибольшую опасность. Не сами ГМО, не гипотетическое «свиное рыло от ГМ-свниниы», а повышенную аллергичность (особенно для аллергиков).
Хотя, в случае «жёсткой» селекции должны появляться такие же «хвосты» из радикалов…
Интересно было бы услышать мнение топикстартера по этому поводу.
В файле /etc/nginx/templates/php параметр
fastcgi_pass unix:/tmp/wwwpool.sock;
этот конфиг подходит, если nginx стоит на той же машине, где и php-fpm. Если php-fpm на другой машине, то нужно писать
fastcgi_pass 10.0.0.1:9000;
А что делать, если используется несколько машин с php через upstream? Можно ли написать так:
upstream backend-php {
server 10.0.0.1:9000;
server 10.0.0.2:9000;
}
…
fastcgi_pass backend-php;
Я себе поставил на сервер систему виртуализации Proxmox (была на хабре пара статей о ней. Коротко — класс!), которая поддерживает OpenVZ- и kvm-виртуализацию. Но у меня только одна машина, поэтому миграцию не могу попробовать… А хотелось бы.
Но по прикидкам — нужно записать память в файл, передать по сети на соседнюю машину и там распаковать обратно в память. Пару секунд сохранять память, чуть дольше передавать и там ещё пару секунд запускать.
В общем, несколько секунд, вряд ли больше 2-3 минут. Но зависит от объёма памяти.
ru.wikipedia.org/wiki/OpenVZ#Чекпоинтинг_и_миграция_на_лету
>Так как все детали состояния VE, включая открытые сетевые соединения, сохраняются, то с точки зрения пользователя VE процесс миграции выглядит как задержка в ответе: скажем, одна из транзакций базы данных заняла больше времени, чем обычно, и далее работа продолжается как обычно; таким образом, пользователь не замечает, что его сервер баз данных работает уже на другом физическом сервере.