Одно из различий Python и JavaScript

Чем дальше, тем между большим количеством языков программирования мне приходится переключаться. Одно из различий объектной модели Пайтона и ДжаваСкрипта мне портит кровь (у них парадигмы ООП вообще сильно различаются), если я вовремя не соображу, что надо переключиться с одного языка на другой.

Суть в том, что в Пайтоне метод ходит в гости со своим контекстом:

class A:
    test = 'A'
    def show(self): print self.test

class B: test = 'B'

a, b = A(), B()

show = a.show
b.show = a.show

show() # A
b.show() # A

Тогда как в JavaScript такой код будет работать совершенно иначе, там методы в чужой монастырь со своим уставом не ходят (если их не попросить):

var test = 'global';

A = function () {
    this.test = 'A',
    this.show = function () { alert(this.test) }
};

B = function () { this.test = 'B'; }

a = new A(); b = new B();

b.show =  a.show
show = a.show

show() // global
b.show() // B
b.show.apply(a) // A

Появление «global» наверное надо разъяснить тем, кто JS знает плохо. На самом деле первая строчка (в данном случае) может читаться как «window.test = ’global’», а «show = a.show» как «window.show = a.show», тогда, должно быть, всё более-менее встаёт на свои места.

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

Турция

Sherwood Breezes Resort (79.83КиБ)

Со второго по девятое апреля едем в Турцию, в Анталию, отель «Sherwood Breezes Resort» 5★. Не знаю почему, но оба чувствуем нечеловеческую усталость, хочется отдохнуть.

Планируем поваляться немного на пляже и съездить в Стамбул на экскурсию, я много слышал хорошего об этом городе от своего доброго знакомого Саида Кадырова (он там жил и работал). В море, увы, будет холодно — обещают температуру воды что-то около +18°C.

Кто был в Турции, расскажите что нужно знать? Куда ещё можно съездить, куда ходить, куда не ходить?

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

Лайки (не про собак)

Хочу провести эксперимент — поставил под каждым постом «лайки» с трёх социальных сетей («Вконтакте», «Фейсбук», «Твиттер»), посмотрим что получится, если я их правильно настроил, конечно.

Пока меня смущает, что они очень медленно загружаются.

Добавлено позднее: из-за «Хрома» придётся убрать «лайки» внутрь поста, иначе он подвисает секунд на 10.

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

Почтовый клиент в виде IM

Я тут осознал, что 90% несрочных сообщений мне всё равно проще написать в джаббер, чем в почту. Я не знаю почему, пока не понял. Может это проще? Легковеснее? Когда приходится писать в почту сообщение в две-три строки, потому что человека нет онлайн, меня несколько тяготит, что нужно идти в почтовый клиент, создавать новое сообщение, писать почтовый адрес, тему и так далее. Как-то долго.

У вас такого не бывает? Конечно, когда надо ответить на длинное письмо с кучей цитат, да ещё, если это часть сложного треда, то лучше это делать в почтовике, но у меня таких только 10% всей переписки.

И я вот тут подумал — а нет ли почтового (SMTP/IMAP4) клиента в виде IM (как это сейчас по-русски называется? интернет-пейджера?)? Никто не видел? Я посмотрел плагины к «Миранде» (там обычно на любую тему есть что-то), ничего подходящего. Может существует что-то такое, а?

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

Изменения в speeddial новой альфы «Оперы»

Ребята из «Оперы» экспериментируют с возможностями SpeedDial в своём браузере. Помните, я писал о специальных версиях некоторых сервисов «Яндекса» для SpeedDial?

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

Preview-refresh: 10

или

<meta http-equiv="preview-refresh" content="10" />

Время указывается в секундах. Кстати, теперь можно надёжно узнать через media queries, что «Опера» показывает страницу в SpeedDial: достаточно проверить, что «view-mode» в значении «minimized»; помимо этого есть возможность указать произвольное изображения для миниатюры (об этом лучше почитать подробнее в блоге «Оперы»).

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

Советские деньги

Советские деньги (22.94КиБ)

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

Есть ещё небольшая коробка монет, которые остались у родителей с тех времён. А у вас сохранились советские деньги? Что вы с ними планируете делать? Хранить? Выкинуть? Продать?

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

Монк и обувь

Заметил, что в сериале «Детектив Монк» главный герой-чистюля, Эдриан Монк, который убирает свою квартиру несколько раз в день и панически боится микробов, грязи и прочего (около 300 фобий), тем не менее не снимает обувь, входя к себе в дом, и не заставляет гостей это делать.

Видимо при всех странностях Монка, снимать обувь в квартире, по американским меркам, уж чрезмерно странно.

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

