Category: it

Category was added automatically. Read all entries about "it".

old rover

Про домен

Продлил ещё на год регистрацию домена axshavan.ru. Там нет ничего интересного, более того, там нет ничего вообще, только переадресация на blog.axshavan.cz. Думается мне, что я сделал это в последний раз. И то, может быть, я не стал бы продлевать и сейчас, но там на счету моего аккаунта в ру-центре остались деньги, которые больше девать было просто некуда. Я уверен, что все, кроме меня, вдруг узнали, что такое доменное имя было зарегистрировано, только сейчас, когда я написал, что оно ещё есть, так что я даже не знаю, зачем я пишу этот пост. У меня даже нет картинкочки никакой, чтоб тут её привесить.

Оригинал записи http://blog.axshavan.cz/2016/09/axshavanru.html
  • Current Music
    Мастер - По ту сторону сна (часть 1)
  • Tags
old rover

Как мы переезжали на PHP7

Ответы на два вопроса из поста про Амстердам:
- "нет-нет" и "нет-да" на почтовых ящиках это типа "не совать газеты" и "совать/не совать спам".
- крюк под крышей нужен для подъёма мебели в квартиру. Места в Амстрдаме не очень много, так что его экономят. Ну, по крайней мере, раньше экономили, до введения каких-то строительных норм, которые запрещают делать лестницы с углом подъёма в 60 градусов и подъезды, где с трудом расходятся два человека.

Так что все комментаторы были совершенно правы.

Теперь про переезд на PHP 7.0 с версии 5.6. У нас есть проект с небольшой посещаемостью, около 1000 посещений в минуту. Тем не менее, там работают шесть серверов, хотя и один справился бы легко. Это надо, чтоб нормально работал кластер редиса. Ну и иногда заходят боты, начинают индексировать сайт, там лучше, когда сервер всё же не один нагрузку принимает.

Ой, кластер редиса это тоже такая жопа. Экономия памяти, конечно, существенная - если раньше каждый сервер хранил у себя свою копию данных в памяти, то теперь она размазана по кластеру, по трём мастерам и трём слейвам. Это означает, что сервера постоянно дёргают друг друга, если у себя не находят нужный ключ. А ключи бывают по мегабайту у нас - справочник всех свойств по всем категориям, например. Чтоб не прогибалась сеть, мы всё равно используем локальное хранилище для этих монструозных ключей. На PHP 5.6 был xcache. Но в седьмом пхп икскэша нет.

И с самим редисом была засада ещё та. Мы использовали стандартное пекловское расширение PhpRedis, которое предоставляет классы Redis и RedisCluster. Версия для пхп 7, как выяснилось, работает нестабильно. Примерно 0,2% всех посещений вызывают ошибку, причём это fpm падает в segfault, отдавая 502. Выкинули на хер, я заменил на PRedis. Это pure-PHP код для работы с редисом через сокеты. Нареканий нет.

Проблемы были с локальным кэшированием. Так как икскэша нет, начали искать альтернативы. Пробовали мемкэш, собрали библиотеку для работы с ним в пхп 7 руками. Не покатило, падает, надёжности никакой. Я уже собирался использовать shared memory, но потом решили, что будет ещё один локальный редис на каждом сервере. Так и живём с кучей редисов теперь.

Итого: насколько выросла производительность, мне неизвестно. По ощущениям, нинасколько, я не заметил никакого прироста. Надёжность работы, напротив, снизилась, уменьшилась стабильность. Зато сколько времени и сил угробили на переезд и все эти эксперименты! На фиг обновлялись, ещё бы годик пожили на 5.6, ничего бы не случилось.

Оригинал записи http://blog.axshavan.cz/2016/08/php7.html
old rover

impossible bad format char

В Ubuntu 15.10 попала по недосмотру мантейнеров бажная версия пакета python-mysqldb (это которая import MySQLdb), 1.3.4-2. При попытке эскейпить строку выдаёт:
Type Error: must be impossible<bad format char>, not str
Не знаю, что, никто не пользуется этой библиотекой, что ли, никто не смог сообразить в течение года с тех пор, как был был обнаружен, что версия этой библиотеки не подходит для использования? А, ну да, наверное, все пользуются SQL Alchemy, которая генерирует белиберду и бредятину и годится только для засирания слоулогов, зато очень python-style (настолько через жопу, что даже чувствуется в этом систематизм, упорядоченность и определённая красота). Как починить:
# aptitude install libmysqlclient-dev && pip install --upgrade mysql-python


Оригинал записи http://blog.axshavan.cz/2016/02/impossible-bad-format-char.html
  • Current Mood
    gut
  • Tags
old rover

Ubuntu

Когда я купил себе, ещё в прошлом году, новый ноутбук без предустановленной операционной системы, первым делом вкатил туда Ubuntu 14.04 LTS. И вот недавно решил обновиться до последней версии дистрибутива. Ну, обновился, всё было хорошо. В случае с Убунту "хорошо" - это когда ничего хотя бы не ломается. Самая болезненная убунтовская тема - это переключение раскладок клавиатуры. Всё началось много лет назад, и, если покопаться на лаунчпаде, можно найти кучу связанных с этим багов, некоторые из которых могут быть открыты больше года.

