Sunday, 2 February 2020

Remove Extra Folders from Windows 10 Explorer “This PC”

Some new features in WIN10 are annoying so much. For some old-school people which like minimalism, those new features are absolutely useless. I am talking about these special folders shown in the start window of Explorer: "3D Objects", "Desktop", "Documents", "Downloads", "Music", "Picture", "Videos".

I spent some time looking for the simple and reliable solution hiding these folders and keep the start window of Exlorer simple as much as possible. And I found it. There is the article [Tip] Remove Extra Folders from Windows 10 Explorer “This PC” by Vishal Gupta.

In his work he describes in details the problem and provides the solution. In addition the step how to hide these folders he also provides the steps how to revert back them. And finally he supplies with the archive file with .REG files.

In my short work I post with all my modesty and bravety the source codes for both actions.

Hide folders


Windows Registry Editor Version 5.00

;Created by Vishal Gupta for AskVG.com

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{0ddd015d-b06c-45d5-8c4c-f59713854639}\PropertyBag]
"ThisPCPolicy"="Hide"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{35286a68-3c57-41a1-bbb1-0eae73d76c95}\PropertyBag]
"ThisPCPolicy"="Hide"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{7d83ee9b-2244-4e70-b1f5-5393042af1e4}\PropertyBag]
"ThisPCPolicy"="Hide"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{a0c69a99-21c8-4671-8703-7934162fcf1d}\PropertyBag]
"ThisPCPolicy"="Hide"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{f42ee2d3-909f-4907-8871-4c22fc0bf756}\PropertyBag]
"ThisPCPolicy"="Hide"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{B4BFCC3A-DB2C-424C-B029-7FE99A87C641}\PropertyBag]
"ThisPCPolicy"="Hide"

[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{0DB7E03F-FC29-4DC6-9020-FF41B59E513A}]

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{0ddd015d-b06c-45d5-8c4c-f59713854639}\PropertyBag]
"ThisPCPolicy"="Hide"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{35286a68-3c57-41a1-bbb1-0eae73d76c95}\PropertyBag]
"ThisPCPolicy"="Hide"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{7d83ee9b-2244-4e70-b1f5-5393042af1e4}\PropertyBag]
"ThisPCPolicy"="Hide"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{a0c69a99-21c8-4671-8703-7934162fcf1d}\PropertyBag]
"ThisPCPolicy"="Hide"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{f42ee2d3-909f-4907-8871-4c22fc0bf756}\PropertyBag]
"ThisPCPolicy"="Hide"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{B4BFCC3A-DB2C-424C-B029-7FE99A87C641}\PropertyBag]
"ThisPCPolicy"="Hide"

[-HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{0DB7E03F-FC29-4DC6-9020-FF41B59E513A}]


Show folders again


Windows Registry Editor Version 5.00

;Created by Vishal Gupta for AskVG.com

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{0ddd015d-b06c-45d5-8c4c-f59713854639}\PropertyBag]
"ThisPCPolicy"="Show"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{35286a68-3c57-41a1-bbb1-0eae73d76c95}\PropertyBag]
"ThisPCPolicy"="Show"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{7d83ee9b-2244-4e70-b1f5-5393042af1e4}\PropertyBag]
"ThisPCPolicy"="Show"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{a0c69a99-21c8-4671-8703-7934162fcf1d}\PropertyBag]
"ThisPCPolicy"="Show"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{f42ee2d3-909f-4907-8871-4c22fc0bf756}\PropertyBag]
"ThisPCPolicy"="Show"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{B4BFCC3A-DB2C-424C-B029-7FE99A87C641}\PropertyBag]
"ThisPCPolicy"="Show"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{0DB7E03F-FC29-4DC6-9020-FF41B59E513A}]

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{0ddd015d-b06c-45d5-8c4c-f59713854639}\PropertyBag]
"ThisPCPolicy"="Show"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{35286a68-3c57-41a1-bbb1-0eae73d76c95}\PropertyBag]
"ThisPCPolicy"="Show"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{7d83ee9b-2244-4e70-b1f5-5393042af1e4}\PropertyBag]
"ThisPCPolicy"="Show"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{a0c69a99-21c8-4671-8703-7934162fcf1d}\PropertyBag]
"ThisPCPolicy"="Show"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{f42ee2d3-909f-4907-8871-4c22fc0bf756}\PropertyBag]
"ThisPCPolicy"="Show"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{B4BFCC3A-DB2C-424C-B029-7FE99A87C641}\PropertyBag]
"ThisPCPolicy"="Show"

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{0DB7E03F-FC29-4DC6-9020-FF41B59E513A}]


All the credits go to Vishal Gupta

