September 1st, 2007

with Cat The Cat

А что бы мне не похвастаться?..

А похвастаюсь.

145x4 без ремней. Не без огрешностей - я в последнем подходе опустил штангу слишком сильно и едва поднял. ;)

Та же проблема с приседаниями. Последний раз в последнем подходе тоже присел слишком сильно.

Но так даже интересней. ;)
with Cat The Cat

nataly_hill написала...

Как ей плохо от церкви. Не написала, правда, почему. Это, наверное, очень серъезно.

Вот, что мне это напомнило.

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

Нас пригласили в Дом Культуры МАИ (МАИ? он около Сокола находится), показали небольшое выступление, а затем перешли к церемонии вручения удостоверений. Каждый удостоверяемый кратко рассказывал о своем "боевом" пути, а потом сильно благодарил ВинЧун. Описания боевого пути мне показались подозрительными и при первой же предоставившейся возможности я задал вопрос: а чего это все инструктора так плохо относятся к каратэ (таэквондо, киокушинкай - примерно такой был список)? Неужели это им ничего не дало?

Отвечать ринулись сразу два инструктора, говоря о том, насколько ВинЧун лучше. А Валерию Васильевичу пришлось за них вступаться, в примирение говоря, что каратэ (таэквондо и тд) дало им многое, как и ему самому, но все они его переросли.

Да.

Поединки в ВинЧун ведутся попеременно - один атакует, другой защищается и наоборот. Это связано с тем, что ВинЧун всегда действует от действий противника.

Когда я наблюдал первые соревнования по ВинЧун (на которых я был дисквалицифирован, кстати, ничего хорошего), один из тех инструкторов вполне себе применял для нападения технику таэквондо. Уверенно выиграл соревнования, кстати.

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

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

Вот.

Сейчас ВинЧун не тот, что прежде. ;)

Сейчас в нем изучается порядка десяти форм супротив трех (два варианта короткой формы Утренней Молитвы и длинная форма 108). В нем имеются градации мастерства и общая структура экзаменов напоминает каратэ.

И еще.

То, что меня увлекало в 20 лет, 22, 24 года - дзен-буддизм, чань-буддизм, ВинЧун, Карлос Кастанеда, индийский мудрец Кришнамурти, - сейчас не трогает вовсе. И даже трогать не хочется, даже самой длинной палкой. Неинтересно, и все. То, что казалось загадкой, стало прозрачным.

Однако, начало 108 сидит у меня в подкорке, Малую (Утреннюю) Молитву помню до сих пор.

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

Недавно понял, что инструктора и Валерий Васильевич относятся к прошлому так же. Только их не трогает совсем другое. ;)

Кхм.

Я думаю, что отношение nataly_hill к религии совершенно женское. Воспринимать его надо именно так, как женское и совершенно субъективное. Корни его лежат, скорее, в этологии, чем в православии. Есть у меня все основания так предполагать, разворачивать, правда, не буду.

PS
А правило "когда в смятении - иди на турник (иди гулять, отжимайся, приседай)" работает до сих пор. Это частный случай правила "когда плохо - занимайся делом, которое получается лучше всего." Дон Хуан, ага. Турник, правда, был раньше Кастанеды.
with Cat The Cat

Про REPL

REPL stands for Read-Eval-Print Loop. Историю его я до конца не знаю, но, по-моему, оно идет от ранних Лисп-систем.

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

В таком режиме, помимо Лиспа, работали (и работают) Форт-системы, а также ранний ML. REPL осуществляется штукой под названием top level, периодически сохраняя состояние которой, мы получаем все более и более работающую программу.

Помимо удобства, пошаговая разработка несет в себе и минусы - например, можно изменить определение какой-либо функции, и это не будет отображено в старом коде. Эта основная претензия к top level, изложенная в The ZINC Experiment Ксавье Лероя.

У Хаскеля, представленного ghc, нет top level. Все исходники хранятся в текстах, которые заново компилируются при загрузке. А вот интерактивная среда выполнения есть, ghc --interactive, ghci.

Она позволяет определять функции и константы:
Main>let f x = x+1
Main>let y = 10
Main>f y
11
Main>
Правда, они сбросятся при загрузке исходников. Но это так и задумывалось. ;)

Еще она позволяет осуществлять тестовые прогоны функций (вон, выше f y).

Мы можем получить информацию о каком-то символе:
Main>:i +
class (Eq a, Show a) => Num a where
  (+) :: a -> a -> a
  ...
        -- Imported from GHC.Num
infixl 6 +
Вообще, список возможностей можно получить через команду ":?". Моя любимая команда называется :t и с ее помощью я подбираю тестовые выражения:
Main>:t f
f :: (Num a, Num b) => a -> b -> Integer
Main>:t f (Var "x")
f (Var "x") :: Num b => b -> Integer
Main>:t f (Var "x") 10
f (Var "x") 10 :: Integer
Main>f (Var "x") 10
x*10
Main>
Если я просто наберу f, ghc сообщит о том, что не знает, как выводить значения-функции, причем выведет многословно. В случае :t я получаю приближения к типу результата, получая окрики от проверки типов только в случае действительной ошибки.

Как REPL может быть использован в реальной жизни.

В нашей модели процессора было два типа сборки: с полной печатью логов и без оной, только некая информация для общей проверки. Полная печать выводила массу информации: списки команд на разных этапах, до, после и во время, что выполняется, что куда пишется. Вся информация выводилась с помощью deriving Show, поэтому была готова к подстановке в качестве обычного значения (кстати, как можно получать читаемые значения обычного show). Ну, собственно, можно и не продолжать.

Но я продолжу. Поскольку все равно немного осталось.

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

Дальше из этой информации составлялись функции, на вывод которых я и глядел. Урезая объем информации, я локализовывал место ошибки в коде.

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

После чего на отладчик XCode я смотрел со смешанными чувствами. ;)