<repo_name>yalov/yalov.github.io<file_sep>/_drafts/example.md
---
layout: post
title: Пример

project: false
post_on_sidebar: false
fullwidth: false
hidden: false

permalink: example  # if don't want /year/

tag:
  - tag1
  - tag2

category: category1


disqus_comments: true
disqus_identifier: 5959e11a-f0e8-5b4e-838d-0302cd6aabd3  # unique for post

#lightbox2:
imgfolder: /images/
images:
  - name: image_name.png
    thumb: image_name_prev.png # unnecessary, then it's use name:
    text: description
    width: 1280 # unnecessary, for json-ld
    height: 800 # unnecessary, for json-ld



summary: "Summary text"
---


This blog post shows a few different types of content: basic typography, images, and code.

-----

<a href="#">Lorem ipsum</a> dolor sit amet, consectetur adipiscing elit. Maecenas non varius augue. Nulla sed est libero. Aenean fermentum massa sed nulla faucibus semper. Sed vel vulputate mi. Nam convallis turpis id augue blandit, et euismod est aliquam. Vestibulum non odio lacus. Nunc pretium mauris vitae ipsum pretium, at scelerisque tellus tempor. Vestibulum nec erat scelerisque, fermentum lectus vitae, finibus magna. Aenean et lacus eros. Vestibulum eu hendrerit magna, nec posuere nibh. Aliquam pulvinar a justo a luctus.

In id nibh at arcu ultricies tempor. Proin hendrerit posuere metus, nec auctor lorem ultrices nec. In ac est at tortor tincidunt feugiat. Donec ac dolor at arcu auctor tincidunt eu id magna. Sed at placerat nunc. Praesent varius tristique mi sollicitudin efficitur. Nam ac porta arcu. Maecenas in rutrum mi. Maecenas eu ullamcorper ligula, et maximus enim. Aliquam placerat sem in nisi commodo, a consequat est congue. Integer quis nulla vel neque lobortis sagittis nec quis nulla.
<!--more-->

``` text
{% raw %}
{% include lightbox.html %}
{% include lightbox.html height='7rem' %}
{% include lightbox.html height='7rem' width='800px'%}
{% include lightbox_text.html image="image-1.jpg" %}
{% endraw %}
```


> Curabitur blandit tempus porttitor. **Nullam quis risus eget urna mollis** ornare vel eu leo. Nullam id dolor id nibh ultricies vehicula ut id elit.

Etiam porta *sem malesuada magna* mollis euismod. Cras mattis consectetur purus sit amet fermentum. Aenean lacinia bibendum nulla sed consectetur.

## Heading2

Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.

### Heading3

Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

{% highlight js %}
// Example can be run directly in your JavaScript console

// Create a function that takes two arguments and returns the sum of those arguments
var adder = new Function("a", "b", "return a + b");

// Call the function
adder(2, 6);
// > 8
{% endhighlight %}

Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa.

### Heading3

Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.

* Praesent commodo cursus magna, vel scelerisque nisl consectetur et.
* Donec id elit non mi porta gravida at eget metus.
* Nulla vitae elit libero, a pharetra augue.

Donec ullamcorper nulla non metus auctor fringilla. Nulla vitae elit libero, a pharetra augue.

1. Vestibulum id ligula porta felis euismod semper.
2. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.
3. Maecenas sed diam eget risus varius blandit sit amet non magna.

Cras mattis consectetur purus sit amet fermentum. Sed posuere consectetur est at lobortis.
<file_sep>/_includes/post-date.html
{%- if post %}
  {%- assign date = post.date %}
  {%- assign language = post.language %}
{%- elsif page %}
  {%- assign date = page.date %}
  {%- assign language = page.language %}
{%- endif %}

{%- unless language %}
  {%- assign language = 'en' %}
{%- endunless %}

<span class="post-date">
  <i class="far fa-calendar-alt"></i>
  <time datetime="{{ date | date_to_xmlschema }}">
    {{ date | date: "%-d" }}
    {% assign month = date | date: '%-m' %}
    {% case month %}
      {% when '1' %}{{ site.data.ui-text[language].months.January }}
      {% when '2' %}{{ site.data.ui-text[language].months.February }}
      {% when '3' %}{{ site.data.ui-text[language].months.March }}
      {% when '4' %}{{ site.data.ui-text[language].months.April }}
      {% when '5' %}{{ site.data.ui-text[language].months.May }}
      {% when '6' %}{{ site.data.ui-text[language].months.June }}
      {% when '7' %}{{ site.data.ui-text[language].months.July }}
      {% when '8' %}{{ site.data.ui-text[language].months.August }}
      {% when '9' %}{{ site.data.ui-text[language].months.September }}
      {% when '10' %}{{ site.data.ui-text[language].months.October }}
      {% when '11' %}{{ site.data.ui-text[language].months.November }}
      {% when '12' %}{{ site.data.ui-text[language].months.December }}
    {% endcase %}
    {{ date | date: "%Y" }}
  </time>
</span>
<file_sep>/_collection/eyes-thanks.md
---
layout: post
title: "Eyes’ Thanks"

post_on_sidebar: true

date: 2018-04-17
tag:
  - qt
  - С++

category:
  - projects

sidebar: true

comments: true

summary: "<a class=lightbox-image-link-left href='/images/eyesthanks-2monitors.jpg' data-lightbox='EyesThanks' title='fullscreen image at different-size monitors system'>
<img class='lightbox-image' style= 'width: 10rem;' src='/images/eyesthanks-2monitors.jpg' alt='fullscreen image at different-size monitors system'></a>
The app frequently alerts you to take rest breaks by showing fullscreen image (random image from the folder). It supports multiple monitors system and wide image for all monitors."

#lightbox2:
imgfolder: /images/
images:
  - name:  eyesthanks-2monitors.jpg
    text:  Notebook + monitor

  - name:  eyesthanks-3monitors.jpg
    thumb: eyesthanks-3monitors-prev.jpg
    text:  3 monitors

  - name:  eyesthanks-dialog-en1.png
    text:  setting dialog tab1 (English)

  - name:  eyesthanks-dialog-en2.png
    text:  setting dialog tab2 (English)

  #- name:  eyesthanks-dialog-ru1.png
  #  text:  setting dialog tab1 (Russian)

  #- name:  eyesthanks-dialog-ru2.png
  #  text:  setting dialog tab2 (Russian)

  - name:  eyesthanks-tray-en.png
    text:  tray (English)

  #- name:  eyesthanks-tray-ru.png
  #  text:  tray (Russian)
---

Staring at a computer screen for hours is not good for your eyes, so Eyes’ Thanks protect them: the app displays a full-screen image on your desktop at regular intervals,
along with an optional message, reminding you to take a break.


{% include lightbox.html height='5rem'%}

<br>

## Download for Windows (portable)

