Jan. 23rd, 2013

juan_gandhi: (VP)
То была пятница; вечером, после приёма, мы пошли ещё ужинать в Irish pub, потому что это ж Сонома, и обычный ужин стоит типа 40 баксов с носа, кусочек морковки и кусочек говядины, с бокалом вина за 20 баксов, не то чтобы мы такие уж бедные, но нам как-то западло; да и сами мы лучше сготовим.

В айриш пабе пиво и еда типа вполне и цены вполне. Сидели на улице, под нагревашкой, но мёрзли. Деваха, что приносила еду, нас узнала - ничего у людей память. Напротив (через узкий проход во дворе) индийский ресторан, "Гималая". Мы индийской еды не любим; просто сидим смотрим. Люди туда идут с велосипедами. Один в кепке закатил велосипед в ресторан, вернулся без велосипеда, снова пришел и закатил ещё один велосипед. Потом вышла деваха и тоже закатила велосипед.

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

Ну это ладно, а утром мы проснулись и пошли завтракать в булочную. Булочная на площади - это о-о-о! Сколько всяких хлебобулочных изделий, разных там круасанов, чизданишей, сконсов и всего-всего.

Но сидеть было негде; в 8 утра в субботу всё плотно усижено пенсионерами, громко беседующими о разном.

Так что мы что, мы взяли по булке и по кофе и пошли домой завтракать; шли мы другой дорогой, через церковный двор; в церкви уже сидели Изучающие Библию, а опоздавшие подъезжали и спешили туда ж. Аяяй, нельзя в церковь опаздывать.

Мы как позавтракали, так и сразу пошли в винарню вино пробовать. С утра выпил - весь день свободен. Вот мы на весь день и пошли. Во дворе школы, где мы живём, находится клуб Анонимных Алкоголиков, и вот они тоже с раннего утра собираются. Клуб открывается в 7 утра (чтобы не успели выпить), но в 7 там никого ещё нету. Конечно, в Сономе такой клуб пользуется успехом. Народу до хренища. Один анонимный алкоголик даже на велике прикатил. Я ещё ни разу не видел алкоголика на велосипеде, и замер от когнитивного диссонанса. Но подруга объяснила - да у него просто права отобрали, а то стал бы он на велике рассекать.

Дык.

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

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

В начале 19-го века Агостон Харасти, венгерский дворянин, бросил свою польскую жену и детей, и, с кузиной по фамилии Фишер, сбежал в Америку, в Висконсин. Между прочим, первый венгр, поселившийся в Америке.

Шо там делать в Висконсине, я не знаю, он пару лет позанимался бизнесом, а потом вернулся в Венгрию и написал книжку "Путешествие по Северной Америке" (Utazas Éjszakamerikában), взял жену, детей, родителей, и всей туснёй уехал обратно в Америку - сначала в Сан Диего, потом в Сан Матео и Сан Франциско; занимался металлургией, а потом купил участок под Сономой и стал разводить виноград.

За виноградом он специально поехал в Европу, привёз оттуда 14 тысяч сортов (100 тысяч черенков), и стал, собственно, основателем виноделия в Калифорнии. До того здесь был виноград, но каких-то малокачественных мексиканских сортов (извини, Жора, это не наезд, это я цитирую).

Построил усадьбу, женил своих сыновей, Арпада и Аттилу, на дочерях Мариана Баехо (Vallejo), Наталье и Ховите.

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

Сам Харасти уехал с семьёй в Никарагуа, где и исчез без следа. Вроде бы утонул, но тела не нашли.

В 1941-м году Франк Бартоломью, шеф тихоокеанского отделения агенства ЮПИ, купил участок ну просто вроде как дачу для жены, понятия не имея ни о какой Буэна Висте. Он же и начал восстанавливать виноделие в этой местности. Славится Буэна Виста шипучкой, вроде шампанского. На самом деле, эту винарню разбили на две, и на Буэне Висте почти ничего не выращивают, а выращивают на соседней, которая так и называется в честь Бартоломью; а Буэна Виста скорее - мемориальное место.

С утра народу было мало (все анонимные алкоголики на собрании). Нам налили шипучки, потом каких-то совиньёнов "бланков" (ненавижу, когда blanc произсносят как "бланк"), шардоней, зинфанделей, мерло, каберне совиньёон. Ну разве что каберне; традиционно содержательный напиток - а так хочется это всё скорее экспекторировать. Но деваха, сомелье, или как их там, свои дозволенные речи несла бодро, и мы сидели слушали.

Выпив, пошли гулять на соседнюю винарню, Бартоломью. Там такой сад, о, такой сад! Араукарии (те, что на длинных одиноких ветках несут треугольные иголки), кипарисы, которых сначала стригли как обычно, и они до высоты метра три ещё напоминают, а потом на них махнули рукой, и они приняли форму обычных (русских и американских) сосен, разросшихся в ширину.

Дорожка нас привела в очередную распивочную.
juan_gandhi: (VP)
This part is not exactly a theory of algebraic theories, but anyway.

Imagine we have a parametric class (e.g. List[X]) for which we would like to define methods that would only work if X satisfies certain conditions. E.g. define sum if it is a numeric type, or define flatten if it is some kind of sequence (Traversable[Y] would be enough). How can we accomplish it in Scala?!

Suppose we want to declare flatten
trait List[X] {
// bla-bla-bla

  def flatten[X <% Iterable[Y]] { ... } // no way, we already mentioned X; this one would shadow the previous one
// OOPS!
}


The trick would be to have an implicit transformation handy that transforms X into Iterable[Y] for some Y; and define it so that if X is actually some kind of Iterable, the implicit would be available, and otherwise not available.

