Почему в R надо использовать оператор присваивания <-, а не =

Upon reading a very heavily opinionated article on the use of forward pipes, I could barely contain my righteous indignation—righteous as long as my hatred for the tidyverse and its dumbed-down bloated commands does not subside. That’s a topic for another post (ggplot2 with smoothing? hiding all hyper-parameters under the hood?) in the vein of ‘simple black box with one “Compute” button versus understanding and being able to implement any step of the computation’, but for now, let’s make an equally heavily opinionated counterargument for John Mount’s Win-Vector blog post.

The section that buggers me is ‘Assignment in R’. Let’s not forget that the entire point of the post is defending the right of forward assignment to exist within the context of %>%-like pipes from magrittr, which by itself is a package to be avoided that turns one’s workflow into a bloody bash pipeline which obscures dangerous intermediate type casting and is just slower. But enough of that, I deeply respect Hadley Wickham’s professionalism and aspiration to popularise R; I completely disagree with his approach of turning R into an alien-looking language, though.

Original punctuation preserved.

R‘s preferred assignment operator is “<-“. This is in the popular style guides. <...> This has some advantages, and is the public style. Also “=” is much harder to use inside R’s base::quote method than “<-“, so there are still cases where the semantics of “=” and “<-” are different (though I think they all involve the distinction trying specify argument binding versus assignment while inside a function call’s argument list).

That basically says it. In computer science, there is assignment, there is comparison, and there is argument binding. I strongly suspect that ‘=’ was kept for the purposes of assignment out of user-friendliness considerations.

I have previously written that given the choice I prefer “=” for assignment. It has the advantages that:

• “<-” is has a different meaning to many readers. In R “x<-3” assigns the value 3 to a variable named x, in other popular programming languages (where new R users may be coming from) “x<-3” denotes comparing x to -3.

The word ‘pain’ has a different meaning to an English speaker (an unpleasant physical sensation) and a French speaker (food made of flower, water, and yeast).

First of all, this is not proper coding style. One should not use scriptio continua: this practice had died out by the XIVth century. Mathematical operators should have spaces around them, and TeX, world’s best typesetting system, puts a special emphasis on how many varieties of spaces exists in mathematical typesetting: relational operators, binary operators, named operators etc. For now, let’s just use simple spaces around operators to improve legibility or at least use them to distinguish outermost and innermost operators: x + 2*y + 3*z looks beautiful and legible. x<-3 does not. x <- 3 does. x < -3 does, and has a different meaning.

• “=” is a single character, so it can not be ruined by the insertion of a space. “x< -3” does not assign the value 3 to a variable named x, it compares x to -3. I would not mind so much if “x< -3” was a syntax error (as “x< =3” is), but it is valid code that quietly does something very different than “x<-3“. If you have taught R enough you have experience helping students undo this bug.

I agree that in general, basic operations should not be ruined by spaces, but the same can be said about trigraphs in C preprocessor. Even the simplest comment symbol // breaks in almost all languages if a space is inserted in between (/ / ). Some symbol combinations are not supposed to be broken with spaces, and this is true for almost all programming languages.

• Also “=” can not be broken up by line-splitting.

John, your line-splitting algorithm is broken. Apply soft wrapping to the damaged area or submit a fix to the highlighter you are using.

• “=” is on the keyboard (as “←” was when arrow like assignments were themselves introduced).

On Linux, if one enables ‘Extra typographic characters’ in X options, they will obtain the same (AltGr + 0). [cough-cough APL cough-cough] If R supported Unicode commands, I would wholeheartedly advocate the use of a single-character assignment operator. Why isn’t John complaining about the less-or-equal-to operator <= and suggesting replacing it with ‘≤’, adding the latter onto the keyboard, though? Why not map all digraphs into equivalent single characters? 2 < = 3 throws an error as well!

• “=” is easier to paste into HTML as it does not require escape coding such as “<“.

So is ‘≤’, but somehow John is panning <- exclusively, not <=.

• It is the symbol used in most every other popular current programming language for assignment.