See [Github Releases Page](https://github.com/yalov/eyes-thanks/releases).
<br>

### Background images
While some cool backgrounds can be generated on-the-fly, you can provide a more extensive gallery stored locally.
One of the images in the user-defined folder will be displayed in full-screen mode for the configured duration,
but you can cancel the break if you just can’t afford to interrupt your current activity.


### Multiple monitors system
It supports multiple monitors system, making it possible to display wide pictures across all your monitors.

### Works with any monitor setup
If you sometimes switch between two displays with different aspect ratios (or even between two workplace with different sets of displays),
you can set up an alternative pictures folder that the program should use whenever aspect ratios changed.

For example, if sometimes you disconnect your FullHD notebook from your FullHD monitor, put wide (3860×1080) pictures to “pictures folder” and FullHD (1920×1080) pictures to “alternative pictures folder”.
So, a laptop is connected to a monitor — the app uses wide pictures folder, a laptop isn’t connected anywhere — the app uses FullHD pictures folder.

Languages:
 * English
 * Russian

 Translation to other languages are welcome. [How to.]({% post_url 2018-05-02-qt-linguist %})

### Hotkeys
`delete` — delete the displayed image from folder  
`middle-click` tray icon — pause the timer

<br>

<small><small>
[<img class='lightbox-image-right' style= 'width: 4rem;' src='/images/gpl3.svg' alt='GPLv3'>](https://www.gnu.org/licenses/gpl-3.0.html)
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License
as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
</small></small>
<small><small>
[<img class='lightbox-image-right' style= 'width: 4rem;' src='/images/softpedia100free.png' alt='Softpedia Labs 100% Free Mark'>](http://www.softpedia.com/get/Desktop-Enhancements/Clocks-Time-Management/Eyes-Thanks.shtml#status)
This product was tested in the Softpedia Labs. Softpedia [guarantees](http://www.softpedia.com/get/Desktop-Enhancements/Clocks-Time-Management/Eyes-Thanks.shtml#status)
that Eyes’ Thanks is 100% Free, which means it does not contain any form of malware, including but not limited to: spyware, viruses, trojans and backdoors.
This software product was tested thoroughly and was found absolutely clean; therefore, it can be installed with no concern by any computer user.
</small></small>
<file_sep>/gem-versions.md
---
layout: page
title: Dependencies of github-pages gem
description: "Dependencies of github-pages gem"
---
<br>

gem | version
:-----| :-----
jekyll | {{site.github.versions.jekyll}}
github-pages | {{site.github.versions.github-pages}}
liquid | {{site.github.versions.liquid}}
{% for version in site.github.versions -%}
{%- unless version[0] == "jekyll" or version[0] == "github-pages" or version[0] == "liquid" -%}
{{version[0]}} | {{version[1]}}
{% endunless -%}
{%- endfor -%}
<file_sep>/_posts/2017-04-04-mouses.md
---
layout: post
title: Светодиодная мышь vs Лазерная мышь
summary: Преимущества и недостатки
post_on_sidebar: false

tag:
  - devices

category:
  - posts

comments: true
language: ru
---

### Оптическая светодиодная мышь

#### Преимущества:

 * низкая цена;
 * зазор между мышью и рабочей поверхностью некритичен.

#### Недостатки:

 * не работает на зеркальных, стеклянных и глянцевых поверхностях;
 * невысокая точность и скорость курсора;
 * невысокая чувствительность;
 * отвлекающая подсветка;
 * высокое потребление энергии в беспроводном исполнении.

### Оптическая лазерная мышь

#### Преимущества:

 * работа на любых рабочих поверхностях;
 * высокая точность и скорость курсора;
 * высокая чувствительность и возможность управления разрешающей способностью;
 * отсутствие видимого свечения;
 * низкое потребление энергии в беспроводном исполнении;
 * возможность использования множества дополнительных функциональных кнопок.

#### Недостатки:

 * высокая цена;
 * критичность к зазору между мышью и рабочей поверхностью.
<file_sep>/scripts/staticman.js
// Static comments
(function ($) {
  var $comments = $('.js-comments');

  $('#comment-form').submit(function () {
    var form = this;

    $(form).addClass('disabled');
    $('#comment-form-submit').html('<svg class="icon spin"><use xlink:href="#icon-loading"></use></svg> Loading...');

    $.ajax({
      type: $(this).attr('method'),
      url: $(this).attr('action'),
      data: $(this).serialize(),
      contentType: 'application/x-www-form-urlencoded',
      success: function (data) {
        $('#comment-form-submit').html('Submitted');
        $('.post__comments-form .js-notice').removeClass('notice--danger').addClass('notice--success');
        showAlert('<strong>Thanks for your comment!</strong> It will show on the site once it has been approved.');
      },
      error: function (err) {
        console.log(err);
        $('#comment-form-submit').html('Submit Comment');
        $('.post__comments-form .js-notice').removeClass('notice--success').addClass('notice--danger');
        showAlert('<strong>Sorry, there was an error with your submission.</strong> Please make sure all required fields have been completed and try again.');
        $(form).removeClass('disabled');
      }
    });

    return false;
  });

  function showAlert(message) {
    $('.post__comments-form .js-notice').removeClass('hidden');
    $('.post__comments-form .js-notice-text').html(message);
  }
})(jQuery);
<file_sep>/README.md
My user site — https://yalov.github.io/

[Jekyll](http://jekyllrb.com) Theme — [Hyde](http://hyde.getpoole.com/).
<file_sep>/_collection/quotation-mark.md
---
layout: post
title: Апостроф и кавычки

fullwidth: true
hidden: false

date: 2017-04-13

tag:
  - кавычки
  - апостроф

category:
  - posts

  #lightbox2:
imgfolder: /images/
images:
  - name: yarbur.png
    text: Раскладка клавиатуры ЯРБУР
    width: 1920
    height: 850

  - name: yarbur_transparent_gradient.png
    text: Схема раскладки ЯРБУР (прозрачный градиент)
    width: 1920
    height: 850

comments: false
language: ru

permalink: yarbur/:title
---
В посте содержится информация о всех апострофах, одинарных и двойных кавычках, которые есть на [раскладке ЯРБУР]({% link _collection/yarbur.md %}), а также разновидности кавычек в русской (и не только) типографике.
<!--more-->

{%include lightbox.html image="yarbur.png" %}

## Про апострофы

 Юникод<br>Ввод c клавиатуры |   | Описание
-------                                          |:----:|-----
U+2019<br>_Right Single Quotation Mark_<br>`AltGr` + `ъ`| `’` |       Апостроф, **рекомендуется использовать в русских, белорусских, украинских и английских текстах**. (Пример: *Жанна д’Арк*, *you’re*, *з’ява* ). Также используется в английском тексте как закрывающая кавычка внутри других кавычек.
U+0027<br>_Apostrophe_<br>`AltGr` + `Shift` + `ъ`| `'`  | Машинописный апостроф. Именно он на первом слое стандартной английской раскладки, стандартной белорусской раскладки. Суррогат, который появился во времена печатных машинок, его использовали вместо всех похожих знаков. Многие приложения и сервисы автоматически заменяют его на `’` (U+2019), поисковики работают с обеими версиями.<br>**Не рекомендуется использовать как апостроф**.
U+02BC<br>_Modifier Letter Apostrophe_<br>`нет на раскладке`| `ʼ`  | Апостроф-буква. По виду полностью совпадает с **U+2019** (в правильном шрифте), но относится к [блоку](https://en.wikipedia.org/wiki/Unicode_character_property#General_Category) "Letter (Lm)" юникода, а не "Punctuation (Pf)", как U+2019. Несмотря на строгую позицию консорциума юникода, предписывающую использовать именно U+2019, есть [альтернативное мнение](https://tedclancy.wordpress.com/2015/06/03/which-unicode-character-should-represent-the-english-apostrophe-and-why-the-unicode-committee-is-very-wrong/), и [в дополнение](https://ukrainian.stackexchange.com/questions/40/Який-символ-використовувати-для-позначення-апострофа-в-електронних-текстах-украї). Если у вас есть желание противиться консорциуму, то вы можете самостоятельно добавить на раскладку этот символ.   

<br><br>


## Про одинарные и двойные кавычки

### Tl;dr

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

* **русский:** снаружи «ёлочки» — `AltGr` и `<` `>`, внутри „лапки“ — `AltGr`+`Shift` и `<` `>`

> Эйнштейн писал Э<NAME>: «Слово „бог“ для меня всего лишь проявление и продукт человеческих слабостей».

* **английский:** снаружи “английские двойные”, внутри ‘английские одиночные’. В раскладке снаружи на `Д` `Ж`, а внутри на `Х` `Ъ` aka там, где скобки `[{` `]}`. [ДЖ](https://ru.wikipedia.org/wiki/Джоуль,_Джеймс),[ДЖ](http://ru.elderscrolls.wikia.com/wiki/Дж'дарр),[ДЖ](https://ru.wikipedia.org/wiki/Роулинг,_Джоан).

> The Times wrote, “Drugs and weapons still for sale on ‘dark net.’ ”

### Кавычки на раскладке

 Юникод |  |Ввод с клавиатуры  | Описание
-------| -----|                :----:      |-----
U+2018<br> _Left Single Quotation Mark_                 | `‘` | `AltGr` + `х`          | Используется в английском языке как открывающая кавычка внутри других кавычек.
U+2019<br> _Right Single Quotation Mark_                | `’` | `AltGr` + `ъ`          | Помимо апострофа (см. таблицу выше) символ используется в английском языке как закрывающая кавычка внутри других кавычек.
U+2032<br> _Prime_                                      | `′` | `AltGr` + `з`          | Штрих. Используется как угловые минуты, производная, знак фута.
U+2033<br> _Double Prime_                               | `″` | `AltGr` + `Shift` + `з` | Двойной штрих. Используется как угловые секунды, вторая производная, знак дюйма.
U+201E<br> _Double Low-9 Quotation Mark_                | `„` | `AltGr` + `Shift` + `<`<br>или<br>`AltGr` + `л` | Русский язык — открывающие кавычки внутри других кавычек. <br>Английский язык — не используется.
U+201C<br> _Left Double Quotation Mark_                 | `“` | `AltGr` + `Shift` + `>`<br>или<br>`AltGr` + `д` | Русский язык — закрывающие кавычки внутри других кавычек. <br>Английский язык — открывающие кавычки.
U+201D<br> _Right Double Quotation Mark_                | `”` | `AltGr` + `ж`          | Русский язык — не используются. <br>Английский язык — закрывающие кавычки.
U+00AB<br> _Left-Pointing Double Angle Quotation Mark_  | `«` | `AltGr` + `<`          | Левая французская «кавычка-ёлочка».  Стала традиционной открывающей кавычкой в русском языке.
U+00BB<br> _Right-Pointing Double Angle Quotation Mark_ | `»` | `AltGr` + `>`          | Правая французская «кавычка-ёлочка». Стала традиционной закрывающей кавычкой в русском языке.
U+0022<br> _Quotation Mark_                             | `"` | `AltGr` + `.`          | Универсальная двойная кавычка, иногда называется машинописной или программистской. Находится на втором слое стандартной английской раскладки. Суррогат, который появился во времена печатных машинок, его использовали вместо всех двойных кавычек.


### Кавычки в русском языке
Имеют названия следующие виды кавычек:

* Французские кавычки «ёлочки».
* »Шведские кавычки«.
* Немецкие кавычки „лапки“, Внешне похожие на 9966 — двойное 96 — как [U-96](https://ru.wikipedia.org/wiki/U-96_(1940)) и [Ил-96](https://ru.wikipedia.org/wiki/Ил-96).
* Английские “двойные” и ‘одиночные’ кавычки. Внешне похожи на 6699 и 69 — как [Вудсток](https://ru.wikipedia.org/wiki/Вудсток_(фестиваль)).
* „Польские кавычки”. Внешне похожи на 9999 — крупнейшее четырёхзначное десятичное число — [«Poland strong!»](https://upload.wikimedia.org/wikipedia/commons/8/86/Polandball.PNG).


В русском языке традиционно применяются французские «ёлочки», а для кавычек внутри кавычек и при письме от руки — немецкие „лапки“.
> Беляев называл «Голову профессора Доуэля» автобиографической историей, поясняя: «Болезнь уложила меня однажды на три с половиной года в гипсовую кровать.
> Этот период болезни сопровождался параличом нижней половины тела. И хотя руками я владел, всё же моя жизнь сводилась в эти годы к жизни „головы без тела“,
> которого я совершенно не чувствовал — полная анестезия…»

В особом случае, в русских текстах употребляются английские одиночные кавычки.
В такие кавычки берётся текст, указывающий значение некоторого слова или словосочетания (обычно иноязычного).
> Лингвистика, от лат. lingua — ‘язык’.  
> В немецком языке элементы frieden ‘мир’ и kampf ‘борьба’ сочетаются как морфемы.  
> Пациент не может, например, идентифицировать слово carrot, но без затруднений даёт дефиницию слову knowledge,
> определяя его как ‘making oneself mentally familiar with a subject’.  
> Фраза «Вы выходите?» в автобусе или в троллейбусе означает ‘дайте, пожалуйста, пройти’.

При прямой речи в конце предложения точка выносится за кавычки, а вопросительный и восклицательный знаки, многоточие, наоборот, остаются внутри.
В других случаях (не прямая речь —  цитаты, названия произведений, слова в ироническом смысле и тому подобное) обычно используются все знаки:
> Пётр спросил у андроида Фёдора: «Мечтают ли андроиды об электроовцах?» Иван вернулся с новыми батарейками. Фёдор ответил Петру: «Возможно».  
> Вы прочитали роман «Мечтают ли андроиды об электроовцах?». Лично я прочитал.

### Кавычки в мире

* Начиная с 1960х в британском английском появляется тенденция замены порядка кавычек: ‘вот “так” вот’.
Также в английском языке (особенно в его американском варианте) точка зачастую ставится перед закрывающей кавычкой, а не после, как в русском.
* Традиционно в белорусских и украинских типографиях использовались «французские» и „немецкие“ кавычки.
Сейчас как в частном использовании, так и в СМИ нет единого общепринятого варианта кавычек, однако:
  * [«Закон Рэспублiкi Беларусь аб Правiлах беларускай арфаграфii i пунктуацыi»](http://www.academy.edu.by/files/zak_420-3.pdf),
  он же [«Правапіс-2008»](https://be.wikiquote.org/wiki/Правапіс-2008) предписывает использовать в белорусском языке
  «французские кавычки» снаружи и “английские двойные” внутри.
  * [Український Правопис (2015)](http://litopys.org.ua/pravopys/pravopys2015.htm), одобренный национальной академией наук Украины,
  предписывает использовать в украинском языке «французские кавычки» снаружи и „немецкие“ внутри.
* В нелегальной, первой белорусской газете «Mużyckaja prauda» ([Мужыцкая праўда](https://be.wikipedia.org/wiki/Мужыцкая_праўда), 1862—1863)
использовались „польские кавычки”. Их, вероятно, и рекомендуется использовать в текстах на латинке.
* „Польские кавычки” помимо Польши используются в румынском и нидерландском языках.
* Во Франции иногда используются ‹французские одиночные›.
* В Финляндии (и Швеции) используются непарные кавычки: ”lainata” или »noteerata»
* »Шведские кавычки« в Швеции уже почти не используются.  
* В иероглифических письменностях существуют свои кавычки:  — 《...》, 『...』, и 「...」.
* Фонд эсперанто не предписывает какие-то определённые кавычки, а текст может содержать
различные популярные в мире формы кавычек:  ‘citaĵo’, “citaĵo”, „citaĵo” и «citaĵo».
* В [Ложбане](https://ru.wikipedia.org/wiki/Ложбан) используются слова lu ... li'u.

### Примеры использования кавычек:

> Станислав Ежи Лец пишет: «Это не фокус сказать: „Я — есмь“. Надо быть». *(русский)*  
> Анатоль Анікейчык пісаў пра помнік Янку Купалу ў Аўраў-парку: «У аснову ідэі гэтага помніка я паклаў Купалаўскі верш “Брату на чужыне”». *(белорусский)*  
> «Ти дивився кінофільм „Данило — князь галицький“?» — спитав він товариша.  *(украинский)*  
> Czy można jeszcze wątpić, że „tak naprawdę nie dzieje się nic i nie stanie się nic aż do końca”? *(польский)*  

> The Times wrote, “Drugs and weapons still for sale on ‘dark net.’” *(английский)*  
> Dies habe, so Meyer, „nichts mit ‚Globalisierung‘ zu tun“. *(немецкий)*  
> « L’ouvreuse m’a dit : ‹ Donnez-moi votre ticket. › Je le lui ai donné. » *(французский — да, так отбиваются пробелами)*  


{% comment %}
В раскладке на `Л` `Д` aka `K` `L`. ЛДKL — как русский [**л**е**д**о**к**о**л** «Ленин»](https://ru.wikipedia.org/wiki/Ленин_(атомный_ледокол)) — первый в мире ледокол с атомной энергетической установкой.
X⁰¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ⁿ X₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎
Циолковский скептически относился к теории относительности: «Замедление времени в летящих со субсветовой скоростью кораблях по сравнению с земным временем представляет собой либо фантазию, либо одну из очередных ошибок нефилософского ума. … Замедление времени! Поймите же, какая дикая бессмыслица заключена в этих словах!»
{% endcomment %}
<file_sep>/_collection/yarbur.md
---
layout: post
title: Раскладка клавиатуры ЯРБУР

post_on_sidebar: true

date: 2017-04-12

tag:
  - keyboard layout
  - AltGr
  - типографская
  - раскладка

category:
  - projects

comments: true
language: ru
#lightbox2:
imgfolder: /images/
images:
  - name: yarbur.png
    text: Раскладка клавиатуры ЯРБУР
    width: 1920
    height: 660

  - name: yarbur_transparent_gradient.png
    text: Схема раскладки ЯРБУР (прозрачный градиент)
    width: 1920
    height: 644



permalink: yarbur/
---
{% include lightbox.html image="yarbur.png" %}

Набор расширенных раскладок, включает русскую и английскую раскладки, и позволяет набирать многие типографские символы, белорусские и украинские буквы через правый Alt.
<!--more-->
<br>

### Скачать ЯРБУР для Windows XP–10 c [Github](https://github.com/yalov/yarbur-keyboard-layouts/releases)

<br>
Символы, доступные через правый Alt (`AltGr`) называют третьим слоем, а через `AltGr` + `Shift` — четвёртым.

* 1 слой — **с** = `с`
* 2 слой — **С** = `Shift` + `с`
* 3 слой — **©** = `AltGr` + `c`
* 4 слой — **¢** = `AltGr` + `Shift` + `c`

Раскладка содержит Тире (**—** = `AltGr` + `-`), символ рубля (**₽** = `AltGr` + `р`), «кавычки», знак градуса, знак копирайта и многие другие.

Раскладка содержит белорусские и украинские буквы: **Ў**, **І**, **Ґ**, **Ї**, **Є** и апостроф. Присутствуют символы гривны и белорусского рубля:
**₴**, **Br**.

Подстрочные₄₊₅ и надстрочные⁴⁺⁵ цифры вводятся через `CapsLock`:

* 5 слой — **₈** = `8` (при включённом `CapsLock`)
* 6 слой — **⁸** = `Shift` + `8` (при включённом `CapsLock`)

### Как установить?

 * Для установки последовательно запустить *Install-Yarbur-En.exe* и *Install-Yarbur-Ru.exe*.  
Затем в «настройках способов ввода» (*Панель управления/Язык* для Win10) добавьте раскладки ЯРБУР и можно удалять стандартные раскладки. **Перезагрузиться**.
 * Иногда стандартные раскладки самоятоятельно востанавливаются после перезагрузки. В таком случае отредактируйте реестр, Подробнее [superuser.com](https://superuser.com/questions/957552/how-to-delete-a-keyboard-layout-in-windows-10)
 * Для удаления, сначала убрать из «настроек способов ввода», затем удалить из «установка и удаление программ» (*Панель управления/Программы и компоненты* для Win10).

За основу взята [**Типографская раскладка v3.4**](http://ilyabirman.ru/projects/typography-layout/), на которую были добавлены белорусские и украинские буквы, и прочие полезные символы.
При помощи [**The Microsoft Keyboard Layout Creator**](https://msdn.microsoft.com/keyboardlayouts.aspx) можно создать свою или изменить эту раскладку.

### Про апостроф и кавычки

В качестве апострофа в русских, белорусских, украинских и английских текстах рекомендуется использовать  `AltGr` + `ъ` = **’** (U+2019). Пример: *Жанна д’Арк*, *з’ява*, *you’re*.

В качестве кавычек рекомендуется использовать «кавычки-ёлочки» ( `AltGr` + `<` и `AltGr` + `>`).

Подробнее про апострофы, одинарные и двойные кавычки [**тут**]({% link _collection/quotation-mark.md %}).


### Про диакритические знаки

На четвёртом слое можно увидеть различные диакритические знаки, обозначенные пунктирным кружком. Их можно «соединять» с любой буквой русского и английского алфавита.
Есть 2 способа такого соединения:
 1. Первый способ работает только если такая буква реально существует в Юникоде, или, точнее, в [этом списке](https://github.com/yalov/yarbur-keyboard-layouts/blob/master/diacritical_mark.txt).
    Диактитику нужно ввести **до** необходимой буквы:  
    * **Schrödinger** — `AltGr` + `Shift` + `:`,  `o` → **¨** + **o** → **ö**  
 
    Если такой буквы нет в Юникоде, тогда диакритика появится до буквы:  
    * `AltGr` + `Shift` + `:`,  `я` =  **¨** + **я** → **¨я**

 2. Второй способ работает для любых букв, но вводит «ненастоящие» буквы, с применением «комбинирующей диактирики». 
    Диакритика будет отдельным символом, но выводящимся на экран на один знак левее, залезая на предыдущую букву. Это легко проверить, если нажать `Backspace` — исчезнет диакритика, но не сама буква. Хотя это не точно, так как второй способ зависит от вашего текстого редактора и реализованного в нём способа отображения «комбинирующей диактирики».  
    Чтобы ввести такую диакритику, нужно **после** буквы зажимая  `AltGr`+`Shift` **дважды** нажать клавишу с необходимым диакритиреским знаком:
    * `я`,  `AltGr` + `Shift` + `:` + `:`  → **я̈**  
    * `я`,  `AltGr` + `Shift` + `/` + `/`  → **я́**  
    * **во́ля** — `в`, `о`, `AltGr`+`Shift`+`/`+`/`, `л`, `я`  

    Таки́м спо́собом мо́жно расста́вить ударе́ния в слова́х.

### Про десятичный разделитель
Обычно десятичный разделитель на цифровом блоке в русской раскладке — запятая, хотя в английской — точка и нарисована на клавише тоже точка. Из-за этого возникает много путаницы.

Кто-то скажет, что в русской типографике исторически дробная часть отделяется запятой. Это верно, но, во-первых, многие русские авторы уже используют точку, и, во-вторых, ip-адрес и версия программы в любом случае разделяется именно точкой. Поэтому в раскладках клавиатуры ЯРБУР (и в русской, и в английской) **в качестве десятичного разделителя используется точка**, а в третьем слое (`AltGr`) — запятая.

### Про CapsLock
Начиная с версии 2.0 помимо `AltGr` перегружается ещё и `CapsLock`. Можно сказать, что это пятый и шестой слой (шестой — с `Shift`).

На пятом слое находятся подстрочные  **₌₁₂₃₄₅₆₇₈₉₀₋₊**, на шестом — надстрочные **⁼¹²³⁴⁵⁶⁷⁸⁹⁰⁻⁺**. Буквы ведут себя КАК ОБЫЧНО.

На третий и четвёртый слой клавиша `CapsLock` не влияет, т.е. © = `AltGr` + `с` = `CapsLock`, `AltGr` + `с`.


### Изображения

<!-- {% include lightbox.html height='10rem' %} -->

 * Схема раскладки ЯРБУР — [yarbur.png]({{ site.baseurl }}/images/yarbur.png)
 * Схема раскладки ЯРБУР (прозрачный градиент) — [yarbur_transparent_gradient.png]({{ site.baseurl }}/images/yarbur_transparent_gradient.png)
<file_sep>/_posts/2017-07-20-qmake-deployment.md
---
layout: post
title: QMake Deployment

post_on_sidebar: false

tag:
  - qt
  - qmake
  - deployment

category:
  - posts

comments: true
language: ru
---

Для автоматической сборки Qt приложений под Windows в папку назначения вместе со всеми нужными библиотеками и
необходимыми файлами в QtCreator'е можно использовать qmake-команды в .pro-файле.

Для начала переносим релизный `.exe` в новую папку:

``` qmake
CONFIG(release, debug|release) {
DESTDIR = $$PWD/../AppName
}
```

И наполняем эту папку библиотеками и файлами, которые нужны для выполнения.

Задаём перенос строки aka переменная разделения команд `RETURN`, и затем наполняем `QMAKE_POST_LINK` необходимыми командами:
<!--more-->

``` qmake
RETURN = $$escape_expand(\n\t)
QMAKE_POST_LINK += $$RETURN command1
QMAKE_POST_LINK += $$RETURN command2
QMAKE_POST_LINK += $$RETURN command3
# export(QMAKE_POST_LINK) # if inside function (exports from the local context to the global.
```


Но лучше для каждой операции ввести отдельную функцию, все функции вынести в отдельный `.pri`-файл, а в `.pro`-файле оставить только вызовы.

``` qmake
# functions.pri
defineTest(func1) {
    ARG1 = $$1
    ARG2 = $$2
    # commands
}
defineTest(func2) {
    ARGS = $$1
    # commands
}

# ...

# main.pro
include("functions.pri")
func1(arg1, arg2)
func2(arg1)
```

Команда сборки `windeployqt` в qmake будет выглядеть так (сначала используя содержимое переменной `QT` берём модули, которые точно нужны, потом пишем модули которые окажутся лишними):

``` qmake
# windeployqt in $$DESTDIR with some ARGS
defineTest(windeployqtInDESTDIR) {
    ARGS = $$1
    RETURN = $$escape_expand(\n\t)
    QMAKE_POST_LINK += $$RETURN windeployqt $$ARGS $$quote($$shell_path($$DESTDIR))
    export(QMAKE_POST_LINK)
}

# ...

PACKAGES = "--compiler-runtime"
for(package,QT){
    PACKAGES += "--$${package} "
}
PACKAGES += --no-svg --no-system-d3d-compiler --no-translations --no-opengl-sw --no-angle
windeployqtInDESTDIR($$PACKAGES)
```  


### Копирование и удаление файлов

Функция для рекурсивного удаления папки:

``` qmake
# Recursive remove directory
defineTest(removeDirRecursive) {
    DIR_TO_DEL = $$shell_path($$1)
    RETURN = $$escape_expand(\n\t)
    QMAKE_POST_LINK += $$RETURN $$QMAKE_DEL_TREE $$quote($$DIR_TO_DEL)
    export(QMAKE_POST_LINK)
}

#....

removeDirRecursive($$DESTDIR/somedir)
```

Функция для удаления файлов из какой-то папки:

``` qmake
# Remove some files from directory (directory_path and file_names)
defineTest(removeFilesInDir) {
    PATH = $$shell_path($${1}) # full path to directory
    FILENAMES = $${2}          # filenames inside directory for remove
    RETURN = $$escape_expand(\n\t)
    for(FILENAME, FILENAMES){
        QMAKE_POST_LINK += $$RETURN $$QMAKE_DEL_FILE $$quote($${PATH}$${FILENAME})
    }
    export(QMAKE_POST_LINK)
}

# ...

FILENAMES = qlib1.dll qlib2.dll qlib3.dll qlib4.dll
removeFilesInDir($$DESTDIR/somedir/, $$FILENAMES)
```

Функция для удаления файлов (не обязательно из одной папки):

``` qmake
# Remove some files
defineTest(removeFiles) {
    FILES_TO_DEL = $$shell_path($$1) # full path (split spaces) or mask *
    RETURN = $$escape_expand(\n\t)
    for(FILE, FILES_TO_DEL){
        QMAKE_POST_LINK += $$RETURN $$QMAKE_DEL_FILE $$quote($$FILE)
    }
    export(QMAKE_POST_LINK)
}

# ...

FILEPATHES = /path/to/qlib1.dll /path/to/qlib2.dll /path/to/qlib3.dll /path/to/qlib4.dll
removeFiles($$FILENAMES)
```

Функция для создания папки и копирования в неё файлов:

``` qmake
# create directory if not exist, then copy some files to that directory
defineTest(copyFilesToDir) {
    FILES = $$shell_path($$1)  # full filepath (split spaces) or masks * ?
    DIR = $$shell_path($$2)    # directory path
    RETURN = $$escape_expand(\n\t)
    QMAKE_POST_LINK += $$RETURN $$sprintf($$QMAKE_MKDIR_CMD, $$DIR)
    for(FILE,FILES){
        QMAKE_POST_LINK += $$RETURN $$QMAKE_COPY $$quote($$FILE) $$quote($$DIR)
    }
    export(QMAKE_POST_LINK)
}

# ...

copyFilesToDir(some/*.dll, $$DESTDIR/other)
# or
copyFilesToDir(path/to/1.dll path/to/2.dll, $$DESTDIR/other)
```

### Дерево файлов проекта

Также стоит вспомнить о команде, которая лечит не-баг-а-фичу дерева папок проекта под windows
(вложенные дополнительные папки debug и release в каждой из build-Qt-Debug и build-Qt-Release):

```
project\
|__build-Qt_x_y_0_32bit_Debug\
|__|__debug\
|__|__|__...files
|__|__release\
|__|__|__...empty
|__build-Qt_x_y_0_32bit_Release\
|__|__debug\
|__|__|__...empty
|__|__release\
|__|__|__...files
```

Вот она:

``` qmake
CONFIG -= debug_and_release
```

После неё:

```
project\
|__build-Qt_x_y_0_32bit_Debug\
|__|__...files
|__build-Qt_x_y_0_32bit_Release\
|__|__...files
```

Можно пойти дальше, и аккуратно разложить файлы в `build-Qt-Debug` и `build-Qt-Release`:

``` qmake
OBJECTS_DIR = $$OUT_PWD/.obj
MOC_DIR     = $$OUT_PWD/.moc
RCC_DIR     = $$OUT_PWD/.qrc
UI_DIR      = $$OUT_PWD/.ui
```

Получим:

```
project\
|__build-Qt_x_y_0_32bit_Debug\
|__|__.obj\
|__|__.moc\
|__|__.qrc\
|__|__.ui\
|__build-Qt_x_y_0_32bit_Release\
|__|__.obj\
|__|__.moc\
|__|__.qrc\
|__|__.ui\
```


### Использование переменных

Чтобы быстро включать и выключать копирование файлов в DEPLOY-сборку, и заодно, отключить в DEPLOY все отладочные сообщения, можно сделать так:

``` qmake
CONFIG += DEPLOY # comment/uncomment this for Usual_release/Deploy

# ...

CONFIG(release, debug|release) {
  DEPLOY {
    DEFINES += QT_NO_DEBUG_OUTPUT
    # ... all necessary commands
  }
}
```


Удобной может быть переменная времени сборки:

``` qmake
win32 {
    BUILD_TIME = $$system("echo %time:~0,8%")
} else {
    BUILD_TIME = $$system("time")
}

message("$$BUILD_TIME projectname.pro")
```
<file_sep>/Gemfile
source 'https://rubygems.org'
gem 'github-pages', group: :jekyll_plugins

# listen (serve) requires an extra gem for compatibility with Windows.
# gem 'wdm', '~> 0.1.0' if Gem.win_platform?
gem 'wdm', '>= 0.1.0' if Gem.win_platform?

# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
# gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
<file_sep>/_posts/2018-05-02-qt-linguist.md
---
layout: post
title: Qt Linguist

project: false
post_on_sidebar: false
fullwidth: true
hidden: false

tag:
  - qt
  - deployment
  - linguist

category:
  - posts

comments: true
language: en
---

How to localize S-app (someone's Qt app)?

1. You need to find `.ts` localization file. Usually it's separate file for every language in the languages folder in the S-app source repository.  
Examples: <!--more-->  
`lang_en.ts`-— source English localization file  
`lang_en.qm` — compiled English localization file (used by working app)

2. `.ts` file is XML, so you can modify it as plain text, but more convenient is using Qt Linguist. It is included in Qt framework, but you can download it as separate app for Windows [here](https://github.com/thurask/Qt-Linguist/releases) (unofficial).

3. Copy `English.ts`, rename to `your_language.ts`, change the language tag in the begining of the file manually using a notepad.

   ```
   <TS version="2.1" language="en_US">
   ```
4. Open both file in the Qt linguist, and make a translation.
5. Save `your_language.ts` file
6. You can test your translation: using Qt Linguist, compile `your_language.ts` to `your_language.qm`, and test it with app package (put to S-app `language/` folder)
7. Send `your_language.ts` to S-app author.


More info [here](http://doc.qt.io/qt-5/linguist-translators.html)
<file_sep>/_drafts/feedback-alternatives.md
---
layout: page
title: Feedback2
published: false
---

<!-- Please use the form below to contact us regarding feedback or any questions you may have! We will never use the information given below to spam you and we will never pass on your information to a 3rd party.

As we are using [FormSpree](http://formspree.io) for this form please consult their privacy policy for any questions regarding this matter.  -->

<!-- google short -->

 <!-- <script type="text/javascript">var submitted=false;</script>

<iframe name="hidden_iframe" id="hidden_iframe" style="display:none;" onload="if(submitted)
{window.location='{{ site.baseurl }}/Feedback_finish.html';}">
</iframe>

<form action="https://docs.google.com/forms/d/e/1FAIpQLSf6ADpCgWAOCPLqwuk4vtSAehpdp2tde16-kqW_O4803D67MQ/formResponse" method="post" target="hidden_iframe" onsubmit="submitted=true;"><input type="text" placeholder="Your name" name="entry.1991378409">
<input type="text" placeholder="Your email" name="entry.1851221112"><br>
<textarea name="entry.1211410705" placeholder="Your message" rows="8" cols="80">

</textarea><br>


<input type="hidden" name="draftResponse" value="[,,&quot;1422419426149312021&quot;]">
<input type="hidden" name="pageHistory" value="0">

<input type="hidden" name="fbzx" value="1422419426149312021">

<input type="submit" name="submit" value="Готово" id="ss-submit" class="jfk-button jfk-button-action "></form>  -->

<!-- feedback3 -->


<!-- <link href="http://fonts.googleapis.com/css?family=Lato" rel="stylesheet" type="text/css">

<form id="contact-form">
  <p>Dear Alexander,</p>
  <p>My
   <label for="your-name">name</label> is
   <input type="text" name="your-name" id="your-name" minlength="3" placeholder="(your name here)" required=""> and</p>
  <p>my
   <label for="email">email address</label> is
   <input type="email" name="your-email" id="email" placeholder="(your email address)" required=""></p>
  <p> I have a
   <label for="your-message">message</label> for you,</p>
  <p>
  <textarea name="your-message" id="your-message" placeholder="(your msg here)" class="expanding" required="">

</textarea>
</p>
  <p>
  <button type="submit"><svg version="1.1" class="send-icn" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="100px" height="36px" viewBox="0 0 100 36" enable-background="new 0 0 100 36" xml:space="preserve">
  <path d="M100,0L100,0 M23.8,7.1L100,0L40.9,36l-4.7-7.5L22,34.8l-4-11L0,30.5L16.4,8.7l5.4,15L23,7L23.8,7.1z M16.8,20.4l-1.5-4.3
 l-5.1,6.7L16.8,20.4z M34.4,25.4l-8.1-13.1L25,29.6L34.4,25.4z M35.2,13.2l8.1,13.1L70,9.9L35.2,13.2z">
</path>
</svg>
     <small>send</small></button>
</p>
</form>

<small class="website">Vist <a href="http://www.erlen.co.uk/" target="_blank">erlen.co.uk</a> to see my work</small> -->

 <!-- feedback5 -->

 <!-- <div class="inner contact">
  <div class="contact-form">
  <form id="contact-us" method="post" action="#">
  <div class="col-xs-6 wow animated slideInLeft" data-wow-delay=".5s"><input type="text" name="name" id="name" required="required" class="form" placeholder="Name">

                            <input type="email" name="mail" id="mail" required="required" class="form" placeholder="Email"></div>
  <div class="col-xs-6 wow animated slideInRight" data-wow-delay=".5s">
  <textarea name="message" id="message" class="form textarea" placeholder="Message">

</textarea>
</div>
  <div class="relative fullwidth col-xs-12">
  <button type="submit" id="submit" name="submit" class="form-btn semibold">Send Message</button>
</div>
  <div class="clear">
</div>
</form>
  <div class="mail-message-area">
  <div class="alert gray-bg mail-message not-visible-message"><strong>Thank You !</strong> Your email has been delivered.
                        </div>
</div>
</div>
</div>  -->

<!-- google orig -->

<!-- <iframe src="https://docs.google.com/forms/d/e/1FAIpQLSf6ADpCgWAOCPLqwuk4vtSAehpdp2tde16-kqW_O4803D67MQ/viewform?embedded=true" onload="if(submitted) {window.location='/';}" style="background: #FFFFFF;" width="100%" height="1000" frameborder="0" marginheight="0" marginwidth="0">Загрузка...</iframe> -->





<!-- Simular posts -->
<!--
<div class="related">
  <h2>Related Posts</h2>
  <ul class="related-posts">
    {% for post in site.related_posts limit:3 %}
      <li>
        <h3>
          <a href="{{ post.url }}">
            {{ post.title }}
            <small>{{ post.date | date_to_string }}</small>
          </a>
        </h3>
      </li>
    {% endfor %}
  </ul>
</div>
-->
<file_sep>/404.html
---
layout: default
title: "HTTP 404"
permalink: /404.html  # this is for https://yalov.github.io/2016/ (https://stackoverflow.com/questions/20973662)
sitemap: false
---
{% capture site_url -%}
{{ site.baseurl | prepend: site.url |replace:'//','/'|replace:'//','/' |replace:'https:/','https://' | replace:'http:/','http://' }}
{%- endcapture %}

<script type="text/javascript">
    var totalCount = 7;

    function ChangeIt() {
        var num = Math.ceil(Math.random() * totalCount);
        document.body.background = '{{ site.baseurl }}/images/404/' + num + '.gif';
        document.body.style.backgroundRepeat = "repeat"; // Background repeat
    }
    window.onload = ChangeIt;
</script>


<style>
    body {
        position: relative;
        width: 100%;
        height: 100%;
        -webkit-font-smoothing: antialiased;
        -webkit-background-size: cover;
        -moz-background-size: cover;
        -o-background-size: cover;
        background-size: cover;
        background-repeat: no-repeat;
    }

    form {
        color: #777;
        background: rgba(255, 255, 255, 0.7);
        padding: 25px;
        margin: 150px 0;
        box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.2), 0 5px 5px 0 rgba(0, 0, 0, 0.24);

        -webkit-font-smoothing: antialiased;
        -moz-font-smoothing: antialiased;
        -o-font-smoothing: antialiased;
        font-smoothing: antialiased;
        text-rendering: optimizeLegibility;
    }

    .container-form {
        width: 70%;
        margin: 0 auto;
        position: relative;
    }

</style>


<div class="container-form">
    <form>
        <h1>HTTP 404: Not Found</h1>
        <p>This page doesn't seem to exist. You might have followed a bad link or mistyped the address.
           Not to worry. You can return to the <a href="{{ site_url }}">home page</a> or sit there and procrastinate.</p>
    </form>
</div>

</html>
<file_sep>/about.md
---
layout: page
title: About
on_sidebar_bottom: false
---

Man.
<file_sep>/_collection/icalendar-generator.md
---
layout: post
title: Календарь праздников - 2023

post_on_sidebar: true

date: 2023-01-01

tag:
  - праздник
  - календарь
  - iCal

category:
  - tools

comments: true
language: ru
---

Cтандартные календари праздников от Google недостаточно полны, и здесь можно найти расширенный календарь праздников.<!--more-->

<iframe src="https://calendar.google.com/calendar/embed?showPrint=0&amp;showTabs=0&amp;showCalendars=0&amp;showTz=0&amp;
height=600&amp;wkst=2&amp;hl=ru&amp;bgcolor=%23FFFFFF&amp;src=ac10bada85f6bedeabfc818c11d156a200c298efad6c3c0150c6515b52c0bc3c%40group.calendar.google.com&amp;
color=%23333333&amp;ctz=Europe%2FMoscow" style="border-width:0" width="100%" height="600" frameborder="0" scrolling="no"></iframe>

### Tl;Dr

Cкопировать календарь праздников с помощью кнопки «**+Google** Календарь» в свой Гугл-аккаунт.

### Чуть подробнее

Сохранить [**ical-favorite-out.ics**]({{ site.baseurl }}/files/iCalendar/ical-favorite-out.ics) с полным описанием каждого праздника, в достаточно популярном формате [iCalendar](https://en.wikipedia.org/wiki/ICalendar) (`iCal`), и делать с ним что угодно, например, импортировать файл в Google Calendar.
Для этого рекомендуется на [calendar.google.com](https://calendar.google.com/) сначала *Cоздать новый календарь* в настройках, в списке «Мои Календари»,
а затем *Импортировать* в него скачанный `iCal`.

### Подробно

На сайте [calend.ru](http://calend.ru) праздники собраны по категориям.
Можно либо скачать по прямой ссылке один из представленных ниже календарей, либо создать на сайте свой календарь праздников и скачать `iCal`.

- [Праздники Международные](http://www.calend.ru/ical/ical-wholeworld.ics)
- [Праздники Еврейские](http://www.calend.ru/ical/ical-jew.ics)
- [Праздники Беларуси](http://www.calend.ru/ical/ical-belorus.ics)
- [Праздники России](http://www.calend.ru/ical/ical-russtate.ics)
- [Праздники Украины](http://www.calend.ru/ical/ical-ukraine.ics)


Однако в этих файлах про каждый праздник написано только одно предложение, хотя
на самом сайте содержится полноценная история и описание каждого праздника.
Следующий python-скрипт заменяет короткое описание праздников в `iCal` на полное описание с сайта, и сохраняет в новый файл.

Скрипт использует [icalendar](http://pypi.python.org/pypi/icalendar) и работает с файлами `iCal` (.ics) через аргумент командной строки.

```bash
pip install icalendar trafilatura colorama
python proceed.py path/to/.ics
```

{% gist 055e636e6bfc35c7d7b096aa8aa26c0d %}

Готовая версия:

- [Избранные праздники с описанием]({{ site.baseurl }}/files/iCalendar/ical-favorite-out.ics)

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

Или, как вариант, можно собрать комбинацию отсюда:

- [Международные праздники с описанием]({{ site.baseurl }}/files/iCalendar/ical-wholeworld-out.ics)
- [Праздники Еврейские с описанием]({{ site.baseurl }}/files/iCalendar/ical-jew-out.ics)
- [Праздники Беларуси с описанием]({{ site.baseurl }}/files/iCalendar/ical-belorus-out.ics)
- [Праздники России с описанием]({{ site.baseurl }}/files/iCalendar/ical-russtate-out.ics)
- [Праздники Украины с описанием]({{ site.baseurl }}/files/iCalendar/ical-ukraine-out.ics)


И, наконец, импортировать файл(ы) в, например, Google Calendar.
Для этого рекомендуется на [calendar.google.com](https://calendar.google.com/) сначала *Cоздать новый календарь* для каждого файла в списке «Мои Календари» в настройках, а затем *Импортировать* в него ваш сгенерированный `iCal`.
<file_sep>/_posts/2016-09-25-whats-jekyll.md
---
layout: post
title: Что такое Jekyll?
tag:
  - jekyll

category:
  - posts

comments: true
language: ru
---

[Jekyll](http://jekyllrb.com) это простой генератор статических сайтов, прекрасно подходящий для использования в качестве быстрой и легкой платформы для ведения блога.<!--more-->

Механизм его работы прост: каталог с текстовыми файлами пропускается через конвертер соответствующего формата (Markdown или Textile), рендерер [Liquid](https://github.com/Shopify/liquid/wiki) и на выходе получается готовый к публикации статический сайт, который может работать на любом сервере. Также Jekyll является движком [GitHub Pages](http://pages.github.com/), а это значит, что вы можете размещать свой сайт или блог на серверах Github бесплатно.

Тема сайта основана на [Hyde](https://github.com/poole/hyde) Марка Отто.


### Windows:

  * **Установка**:
    * cmd.exe c правами администратора:  
    `@powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"`
    * переоткрыть cmd,  
     `choco install ruby -y`
    * переоткрыть cmd,  
    `gem install github-pages`

  * **Fix github warning**:  
  добавить переменную окружения: `JEKYLL_GITHUB_TOKEN = {{token_value}}`

  * **Fix ssl error**:  
  добавить переменную окружения: `SSL_CERT_FILE = path\to\cacert.pem`  
  Не нужно устанавливать последнюю версию OpenSSL!  
  Перезагрузиться!

  * **Использование:**
    * `[bundle install]`
    * `[bundle exec] jekyll serve [--port=4000]`
<file_sep>/_posts/2017-08-27-star-trek-warp.md
---
layout: post
title: Star Trek Warp Calculator
post_on_sidebar: true
comments: true
math: true

tag:
  - calculator
  - scifi

category:
  - tools

summary: Correspondence between time, distance, velocity, and warp factor for “The Original” series and “The Next Gegeration” series.
---

Select warp scale:  
<input type="radio" name="version" value="TOS" > The Original Series (before 2312)  
<input type="radio" name="version" value="TNG" checked> The Next Gegeration (after 2312)

------      |  -----
Warp factor | <input type="number" class="text-align-right" id="warp" step="any" min="0" value="6">
Distance    | <input type="number" class="text-align-right" id="distance" step="any" value="100">    light years

<input type="button" value="Calculate" onclick="cal()">

------                                           | -----
Velocity                                         | <input type="text" class="text-align-right" id="velocity" readonly> <span id="speed_of_light">c</span>
Time to pass that distance                       | <input type="text" class="text-align-right" id="time"     readonly> <span id="measure"></span>
                                                 |
Time to reach the Pluto (33.4 au ≈ 0.0005 ly)    | <input type="text" class="text-align-right" id="time_pl"  readonly> <span id="measure_pl"></span>
Time to reach the Alpha Centauri (4.3 ly)        | <input type="text" class="text-align-right" id="time1"    readonly> <span id="measure1"  ></span>
Time to reach the Ocampa planet (75000 ly)       | <input type="text" class="text-align-right" id="time_oc"  readonly> <span id="measure_oc"></span>
Time to cross the Milky Way (100000 ly)          | <input type="text" class="text-align-right" id="time2"    readonly> <span id="measure2"  ></span>
Time to reach the Andromeda galaxy (2000000 ly)  | <input type="text" class="text-align-right" id="time3"    readonly> <span id="measure3"  ></span>

### Description

#### TOS
For Star Trek: The Original Series, the warp equation is generally accepted to be ($$v$$ — velocity through space,
  $$c$$ — the speed of light ($$3·10^8$$  m/s) and $$w$$ — the warp factor):

{% raw %}
$$v = w^3 c$$
{% endraw %}

#### TNG
For Star Trek: The Next Generation, the warp scale has changed.
<NAME> stated that he wanted to avoid the ever-increasing warp factors used in the original series
to force added tension to the story, and so imposed the limit of warp 10 as infinite speed.

Scale change occurred in 2312.
Warp factors were established to be based upon the amount of power required to transition from one warp plateau to another.
For example, the power to initially get to warp factor 1 was much more than the power required to maintain it;
likewise warp 2, 3, 4, and so on.
Those transitional power points rather than observed speed were then assigned the integer warp factors.

{% raw %}
$$
v = w^{ \frac{10}{3} + f(w)} c, \\
f(w) =
\begin{cases}
  0,                      & 0 \leqslant w \leqslant 9.0 \\
  -0.5 \log_{10}(10 - w), & 9.0 < w \leqslant 10.0 \\

\end{cases}
$$
{% endraw %}


<script>
  function isCheck(name) {
      return document.querySelector('input[name="' + name + '"]:checked');
  }

  function cal() {
    var w = document.getElementById("warp").value;
    var d = document.getElementById("distance").value;
    var v;

    if (isCheck('version').value === "TOS") {
      v = Math.pow(w, 3);
    } else { // TNG
      if (w>=0 && w<=9)
        v = Math.pow(w, 10 / 3);
      if (w > 9 && w < 10)
        v = Math.pow(w, 10 / 3 + -0.5 * Math.log10(10 - w));
      else if (w == 10)
        v = Infinity;
      else if (w > 10)
      {
        document.getElementById("warp").value = 10;
        alert("Maximal warp factor for TNG series is 10, it's infinite velocity.\
        \nA vessel traveling at warp 10 occupied all points in the universe simultaneously.")
        v = Infinity;
      }

    }

    var t = d / v;
    var t1 = 4.3 / v;
    var t2 = 100000 / v;
    var t3 = 2000000 / v;
    var t_oc = 75000 / v;
    var t_pl = 5.281E-4 * 365 * 24 / v;

    var measure = "years";
    var measure1 = "years";
    var measure2 = "years";
    var measure3 = "years";
    var measure_oc = "years";
    var measure_pl = "hours";
    var speed_of_light = "c";

    if (v == Infinity)
      speed_of_light = "";
    else
      speed_of_light = "c";

    if (t < 0.5) {
      measure = "days";
      t *= 365;
    }

    if (t1 < 0.5) {
      measure1 = "days";
      t1 *= 365;
    }

    if (t2 < 0.5) {
      measure2 = "days";
      t2 *= 365;
    }

    if (t3 < 0.5) {
      measure3 = "days";
      t3 *= 365;
    }

    if (t_oc < 0.5) {
      measure_oc = "days";
      t_oc *= 365;
    }

    if (t_pl < 0.5) {
      measure_pl = "minutes";
      t_pl *= 60;
    }

    if (t_pl < 0.5) {
      measure_pl = "seconds";
      t_pl *= 60;
    }

    document.getElementById("velocity").value = +v.toFixed(2);
    document.getElementById("time").value     = +t.toFixed(2);
    document.getElementById("time1").value    = +t1.toFixed(2);
    document.getElementById("time2").value    = +t2.toFixed(2);
    document.getElementById("time3").value    = +t3.toFixed(2);
    document.getElementById("time_oc").value    = +t_oc.toFixed(2);
    document.getElementById("time_pl").value    = +t_pl.toFixed(2);

    document.getElementById("speed_of_light").innerHTML = speed_of_light;
    document.getElementById("measure").innerHTML = measure;
    document.getElementById("measure1").innerHTML = measure1;
    document.getElementById("measure2").innerHTML = measure2;
    document.getElementById("measure3").innerHTML = measure3;
    document.getElementById("measure_oc").innerHTML = measure_oc;
    document.getElementById("measure_pl").innerHTML = measure_pl;

  }

</script>
<file_sep>/_collection/work-schedule.md
---
layout: post
title: Work Schedule

post_on_sidebar: true
date: 2016-09-27

tag:
  - qt
  - С++
  - календарь

category:
  - projects

comments: true

summary: "<a class=lightbox-image-link-left href='/images/workschedule-win10-en.png' data-lightbox='workschedule' title=''><img class='lightbox-image' style= 'width: 10rem;' src='/images/workschedule-month-en.jpg' alt='workschedule-month'></a> The app is useful for people with a rotating schedule, like bakery workers, nurses, caretakers, etc. Enter your schedule cycle and the start date of the cycle, and the app will display a calendar with your shifts for the whole year, it supports english, belarusian and russian languages."

#lightbox2:
imgfolder: /images/
images:
  - name: workschedule-win10-en.png
    text: Win10 workSchedule

  - name: workschedule-be.png
    text: Belarusian WorkSchedule

  - name: workschedule-ru.png
    text: Russian WorkSchedule

  - name: workschedule-en.png
    text: English WorkSchedule


---

**Work Schedule** is software for creating your own rotating shift calendar.

The app is useful for people with a rotating schedule, like bakery workers, nurses, caretakers, etc. Enter your schedule cycle and a start date of a cycle, and the app will display a calendar with your shifts for the whole year. There are customizable display setting: marking shifts by color, letters or images. It also supports English, Belarusian and Russian languages. You can easily create your own calendar, save it or print it.

<br>

### Download WorkSchedule for Windows (portable)
See [Github Releases Page](https://github.com/yalov/work-schedule/releases).

<br>
Screenshots:

{%include lightbox.html height='7rem'%}

<!-- include lightbox_text.html image="image-1.jpg" -->

You can play a little with icons (actually little images) in `{Work Schedule}/shifts/` folder. Images `d.png`, `n.png`, `r.png`,`h.png` are used for day, night, rest, holiday respectively.

Languages:
 * English
 * Russian
 * Belarusian

 Translation to other languages are welcome. [How to.]({% post_url 2018-05-02-qt-linguist %})

<br>

<small><small>
[<img class='lightbox-image-right' style= 'width: 4rem;' src='/images/gpl3.svg' alt='GPLv3'>](https://www.gnu.org/licenses/gpl-3.0.html)
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License
as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
</small></small>
<small><small>
[<img class='lightbox-image-right' style= 'width: 4rem;' src='/images/softpedia100free.png' alt='Softpedia Labs 100% Free Mark'>](http://www.softpedia.com/get/Desktop-Enhancements/Clocks-Time-Management/Work-Schedule.shtml#status)
This product was tested in the Softpedia Labs. Softpedia [guarantees](http://www.softpedia.com/get/Desktop-Enhancements/Clocks-Time-Management/Work-Schedule.shtml#status)
that Work Schedule is 100% Free, which means it does not contain any form of malware, including but not limited to: spyware, viruses, trojans and backdoors.
This software product was tested thoroughly and was found absolutely clean; therefore, it can be installed with no concern by any computer user.
</small></small>
<file_sep>/_includes/all_posts.html
{%- assign all_posts =  '' | split: ',' -%}

{%- for collection in site.collections -%}
  {%- for post in collection.docs -%}
    {%- assign all_posts = all_posts | push: post -%}
  {%- endfor -%}
{%- endfor -%}

{%- assign all_posts = all_posts | sort: 'date' | reverse -%}