На днях тут Убунту скачала себе новые обновления и стала просить пароль для обновления личной информации. Изменением личной информации считала даже смену раскладки клавиатуры. Вот сюрприз - как бы мне переключиться на раскладку, на которой я смогу ввести свой пароль? Точнее даже, сначала-то раскладка менялась, потом просила пароль. То есть с русского на английский я переключиться смог, а обратно уже дудки. Ругался разными нехорошими словами. Решил, что вечером поставлю Дебиан. Буду мучиться, устанавливая сраный проприетарный скайп, но там хотя бы такого маразма нет. Вечером пришли новые обновления для Убунту, безобразие с подтверждением каждого пука паролем убрали. Но осадочек остался. Если бы не богатая база драйверов и высокий уровень совместимости практически со всем популярным железом и прикладными проприетарными программами, я бы Убунту обходил за километр. Хуже винды!

Оигинал записи http://blog.axshavan.cz/2015/03/ubuntu.html
  • Current Mood
    krank
  • Tags
old rover

Скорость строк в кавычках в PHP

В среде похапешников ходят легенды о том, что строки, заключённые в одинарные кавычки, "быстрее", чем строки, заключённые в двойные кавычки, так как типа на строки с двойными кавычками делает стойку интерпретатор. Я решил провести эксперимент и написал простенький скриптик:
<?php
$time = microtime(true);
$a = array();
for($i = 0; $i < 1000000; $i++)
{
    $s = < тестовая строка >;
    $a[$i] = $s;
}
echo "Time: ".ceil(1000 * (microtime(true) - $time))
    ." msec\nMemory consumption: ".ceil(memory_get_usage(true) / 1024 / 1024)." Mbytes\n";

В качестве тестовой строки я подставлял то или иное выражение, и записывал, сколько миллисекунд выполнялся скрипт, и сколько памяти пожрал. Записывал я обычно выполнение третьего-четвёртого выполнения подряд, чтоб там успело всё просраться и закешироваться, если надо. Итак, вот результаты тестов на PHP 5.4:
'qwerty asd' - 272 msec, 261 MBytes
"qwerty asd" - 272 msec, 261 MBytes
'qwerty $ asd' - 273 msec, 261 MBytes
"qwerty $ asd" - 271 msec, 261 MBytes
'qwerty $i asd' - 271 msec, 261 MBytes
"qwerty $i asd" - 427 msec, 269 MBytes - ага, вот тут интерпретатор делает стойку и вкорячивает значение переменной в строку вместо её названия. То есть только в том случае, если в строке попадается знак доллара, после которого идут буквы, только тогда строка в двойных кавычках медленнее, и то по понятной причине. Во всех остальных случаях ничего подобного. Для сравнения вариант с конкатенацией:
"qwerty asd".$i - 362 msec, 269 MBytes
Ну и напоследок я сейчас разобью сердца некоторых похапашников. Извините, ребята.
sprintf('qwerty %i asd', $i) - 563 msec, 475 MBytes
sprintf('qwerty %s asd', $i) - 664 msec, 475 MBytes

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

Оригинал записи http://blog.axshavan.cz/2014/08/php-quoted-strings-speed.html
old rover

Поменять User-Agent в Deluge

Как поменять UserAgent в битторрент-клиенте Deluge?

Во-первых, надо сперва сказать, зачем это вообще делать. Некоторые трекеры не любят β и RC-версии и не позволяют ими пользоваться. А один мой знакомый трекер вообще взял да и забанил все версии Deluge после обнаружения там критический уязвимости. Или есть маргинальные трекеры, которые позволяют скачивать с них только определённым клиентам. Так что или поднимай wine или виртуальную машину, и ставь туда рекомендованный клиент, либо - подменяй юзерагент, чтоб твой битторрент-клиент выдавал себя за другого клиента.

Что такое юзерагент? Это строка, которую клиент отправляет на трекер, представляясь таким образом. У битторрент-клиентов юзерагент, как и у веб-браузеров, тоже есть. По этой строке трекер и идентифицирует клиента. Эвристические методы определения клиента по особенностям работы с протоколом неточные.

Описанный ниже метод вполне подходит для Linux, и для Windows, и для MacOS, и вообще для любой операционной системы, на которой работает Deluge. Этот битторрент-клиент написан на питоне, его исходники поставляются вместе с ним, так что главной проблемой будет просто их найти, чтоб внести соответствующие правки. Под линуксом это сделать наверняка сложнее, потому что они могут быть засунуты вообще хер знает куда, в зависимости от остроумия разработчиков и ментейнеров дистрибутива. Под виндой наверняка где-то есть папка C:/Program files/Deluge, где всё и хранится.

Так вот, нам нужен файл core.py. В моём дистрибутиве линукса (LMDE/Debian7) я нашёл в папке /usr/lib/python2.7/dist-packages/deluge/core симлинк на сам файл: /usr/share/pyshared/delude/core/core.py. Открываем его и ищем self.settings.user_agent. Дальше всё понятно или надо расписывать? :)