Most other popular current programming languages cannot do in one line of code the things R can. Applied statisticians should not hard-code matrix inversion in C++. There are different language types, different paradigms, and different built-ins. Once I suggested the shortest solution for the Code Golf question about implementing Kolmogorov—Smirnov test. The ‘every other’ argument does not apply here. Most every other popular current programming language has clunkier implementations of R’s one-liners.

• There is an asymmetric cost of mistakes. Typing “=” when you meant “<-” is usually harmless. Typing “<-” in a context where “=” was needed is not caught by R and fairly bad (please see here for details). So if you get out of the habit of using “<-” one type of bug become less likely.

Know thy tools. The cost of using an electric hammer drill on wood is not the same as the cost of using an ordinary drill on hard concrete. There are cases where one character is put by force of habit can break things. E. g., if one, being spoiled by data.table, wants to select the second column of a matrix a <- matrix(1:9, 3); a[2], they will get 2 instead of 4 5 6 yielded by a[,2]. Same goes for multi-dimensional arrays. Yet John does not complain about those kinds of mistakes.

• There is a cognitive benefit in reducing the number of low-value distinctions you need to maintain, especially for beginners. If we think of the mind as having “seven plus or minus two” slots for current information do we really want to waste 11 to 20 percent of our students’ attention on something like this when teaching? The beginner does not need to worry over the differences between value assignment and argument binding at all times. In fact it is a useful generalization to think of argument binding as a safe transient value assignment.

Appealing to outdated psychological theories is not a good argument to begin with. I am sure John and many other people knows far more than 7 programming languages and more than 7 commands in every programming language. This rule is one of those old wives’ tales that needs to die as quickly as possible (‘5-second rule’, ‘hairy palms’ etc.). Someone has already generalised programming to such Turing-complete programming languages as Вrаinfuсk and Whitespace in as few distinct commands as possible, but most people did not like it.

To sum it up, dear John, one should not hammer in nails with a microscope. You did a great distinction between <-, ==, and =, and you should not cherry-pick some digraphs and argue against their use.

How to set up a Linux computer and printers at the University of Luxembourg

NB: This is not the official guide. This is a summary of my Linux adventures at the University of Luxembourg. I am not affiliated with the IT department of Uni.LU. For actual help, please create tickets in the service portal; I am not offering advice!

First of all, I would like to thank the IT department of the University of Luxembourg for not upgrading to Windows 10. I lack words with which to express my vitriol and execration for Windows 8, but this is a topic for another post. However, not fully happy with Windows 7, I decided to create a dual-boot system (Windows 7 / Linux). The only thing remaining was partitioning the hard drive. In order to shrink the volume, Windows obliged me to do a Disk Check using CHKDSK. And this is where it went downhill. After a reboot, CHKDISK spent the entire night restoring chunks of god-knows-what, then rebooted the computer, started the Start-Up Recovery (who was asking for those options anyway?!), tried to fix the boot loader, froze and... broke the Windows boot loader. Enough is enough.

Margaret Thatcher Enough Is Enough

First of all, I made sure that Linux has all the necessary built-in drivers for Ethernet and the Internet connection is fine. For that purpose I downloaded Linux Mint 19 64 bit with Cinnamon, wrote it onto a USB stick on my Mint 19 laptop (with USB Image Writer, mintstick), and booted from the USB, and verified that the Internet does not require any extra configuration (VPN, PPPoE etc.) and works out of the box. I made a backup of all my documents, asked the IT department to flush the computer completely, and then, shrunk the C:\ drive by 200 GB (100 GB for /, 96 GB for /home, 4 GB for swap).

I decided to go with Arch Linux because I did not want any unnecessary software or dæmons running in the background. However, I cheated a bit and installed Linux Mint first (partitioning the hard drive with the graphical tool in Mint installer), and then, used /dev/sda5 and /dev/sda6 as / and /home respectively in Arch Linux installer. The only unexpected thing was the necessity to launch dhcpcd manually. After that, I got the core packages, installed Xorg, LightDM, and then, Cinnamon.