Опоздали на самолёт

Полукупе (18.89КиБ)

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

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

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

Террористов бояться — метро не ходить

На перегоне «Чистые пруды» — «Красные ворота» ко мне подходит молодой мужчина: светлоглазый, белесо-рыжеватый, в чем-то ярко-желтом. Подбивает клинья, спрашивает, что читаю. (…)

Приглашает посидеть в кафе. Вежливо говорю «Спасибо, нет» и продолжаю читать, не смотря на него и не реагируя на дальнейшие реплики. Тот заявляет: на следующей мы с тобой выйдем. Замолкает. Через 15 секунд — станция. Тот требует выйти, угрожая, что иначе закричит, ЧТО Я ШИХАДКА, позовет милицию и меня посадят. (…)

Мужчина кричит на весь вагон: «Люди, в вагоне шахидка, спасайтесь! Люди, она — смертница! СМЕРТНИЦА!», дергает меня сильней, я слетаю с места. (…)

Смотрю на оставшихся мужчин и не понимаю, почему они мне не помогают, видно же по ним, что не трусы?! Соображаю, что приняли за истеричную семейную пару и не решаются вмешаться: грубую силу-то мужик не применяет. Кричу: «Мы НЕ ЗНАКОМЫ!» Тут же с места срываются «вахаббиты» и пара парней славянской внешности, оттесняют мужика на станцию, потом трое остаются со мной в остановленном из-за паники вагоне и успокаивают.

Из ЖЖ несостоявшейся «смертницы».

Из этой истории целых два интересных вывода.

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

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

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

Если интересно, можно ещё и послушать, там подробнее.

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

Группа → служба

Стал руководителем службы разработчиков внутренних сервисов «Яндекса».

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

Сколько есть способов восстановить chmod?

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

Я решил подумать сколько способов исправить эту ситуацию я знаю.

Первый способ — скопировать chmod с соседней машины при помощи scp, sshfs и т. п. Если такая машина имеется, конечно.

Способ второй:

cp /bin/sh ~/chmod2
cat /bin/chmod > ~/chmod2
sudo ~/chmod2 +x /bin/chmod
rm ~/chmod2

Третий способ (при условии, что у вас какой-то дистрибутив, использующий пакеты, у меня способ для Debian):

sudo apt-get --reinstall install `dpkg -S /bin/chmod | cut -f1 -d:`

Способ четвёртый:

gcc -x c - <<CHMOD
#include <sys/stat.h>
main(){chmod("/bin/chmod", S_IXUSR | S_IXGRP | S_IXOTH);}
CHMOD

sudo ./a.out
rm a.out

Кто ещё знает способы?

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

Пайтон: замкнувшее замыкание

Есть немало вещей, которые мне не нравятся в Пайтоне. Не так давно мы на работе наткнулись ещё на одну.

У нас есть код, который выглядит примерно так (можно написать и одну функцию, но так нагляднее):

def outer(useless = None):
    def inner():
        if useless is None:
            print "Pichal'ka"

    return inner

outer()()

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

Теперь меняем код:

def outer(useless = None):
    def inner():
        if useless is None:
            print "Pichal'ka"

        # тут много кода, начало мы уже потеряли
        if False: useless = None

    return inner

outer()()

Запускаем код и видим (Пайтон 2.6.5):

Traceback (most recent call last):
  File "sample.py", line 10, in <module>
    outer()()
  File "sample.py", line 3, in inner
    if useless is None:
UnboundLocalError: local variable 'useless' referenced before assignment

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

Избавиться от эффекта можно, изменив прототип внутренней функции на «inner(useless=useless)».

То же, кстати, происходит при импорте модуля:

import random

def outer():
    print random.choice
    #import random

outer()

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

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

Я не придумал хороших причин так делать с точки зрения языка (может их кто-то из читателей тут меня поправит?), поэтому считаю, что так сделали для упрощения интерпретатора.

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

Пинг-понг

Журналисты «Look at me» взяли небольшое интервью для статьи «Пинг-понг жив»:

Мужчина в чёрной футболке с надписью «Такси не нужно» стоит с ракеткой для настольного тенниса у стола в помещении с кирпичными стенами.

