1) Насколько я знаю, CAS-сервер не должен делать автоматического перенаправления назад на сайт (если cookie уже есть), а всё равно должен спросить согласие пользователя. Т. е. вход получается непрозрачный (надо делать дополнительный клик и будет виден интерфейс CAS-сервера). Можно конечно это правило проигнорировать в своей реализации… Я в своей реализации на drupal это пробовал делать, но в итоге отключил.
2) Если на сайте должен быть предусмотрен и анонимный просмотр, тогда переход на CAS-аутентификацию должен быть по запросу (при клике «войти»). Опять же не прозрачно, надо кликать, потом опять кликать подтверждение.
Я написал десятки модулей разной сложности для десятков сайтов. Бывают модули с чёткой и понятной функциональностью, а бывают и вот такие:
<?php
function XXX_form_alter($form_id, &$form) {
// в базе программ ДПО скрываем у фильтра «подразделение» пункт «пусто»
if ($form_id == 'views_filters' && $form['#view_name'] == 'dpo') {
unset($form['filter1']['#options'][0]);
}
}
?>
Это весь модуль. Прячет у представления (view) в фильтре пункт «пусто», который через админку не скрывается. Вроде бы и хорошо, что есть возможность это сделать без изменения ядра и достаточно просто, но что-то здесь не так имхо, хотя я и привык.
Для этой же view в template.php +15 строчек, чтобы просто добавить class к table. И еще много строчек, чтобы URL сделать ссылкой в таблице (не ставя для этого модуль на сотни строк кода). Тоже уже привык к такому.
Мне часто, чтобы достичь нужного эффекта приходится писать модули-«хаки» в котором хуки с кучей мелких фиксов. А кто не умеет писать модули, те ищут готовые модули для каждого чиха. В последнее время я даю название таким модулям имя_tweaks. И получается в одном модуле куча разной функциональности не связанной никакой логикой. Можно конечно разбивать на кучу модулей, но получится куча мелких «однострочных» модулей.
Думаю имеются в виду случаи частого использования хуков для мелких изменений поведения разных частей системы, чтобы достичь нужного эффекта. Нужно скрыть в форме поле — пиши form_alter, нужно на какой-то странице поменять заголовок — изгаляйся с nodeapi или form_alter или template.php, нужно увеличить maxlength у title в формах — form_alter и т. д.
Согласен, что очень специфичный и редко используемый контейнер. Для интереса запустил поиск по исходникам, которые когда-то писал… Примеры нашёл, хотя везде бы и ArrayList нормально сработал.
Вот пример: история введённых URL в программе с GUI. При введении нового адреса надо добавить его в начало списка, а если он уже был где-то в списке, то старый элемент удалить (чтобы не было дубликатов).
В этом случае у ArrayList по логике вещей будет больше операций (т. к. удаление будет всегда долгим, а изредка и добавление), хотя на практике еще непонятно кто будет работать быстрее.
Еще нашёлся пример с задачкой с diofant.ru: в алгоритме надо было в списке городов часто удалять из середины города по известному названию.
true 12 ms
true 10 ms
true 10 ms
true 10 ms
true 10 ms
true 10 ms
true 0 ms
true 11 ms
true 10 ms
true 10 ms
Я склоняюсь к тому, чтобы вообще выпилить пинг. А ставить такую реализацию, с непонятными значениями под виндой, смысла имхо нет. Или же надо разбираться почему так получается.
Этот метод всё же странный, я пытался пользоваться им и бросил это дело. Сейчас сделал тест с таким кодом:
InetAddress host = InetAddress.getByName(«ya.ru»);
for (int i = 0; i < 10; i++) {
long time = System.nanoTime();
System.out.println(host.isReachable(10000) + " " + (System.nanoTime() — time) / 1000000 + " ms");
}
Обычный пинг выдает 74 мс, а этот код печатает значения от 0 до 13.
По логике вещей, если вдруг используется TCP ECHO, то там разница должна быть больше, чем просто 67 и 72, т. к. в TCP идут пакеты на установление соединения, потом сами пакеты с данными, а потом пакеты с подтверждением о получении и уведомление о закрытии соединения.
Этот метод — не настоящий пинг, он пытается использовать протокол echo на 7-ом TCP порту. И время прохождения пакета он не возвращает, даже если echo вдруг есть на хосте.
Да, фичи не уникальны, но 1) в винде с консолью сложновато, 2) в curl надо еще решать проблему с кодировкой результата, 3) в списке нет listen, proxy (ставить squid?).
Они включены в jar-ник, лежат вместе с class-ами. Там не очень хорошо в плане комментов, изначально прога планировалось как быстрый хак, поэтому так получилось… GUI в netbeans сделан, смотреть глазами на него не рекомендуется) Как руки дойдут, может залью на bitbucket.
Опытным путём остановлено, что не работает несколько опций DisallowIndex в одной секции (приходится писать длинные регулярки).
Ручное ранжирование (подъём вверх, опускание вниз) требует переиндексации, неудобно, если переиндексация занимает много времени и выполняется редко.
PDF-ки, DOC-и ищутся, это хорошо, но без options set не знаю что и делать.
2) Если на сайте должен быть предусмотрен и анонимный просмотр, тогда переход на CAS-аутентификацию должен быть по запросу (при клике «войти»). Опять же не прозрачно, надо кликать, потом опять кликать подтверждение.
<?php
function XXX_form_alter($form_id, &$form) {
// в базе программ ДПО скрываем у фильтра «подразделение» пункт «пусто»
if ($form_id == 'views_filters' && $form['#view_name'] == 'dpo') {
unset($form['filter1']['#options'][0]);
}
}
?>
Это весь модуль. Прячет у представления (view) в фильтре пункт «пусто», который через админку не скрывается. Вроде бы и хорошо, что есть возможность это сделать без изменения ядра и достаточно просто, но что-то здесь не так имхо, хотя я и привык.
Для этой же view в template.php +15 строчек, чтобы просто добавить class к table. И еще много строчек, чтобы URL сделать ссылкой в таблице (не ставя для этого модуль на сотни строк кода). Тоже уже привык к такому.
Вот пример: история введённых URL в программе с GUI. При введении нового адреса надо добавить его в начало списка, а если он уже был где-то в списке, то старый элемент удалить (чтобы не было дубликатов).
В этом случае у ArrayList по логике вещей будет больше операций (т. к. удаление будет всегда долгим, а изредка и добавление), хотя на практике еще непонятно кто будет работать быстрее.
Еще нашёлся пример с задачкой с diofant.ru: в алгоритме надо было в списке городов часто удалять из середины города по известному названию.
true 12 ms
true 10 ms
true 10 ms
true 10 ms
true 10 ms
true 10 ms
true 0 ms
true 11 ms
true 10 ms
true 10 ms
Я склоняюсь к тому, чтобы вообще выпилить пинг. А ставить такую реализацию, с непонятными значениями под виндой, смысла имхо нет. Или же надо разбираться почему так получается.
InetAddress host = InetAddress.getByName(«ya.ru»);
for (int i = 0; i < 10; i++) {
long time = System.nanoTime();
System.out.println(host.isReachable(10000) + " " + (System.nanoTime() — time) / 1000000 + " ms");
}
Обычный пинг выдает 74 мс, а этот код печатает значения от 0 до 13.
По логике вещей, если вдруг используется TCP ECHO, то там разница должна быть больше, чем просто 67 и 72, т. к. в TCP идут пакеты на установление соединения, потом сами пакеты с данными, а потом пакеты с подтверждением о получении и уведомление о закрытии соединения.
У меня репа на hg, так что выложу на bitbucket.