Linux printing on Uni.Lu computers

Since the University of Luxembourg is using Windows print servers (damn!), one must use CUPS and SAMBA in order to send jobs. They recommend installing system-config-printer as the GUI and then going through the following steps:

  1. System settingsPrinters or Print SettingsAddNetwork PrinterWindows Printer via SAMBA.
  2. SMB Printer: smb://PRINTSERVER.uni.lux/PRINTERNAME.
    Example: smb://woodstock.uni.lux/CL-ENTE
  3. Authentication details (do not press Verify):
    Username: uni.lux\FIRSTNAME.LASTNAME
    Password: your UNI.LU password
  4. Press Forward, select the printer model* and find the generic PCL6 driver (recommended in general) and press Apply.
  5. Do not print a test page since the proper paper size is still not set.
  6. Right-click on the printer, select Properties, go to Printer options and select A4 as the paper size.

* If the printer model is not in the list of available models, make sure that the driver is installed. If the maker is Canon, you can find Canon DEB/RPM drivers on the official Canon support website; Arch Linux has cndrvcups-lb in AUR, and for a other Linux distributions, you need to get the PPD file for the printer model you are going to install. Many common printer models are supported by the Gutenprint driver collection (cupsys-driver-gutenprint in Debian, gutenprint in Arch).

If, when printing for the first time, the user is prompted for their name, the ID must be in the form of uni.lux\firstname.lastname.

If you are located in Belval, JFK or Limpertsberg, the print server is woodstock. If you are located in Kirchberg or Weicker, the print server is baloo.

Remark: you can have access to Canon printers for all sites located mainly in the corridors using the print server ares. In this case, you can choose: smb://ares.uni.lux/WIN_CANON_BLACK, smb://ares.uni.lux/WIN_CANON_COLOR, or smb://ares.uni.lux/WIN_CANON_DUPLEX. Then, on the Canon printer itself, log on and select the file to print.

If you do not have the system-config-printer package installed in your Linux distribution, make sure that the packages cups and samba iares installed and the CUPS and SAMBA dæmons are running (most likely to be named cups and smbd in Debian-based distros, org.cups.cupsd.service and smb.service in Arch-based etc.). Then, you can add the printer via the CUPS local web interface (the true Linux way!):

  1. Go to
  2. Click Add Printer and, if prompted, enter root as the username and your root password. (If you input the wrong credentials and get the Forbidden error, just reboot your computer.)
  3. Pick Other Network PrintersWindows Printer via SAMBA.
  4. In the Connection field, enter smb://uni.lux\FIRSTNAME.LASTNAME:PASSWORD@PRINTSERVER.uni.lux/PRINTERNAME.
    Example: smb://uni.lux\rupert.hastings:password123@woodstock.uni.lux/CL-ENTE
  5. Optionally, give the printer a user-friendly name and a description.
  6. Select the manufacturer and the model. (If the printer is not in the list, see the footnote above.)
  7. If extra accessories are installed on the printer (puncher, extra paper trays etc.), select them in the next step.

Email client

The University of Luxembourg is using IMAP for incoming mail and SMTP for outcoming. Here is a list of parameters you have to supply to your client in order to be able to receive and send messages. So far, I managed to configure Mozilla Thunderbird, Mutt, and NeoMutt.


  • IMAP server: imaps://imap4-3.uni.lu:993
  • Connection security: SSL/TLS
  • Default folder: INBOX


  • SMTP user: same as IMAP user
  • SMTP password: same as IMAP password
  • SMTP server: smtp-3.uni.lu:587
  • SSL force TLS: yes

Server space on Atlas

  1. Make sure your workgroup is WORKGROUP (if necessary, put workgroup = WORKGROUP in /etc/samba/smb.conf). Next, make sure that gvfs-backends (Debian) gvfs-smb (Arch) is installed.
  2. Open your favourite file browser (Nautilus, Nemo etc.) and go to the following address in the address bar: smb://atlas/users/FIRSTNAME.LASTNAME.
  3. Example: smb://atlas/users/rupert.hastings.
  4. When prompted, enter your credentials. Username: FIRSTNAME.LASTNAME. Domain: uni.lux. Password: your UNI.LU password.

