This fragment is about to be reported (you'll remain on this page):

You can enter a comment to clarify the mistake if you would like to:

Posts tagged “Thoughts” RSS20

Serving static language-dependent pages with nginx

A few days ago I have already written about Content negotiation in Apache – language-dependent pages. Now I needed to set up my production server (that uses nginx instead of Apache) to handle Accept-Language and serve page.en.html, path/index.ru.html, etc. appropriately. Here’s how it’s done.

First we’ll need to recompile nginx with this 3rd party module (source on GitHub). I have tested it with nginx/1.0.12 and the module still works. If you’re on Linux with yum the following will do the trick for you:

The configure string is taken from CentOS, yours might be different – find it with shnginx -V. Also, make sure to replace shwget .../nginx-1.0.12.tar.gz with your version/URL (see nginx -v for version number).

pcre-devel is required unless you already have it installed (non-devel pcre won’t do and if you’ve initially installed nginx with yum pcre-devel won’t be preinstalled).

«…»

No comments yet | Read rest of this entry »

Content negotiation in Apache – language-dependent pages

Sometimes you have a set of static pages (or data), all of which is the same but meant for different languages. For example, you can have a static resource with index.en.html, index.ru.html, index.fr.html and so on – and you want to let the client choose which one he wants based on his language preferences (Accept-Language).

Apache has a useful module called mod_negotiation that does that and even more. «Content negotiation» is a process of guessing the best appropriate content based on client preferences when several resources match the requested URI.

It won’t affect normal requests for which a resource is determined unambiguously (i.e. if its canonical URI matches the request one-to-one). In other words, if you request /path/some-page and there are some-page.en.html, etc. then it’s the job for mod_negotiation; however, if you request /path/some-page.en.html exactly then it’s returned regardless of what headers does your browser send.

In Apache this is done with MultiViews – an Option that enables processing of requests that don’t match any exact local resource (e.g. /path/some-page ). Once such a request is received Apache will see if any file starts with given URI and if it does it will check its extension and try to determine which of those matched files can be served.

«…»

No comments yet | Read rest of this entry »

WUXG-изм

Вот уже пятый день, как я делаю тест-драйв относительно недавно вышедшей модели ноутбука Sony Vaio SVS1511S3RB (изготовлен в июле 2012) с WUXGA Full HD-экраном 1920×1080. Это этакий телевизор с диагональю 15,4". Retina, конечно, ещё больший беспридел, но и тут есть чему подивиться.

Однако на деле мелкое зерно оказалось не такой уж большой проблемой. В самом деле, в Windows 7 можно поменять DPI на более крупный, если текст мелковат, и в отличии от XP эта настройка работает более адекватно (хотя даже в XP с ней серьёзных проблем нет). Картинка смотрится чётко, пикселей, естественно, не видно даже вблизи.

Однако вот что интересно: несмотря на стабильную тенденцию к увеличению разрешения экранов вот уже который год (а теперь не только за счёт габаритов, но и размеров зерна) производители ПО всё с большим усердием «чистят» окна своих программ от «лишнего мусора». Довольно забавно видеть такие картинки:

Моё обычное разрешение, за которым я работал последние 4 года – 1600×1200, но даже на нём я не разворачиваю окна на весь экран (к примеру, браузер у меня держится где-то на 1/2-1/3 ширины экрана). Но сколько пользователей я видел, да и читал об этом – большинство из них первым делом распахивают любое окно от края до края, причём это касается как Проводника, так и браузера.

Так чтоболее логичным мне кажется не сокрытие элементов под новыми кнопками или меню, а замена «горизонтальной» парадигмы на вертикальную – вместо тулбаров и меню использовать боковые панели, как в графических редакторах вроде Photoshop и Paint. Тем более 90% экранов сегодня широкоформатные и место по краям всё равно девать некуда – две страницы, как в Word, в браузере открывать обычно нет смысла, а читать тексты при такой широченной колонке вообще трудно.

No comments yet | Show this entry »

Функция как фундаментальная сущность

Сегодня мы будем развенчивать миф о том, что всё есть объект. На самом деле всё есть функция, и объекты тоже. Обнаружится, что константы наследуются от переменных, что они – тоже функции, и что каррирование открыто для всех.

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

Всё есть функция – объекты

Да, именно так. В мире объектов принято говорить, что всё есть объект, но на деле оказывается, что в большинстве случаев это не так (попробуйте передать объект-строку в CreateFile из программы на Java).

«…»

No comments yet | Read rest of this entry »

Нелинейное программирование операторов

Продолжаем фантазировать на тему нелинейного программирования и абсолютно открытых систем. В этой статье мы окончательно сорвём все оковы с ограничений на «точки перегрузки» и начнём заменять операторы, а в конце разразимся эффектным примером калькулятора с параллельным выполнением.

Декларативная целостность

Первый же вопрос, который у меня самого возник после прочтения написания первой статьи – как система будет поддерживать декларативную целостность.

В случае с традиционным ООП всё просто – у нас есть определённые точки перегрузки (методы, доступные по зоне видимости и не закрытые через аналог final), которые имеют чёткую сигнатуру. Именно из-за невозможности её изменения, кстати, часто возникают проблемы при наследовании (это частично касается проблемы хрупкого базового класса).

«…»

No comments yet | Read rest of this entry »

Power up the NOVO

Creating One Key Rescue partition and backups by hand.

Power up the NOVO

Recently I have bought a new notebook – Lenovo V570c. Like many laptops these days it contained a hidden service partition (called LENOVO_PART) which I have immediately dealocated (the disk was partitioned weirdly in the first place – it had 2 parts and 1 hidden with unallocated space scattered before and between them).

But one thing was bugging me: this laptop has a small button with a rotated «undo» image on it near the power button. It's called «NOVO» and is used to restore the system instantly with a single click (if we don't count the confirmation). I have read that it depends on the hidden partition in some special way and was already thinking of downloading images of it captured by other people (sice I have already deleted mine) until I have come across One Key Rescue 7.0 engineering disc.

