Архив за 20 июля 2012 - 5

Вы когда-нибудь думали, как было бы здорово, если бы слитый в один файл и минифицированный яваскрипт код в production-окружении можено было удобно читать и даже отлаживать без ущерба производительности? Теперь это возможно, если использовать штуку под названием source maps.

Если коротко, то это способ связать минифицированный/объединённый файл с файлами, из которых он получился. Во время сборки для боевого окружения помимо минификации и объединения файлов также генерируется файл-маппер, который содержит информацию об исходных файлах. Когда производится обращение к конкретному месту в минифицированном файле, то производится поиск в маппере, по которому вычисляется строка и символ в исходном файле. Developer Tools (WebKit nightly builds или Google Chrome Canary) умеет парсить этот файл автоматически и прозрачно подменять файлы, как будто ведётся работа с исходными файлами. На момент написания (оригинальной статьи — прим. перев.) Firefox заблокировал развитие поддержки Source Map. Подробнее — на MozillaWiki Source Map.
Читать полностью »

image

Многие провайдеры на постсоветском пространстве самых разных масштабов предоставляют услуги Интернет по VPN туннелю, будь то PPPoE или PPTP/L2TP. О плюсах и минусах такого доступа я не буду рассказывать, т. к. данная тема смело поместиться в отдельную статью. Как правило для такого туннелирования используются либо серьезные железки (Cisco, Juniper, etc), либо софт-роутеры на базе FreeBSD и MPD5. Так вот, в этой статье пойдет речь о балансировке нагрузки на MPD5 серверы. На хабре уже был подобный топик, но там рассматривалось PPPoE, сегодня же разберем ситуацию с PPTP/L2TP.
Читать полностью »

Доброго дня всем. Сразу хочу перейти к делу. Со слов коллеги хочу опубликовать ещё одно происшествие, связанное со Сбербанком.
По словам коллеги, случай далеко не единичный, но они затоптаны и забыты, а люди в таких ситуациях зачастую просто машут рукой, дабы не связываться с огромной бюрократической махиной.
Читать полностью »

Паттерны проектирования приложений все больше входят в нашу жизнь. Сегодня мы рассмотрим один из популярных паттернов — MVC и попробуем понять почему он так популярен.

image
Читать полностью »

На прошлой неделе состоялся успешный эксперимент по запуску нового решения для download-сервиса. Один достаточно скромный сервер (2 x Intel Xeon E5620, 64 GB RAM) под управлением Java-приложения собственной разработки принял на себя нагрузку восьми Tomcat'ов, обслуживая более 70 тысяч HTTP-запросов в секунду общей пропускной способностью 3000 Mb/s. Таким образом, весь трафик Одноклассников, связанный с пользовательскими смайликами, обрабатывался одним сервером.

Вполне естественно, что высокие нагрузки требовали нестандартных решений. В цикле статей о разработке высоконагруженного сервера на Java я расскажу о проблемах, с которыми нам пришлось столкнуться, и о том, как мы их преодолели. Сегодня речь пойдет о кешировании изображений вне Java Heap и об использовании Shared Memory в Java.
Читать полностью »

Здравствуйте, в этой маленькой заметке расскажу немного про ООП в JS, объект XMLHttpRequest, паттерн прокси, и дружелюбие джаваскрипта в этом плане.

Была у меня сегодня такая задача — есть проект, который довольно активно использует ajax-запросы, но вот проблема — бекенд у нас так устроен, что разаутентифицирует пользователя, если тот не активен в течение, скажем, полу часа. В итоге случалось такое, что пользователь, пытаясь совершить какое-то действие, которое использует аякс, не мог его совершить (уж извините за тавтологию), нужно было решить эту проблему.
Читать полностью »

Проблема

Для работы с базой данных MSSQL Server 2005 в кодировке UTF-16(UCS2) я использую скрипт, написанный на python. Этот скрипт использует для работы с базой данных следующий набор инструментов:

  • unixODBC
  • FreeTDS
  • pyodbc
  • sqlachemy

И тут появилась трудность: при получении строковых данных из базы (поля nvarchar, ntext) неправильно обрабатывается юникод.
Как выяснилось, установленный у меня питон был собран с UCS4 юникодом. Методы получения типа юникода в сборка python хорошо описаны в данном вопросе на stackoverflow. Т.е, если выполнить следующую строчку в терминале:

python -c "import sys;print 'UCS4' if sys.maxunicode > 65536 else 'UCS2'"

