Турция
Решил сделать себе и семье небольшой подарок - съездить отдохнуть на море. Для отдыха выбрали Турцию - как страну с минимальным уровнем цен и максимальным уровнем сервиса. Остановились в отеле Tekirova Corinthia.
Сам отель стоит в живописном месте на берегу средиземного моря. Территория довольно большая, много зелени. Растут апельсины, бананы, финики, много знакомых растений растущих у нас дома в горшках - фикус, алое, гибискус и еще много всего названия которого я не знаю.
Вода в Средиземном море солёная. Гораздо солонее чем, скажем, в Черном море. Средиземное море - третье по солености в мире - на втором стоит Красное море, на первом Мертвое море в Израиле.
Теперь Федя о главном. Интернет нормально работает только на ресепшене и возможно в номерах главного корпуса. На всей остальной территории отеля интернет вроде есть и вроде как соединяется но работать вряд ли получится. В нашем бунгало загрузка страницы занимает от тридцати секунд а посылка данных вообще занимает бесконечность.
Похоже не территории есть точки доступа, но только в прикрученных номерах. Я прошелся по территории отеля со смартфоном - есть с десяток точек доступа, похоже, все они стоят в VIP бунгало - до других бунгало вроде бы и добивают но очень нестабильно, местами.
В отеле полно русских, есть немцы, в основном пенсионеры, французы, видел несколько человек из Сербии. Люди все очень дружелюбные.
Персонал, в основном, понимает русский язык.
Номер. Номера в гостинице нескольких видов. У нас то, что называется Garten Room. Комната чистая. Насекомых не наблюдается. Телевизор показывает несколько русских каналов. Халатов в номере нет. Для тех кому нужны халаты их предлагается купить. Это первый пятизвездочный отель без халатов который я встретил, не знаю, это характерная для Турции особенность, или это только в этом отеле. Возможно в более дорогих номерах халаты все-таки есть.
Еда. Шведский стол практически круглые сутки. Столики не прикреплены к номеру. Вино в Турции так себе но не хуже чем в дешевых забегаловках в Саратове. Хуже чем в Европе. Пиво в Турции хорошее.
Вообще, впечатлений масса, есть, что написать, - до поездки я не нашел ни одного адекватного описания Турецких курортов. Все жутко нравится. Продолжение следует.
Организация систем разграничения доступа на примере детских сказок
Детские сказки — это познавательный источник сведений о том как нужно и как не нужно организовывать системы авторизации пользователей. Давайте проанализируем основные ошибки возникающие при проектировании систем разграничения доступа пользователей на примере нескольких популярных детских сказок.
Красная шапочка: "Дёрни за веревочку дверь и откроется" - инструкцию для доступа к защищенному ресурсу хакеру дает сам агент авторизации, доступ осуществляется без каких либо паролей или ключей - эта система защиты никуда не годится.
Али-Баба и сорок разбойников: Пещера Али-Бабы была защищена простым легкозапоминаемым паролем который передавался по незашифрованному каналу связи, доступному для прослушивания — чуть лучше, чем в сказке про красную шапочку, но не айс.
Волк и семеро козлят - не смотря на то что система защиты была построена с использованием довольно сильной парольной фразы, совметно с использованием биометрических средств на основе распознования спефических особенностей тембра голоса, волк смог подслушать песенку козы, которая передавалась по не шифрованному каналу и тем самым попытался сымитировать кодовую последовательность для получения доступа к защищённому ресурсу. После того как попытка не удалась - защищенный ресурс, который одновременно являлся и сервером авторизации а по совместительству козлятами сам указал хакеру-волку на ошибки возникшие в процессе попытки получения доступа - кодовая последовательность воспроизведена не точно, характерные модуляции тембра голоса не соответствуют оригиналу. После этого волку осталось лишь пойти к кузнецу и скорректировать частоту и тембр голоса а также уточнить последовательность слов в кодовой фразе (песне козы). Вот так хорошая идея сводится на нет неграмотной реализацией, не удивительно, что в конечном итоге волк съел всех козлят.
Три поросёнка - два сервера Ниф-Нифа и Нуф-Нуфа оказались никуда не годными - атаки типа brute-force легко сломали защиту серверов вместе с самими серверами. Защита Наф-Нафа оказалась спроектирована более грамотно - это пример того как нужно проектировать подобные системы. Организована надежная система распознавания свой-чужой в виде дверного глазка. Кирпичные стены гарантируют надежную защиту от brute-force. Закрыты все возможные уязвимости - двери, окна. Единственное уязвимое место - труба оснащена системой предупреждения атак - поросята сразу услышали шум характерный для вторжения и приняли соответствующие меры - поставили в печь кастрюлю с кипятком.
Казалось бы — сказки, а какие полезные уроки можно из них извлечь!
Развитие интерфейсов
Интересно, раньше, поставив Window XP я сначала убивал XP-шную тему, заменяя её классической NTшной, потом переключал красивое синее меню пуска на классиеский NT-шный вариант. И тогда на этой системе было можно работать.
Сегодня поставил на ноутбук распоследнюю Ubuntu 11.04 я первым делом преключился с этой пальцезаточенной нетбукоориентированной Unity на классическую Gnome, и вернул нормальное расположение кнопок закрытия окошек которые в Ubuntu слева в правый угол где им и полагается быть.
Уже боюсь предполагать какими новыми интерфейсными изысками нас побалует сообщество Ubintu в новых версиях.
Но всё равно, ничего удобнее Linux на сегодняшний день для меня нет.
Сравнение различных методов вызова функций в PHP
Вызов статических методов классов — прекрасная альтернатива обычным функциям - и класс создавать не нужно и принципы объектно-ориентированного программирования не нарушаются. Однако, в реализации статических методов в PHP есть несколько проблем - статические методы не всегда корректно наследуются, поэтому, чтобы нивелировать неудобства статических методов в PHP часто используют синглетоны - обертывают денимические методы статическими обертками.
Однако, создание синглетона операция довольно ресурсоёмкая — проверить создан ли экземпляр класса, создать экземпляр класса если он не создан, вызвать на нём нужный метод. Насколько это сказывается на бытродействии я и решил сегодня проверить.
Для оценки скорости доступа к методам синглетона я сделал небольшой скрипт. Скрипт генерирует тестовые последовательности вызовов функций в различных вариантах - и сравнивает время вызовов этих последовательностей.
Вот исходный код скрипта.
Результат работы скрипта представлен в таблице ниже:
generation_time | 11.7576429844 |
php_version | 5.3.2-1ubuntu4.9 |
Case | try 1 | try 2 | try 3 | try 4 | middle |
---|---|---|---|---|---|
Same plain function called 10000 times | 0.0166 | 0.0187 | 0.0183 | 0.0135 | 0.0168 |
Different plain functions called 10000 times | 0.0163 | 0.0221 | 0.018 | 0.0163 | 0.0182 |
Same static method 10000 times | 0.0193 | 0.0265 | 0.0206 | 0.0194 | 0.0214 |
Different static methods called 10000 times | 0.0221 | 0.0283 | 0.0229 | 0.0229 | 0.024 |
Static methods of different classes called 10000 times | 0.0236 | 0.0279 | 0.0251 | 0.0242 | 0.0252 |
Same dynamic method called 10000 times | 0.0166 | 0.0193 | 0.0169 | 0.0169 | 0.0174 |
Different class methods called 10000 times | 0.02 | 0.02 | 0.0202 | 0.02 | 0.02 |
Singleton method called 10000 times | 0.0403 | 0.0446 | 0.0409 | 0.041 | 0.0417 |
Different singletons called 10000 times | 0.0562 | 0.0631 | 0.0548 | 0.0572 | 0.0578 |
В тестовом скрипте, я сравнил обычные PHP функции, статические методы класса, обычные методы и методы синглетона.
Результаты тестирования показали, что вызов методов синглетона, примерно в два - четыре раза медленнее, чем вызов обычных методов, что, в принципе, меня порадовало — я ожидал, что будет хуже.
При этом выяснилось несколько дополнительных вещей: cтатические вызовы функций объявленных без модификатора "static" примерно в два раза медленнее, чем с ним, cтатические методы немного медленнее, чем динамические.
Так что, в принципе, синглетоны вполне можно использовать, особенно в случаях, когда быстродействие не сильно критично.