Where can we find such a general transformation? The only thing that comes up to mind is an identity:

implicit def itsme[Y, X <% Iterable[Y]](x: X): Iterable[Y] = x

This would be enough in this specific case... but then we would have to define another one for numeric types, and so on.

We can go generic, and write something like this:
abstract class SafeToCast[-S, +T] extends Function1[S, T]
implicit def canCast[X <% Y, Y]: SafeToCast[X, Y] = new SafeToCast[X,Y] { def apply(x:X) = x }


Now we can define flatten, like this:
class List[X] { ...
  def flatten[Y](implicit transformer: SafeToCast[X, Iterable[Y]]) { ... }
}


All the conditions are satisfied now. Contravariance in the first argument and covariance in the second argument ensure that a subtype can be cast to its supertype... to be more precise, an instance of supertype can be substituted by an instance of subtype.

The only thing is that we can try to make the code more readable, by refactoring.

Step 1. Use the trick in Scala that binary operations can be written in an infix way, even for types. E.g. you can declare val map: (String Map Int) - this is the same as Map[String, Int].

sealed abstract class SafeToCast[-S, +T] extends Function1[S, T]
implicit def canCast[X <% Y, Y]: (X SafeToCast Y) = new (X SafeToCast Y) { def apply(x: X) = a }
...

class List[X] { ...
  def flatten[Y](implicit transformer: X SafeToCast Iterable[Y]) { ... }
}


Step 2. Rename the method, giving it a more "type-relationship" name: SafeToCast -> <:<.

sealed abstract class <:<[-S, +T] extends Function1[S, T]
implicit def canCast[X <% Y, Y]: (X <:< Y) = new (X <:< Y) { def apply(x: X) = a }
...

class List[X] { ...
  def flatten[Y](implicit transformer: X <:< Iterable[Y]) { ... }
}


That's the trick.

(if you have questions, ask; if you have corrections, please tell me)
juan_gandhi: (VP)
В винарне Бартоломью нас встретил гостеприимный Роберт, и стал чесать языком, историю винарни, жизнь вообще, да мы сами-то откуда. Ну откуда; подруга говорит, я тут к вам понаехала, местная теперь художница. Вчера приём был, мэр заходил. Роберт тут стал передавать большой привет Кену Брауну, расписывать, как всё тут круто, и, кстати, дринки нам бесплатно. Ну дринки те же самые практически, по качеству; каберне только странное, немножко как бы безвкусное - но при этом крепость нормальная. Я люблю такой вариант, да.

Была ещё парочка, сразу видно, из Нью Йорка - все в чёрном. У них pre-honeymoon trip. Летом свадьба. И ещё подошли две девушки, одна из Барселоны, теневая писательница, а другая из фейсбука, где учит инженеров на менеджеров. Самой лет ну двадцать, BBA типа получила в Стэнфорде, теперь можно учить других как правильно себя вести. Роберт предложил наоборот, из менеджеров делать программистов; я тут слегка поржал; но я там был никто, прозрачен как слеза, ничей глаз на мне не останавливался и в разговоры со мной никто не вступал (что мне непривычно, но ничо).

Пошли прошвырнуться дальше по имению; зашли в танцевальный павильон, с люстрами, старинными стульями, фортепьянами, с видами на виноградники внизу. В библиотеке павильона масса книг про Фрэнка Бартоломью, как он был военным корреспондентом, вот он в форме, вот он в Африке, вот он в Баку, а вот он директор Юнайтед Пресс Интернешенал, а вот он на пенсии.

Ну а мы что, нам дальше надо, на следующую винарню, Гундлах Бундши. На Буншу нашего похоже.

Опять шли петляли по деревенским улочкам Сономы, рассуждали, не слишком ли мы далеко упилили, вот уже шесть миль прошли... ну наконец вошли на территорию винарни. А там ещё миля до усадьбы. Шли мимо постриженных винарников шардонне, и обрезки тут же валяются. И я замыслил взять с собой образцов, ничо?

В винарне была ужасная толпа, дело было уже третий час, все поели и поехали выпить; а у меня кончился сахар в крови. Я пошел на улицу, сел на скамеечку, закинулся глюкозой и сидел переваривал. Главное, мало что сил не остаётся, и соображения мало. Соображал бы, закинулся бы раньше. А, и ещё обидчивость такая возникает. Не от большого ума. Но зато мозг насобачился, видимо; сознания не теряю.

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

Ну мы как бы оценили Сирах и Каберне ихние. По-моему, вне винарни эти их напитки нигде не продаются.

Ну так и что, выпили, не закусили (нечем), и теперь обратно 4 мили. Дойдёшь? Ну а чо, куда деться. Взял в руку веток, обрезков лозы, и почапали. Не знаю, законно ли я это поступил, но поступил. По дороге почти вся глюкоза ушла. Но ничего, ничего, хорошо прошвырнулись, 12 миль!

В душ, потом в машину, и в дайнер "Чёрный Медведь"; там заказали одну порцайку на двоих, мясо, а также один суп на двоих. Нам поделили, и даже полпорции были огромные - как там люди питаются?!

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

И это была ещё суббота только.
juan_gandhi: (VP)
Итак,
- эвклидова геометрия и булева логика для описания вселенной малополезны;
- найдены следы жизни в метеоритах, а на марсе ещё нет
- зато на марсе найдены реки, только они высохли раньше, чем гран каньон образовался;
- в москве люди все свои доходы пропивают

Profile

juan_gandhi: (Default)
Juan-Carlos Gandhi

August 2025

S M T W T F S
      12
3456789
10 11 12 13141516
171819 20212223
24252627282930
31      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 25th, 2025 06:34 am
Powered by Dreamwidth Studios