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) единообразно. Да так, что большинство и не задумывается о ма-а-аленьких различиях. В основном... Но если приглядется... то как не чисть рыбу а кости-то все равно в котлету попадут.

Tuesday, 27 April 2010

Monday, 29 March 2010

Windows Scripting Command Interpreter

Консольный интерпретатор JS/VBS-скриптов в автоматическом и интерактивном режимах.

Wednesday, 17 March 2010

Y-combinators

Tuesday, 16 February 2010

Hello, World!

with (love) {
    .from("Siberia")
    .say("Happy Birthday!");
}

Friday, 12 February 2010

CMD/BAT A few useful routines

Analogues of pwd, basename and dirname.

Thursday, 28 January 2010

CMD/BAT: Repeat a string multiple times

If you want to get a string repeated multiple times -- you can use this routine. I have realised this as an attempt to implement this optimal algorithm using CMD/BAT only. It accepts three arguments: the name of a variable to store the resulting string, the multiplier (number of time the input string should be repeated), and the input string.