«В пинг-понг играю года два. Начал играть, когда тесть купил стол для пинг-понга, а потом сам купил ракетку. Одеваться для игры стараюсь спортивно. Вот сегодня у меня не очень удачные джинсы, например. Поскольку пинг-понг — очень подвижная игра, широко шагать в них неудобно. Ракетка у меня своя, склеенная — отдельно покупал основание и резиновые накладки. Вообще, у ракеток очень разные характеристики, все зависит от стиля игры. Я защитник — редко нападаю, стараюсь снизить скорость игры. Как у самоучки, техника у меня довольно-таки плохая, и все мои движения кажутся игрокам очень странными, поэтому их сложно „читать“. Я беру неожиданностью, а кроме того, как коронный прием я использую „тычки“ — резкие, короткие движения. Это неправильно с точки зрения техники, потому что они малоконтрольные, и надо очень долго тренироваться, чтобы они получились, но, в то же время, это неожиданный и эффективный прием».

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

Кредитка vs. наличные

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

Я в магазинах в России спрашиваю принимают ли они банковские карты, а там ситуация обратная — вопрос в том принимаются ли наличные.

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

Про вакцины

Президент Калифорнийской некоммерческой корпорации «Natural Woman, Natural Man, Inc.» Джок Даблдей предложил $20000 первому из врачей или руководителей фармацевтических компаний, кто публично выпьет смесь стандартных добавок, имеющихся в большинстве вакцин, в том же количестве, которое, в соответствии с рекомендациями Центра Профилактики и Контроля заболеваемости США 2000г, получал шестилетний ребенок.

Эта смесь не будет содержать действующего начала вакцины — живых или убитых вирусов или бактерий. В её состав войдут только стандартные добавки к вакцине в их обычных формах и пропорциях (…)

—  с сайта «Вакцинация — панацея или смерть».

Хотя тут речь идёт немного о другом, но и с самими вакцинами мне совершенно ничего не понятно. Где правда, не говоря уже об истине? Заказал на «Озоне» книгу «»Беспощадная иммунизация — правда о прививках», Александра Котока (в формате fb2 не смог найти), жду.

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

Андроид 2.3.3

Обновил свой Nexus One, поставил Андроид 2.3.3, устал ждать когда прилетит «по воздуху», сделал всё вручную (на сайте «Droider» есть инструкция).

Стало всё заметно аккуратнее. Такое чувство. Вернулся на родную для ОС клавиатуру, по внешнему виду нравится больше, чем Swype, хотя Swype и удобнее.

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

Советское

Натюрморт с красной облепихой в миске и банках, стеклянными бутылками, ветками ягод, деревянной ложкой и старой нотной записью на фоне деревянной стены.
Открытая тетрадь с записями на деревянном столе рядом с абакусом, чернильницей, карандашами и горящей сигаретой; на стене — красный баннер с надписью «Актив политического клуба».
Натюрморт с семейными фотографиями, старыми книгами, будильником и календарём на 26 апреля на деревянном столе.
Настольная лампа освещает письменный стол с черным телефоном, очками, письмами и конвертами; на спинке стула висит шарф.
На деревянном столе лежат старинные медицинские документы, часы, перьевая ручка, стеклянные флаконы с лекарствами и пилюлями, создавая атмосферу прошлого.
На деревянной поверхности — спагетти, помидоры, зелень, хлеб в сетке, зелёная бутылка и чёрный телефон на тёмном фоне.
На деревянном столе лежат тетрадь с оценками, кубик Рубика, очки, стопка книг и стакан с карандашами.
Черный чемодан с металлической ручкой и замком, рядом — пепельница с окурком и дымом, на переднем плане — документы с печатями и надписями.
Рабочий стол с открытой книгой, рукописью, очками, пишущей машинкой, книгами и стаканом с карандашами в тёплом свете.
Натюрморт на деревянном столе: открытая книга, банка с красной смородиной, миска с черной смородиной, дуршлаг, ключ и ткань на фоне темной стены.
Ржавое велосипедное колесо, старая лампа, консервные банки, паяльник и инструменты на деревянном столе у стены.
Стеклянная бутылка и стакан молока, ломтики хлеба и колбасы на деревянном стуле, рядом сложенная ткань и ложка.
Стеклянная банка с вареньем, стакан молока и стопка блинов на деревянном столе, освещённые боковым светом.
Натюрморт с бутылкой масла, зеркалом, золотой чашей, газетой «Метчундар», мылом и бритвой на деревянном столе.
На деревянном стуле лежат кожаная сумка с пряжкой, ремень, пачка сигарет «Беломорканал», спичечный коробок и окурок.
Натюрморт: разрезанная тыква, мясорубка, миска, доска с кусочками тыквы, ложка, полотенце и кухонная утварь на деревянном столе в тёплом свете.
На деревянном столе в тёплом свете лампы: чёрный дисковый телефон, бутылка в сетке, спичечные коробки, газета с надписью «ПРАВА», письма и кожаный портфель.
Старые велосипедные детали: колесо, цепь, шестерня, инструменты и сумка на деревянном столе.
Натюрморт: раскрытая книга, стопка старых книг, букет сирени в металлическом кувшине, стакан чая в подстаканнике и сушки на деревянном столе.
Старинная швейная машина на деревянном столе рядом с куском тёмной ткани с белым узором, катушками ниток, коробкой и открытой баночкой с пуговицами.
На деревянном столе стоит старинная швейная машинка, рядом лежат открытые письма с рукописным текстом, кружевная лента и чёрно-белая фотография женщины с двумя детьми.
Старинное радио, настольные часы, свёрнутая газета и ключи на деревянной тумбе.
Старый чемодан, зонт и белая вуаль с клетчатым узором лежат на деревянном стуле в темной комнате.
Натюрморт на деревянном столе: зелёная бутылка в сетке, хлеб, корзина с яйцами, разбитое яйцо в миске, монеты и купюра на фоне тёмной стены и стула.
Старые кожаные коньки и красная рыболовная сеть лежат на деревянном полу у стены, рядом с большими стеклянными бутылками.
Рождественские украшения на деревянной поверхности: розовая стеклянная игрушка, серебристая мишура, ветка ели, шоколадные конфеты и белый плюшевый мишка в красной ленте.
Кожаная сумка с плетёной ручкой, шарф в полоску, очки и конверт с письмом на деревянной поверхности.
Натюрморт: стеклянная бутылка молока, бумажный пакет, помидоры и зелёный лук в красной сетке, настольные часы, купюры и монеты на деревянном столе у потрескавшейся стены.
Натюрморт на деревянном столе: кабачок в сетке, чеснок, зелень, бутылка, очки, открытая книга и монеты на фоне тёмной стены.
Светлое молоко в стакане, ломтики хлеба с вареньем, банка с остатками варенья и металлический кувшин на деревянном столе под тканью.
Чёрная шляпа висит на деревянной стене над раскрытой газетой с портретом мужчины и заголовком «ЧЕРОКЕЙ», рядом — стакан с трубочкой и ключ на столе.
Светлая деревянная доска с ломтиком хлеба, помидором, огурцами, беконом, двумя стаканами тёмного напитка и стеклянной банкой на фоне тёмной стены.

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