Judging from its name it is used by Lenovo staff to create those hidden partitions. I have given it a shot and it worked for me so I thought I'll share how to do this on my blog as well.

Some notes before we start:

«…»

Popular post (11 comments) | Read rest of this entry »

Creating bootable USB sticks from ISO images

Creating bootable USB sticks from ISO images

Surely we all have heard or even used various Live CDs (or now they’re often DVDs). As the name suggests they are meant for burning on a CD/DVD media and then loading your computer regardless of what has happened to its stationar OS.

However, those discs are really becoming old fashioned (unless you’re willing to burn a Bluray to load Slitaz). USB sticks, however, are having triumphant march over the computing world since they’re especially cheap and have ridiculous capacity (64 GiB? No problem, way better than 16 DVDs). It would only seem logical to use them for creating «Live CDs».

But how to do that? There are various manuals that involve Linux loaders, PE2USB or other flash formatters, etc. For me they didn’t always work and were troublesome to begin with. Is there any way to transfer an .iso with boot sector already prepared to a USB stick?

Well, there is. And it’s called UltraISO.

«…»

Popular post (5 comments) | Read rest of this entry »

Git deal

Git deal

Последние несколько дней я основательно познакомился с набирающей обороты новой системой контроля версия – она же git и её вёб-хранилище – GitHub.com.

До сих пор я знал только одну VCS – Subversion, с которой работал последние три года. Как оказалось, по сравнению с git (да и с Mercurial, судя по всему, тоже) она крайне простая и… не хочу сказать примитивная, потому что свои задачи она решает более чем успешно – скорее просто VCS с другим принципом работы (начать с того, что она централизованная, как CVS) При первом же знакомстве git меня удивил тем, что большинство операций там делается через командную строку – собственно, набор утилит git под Windows – ничто иное, как портированный bash с основными утилитами Unix. При этом GUI-инструменты git (например, SmartGit) мало того, что просто интерфейсы к git.exe, так ещё и понять, что именно они делают можно только уже познакомившись с работой с git из командной строки.

Во всяком случае таковы мои первые впечатления. Subversion благодаря всей своей простоте вообще не требует особого обучения, и уж тем более работы с командной строкой – благо там всего две команды, которые крайне нужны для работы – commit и update, и то первая вызывает последнюю, поэтому начать можно вообще не особо напрягаясь.

В общем, ладно. В этом посте я хочу записать основные команды git и заморочки, которые запомнил, пока с ними разбирался. Хотя вообще, если вас интересует матчасть – можете сразу перейти к ней.

«…»

No comments yet | Read rest of this entry »