Click & Grow

Click & Grow (76.75КиБ)

Кратенько хочу поделиться опытом владения смартпотом «Томаты Черри». Мы такие приобретали в офис, для оживления обстановки, один я заказал и себе домой (у нас в Казани есть магазин, который ими торгует).

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

Купил давно, ещё летом, причём в офисе ставили смартпод с лампой, а я пожалел денег — подумал зачем лампа, если на дворе лето и солнце? В общем, в офисе уже давно те же томаты выперли красивым кустом и созрели, а дома «урожай» я сфоткал вчера — в живых осталось одно семя.

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

Не повторяйте мою ошибку — или покупайте с лампой, или вовсе не покупайте.

Оставить комментарий

Знание PHP

В рамках разговора о знании языка (ПХП, в данном случае), родился у меня такой пример:

var_dump(b"1" == 0b1);

Что тут будет — true или false и почему?

7 комментариев

99 бутылок: Scratch и HQ9+

54. HQ9+ — язык, у которого только четыре оператора. «H» выводит «Hello world», «Q» печатает исходный код программы, 9 выводит «песню о пиве», а «плюс» «увеличивает аккумулятор». Язык, понятное дело, придуман в шутку и у неё есть продолжения — «объектный» «HQ9++», Тюринг-полный «HQ9+B» и так далее.

Данная программа на этом языке выглядит вот так:

9


53. Scratch. «Скретч» — язык программирования для школьников младших и средних классов. Интересный класс языков, я никогда им особо не интересовался, а тут возник совершенно профессиональный интерес — как можно дать возможность программировать что-то в нашей системе людям, которые в программировании ничего не понимают.

Я, для интереса, написал на «Скретче» свои «99 бутылок». Программа на скриншоте. В среде редактирования мы управляем лисёнком и всё программирование крутится вокруг него, куча блоков позволяют что-то с ним делать — двигать, вращать, заставляют его что-то говорить и так далее. «Думать» выводит свой аргумент в  «облачке» его мыслей.

Скретч (84.30КиБ)

Программа строится из цветных блоков, цвета кодируют тип блока — «движение», «внешность», «звук», «данные», «управление», «операторы» и так далее. Основные конструкции обычных языков в наличии. Процедур, как таковых, нет, но можно отсылать события другим ээ… подпрограммам и через глобальные переменные получать результат. Есть даже что-то похожее на потоки — передавая события, можно запускать подпрограммы асинхронно.

Из структур данных есть целые числа и числа с плавающей точкой, строки и даже массивы. Для последних доступны все операторы для работы с ними — добавление, удаление, замена, получение значения по индексу, замена и так далее.

Есть ещё какие-то «Другие блоки», но с ними я не разбирался. Кажется, через них можно как-то расширять язык.

15 комментариев

Я такой же в бутерброде с икрой хочу!

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

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

Кроме него, в этой умной системе используется ряд датчиков — ГПС, гироскоп и ультразвуковой излучатель, которого в текущих аппаратах Эпл еще нет. С их помощью система определяет траекторию и угол падения смартфона и передает данные на вибромотор, чтобы тот в свою очередь сместил центр тяжести.

— пишет «МакРадар». Интересное решение, надеюсь это будет работать. Почему-то у большинства моих знакомых больше всего от падений страдают именно «Айфоны».

13 комментариев

Каменная баба

Каменная баба (57.19КиБ)

Просматривая насквозь Бугульминский уезд в книге «Списокъ населенныхъ мѣстъ Самарской губерніи по свѣденіям 1889 года» наткнулся на любопытное описание:

На крестьян. поляхъ есть каменная баба, 1¹⁄₂ арш. вышины; голова представляется повязанною по татарски, черты лица человечѣскія

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

6 комментариев

Зелёные лёгкие планеты

Фотосинтез делится на два этапа: световую фазу и темновую. Про световую почему-то все помнят: да, действительно, выделяется кислород. Но вот в темновой кислород потребляется «взад». Не весь, но много.

Если коротко, то зелень средней полосы потребляет за свой жизненный цикл кислорода больше, чем производит, потому как огромное количество кислорода требуется для разложения умерших растений. Зелень тропиков едва-едва выходит «на ноль», то есть не привносит никакого кислорода в атмосферу в конечном итоге. Кислород массово выделяется только водорослями, как было на заре жизни.