У меня сделано вот так:
# Set the user agent
self.settings = lt.session_settings()
#self.settings.user_agent = "Deluge %s" % deluge.common.get_version()
self.settings.user_agent = "Transmission/2.77 (14031)"

Не забудьте рестартить Deluge, чтоб он подцепил изменения. Особое внимание уделите пробелам в начале строк; это python, так что лишний или недостающий пробел порушат всю программу.

Оригинал записи http://blog.axshavan.ru/2013/09/deluge-change-user-agent.html
  • Current Music
    Theatres Des Vampires - Love Never Dies
  • Tags
old rover

Футболка маляра

У меня давно была тёмно-синяя футболка. Я на ней нарисовал акрилом логотип Ubuntu, в те времена ещё, когда логотип тот был разноцветным, символизировал трёх обнявшихся людей с разным цветом кожи, и никаких ассоциаций с голландским штурвалом не вызывал. Со временем акрил потрескался (я в некотором отношении сибарит и мне западло стирать футболку руками, если есть стиральная машинка), и футболка стала подходить ну разве чтоб в ней побегать трусцой вокруг окрестных помоек, или чтоб ходить в ней дома.

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



Дальше там будут фотографии, на которых видно, как эта футболка сидит на её хозяине, так что заранее хочу вас к этому подготовить и предупредить.
Collapse )
old rover

Liberté Linux 2012.3

По утверждениям создателей, этот дистрибутив линукса, основанный на Gentoo, должен предоставлять пользователям полную независимость от проприетарного программного обеспечения. Когда вы используете проприетарное ПО, исповедуют они, это ПО передаёт ваши данные своим производителям, а те - американским спецслужбам. Если раньше подобные утверждения большинство людей в мире считало бредом и "теорией заговора", то теперь, после того, как один бывший сотрудник американских спецслужб слил секретную информацию о работе этих самых спецслужб, стало ясно, что это всё была правда. Разумеется, на первом месте по сотрудничеству со спеслужбами корпорация Майкрософт, и теперь, конечно, и Скайп тоже. Не остаёт от них и - вполне американская - компания Гугл, а также всякие Эппл и так далее. Большой Брат на самом деле следит за всеми вами. И технологически мощностей вполне хватает, чтоб хранить на своих серверах всё о вас - смски, записи звонков по телефону и в скайпе, все ваши перемещения, всё, что вы пишете или писали когда-либо, всю информацию с жёстких дисков вашего компьютера. Что-то в этом роде.

Liberté Linux, по утверждениям создателей, полностью свободен от проприетарного ПО, а также имеет всякие специфические программы для того, чтоб чувствовать себя в бесопасности в жестоком мире, где даже у стен есть уши. Собвственно, он и предназначен для выхода в интернет во враждебной окружающей среде (открытый вай-фай в аэропортах, например).

В виртуальной машине он работает ужасно медленно, наверное, назло окружению, сожержащему проприетарные элементы :)

52.09 КБ

В качестве графической оболочки используется LXDE.
Collapse )
  • Current Mood
    gut
  • Tags
old rover

Введение в CSS (часть 2)

Блочная модель

2.75 КБ

Блочная модель, или поведение и внешний вид блока в зависимости от стилей, является очень важной, если не самой важной, частью CSS. Структуру блока я описывал в лекции по HTML. Ширина контентной части задаётся свойством width, её высота — свойством height:

div {
 width: 123px;
 height: 123px;
}

Отступы от границы до контентной части задаются свойством padding. Можно задавать отдельно отступы с каждой стороны, используя свойства pagging-top, padding-right, padding-bottom и padding-left. То же самое можно сделать, передав четыре значения в свойство padding:

div {
 padding: 12px 20px 7px 25px;
}

Значения перечисляются в следующей последовательности: top, right, bottom left. Отступы блока от окружающего задаются свойством margin, оно задаётся аналогичным образом, как и padding, только означает отступ не внутри, а снаружи блока. Вся ширина, которую занимает блок, складывается из ширины контента, паддинга справа и слева, марджина справа и слева и толщины границы справа и слева. Аналогичным образом вычисляется высота блока. Граница блока задаётся свойством border (также можно использовать border-top, border-right, border-bottom и border-left). Помимо ширины, границе можно задать задаётся цвет и стиль:

div {
 border-bottom-style: dashed;
 border-top-width: 1px;
}

Либо в сокращённом варианте:

div {
 border-top: 1px solid red;
}

Возможные стили границы:

  • dotted — точечками,
  • dashed — чёрточками,
  • solid — сплошной линией,
  • double — двойной сплошной линией,
  • groove — граница в виде канавки,
  • ridge — в виде бугорка,
  • inset — создаёт ощущение того, что блок вдавлен в страницу,
  • outset — создаёт ощущение того, что блок выпирает из страницы,
  • none — никакой границы.

Кроме собственно границы блока, существует так называемое свойство outline. Outline — это ещё одна граница блока, рисуется вокруг его обычный границы и точно таким же образом стилизуется через CSS. Однако, outline не влияет на ширину и высоту блока, в отличие от границы (border).

Collapse )
  • Current Mood
    gut
  • Tags