Saturday, 1 February 2020

How to enable different languages per applications in WIN10

If you is annoyed with a single language per the whole system in WIN10 and you'd like to have different languages per application (as it has been in previous Windows versions), possibly you have a way to revert back the previous behavior. It is impossible, if you have Windows 10 Home edition for single language. In this sad situation you have to upgrade to Window 10 Home edition or Windows 10 Professional.

Recipe 1


  1. Launch Settings
  2. Open Time & Language
  3. In the left side click Region & language
  4. In the right side scroll down and click Additional date, time & regional settings

After that the new window called Control Panel\Clock, Language and Region will be launched:

  1. Be sure that Clock, Language, and Region is selected in the left side
  2. In the right side click Change input methods

In the same window you will be forwarded on the screen called Control Panel\Clock, Language and Region\Language:

  1. In the left side click Advanced settings

Again you will be forwarded on the screen called Control Panel\Clock, Language and Region\Language\Advanced settings:

  1. Scroll down until you find Switching input methods
  2. Check in Let me set a different input method for each app window
  3. Click the button Save

Recipe 2


There is shorter way with the same results.

  1. Open Windows Start Menu
  2. Start typing control panel
  3. You will be prompted to launched Control Panel. Do it
  4. Find and click Clock, Language, and Region

After that continue from the step 5 from the previous recipe.

Stop rotating the screen with CTRL+ALT+Arrows

It could happen that I forget about it and this short note is a chance to remember. [:Smile:]

There are two comprehensive recipes describing how to stop rotating the screen in Windows.

Recipe 1


In the Tray find the icon called Intel(R) HD Graphics

  1. Click on it
  2. Select Graphics Options
  3. Select Hot Keys
  4. Select Disable

If for some reasons you don't have this icon in the Tray, follow the next procedure.

Recipe 2


  1. Open Settings in the Windows Start Menu
  2. Select the icon System or type in the search field "change display settings"
  3. In the left side select Display
  4. In the right side find and click Display adapter settings

A new dialog (most likely called as Generic PnP Monitor and Intel(R) HD Graphics Family Properties) will be opened:

  1. In the dialog click on the tab Intel(R) HD Graphics Control Panel

The following step is useful as you will be able in the future to handle with it accordingly the Recipe 1.

  1. Check in Show Tray Icon

Continue tuning:

  1. Click the big button Graphics Properties...

New application will be launched (Intel(R) HD Graphics Control Panel):

  1. take a note that the home page is opened (or click on the icon designating a house in the circle in upper-left side of the application)
  2. Click Options and Support
  3. In the left side select Hot Key Manager
  4. In the right side find Manage Hot Keys and check in Disabled
  5. Click the button Apply in the right-bottom side

That's all! Now the feature is disabled and will not be annoying you when you accidentally tap these keystrokes.

When you need to turn on the feature, follow the Recipe 1 but select Enable.

Saturday, 2 March 2019

Disabling webp in Firefox

If you're one of the weird persons who dislike new features, this short article could be useful for you.

A few years ago Google invented webp, a new image compression for web. It was proclaimed as better than jpeg or png and supporting both lossy and lossless compression. The majority of browsers (including Firefox since version 65) support this new format. Of course, it is fine -- better compression, less traffic, faster page loading, less lose of money. But! If you'd like to save a picture from web (either jpeg or png), you can't do this, as you have been doing it earlier. Firefox suggests to save image in the webp format.

Here is a solution to avoid this issue and save the pictures in their original format (by the worth of increasing your Internet traffic).

  1. open the page about:config
  2. click the button I accept the risk
  3. in the search bar type network.http.accept.default
  4. double click on the found parameter
  5. remove the substring image/webp
  6. apply modification by pressing the button OK

That's so! After this you can continue surffing in your usual manner. All the pictures will be downloaded in their original format.

To revert to the original value do the right click on this parameter and apply the command Reset. So your Firefox accepts webp again.

Update:

After updating the Firefox instance on my computer I've found that the suggestion of this article doesn't work. In this case (FF 65.0.2) the following modification should be applied (I tested it earlier with FF 65.0.1 but it didn't work):

  1. open the page about:config
  2. click the button I accept the risk
  3. in the search bar type image.http.accept
  4. double click on the found parameter
  5. remove the substring image/webp
  6. apply modification by pressing the button OK


Another related pages

  1. Firefox 65 supports Google's WebP Image format
  2. How to avoid saving images in webp format in Google Chrome 
  3. Related discussion on Russian Mozilla forum

Friday, 29 July 2016

Color Diff

Few months ago I have found I feel lack of the highlighting capability of the diff output. To cover this lack I began to look for solutions. A lot of resources refer to the colordiff, the tool written in Perl. But I wasn't satisfied with it. Question on StackOverflow and this article have inspired me to develop the Bash function having the same (or almost the same) functionality as colordiff and having mechanism as described in the early mentioned article.

Some of you can say I have re-invented the wheel because a) there is colordiff, b) diff has the special options to format output. But I'd like to have simple solution with full support of many output formats as much as possible and the simple usage as the command itself. It uses sed to format (colorize) diff output. It has the following features:

  • The wrapper and can be called as the replacement instead the standard tool;
  • Analyzes command line options and generates the special sed commands colorizing output;
  • Covers all known formatting options (--context, --unified, --ed, --rcs, --side-by-side, --show-c-function);
  • It supports CDIFF_COLORS and CDIFF_WHEN, the special environment variables having impact on the function behavior (they works similar to GREP_COLORS for grep).

There is help page below. Just follow this link, download the script and try.

$ diff
Usage: colordiff [OPTION]... FILES

Wrapper for diff to colorize the diff's output for better readability.
Try "diff --help" for more information.

OPTIONS

Diff options

All options will be passed to "diff".

Coloring options

--color[=WHEN], --colour[=WHEN]

Controls the colorizing method. WHEN can be one of "never", "auto" or
"always" (the default value if not specified explicitly). To make affect
globally, set one of these values to CDIFF_WHEN environment variable.

ENVIRONMENT VARIABLES

CDIFF_COLORS
This environment variable is used to specify colors to highlight the
separate parts of the diff output. Its value is a colon-separated list
of capabilities. Names and responsibility of each capability correspond
to the configuration parameters "color.diff." used in "git config".
Values are integers in decimal representation and can be concatenated with
semicolons. Further these values are assembled into ANSI escape codes.

meta=40;1;37
Metainformation (names of compared files)

frag=36
Hunk header (line numbers of changed lines)

old=31
Removed lines

new=32
Added lines

mod=34
Modified lines

CDIFF_WHEN
Colorizing method does effect on all runs; assumes the same values as for
the "--color" option. The default value is "auto" and can be superseded
by the "--color" option.

Tuesday, 18 February 2014

jsmin.js keeping important comments unchanged

More than dozen years ago Douglas Crockford, the JavaScript guru, has presented his JavaScript Minifier. This tool obfuscates the JavaScript code, removing extra whitespaces and comments. Later, Franck Marcia has adapted the C-written program to JavaScript. See his implementation at the page JS Minifier.