Из комментария к обсуждению фильма «Интерстеллар» в одном из ЖЖ. Я и раньше, читал, что «зелёные лёгкие планеты» это скорее болота, моря и океаны, чем леса. Кажется, в «Диалогах» Гордона эта тема хорошо раскрывалась, надо будет полистать (у меня четыре книги по этой передаче есть).

10 комментариев

Bashfuck

«…fuck» — это не ругательство, а развлечение, навеянное знаменитым языком программирования «Brainfuck». Практического смысла никакого, правила просты — написать программу на каком-либо языке программирования, не используя буквы и цифры. Уровень повышенной сложности — использовать для программы не все доступные закорюки, а сильно ограниченное количество, например, только пять любых на выбор.

JSFuck у меня в блоге был, PHPFuck — тоже, был даже совмещённый в одной программе JSFuck и Brainfuck, почему бы не попробовать сделать то же на «Баше»?

__=${_##*/} ___=${#__}
__=($__ $(${__:$(($___-${#___}))}${__:${#___}:$___}) $__)
____=${__::$((${#__}-${#___}))}${__[$___]::${#___}}${#__[@]}${#__}
_____=$($____<<<${__[@]}) ______=${_____:${#__[${#__}]}:${#___}}
______=${______,}${__[${#_}]:${#___}:${#___}}${__[$(($___-${#___}))]:${#_}:${#___}}
_______=$($____<<<$_____)
____=${__[${#______}]:${#______}:${#___}} ____=$____$____
__=${__[${#_}]:${#______}}${__[$___]:${#_}:${#___}}$____${_____:$((${#__[@]}+${#__[$___]})):${#___}}
__=$__' '${_______::${#___}}${__:$___}${_____:$((${#_____}>>${#___})):${#___}}
__=$__${____:${#___}}${_______:$(($___+${#______})):${#___}} __=${__,,}
$______<<<${__^}

Сказано — сделано, собственно. Программа на «Баше», что выше, выводит фразу «Hello world», её исходники можно свободно скачать с «ГитХаба».

9 комментариев

FTDNA и Promethease

В начале года я заказывал тест ДНК в компании «Family Tree DNA», в интерпретации результатов компанией, к слову сказать, была ошибка, я ещё напишу об этом, когда история закончится.

Мне ещё тогда в комментариях подсказали сервис «Promethease», который за пять долларов может проанализировать полученные данные и что-то сказать вам по ним о вашем здоровье. К сожалению, ни тогда, ни сегодня заставить работать Promethease с полученными от FTDNA данными не получилось — сервис упорно писал и пишет, что формат ему не знаком.

Пришлось разбираться в чём же дело. В итоге проблему я победил, рецептом делюсь. Во-первых, вам потребуется файл с данными анализа вашей ДНК, я скачал его из раздела FamilyFinder, на скриншоте подчёркнутая красным ссылка внизу:

FamilyFinder (22.66КиБ)

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

В этом разделе у меня пять ссылок, я скачал файл по ссылке «Build 36 Autosomal Raw Data» и совершенно без понятия чем файлы по ссылкам различаются и подойдут ли оставшиеся, с этим я ещё не разбирался.

Далее файл надо распаковать, если ваш браузер ещё этого не сделал. Для этого под «Маком» и «Линуксом» можно воспользоваться утилитой командной строки gzip, а под Виндоузом его распаковывать умеет «WinRAR».

Внутри архива будет файл в формате CSV («значения, разделённые запятой»), его надо сконвертировать в формат 23andme при помощи небольшой утилиты, которую я написал. Лучше её не копировать через буфер обмена (в ней есть символы табуляции, которые важны и могут пропасть), а сохранить на компьютер браузером или как-то иначе.

Как запускать её под Виндоуз я не решусь рассказывать, как-то можно, но я на память не опишу этот процесс, больше пяти лет под этой ОС не работал, на «Маке» и «Линуксе» это делается из командной строки. Полностью процесс выглядит вот так:

# распаковываем архив
gunzip ftdna.csv.gz
# скачиваем утилиту
curl -O https://raw.githubusercontent.com/bolknote/shellgames/master/ftdnato23andme.sed
# делаем файл запускаемым
chmod a+x ftdnato23andme.sed
# конвертируем
./ftdnato23andme.sed < ftdna.csv > 23andme.txt

Получившийся файл 23andme.txt надо залить на Promethease, заплатить пять долларов и минут через двадцать (запросы на обработку данных ставятся в очередь) получите результат. У меня из целая куча «плохих новостей» (так и написано): повышенный риск облысения, 77% вероятности непереносимости лактозы, в три раза выше риск дегенерации мышц с возрастом и ещё ворох подобных «прелестей», «хороших новостей» тоже немало, но там чаще всего «вероятность получения рака простаты не выше нормы» и тому подобное, какие-то поддельные хорошие новости — не радуют.

23 комментария

Bashfuck-2

Попробовал несколько иной способ сбора строки «Hello world» в Bashfuck. Получилось, работает. В предыдущей версии один из читателей жаловался, что у него не запустилось, я тут подумал, что возможно версия «Баша» не та — требуется четвёртая, разумеется.

Вот другой вариант сбора строки:

__=${_##*/} ___=${#__} ______=${__::$(($___-${#___}))} ____=$((${#___}+${#___}))
_____=<(:) ___=$______${_____:$____:${#___}}$(($___+$____))$___
__=${__:(-${#____})}${_____:$____:${#____}} ____=`$___<<<$___|$___`
__=$__${____:$((${#______}+${#__})):$((${#______}^${#__}))} __=$__${__#??}
_______=${____:(-${#__})}
______=`$___<<<$__` __=$__${______#??????} __="${__%?} ${____::$((${#______}/${#__}))}"${__#????}
______=${#___} ____=`$___<<<$____|$___` __=${__%?}${____:$((${#___}+${#___})):$______}
__=${__%????}${_____:${#______}:${#______}} __=${__,,}
_______=${_______::${#______}}${___:${#______}:${#______}}$($___<<<$______|$___)
_______=${_______::$((${#____}/${#__}))};${_______,,}<<<${__^}

Надо будет выбрать время, написать как оно работает.

1 комментарий

Как работает Bashfuck

Думаю, по горячим следам надо описать как работают мои Bashfuck и Bashfuck-2. Пока ещё сам детально помню.

Поскольку буквы и цифры использовать запрещено, все имена переменных состоят исключительно из подчёркиваний — это единственный вариант в «Баше» в таком случае. Чтобы что-то напечатать, сначала надо получить какие-то буквы.

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

# Удаляем из переменной $_ всё до последнего слеша
__=${_##*/}

Теперь у нас есть четыре буквы «b», «a», «s» и «h». Из имеющегося надо как-то получить недостающее. Тут нам помогает следующий факт: можно запускать что угодно, по имени, которое содержится в переменной.

Далее оба скрипта пытаются составить в одной из переменных команду «base64», чтобы передав ей на вход строку, получить недостающие буквы. В самом деле, передавая на вход разные строки и пропуская их по нескольку раз через «base64» команду, можно получить весь английский алфавит:

# bash тут — строка, которую мы уже получили
$ base64<<<bash
YmFzaAo=
$ base64<<<bash | base64
WW1GemFBbz0K

Например, в полученных строках некоторые буквы нам вполне интересны: «Hello world». Но как получить слово base64? С цифрами проще: имея строки разной длины и арифметические операции можно получить нужное:

# Переменная __ содержит слово bash
__=bash
# Очень просто получить цифру четыре: надо измерить длину строки:
$ echo ${#__}
4
# Любым похожим путём получаем двойку, прибавляем к четвёртке и у нас есть 6
$ echo $((${#__} + 2))
6

Поскольку типы переменных «Баш» не особо-то различает, склеить всё остальное труда не представляет. Но нужно ещё откуда-то получить букву «e». Тут дорожки этих двух скриптов расходятся. Первый работает так: составляя из имеющихся букв команду «hash», запускает её и получает следующую строку:

$ hash
hash: hash table empty

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

Если использовать такой синтаксис с любой командой, которая принимает не файл, а строку, то строку и получим (цифры будут меняться от запуска к запуску, остальная строка останется неизменной):

# пробуем вывести на печать
$ echo <(:)
/dev/fd/63

Нам это значение нужно в переменной и с присвоением этот трюк тоже сработет.

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

# переменная теперь содержит что-то вроде /dev/fd/xx
___=<(:)
# выбираем третий символ (отсчёт с нуля):
echo ${___:2:1}

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

# переменная, где нужная мне буква в середине слова
v=sed
# так можно срезать последнюю букву
echo ${v%?}
# а так —  первую
echo ${v#?}

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

v='heLLo WORld'
# всё к нижнему (будет hello world)
echo ${v,,}
# только первую —  к верхнему (будет HeLLo WORld)
echo ${v^}

Собранную строку осталось вывести на экран. Для этого в том же коде я попутно собираю из получающихся букв ещё и строку «cat» (что на одну букву меньше «echo», кода получается меньше) и с помощью этой команды получаю нужный результат:

c=cat
v='Hello world'
# Выведет Hello world
$c<<<$v

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

2 комментария

Эбола

От широко разрекламированного вируса Эболы в мире умерло 6000 человек. За 38 лет — открыт он был в 1976 году. Это я просуммировал данные из «Википедии».

По данным ВОЗ за 2012 год в мире умерло:

7,4 млн. — от ишемической болезни сердца 6,7 млн. — от инсульта 3,1 млн. — от хроническая обструктивной болезни лёгких 3,1 млн. — от респираторных заболеваний 1,6 млн. — от рака лёгких, трахеи и бронх 1,5 млн. — от диабета 1,5 млн. — от диареи 1,5 млн. — от СПИДа и ВИЧ 1,3 млн. — в ДТП 1,1 млн. — от гипертонической болезни сердца

Почти 30 миллионов в год против шести тысяч за 38 лет. И никто не паникует.

15 комментариев

Село Солдатское

Орловский архив прислал скан книги «Историческое описание церквей, приходов и монастырей Орловской Епархии» (1905 года) со страницами (№№ 287—288) о селе Солдатском, где жили мои предки Широбоковы в начале 19-го века.

Солдатское (351.70КиБ)

Написано следующее:

Село Солдатское.

Приходъ села Солдатскаго расположенъ въ живописной лѣсной и плодородной мѣстности, по высокимъ берегамъ рѣчекъ — Олымчика и его притока — Рогожки. Мѣстность эта лежитъ отъ г. Орла на юго-востокѣ въ 190 верстахъ, оъ уѣзднаго г. Ельца въ 65 верст. и отъ желѣзнодорожной станціи — Тербуны въ 3 верстахъ. Село Солдатскогое получило свое названіе отъ основателя здѣсь деревни съ этимъ именемъ, какого-то солдата, перваго поселенца въ этой мѣстности.

Самое раннее, сохранившееся документально, упоминаніе о селѣ Солдатскомъ относится къ 1777 году. Въ надписи на общемъ земельномъ планѣ государственных крестьянъ села Солдатскаго, помѣченномъ этимъ годомъ, значится и земля „на довольствіе священнослужителей сего села при церкви Димитрія Мироточца.

Къ приходу, кромѣ села, принадлежатъ теперь еще шесть деревень, въ нихъ 648 жилыхъ дворовъ. 2151 душа муж. п. и 2153 жен. п. Существующій нынѣ каменный храмъ построенъ на мѣсто стараго, деревяннаго, который какъ говорятъ, былъ проданъ въ сосѣднее бѣдное село Рогачикъ, Ливенскаго уѣзда. Храмъ трепрестольный, построенъ какъ значится въ клировыхъ вѣдомостяхъ, въ 1815 г. усердіемъ исключительно государственныхъ крестьянъ с. Солдатскаго.

Главный престолъ, въ честь Преполовенія Св. Пятидесятницы, освященъ въ 1819 году; въ томъ же году освященъ и придѣльный престолъ, съ сѣверной стороны во имя св. Димитрія Солунскаго. Придѣльный же престолъ съ южной стороны, въ честь Успенія Божіей Матери, освященъ около 1835 года. Первоначальный видъ настоящего каменнаго храма имѣлъ форму креста.

Въ 1895 году стараніем священниковъ, церковнаго старосты и прихожанъ храмъ былъ расширенъ и получилъ видъ корабля. Иконостасы въ немъ всѣ три новые. Главный обновленъ въ 1891 г., а придѣльные въ 1902 г. Особеннымъ почитаніемъ прихожанъ пользуется икона Скорбящей Божіей Матери, выписанная съ Аѳона въ 1895 году. Притчъ 2-штатный.

2 комментария

Казань 1936 год

Казань, Булак, 1936 год (225.35КиБ)

Казань седьмого мая 1936 года, канал Булак (соединяет в Казани озеро Нижний Кабан и реку Казанку).

Скан Галины Белогорской с оригинального фото. Протока и улица есть до сих пор, правда сейчас улицы название улицы сменилось и она разделилась на две — Лево-Булачную и Право-Булачную, у каждой дома стоят только по одну сторону.

Оставить комментарий

Рацпредложение

Разбирал тут старое барахло, раскладывал что выкинуть, что продать, что подарить. Нашёл старые сетевые карты, ещё для коаксиальных сетей. Карты называются «ICL EtherTeam 16i» и лежат у меня аж 13 лет. Подарю их музей техники ИТИСа — это казанская высшая школа при Университете, где я немного преподавал.

ICL EtherTeam 16i (75.67КиБ)

Карты той же модели когда-то кучей лежали рядом со мной на подоконнике комнаты в «Иркеннефти», где я тогда работал. Далёкий 1997 год, «Иркеннефть», как и многие огранизации тогда, полностью ушла с ДОСа на «Виндоуз 95», а оборудование, драйверов к которому не было, лежало кучей на складах и подоконниках отдела АСУ.

Для этих карт драйверов под «Виндоуз» тогда не было. И в один из дней, когда у меня было немного свободного времени, изучая как устроены другие драйвера, я обнаружил, что для некоторых сетевых карт используется драйвер ДОС, но со специальным файлом описания, который указывает как работать с ресурсами (портами ввода-вывода, прерываниями и окном памяти).

Несколько дней в паузах между заданиями, я пытался написать такой файл для ICL EtherTeam 16i. После десятков экспериментов и сотни перезагрузок, у меня получилось и я показал подключенную к сети машину, где стояла эта карта и 95-я «Винда» своему начальнику.

Рацпредложение (142.14КиБ)

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

Оставить комментарий

Новый способ воровства PIN-кодов карты


С появлением насадок-тепловизоров на телефон, у злоумышленников есть возможность «подсмотреть» ваш пин-код по тепловой картине на клавиатуре банкомата — видно не только какие кнопки вы нажимали, но и в каком порядке — первые имею более низкую температуру.

Защита от такого сканирования есть — положите ненадолго ладонь на клавиатуру перед уходом (или поставьте пальцы двух рук на все кнопки), тогда различить что именно вы нажимали будет невозможно.

9 комментариев

Шигирский идол

Читал статью про этимологию слова «поганый» (когда-то это значило «языческий») и вышел по ссылкам на статью о Шигирском идоле — самой древней в мире деревянной скульптуре. Скульптура вырезана из цельной лиственницы в эпоху мезолита — восемь тысяч лет до нашей эры.

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

Шигирский идол (154.44КиБ)

Когда мы с женой были в Екатеринбурге четыре года назад (прекрасный город, кстати), как раз видели её в этом самом музее (фото выше — оттуда).

Там было темно и моей тогдашней «мыльницей» я почти ничего не смог сфотографировать даже на длинной выдержке — шумов было много. А жаль, всё-таки это чудо — такая древняя скульптура. Темнота вполне объяснима — скульптуру берегут, выставляется она в специальном запаянном стеклянном саркофаге с инертным газом.

До наших дней скульптура дотянула только благодаря торфяннику, в котором и была найдена, но всё равно отдельными частями. Причём почти два метра пятиметровой скульптуры были утрачены в годы Великой Отечественной Войны, интересно куда они делись? Может гниют в чьей-то частной коллекции.

Вся скульптура покрыта орнаментом, на широких плоскостях вырезано семь антропоморфных изображений, часть из них — в «скелетном» виде. Кто именно там изображен, естественно, уже достоверно не выяснить, но версии, в основном, вертятся вокруг одного и того же — духи, боги и тому подобное.

3 комментария

Ошибка оракула

В одном из проектов при исправлении ошибки всплыло неожиданное. Кусок кода, который работал ошибочно, родился где-то в двухтысячных и по всей видимости в те времена работал правильно. В нём проверялось — если тип переменной «целое», то переменная передавалась в «Оракл» с флагом SQLT_INT, иначе — с SQLT_CHR.

Всё работало хорошо, пока ПХП был 32-битным. Проверка is_int в этом языке возвращала «истину» только для чисел в диапазоне -2147483648…2147483647, всё что шире, трактовалось как float. В 64-битном интерпретаторе целыми считаются числа из гораздо более широкого диапазона, соответственно, в каком-то коде такое значение попало в драйвер «Оракла», промаркированное как SQLT_INT.

Беда в том, что драйвер (в этом месте), похоже, остался в пределах 32 бит, код:

$var = null;
$st = oci_parse($con, "SELECT :int FROM DUAL");
oci_bind_by_name($st, 'int', $var, -1, SQLT_INT);

foreach ([100500, PHP_INT_MAX, 2147483648] as $var) {
    oci_execute($st);
    echo oci_fetch_array($st, OCI_NUM)[0], "\n";
}

Выведет: 100500, -1, -2147483648. Решение я пока знаю только одно: не использовать для целых, которые не помещаются в 32 бита указание типа SQLT_INT.

Проблема в файле oci8_statement.c (это текущий код драйвера из PHP 5.7):

switch (bind->array.type) {
    case SQLT_NUM:
    case SQLT_INT:
    case SQLT_LNG:

        ...
        ZVAL_LONG(entry, ((ub4 *)(bind->array.elements))[i]);
        ...

Значение в этом месте приводится к четырёхбайтному целому.

2 комментария

PHP7: строки с Unicode-вхождениями

\u{…} (11.43КиБ)

ПХП тут сделал маленький шаг к унификации синтаксиса с Руби, Джаваскриптом и HHVM — ввёл возможность указывать Юникодные символы через последовательность на скриншоте. Сегодня я выписал текущую версию из репозитория (она, кстати, не компилируется без исправлений в коде) и убедился, что всё работает.

6 комментариев

Скорость PHP7 на интерпретаторе Brainfuck

Производительность PHP7 (161.98КиБ)

У меня есть старинная забава — брать свой оптимизирующий интерпретатор языка «Брейнфак» и запускать программу, вычисляющую число «Пи» под разными версиями ПХП, чтобы посмотреть их производительность. Тест довольно синтетический, но посмотреть всё равно интересно.

Сравнил в данном случае версии 5.5.14  и сегодняшнюю сборку 7.0, разница всё равно заметна, хоть и не так впечатляюща, как в случае с «Вордпрессом» — там разница в два раза.

Время у меня на скриншоте общее — то есть трансляция программы на «Брейнфаке» в ПХП и запуск получившегося через eval.

Оставить комментарий

Великая русская река Кама

По площади водосбора к месту слияния рек несколько больше Волга (площади рассматриваются такими, какими они сложились в естественных условиях 260,9 тыс.кв.км против 251,7 тыс.кв.км). Однако на этой территории Волга объединяет меньшее количество рек и уступает Камскому бассейну (66,5 тыс. рек против 73,7). Водорасход Камы в месте её слияния с Волгой — 4300 куб. метров в секунду, Волги — только 3100. Средняя и абсолютная высоты Волжского бассейна меньше Камского, так как в бассейне Камы находятся Уральские горы. А вот древняя долина Камы старше долины Волги. В первую половину четвертичного периода, до эпохи максимального оледенения, Волги в современном виде не было. Существовала Кама, которая, объединяясь с Вишерой, непосредственно впадала в Каспийское море. Сток современных верховий Камы шёл на север, в Вычегду. Оледенение привело к переформированию гидрографической сети: Верхняя Волга, отдававшая раньше воду Дону, стала впадать в Каму, причём почти под прямым углом. Нижняя Волга и сегодня служит как бы естественным продолжением Камской, а не Волжской долины.

Эту точку зрения поддерживает арабская географическая традиция средних веков, которая связывала исток Итиля именно системой Белая-Кама (арабы считали, что Кама впадает в Белую)

Выбор главной реки в случаях, не вполне определённых с гидрологической точки зрения, определяется исторически сложившимися представлениями и названиями. В современности река Кама считается притоком реки Волга, точнее — притоком Куйбышевского водохранилища на реке Волге.

Гидрологически спорным является название участка Волги между Нижним Новгородом и впадением Камы; этот участок, по правилам гидрологии, «должен бы» называться Окой.

Из «Википедии». Признаться, никогда не слышал об этой дискуссии. Частенько смотрю на карту Татарстана из-за своих хобби, но такой вывод в голову не приходил.

Волга и Кама (86.75КиБ)

На современных картах (карту выше взял из «Яндекс.Карт») всё достаточно очевидно, вроде — справа вниз течёт здоровая Кама, слева в неё впадает относительно скромная Волга.

Интересно, в этом вопросе когда-нибудь наведут порядок или идеология тут заборет науку? Всё-таки великая русская река, центр мироощущения, основа многих русских городов.

34 комментария

Казань ✈ Челябинск ✈ Вьетнам ✈ Челябинск ✈ Казань

30-го декабря вылетаем во Вьетнам, в Казани будем 11-го января. Не знаю как у меня там будет с интернетом, так что буду ли писать — не знаю. Если что, не теряйте!

10 комментариев

Серафима Суок

Помните, в «Трёх толстяках» была девочка-циркачка Суок, которой заменили сломанную куклу наследника Тутти? Странное имя — «Суок», неправда ли? Оказывается, это не имя, а фамилия. Серафима Суок (на фото в центре) — одна из дочек австрийского эммигранта Густава Суока, жившего в Одессе.

В Серафиму был влюблён  Юрий Олеша, автор «Трёх толстяков», какое-то время они, фактически, были в гражданском браке.

Суок (201.09КиБ)

Серафима оказалось очень непостоянной женщиной — постоянно бросала Юрия Карловича ради других мужчин, позже устав от этого, Юрий женится на другой сестре Суок — Ольге, которая останется ему верна до конца жизни.

Циркачка Суок — посвящение Юрия Олеши двум женщинам его жизни, которых он называл «две половинки моей души».

2 комментария

«Песня очень позитивного человека»

Декан Кис Симонтон из Калифорнийского университета в Дэвисе на базе целого ряда исследований построил график, демонстрирующий среднестатистическое соотношение возраста и творческих способностей.

Из него видно, что наши креативные возможности быстро растут на старте карьеры, достигают пика примерно через 20 лет, где-то в районе 40-45, и затем начинают медленно приходить в упадок. В зависимости от вашей специальности этот график видоизменяется, но незначительно. Сегодня средний возраст, в котором делают свое главное открытие физики — лауреаты Нобелевской премии, — 48 лет.

Теоретики в области химии и физики добиваются значимых результатов несколько раньше, нежели исследователи-практики. Поэты достигают пика раньше, чем прозаики. Исследование, проведенное Симонтоном среди композиторов-классиков, показало: типичный представитель этой профессии пишет первое значительное произведение в 26 лет, в 40 он достигает наибольшей творческой зрелости и плодовитости, а затем снижает обороты, и в 52 пишет последнее свое значительное музыкальное произведение.

Из статьи «Разрешите преставиться» профессора биоэтики Иезекииля Эмануэля. Это неплохо согласуется с другими статьями, которые я читал по теме и наблюдениями за собой — пока я, определённо, становлюсь всё уменее и умелее.

Интересно, откуда взялся миф об интеллектуальной деградации где-то после 30? Я натыкаюсь на него всё чаще, особенно в среде стартаперов. Причём среди последних он ещё более удивителен — потому что качество и сложность 90% процентов стартапов на уровне того, что программист высокого класса с опытом может сделать за пару ночей.

Вероятно интеллект в самоосознании стартаперов тут подменяется совершенно другими вещами — напористостью, смекалкой, приспособленностью и так далее.

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

Я склонен считать стартап скорее хобби, ролевой игрой и разовым актом творчества, чем заявкой на серьёзной бизнес. Бывает, когда из первого вырастает второе, но это исключение, в жизни вообще многое случается, глупо строить планы, полагаясь на случай. Кстати, отсюда и моя подозрительность в отношении зрелых людей, ударившихся в стартапы — это больше похоже на эскапизм, когда человек, который должен крепко держать штурвал собственного корабля, мечется по берегу, что твоя Ассоль, вглядываясь в даль, в надежде увидеть алый парус инвестора.

Оставить комментарий

← сюда туда →