то мы получаем версию сборки юникода для python.В моем случае это было UCS4. Что это за собой тянет:

  1. unixODBC вызывая соответствующие функции работы с базой данных с аппендиксом W (например, SQLExecDirectW()), получает результаты. в которых один символ текста занимает 2 байта(UCS2)
  2. pyodbc получает результаты от ODBC-драйвера, и в свою очередь сохраняет результаты в переменную с типом unicode
  3. Таким образом 1 символ результата, по мнению pyodbc, составляет 4 байта(UCS4). Именно так и сохраняется результат. полученный из ODBC-драйвера.

Драйвер возвращает данные, в которых символ занимает 2 байта, а pyodbc переделывает эти данные так, что символ занимает 4 байта. Все бы хорошо, если бы было какое-либо преобразование, но данные просто сохраняются как массив байтов в переменную с типом unicode, что несет неприятные последствия: символ результата по-сути содержит 2 символа того результата, который вернул ODBC-драйвер.
Читать полностью »

ООП. Неспешная беседа возле кулера

Юрий Моисеевич (ЮМ) — невысокий, гладко выбритый молодой человек лет сорока пяти, всё ещё подающий надежды. Имеет горделивый изгиб спины и маслянистый взгляд. Говорит тихо, почти шепчет.
Михаил Валерьевич (МВ) — широкоплеч и пузат, с окладистой кучерявой бородой. Говорит зычным, густым басом. Являясь признанным профессионалом, невольно вызывает уважения сам у себя.

Офисная кухня: небольшая каморка без окон, в центре стоит пластмассовый стол, в углу — кулер с водой, вдоль стен — табуретки. Около кулера затаился Юрий Моисеевич. На кухню заходит Михаил Валерьевич, чтобы попить воды. В правой руке он несёт чашку.

ЮМ (преграждая дорогу к кулеру, заискивающе): — Позвольте поинтересоваться!
МВ (учтиво кланяясь): — Прошу вас, Юрий Моисеевич, я всецело к вашим услугам.
ЮМ: — Не поведаете ли вы мне, любезный друг, о тонкостях своей столь нелёгкой работы?
МВ: — С превеликим удовольствием. Но моя работа столь многогранна, и, как вы сейчас верно заметили, столь нелегка, что я, право же, не знаю, с чего начать.
ЮМ: — А начните, пожалуй, с самых, так сказать, основ. Поведайте, какие технологии вы используете?Читать полностью »

Человеку свойственно считать себя лучшим. На протяжении всей своей документируемой истории человек каждый раз доказывал свое право на то, чтобы называться венцом творения. И в каждую эпоху он считал себя духовней, умней, развитей, прогрессивней и рациональней чем его предшественники. Знамя эволюции, выпадающее из рук предков, всегда заботливо подхватывалось современниками и гордо веяло на пике муравейника человечества.

Но лозунг «Хлеба и зрелищ» собирал стадионы и в период античности, и сейчас. Принцип «Деньги не пахнут» продолжает владеть сознанием как богатых, так нищих даже в тот момент, когда вы сидите перед монитором и читаете этот текст.

То есть прямо здесь. И прямо сейчас.

Но что изменилось с тех пор?
Технология. Современные возможности технических устройств давно уже затмили не то, что самые смелые предположения средневековья, но и вполне себе не так давно минувшие восьмидесятые года ХХ века. Три поколения назад вершина инженерной мысли шуршала перфокартами, занимала целое помещение и умела решать квадратные уравнения. Сейчас она скукожилась до размеров ладони, и заменяет собою как основное орудие труда, так и главный источник удовольствий.
Читать полностью »

Создан высокопроизводительный графеновый транзистор

Графен — перспективный наноматериал для разработки новых устройств, и практически ежедневно случаются события, говорящие о прогрессе его исследований. Немецкие ученые университета Эрлангена-Нюрнберга поставили более значительную веху: путем обычной литографической гравировки были созданы высокопроизводительные монолитные графеновые транзисторы, что может стать отправной точкой некремниевой электроники.

Графен обладает целым рядом необычных свойств, и среди них есть высокая проводимость — наиболее высокая из открытых веществ. Согласно ранним демонстрациям от IBM, графеновые транзисторы могут иметь частоту коммутации в районе 100 гигагерц и до нескольких терагерц. Но графен не обладает запрещенной зоной, то есть не может открываться и закрываться под воздействием тока или напряжения, поэтому создание транзистора на его основе было осложнено.Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js