Still later, Billy Hoffman has patched the script and added the support of important comments. Important comments are specially formed comments (in practice, denoted with /*!) that are not removed by minifier. What he has done we can find out from his article JSMin, Important Comments, and Copyright Violations. The main goal to support important comments was to retain copyrights and licensing information intact.

Important comments are very useful also to keep some sensitive data within (for example, resources used by the script). Unfortunately, they are not supported completely because TAB and asterisk characters are changed (TABs are converted to SPACEs, and asterisks are eaten by the minifier). To fix this issue I have made some changes to the latest version of jsmin.js.

You can find the updated version of the jsmin.js at the GitHub. Also you can apply the following patch for the existing on your computer copy of the original script:
1a2,9
> jsmin.js - 2014-02-04
> Author: Ildar Shaimordanov
> This version was patched to keep important comments (denoted with /*!) 
> unchanged. The previous version of jsmin.js ate asterisk symbols and 
> modified some characters as well (for example TAB was replaced by SPACE). 
> Sometimes, comments should stay unchanged (for example, a function could 
> keep its resources within comments). So this version does it. 
> 
128,131c136
<     if(c >= ' ' || c == '\n' || c == '\r') {
<       return c;
<     }
<     return ' ';
---
>     return c;
141a147,150
>   function peekIC() {
>     theLookahead = getcIC();
>     return theLookahead;
>   }
173,174c182,183
<                   if(peek() == '/') {
<                     getc();
---
>                   if(peekIC() == '/') {
>                     getcIC();
176a186
>                   d += c;

Wednesday, 4 December 2013

Cygwin Here

This short article explains how to open a specific folder in Cygwin.

Friday, 17 May 2013

Modulo adjustment

If you open MDN pages, describing Math.ceil, Math.floor, and Math.round, you will find the good example of the adjustment and rounding based on the decimal logarithm. For exdample, Math.ceil10(55, 2) returns 100 where 2 expresses an exponent for 10^2.

Besides of logarithmic adjustment we can use modulo based adjustment. It is almost the same as above but uses an arbitrary number for adjustment.

Tuesday, 2 October 2012

Continuing long lines in a batch script

Unintentionally I found for myself that a batch script has a nice feature to break long lines without loosing of possibility of reading them.

Imagine, you have some weird combination of commands as below that is not put completely in one line of a screen.

some-command-with-many-arguments | another-lomg-command-with-its-own-arguments | etc | etc | etc

If the line of a code cannot be shown within one line on a screen it will be i) either turned and the rest of line will be shown below on one or more lines or ii) continued out of edges of the screen with a horizontal scrolling bar. Both of them are not convenient because we not able to observe the code entirely.

Fortunately, modern batch scripts (in XP, Vista, Win7) have blocks implemented by brace:

(
    some-command-with-many-arguments 
) | (
    another-long-command-with-its-own-arguments 
) | etc | etc | etc

I known this feature (because I used brace in the if-else and for statements) but did not realised right now.

So, this gives us good possibility to break the long line into a several lines without loosing of functionality. This is better than nothing and is better than undocumented feature using the DOS-like escaping character ^ at the very ending of the line because you have to look after that this character is in the lastest character of the line. See the same example with the esacaping character:

some-command-with-many-arguments | ^
another-long-command-with-its-own-arguments | ^
etc | etc | etc

Unix shell scripts are featured to continue long commands using by backslashes since the begining of the Unix wolrd.

some-command-with-many-arguments \
| another-long-command-with-its-own-arguments \
| etc | etc | etc

Saturday, 29 September 2012

How to concatenate multiple lines in console (bash, cmd)

If for some reasons you need to have concatenated lines try one of the recipes below.

Monday, 25 June 2012

Merge and sort many logfiles having multiline entries

logmerge is the small and powerful script to merge two or more log files so that multiline entries appear in the correct chronological order without breaks of entries. Optional arguments control an adding of descriptive fields at the beginning of each line in the resulting combined logfile. Reading of .gz/.bz2 files is available.

Tuesday, 15 May 2012

Regular Expression Analyzer

Neat online tool. Regular expressions are described in the human-friendly style.

Regular Expression Analyzer

Sunday, 25 March 2012

Universal way to identify your external IP and more

There are many such kind of resources in Internet but this is the best. It allows the numerous structured data and it has nice name. Meet http://ifconfig.me/.
Command line interface
Using curl
curl ifconfig.me
or wget
wget -qO - ifconfig.me/ip
JScript
JS
var xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
xmlhttp.open('GET', 'http://ifconfig.me/ip', false);
xmlhttp.send();
 
var ip = xmlhttp.responseText;
JS+XML
var xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
xmlhttp.open('GET', 'http://ifconfig.me/all.xml', false);
xmlhttp.send();
 
var ip = xmlhttp.responseXml.getElementsByTagName('ip_addr')[0].text;
Having JSON library you can read and parse JSON data:
var xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
xmlhttp.open('GET', 'http://ifconfig.me/all.json', false);
xmlhttp.send();
 
var data = JSON.parse(xmlhttp.responseText);
var ip = data.ip_addr;
VBScript
Dim xmlhttp, ip
 
Set xmlhttp = CreateObject("Microsoft.XMLHTTP")
xmlhttp.open "GET", "http://ifconfig.me/ip", False
xmlhttp.send
 
ip = xmlhttp.responseText

Thursday, 5 January 2012

Artist/Album Info in Foobar2000

foobar2000 is perfect mediaplayer for Windows platforms. It is kind of those applications whose functionality is extendable simply adding plugins. One of these finest plugins is Run services that allows to run external applications and scrpts from within foobar2000.

I use Run services to view/edit information about albums or artists stored in plain text files. Let's consider how it is possible.

Monday, 10 October 2011

Версии Internet Explorer

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

Tuesday, 12 July 2011

parseDate

Функция преобразует дату, заданную строкой, в количество миллисекунд относительно базового времени, и возвращает его. Строка должна содержать дату и время в определенном формате. Функция аналогична стандартному методу Date.parse. Отличие заключается в том, что корректно обрабатывает строки, содержащие миллисекунды.

Sunday, 1 May 2011

Обмен данными и объектами между скриптами

Однажды на Сером форуме шло обсуждение как можно осуществить обмен данными между скриптами. Идея основана на создании нового экземпляра, наследуемого от интерфейса IWebBrowser2 (ссылка: IWebBrowser2 Interface). Объект хранит в себе данные даже после завершения всех скриптов, практически как буфер обмена, и может служить как средство обмена данными и объектами между скриптами.

Friday, 18 March 2011

Функция вывода разницы во времени

Часто на форумах встречается вопрос о реализации вывода разницы во времени в формате "количество дней, часов, минут и секунд".

Sunday, 26 December 2010

JavaScript html entities

Несколько дней назад мой коллега попросил меня помочь реализовать код вставки специальных символов, выраженных их сущностями [1]:

var original = 'string with guillemets (standard quotation marks in Russia) « and »';

// do something to convert the original string to applicable characters
var entities = ...;

// insert the resulting string to the DOM
var textNode = document.createTextNode(entities);

Найденное решение [2] видимо очень известно во всем интернете. Однако это решение нам показалось не оптимально - довольно громоздкий код, который циклически перебирает и заменяет программно заданный набор сущностей. И этот код не использует внутренние возможности самого браузера - ведь браузер делает это автоматически. Но решение было найдено [3]. Этот код полностью нас удовлетворял - он очень мал, использует встроенные возможности и не содержит жестко заданного набора конвертируемых сущностей. Параллельно мы нашли решение для обратной задачи - перевод символов в их сущности [4].

В дальнейшем мы адаптировали оба решения в единый класс Entity. Мы обратили внимание на тот факт, что при переводе "двойных" и 'одинарных' кавычек они не преобразуются в свои сущности. Это не столь критично, но мы посчитали, что этот "недостаток" должен быть исправлен и добавили немного "ручной" работы.

Полное решение с комментариями можно найти по этой ссылке. Здесь можно посмотреть как это работает:


  1. Мнемоники в HTML (Википедия, англ.)
  2. html_entity_decode
  3. javascript equivalent of html_entity_decode
  4. PHP-функция: htmlentities

Friday, 6 August 2010

О веб-технологических котлетах

Давайте сразу разложим все котлеты по своим тарелкам - рыбные, мясные, прочие.

В нашем веб-общепите есть стабильный набор очень популярных ингредиентов из которых готовят веб-котлеты. Меню стандартизировано, хотя есть незначительные различия, но, в целом, у всех одинаковый ассортимент.

MySQL, PHP - серверные приложения, они готовят котлеты, ТОЛЬКО серверные котлеты (для приготовления этих котлет используются и другие приложения, но эти - самые распространенные). HTML, CSS, JavaScript - клиентские технологии и готовят только клиентские, такие рыбные котлеты. Здесь я немного слукавил. HTML это зразы, такие особые котлеты, которые готовятся на серверной стороне, но для клиентской стороны.

Если проводить другую, более правильную аналогию, то...

База данных это библиотека, хранилище информации, PHP, Perl, ASP - архивариус, он подготавливает новые данные к хранению и извлекает старые для показа. Веб-сервер - библиотекарь на абонементе, который просит архивариуса принять запрос, выполнить и вернуть отчет о выполненной работе. "Отчетом" может быть сообщение о том, что новые данные помещены в библиотеку, список данных, извлеченных из библиотеки или сообщение об отсутствии запрашиваемой информации. Браузер - клиент, которому данные понадобились или который доставил новые данные (альтруист, который готов поделиться своей информацией). Информацию клиент получает в стандартизированной форме - книга, определенного формата, состоящая из сшитых тетрадей, обернутых в обложку, либо это набор свитков, либо пачка каменных скрижалей -стандарт HTML работает во всех браузерах, но у каждого есть свои маленькие особенности.

Однажды было решено, что каждый клиент библиотеки должен получать нужную ему информацию в определенном стандартизированном формате. Поэтому, чтобы все данные выглядели одинаково - красивый iPod, с красивыми обоями, любимыми рюшечками и с обязательным гламурным тачскрином - придумали способ, чтобы все это разнообразие облагородить и анимировать - CSS, JavaScript. CSS призван сделать из книги, свитка и скрижалей единообразный iPod, JavaScript придуман и облагорожен для того чтобы каждый iPad и iPaq и даже самый первый, простейший коммуникатор чувствовали себя iPod'ом.

Был придуман набор правил для каждой книги и скрижали, но не учли всех книг всех нестандартных форматов и всех скрижалей выше двух локтей в высоту и тяжелее пуда. А еще позволили каждой типографии и каждому резчику по камню иметь свое представление того, как должен выглядеть этот iPod на самом деле. Отсюда и пошли разногласия в представлении каждой стрижали и каждого свитка как Слово Божие должно представляться и анимироваться. Но не все так плохо, появились кудесники (дизайнеры с верстальщиками, и программистами), которые нашли способы, чтобы заставить каждую скрижаль и свиток показывать (CSS-hacks) и анимировать (JavaScript-frameworks) единообразно. Да так, что большинство и не задумывается о ма-а-аленьких различиях. В основном... Но если приглядется... то как не чисть рыбу а кости-то все равно в котлету попадут.