Тем не менее, мыслями я люблю бывать в прошлом, особенно я благодарен памяти за неожиданные флешбеки, когда вспоминается что-то, казалось, окончательно забытое. От ностальгии это отличается — я не стремлюсь в прошлое, напротив, я живу событиями, которые должны случиться (в этом моя слабость, кстати).

Спасибо Александру Сенникову за то, что он помог мне найти в своей памяти много добрых, забытых воспоминаний детства. Бумажный дед Мороз, те самые фотоальбомы, письмо авиапочтой, перьевые ручки, «лимонные дольки», машинка «Феликс-М», паяльник на 40 ватт, кошелёк, который одна из бабушек называла «гоманок»…

Какой же это труд, наверное, найти все эти предметы, сделать из них натюрморт, правильно сфотографировать. Завидую такой увлечённости.

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

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

Багги

Человек в красном шлеме и синем жилете сидит в красном снегоходе с открытым каркасом, держась за руль; рядом стоит мужчина в тёмной куртке на снежном фоне.
Водитель в красном шлеме управляет красным гоночным багги на заснеженной трассе, окружённой снежными валами и деревьями; на заднем плане виден флаг с надписью «DRIVE-LAND».
Человек в красном шлеме управляет красным гоночным багги по заснеженной трассе на фоне промышленных зданий и труб.

Ездили сегодня в посёлок Путилково, кататься на багги. Холодно, но интересно — сильно заносит на трассе (местами там лёд). Багги машина лёгкая, но очень устойчивая, я видел как сотрудники лихо кружились на ней на одном месте, газуя по полной.

Поводил на хорошей скорости в заносе, руль приходилось выкручивать по-бешенному. Стоит всё удовольствие 600 рублей за 15 минут (мы катались со скидкой 50%, правда).

Находится по адресу Путилково, Путилковское шоссе, владение 112А (автодром «Drive-Land»). Мимо этого владения идёт автобус 326 (от Тушинского метро), правда ходит он очень редко (мы ждали почти полчаса). Ещё можно доехать до ТРЦ «Вэйпарк», оттуда минут 10 пешком, правда по «козьим тропам».

Добавлено: мне в лично разговоре задали несколько вопросов. Отвечаю всем сразу: багги заднеприводные, права не нужны. Есть детские машинки.

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

Thanks for ruining my childhood

Ролик про копипаст в студии Диснея:

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