To be perfectly honest, I have not been able to open any folder other than the root (atlas)!

Finally, after looking at the Quick Start Guide provided by the IT staff, I would suggest ignoring some items, like:

  • Microsoft Office 365 and Dreamspark. Who needs it? Just use LibreOffice. Do not use MS Word. Use LibreOffice Writer for short documents and LaTeX for long ones.
  • Eduroam configuration. If you have a wired connection, just use it. Otherwise, go to https://cat.eduroam.org and download the necessary SH script.
  • VPN. https://vpn.uni.lu.

Определите звук по спектральному изображению

Ниже приводится спектрограмма звука падающей бомбы.

Falling bomb sound spectral display

Единственная найденная за короткое время действительная аудиозапись падающей бомбы оказалась очень зашумлённой (видимо, на войне была сделана), однако в целом кажется, что это свистит, направляясь к земле, настоящий снаряд. Желающие даже могут прослушать аудиозапись.

Однако не надо устраивать кровопролитные войны, чтобы записать ценою тонн керосина, стали и торпекса звук падающего снаряда. Современный обыватель любого населённого пункта России может за один вечер записать звук, почти полностью идентичный звуку падающей бомбы. Сегодняшние «бомбовые» звуки были не идеально похожи на те, что получаются в другие разы, но отличие нижеприведённых звуков от военной звукозаписи снаряда может быть объяснено не иначе как законами подлости, Мёрфи и т. д. Ответьте на вопрос и попробуйте записать такой же звук, зная источник оного.

Identify the sound by its spectral display

«Я Куба!»

Identify the sound by its spectral display

Задание на пятёрку: определите, взглянув на спектрограммы выше, источник звука (смоделируйте в голове звуковую волну).

Так ли строг запрет на разрядку строчных?

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

Не знаю, кто первый начал замечать, что при увеличении расстояний между маленькими буквами первые начинают напоминать пробелы, но факт остаётся фактом: рядом со строчными буквами мы привыкли видеть или вплотную написанную другую букву, или пробел, или тонкий пробел.

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

Lowercase letters spaced out

Да, это разрядка строчных! Допустимо использовать разрядку строчных до 0,05 em при вынужденном наборе очень узких колонок текста для уменьшения количества слишком широких пробелов и переносов, так как даже лучшие алгоритмы переноса не всегда могут найти подходящее место для разрыва строки. Даже pdfLaTeX+microtype, да. В самых трудных местах можно ввести единовременную разрядку проблемного слова до 0,1 em.

Как избавиться от подчёркивания изображения-ссылки в CSS

Ура, поздравьте меня! Начал работу сайт http://kostyrka.ru, первый работающий раздел — это блог. Данный пост посвящён удалению некоторых свойств ссылок у изображений с границами.

В CSS, как известно, есть множество способов оформить изображение.

Можно добавить рамку к изображению:

img {
	border: thin solid black;

Можно отрегулировать внешние отступы (margins) и внутренние отступы (padding):

img {
	border: thin solid black;
	padding: 3px;
	margins: 3px;

Можно даже назначить данному изображению изображение заднего плана, которое замостит фон (бывает полезным при работе с графикой в формате PNG с альфа-каналом):

img {
	background: url(images/grunge.png) repeat 0 0;
	border: thin solid black;
	padding: 3px;
	margins: 3px;

Можно сделать изображение ссылкой на другое изображение, как это часто бывает с предварительным просмотром:

<a title="Крупное фото" href="http://site.ru/foto/large.png">
<img src="http://site.ru/foto/preview.png" alt="Предварительный просмотр" />

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

a:link, a:visited {
	border-bottom: 1px solid;
	border-color: #e0b2e0;
	text-decoration: underline;
	color: red;
a:hover, a:active {
	border-bottom: 3px solid red;
	text-decoration: none;
	color: maroon;

К сожалению, весь груз свойств, который мы понавесили на текстовые ссылки, применяется и к ссылкам-изображениям! И у них появляется гадкое и несвойственное изображениям подчёркивание. Сам автор этого блога боролся с расползшимися по всем рамкам линиям. Первое, что приходит в голову, — написать так:

a img {
	text-decoration: none;
	border: 0 none;

На что действует эта корректива — на якорь (a) или изображение (img)? На изображение. Данный код убирает с изображения собственную рамку, а не ссылку. Дословно это надо понимать так: всем изображениям, которые могли бы иметь собственное обрамление (border), являясь ссылками, обрамление снять. Текстовое же форматирование (подчёркивание) здесь вообще нигде не присутствует, поскольку оно не применяется к изображению напрямую (в самом деле, попробуйте себе представить жирные изображения, курсивные изображения, изображения, набранные из малых прописных пикселей с разрядкой между символами, — изображения с применёнными к ним текстовыми декларациями). Поэтому, вместо попыток найти и обезвредить подчёркивание ссылок и создание границ, нам нужно модифицировать элементы-якори (ссылки), содержащие изображения. Это разумно — обращаться к внешнему контейнеру. Если содержимое ссылки <a> будет подчёркиваться, то этой директиве начхать на то, что мы творим внутри неё со стилями вложенных объектов. Она просто возьмёт и подчеркнёт.

Жаль, что CSS не поддерживает создания селекторов по критериям (qualified selectors). Если бы было наоборот, то мы бы могли выцепить целевое изображение следующим методом:

a < img { border: none; }

Томимые собственными сладкими грёзами об этом, мы должны искать обходной путь.

Первый путь решения проблемы — это воспользоваться присвоением особого «неподчёркнутого» класса всем изображениям, являющимся ссылками:

a.image-border {
	text-decoration: none;
	border: 0 none;

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

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

a[rel="nofollow"] { 
	background: yellow;
img[alt="arrow"] {
	border: green;
pre[class="perl"] {
	color: red;

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

Элемент содержит указанный атрибут:


У элемента атрибут принимает конкретное значение:


У элемента атрибут содержит в значении указанный фрагмент:


У элемента значение атрибута начинается с указанного фрагмента:


У элемента значение атрибута кончается указанным фрагментом:


У элемента значение атрибута содержит строковое выражение фрагментом:


Подобный функционал проверки соответствия шаблону даён веб-мастеру возможность целиться только в те якори, которые обращаются к определённым типам файлов. Поэтому мы будем использовать синтаксис [атрибут$="значение"] и выбирать только те якори, которые ведут на изображения любого типа. Например, чтобы охватить вниманием ряд мелких иконок предварительного просмотра изображений, которые потом открываются полноразмерными PNG, радивый веб-мастер напишет:

a[href$=png] {
	text-decoration: none;
	border: 0 none;

Это приведёт к тому, что у них у всех исчезнут границы и подчёркивания от ссылки. Все ссылки вида


утратят текстовые закидоны и лишатся подчёркивающих линий. Мы можем выбирать столько типов изображений, сколько нам угодно. Ограничимся якорями, адресующимся к JPG, PNG и GIF:

a[href$=jpg], a[href$=jpeg], a[href$=jpe], a[href$=png], a[href$=gif] {
	text-decoration: none;
	border: 0 none;

Это лучший способ убрать подчёркивание у изображений-ссылок, не копаясь в классах изображения. К сожалению, не всё проходит так гладко, как хотелось бы. Существуют две категории вещей, омрачающих наше ликование:

  1. Изображения, которые ссылаются не на выбранные нами типы файлов.
  2. Текстовые ссылки, ссылающиеся на выбранные нами типы файлов.

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

Во втором случае текстовые ссылки, ведущие на картинки, утратят подчёркивание. Наша ищейка ставит знак равенства между всеми типами контейнеров, чьи атрибуты соответствуют её критериям. Поэтому все текстовые ссылки переймут стиль, который предписывает данный поиск.

И тут можно применить небольшие латки для образовавшихся прорех. Можно изменить критерии отбора и подвергнуть обесподчёркиванию (или расподчёркиванию?) объекты с другими фрагментами кода в параметрах. Можно отловить только те изображения, которые ведут на определённый сайт или в определённый раздел сайта (содержат определённую папку в пути):

a[href*=domain] {
	text-decoration: none;
	border: 0 none;
a[href*=directory] {
	text-decoration: none;
	border: 0 none;

Данный приём снимет ненужное форматирование с любого объекта-ссылки, ведущего в определённое место сайта.

Надеюсь, указанные в данной статье приёмы предоставят дизайнерам возможности более аккуратного контроля над применением стилей, особенно над удаленим свойств якоря с объекта-ссылки.

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

Computer Modern font mismatch

Does someone think LaTeX is cool only due to its aristocratic-looking font? Decided to fool someone by just installing Computer Modern Unicode (to be obtained here) font and making up a dummy in Photoshop, or worse, MS Word? Ahem, I haven’t had new scalps for ages; it’s time to renew my collection. Mark my words, using CMU font does not provide typesetting quality achieved by TeX system.

Typing a text with Computer Modern in Photoshop yields different kerning spaces and accent angles. Can you tell an artificial image from native LaTeX output? Two examples:

Latex and Photoshop compare

Latex and Photoshop compare 2

Correct answers: LaTeX, Photoshop, Photoshop, LaTeX. Did you notice that the angle between the artifical-letter accent and horizontal line is too acute?

Finally, some grand comparison via superimposition. Original LaTeX output is blue, Photoshop result is pinky, correct juxtaposition is green.

latex only

ps only

latex vs photoshop

Use no artificial substitutes for this wonderful typesetting engine.

Печальное пророчество

В ближайшие десять лет появится такой экзотический способ заработка (отчасти похожий на киберсквоттинг), как покупка... ячеек в кодовой таблице Юникода (UTF-8). Крупные корпорации (Microsoft, Google, Walmart, Dell, Toyota) найдут способ выложить огромную сумму, чтобы добиться резервирования определённого символа. Почему бы, в самом деле, не начать оккупацию private use planes? Оккупировать их своими глобалистскими логотипами? Написать в них то, что хочет CEO компании?

Увеличение численности скотов приводит к снижению среднего показателя

О дьявол, когда уже мне будет дозволено бесплатно отключить в WordPress эту мерзкую функцию wptexturize? Уже по горло сыт заменой трёх точек на унизительный символ, созданный для экономии байт. Кроме того, в строковых выражениях мне не нужны исправленные кавычки (в программировании используются прямые). Я достаточно пряморукий, чтобы с клавиатуры набрать и длинное тире, и нужный вид кавычек. Такое ощущение, что мир настолько разбух от безруких слизняков, что специально для них включается уравниватель, который чуть приподнимает их безграмотные сообщеньица, зато опускает шедевры, набираемые со знанием дела.

Стоит ли говорить, что пишу я в HTML-редакторе, который мне никак не даёт выровнять таблицу по центру поста? Ни тэг <center>, ни параметр align="center" — ничто не в силах мне помочь. Я пишу в блог на движке, которым управляют извращенцы, палачи и смертельно опасные доктора.

UPDATE [6 августа 2012]: после того как я взял управление блогом в свои руки, настроил плагины, отключил текстуризацию (при помощи TRUEedit) и вручную задал чёрный цвет рендеринга в WP LaTeX, дышать стало легче.

Драма перехода с Mozilla на Opera

Мне надоело, что Firefox всё время отъедает слишком много памяти, и аз решил перейти на менее раздутый браузер Opera. Огнелис постоянно глючил, выдавал запросы на установку его в качестве браузера по умолчанию, обновлялся, хотел перезапуститься, когда у меня было открыто двадцать нужных вкладок... Открыв «Программы и компоненты» и узрев в оных целых два установленных «Файерфокса» (10.0.1 и 10.0.2), я понял, что был прав, отважившись на такой поступок, и запустил деинсталлятор. Открываю «Оперу» в сборке «Яндекса» — выскакивает экспресс-панель. И что вы думаете? С огромной кнопки на панели на меня укоризненно таращится вот этот зверь:

Лежать! Бояться!

С детства я обожал лисиц. Даже фундаментальную теорию специально создал для них. Коллекционировал лис. Плюшевые, стеклянные — больше 150 экземпляров. При переезде я оставил их у знакомого на антресоли, чтобы после обретения собственного жилья расставить всех на полке. Но рыжемордые, видимо, не терпят такого предательства с моей стороны и потому так тычутся своими острыми носиками в меня и спрашивают: «О наш Творец, почто ты нас оставляешь?»

P.S. Сам установочный дистрибутив для Opera у меня из «лисы» скачивался минут десять, хотя остальные сайты не думали тормозить.

Как избавиться от неиграющей ноты в Sibelius 7

Решение проблемы с нотой: если залиговать лигой tie (для одинаковых нот) две последовательные ноты из разных голосов, то не удивляйтесь, если в следующем такте или группе нот что-то не сыграется. Привожу решение для таких случаев:

  1. Заглушите обе ноты двух голосов (в «инспекторе» поскидывайте все галки для «play on pass 1–8»). Пусть они рисуются, но не более.
  2. Добавьте третьим (или четвёртым) голосом эту же ноту нужной длины с применением tie, как того и требовалось.
  3. Спрячьте только что созданные звучащие ноты (Ctrl+H), а также порождённые ими паузы.

Таким образом, рисоваться у вас будет одно, а звучать будет по длительности то же, но спрятанное другое. Если непонятно, смотрите скриншот.

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

В шестой версии была временами страшная проблема: интерфейс нормальный, а потом с какого-то момента меню все исчезают, буквы на приветственном экране исчезают, при попытке интуитивно потыкаться с альтом начинаются горизонтальные полосы пустого поля. Переустановка программы не помогает, помогает переустановка винды. Теперь вот что: раньше ставил Windows 7 NoSP, потом прокачивал до первого уровня обновлениями. Теперь переустановил после тяжёлого сбоя сразу на Win7 SP1, и тут началось: сначала MiKTeX’у русские буквы в пути к пользовательской папке не понравились, а потом и «Сибелиус 6» сразу же начал гадить артефактами и отказываться отображать элементы окна программы (при этом ноты нормально видно, редактировать можно, но без меню это по меньшей мере садомазохистично). Скачал Sibelius 7, сейчас поставлю, поработаю, поделюсь впечатлениями.

Также делюсь своим мнением. Неужели это случилось?! Интерфейс а-ля офис 2007/2010? Отрадно и удобно, много всего, тренирует память. Перетаскиваться инструментом «рука» полотно стало хуже — такое ощущение, что играю в DooM 3 на компьютере с 256 МБ оперативки и NVidia GeForce 440 MX (о, это было время, но ощущения от FPS сейчас примерно те же). Реальное воспроизведение просто убило (эй, там! У меня 6 ГБ RAM и четырёхъядерный Q9400 на полноценном настольном компе), потому что тормоза жуткие, звук дёргается. При попытке сгенерировать звуковой файл жалуется, свистит, бздит и говорит, что «в конфигурации нет виртуальных инструментов». WAV ему сложно, видите ли, сгенерировать.

Мораль: у людей сейчас стоит в среднем 4 ГБ оперативки, а это, как известно, технически требует 64-разрядности (иначе система будет максимально будет видеть и использовать чуть больше двух с половиной, хоть уставься). 64-разрядная XP — это что-то. Это мрак (просто поздний плод). Нормально x64 реализовано только в Vista и 7. XP пусть пользуются секретарши, у которых вистовский или семёрочный «Солитёр» не тянет встроенный графчипсет, но мы-то с вами прогрессивные люди, перед которыми стоит задача получить аккуратные и красивые ноты. Чем аккуратнее и красивее, тем больше ресурсов системы (и в т. ч. оперативки) требуется для вывода.