дыбр, пока билдица
Jan. 30th, 2011 08:40 pmВыходные как-то организованно прошли. У меня т.к. agile теперь дома стоит, тикеты на стенку наклеены, то, например, вчерась успел почапать на тренажере, починить калитку, купить грунт для грядки, посеять укроп, кинзу и ореган, повесить на стенку новый контроллер к поливалкам, посадить под магнолией порядочного размера кактус (в двойных перчатках работал), пропылесосить всё дома нахрен, послать ченджлист в IRS, в смысле, налоги пофиксить за 2008й год (т.к. вдруг обнаружил, что переплатил штуку), съездить в магазин купить чёрного хлеба и вафель, сварить щи, написать парсер-комбинатор для выдёргивания диаграмм из документации по xydiagram, посмотреть фильм и почти познать суть вещей. Это была суббота. О, и ещё машину съездил помыл. В связи с предстоящим дождиком зазиповал её на ночь в гараж.
А в воскресенье пошел дождик, и я что-то завалялся, а потом сидел весь день выкидывал парсер-комбинатор, писал свой парсерок (ну это фигня), вставлял примеры диаграмм в пришив, исправлял примеры (далеко не все идут, надо будет разбираться), а потом, к девяти, поехал на работу, т.к. у нас ночной релиз. Это что-то вроде парти, конечно. Народу порядочно собралось. Я-то и не нужен, скорее всего, так что занимаюсь хозяйством - ускорил вот тесты (в смысле, ещё в пятницу солюшен нашел, в три раза быстрее тикают), теперь коммитить буду; да ещё гугловскую библиотеку гуаву наконец скачал и закоммитил, теперь буду пользоваться, а там, глядишь, и другие подтянутся. Ханлонг так с удовольствием, он давно уже в курсе, да лень было возиться.
А в воскресенье пошел дождик, и я что-то завалялся, а потом сидел весь день выкидывал парсер-комбинатор, писал свой парсерок (ну это фигня), вставлял примеры диаграмм в пришив, исправлял примеры (далеко не все идут, надо будет разбираться), а потом, к девяти, поехал на работу, т.к. у нас ночной релиз. Это что-то вроде парти, конечно. Народу порядочно собралось. Я-то и не нужен, скорее всего, так что занимаюсь хозяйством - ускорил вот тесты (в смысле, ещё в пятницу солюшен нашел, в три раза быстрее тикают), теперь коммитить буду; да ещё гугловскую библиотеку гуаву наконец скачал и закоммитил, теперь буду пользоваться, а там, глядишь, и другие подтянутся. Ханлонг так с удовольствием, он давно уже в курсе, да лень было возиться.
no subject
Date: 2011-01-31 04:48 am (UTC)no subject
Date: 2011-01-31 04:49 am (UTC)no subject
Date: 2011-01-31 04:55 am (UTC)no subject
Date: 2011-01-31 05:02 am (UTC)no subject
Date: 2011-01-31 05:06 am (UTC)no subject
Date: 2011-01-31 08:10 am (UTC)no subject
Date: 2011-01-31 08:19 am (UTC)no subject
Date: 2011-01-31 08:22 am (UTC)Отлить в граните, я щетаю.
no subject
Date: 2011-01-31 09:38 am (UTC)no subject
Date: 2011-01-31 11:35 am (UTC)no subject
Date: 2011-01-31 12:19 pm (UTC)no subject
Date: 2011-02-20 03:12 pm (UTC)no subject
Date: 2011-02-20 05:03 pm (UTC)package org.presheaf import java.io.{InputStream, FileInputStream} object xydocscan { def bytes(is: InputStream) : Iterator[Byte] = new Iterator[Byte] { def hasNext = is.available > 0 def next = is.read.toByte } def isText(b: Byte) = b == 0x0a || b == 0x0d || b >= 32 && b < 0xff def chars(is: InputStream) = bytes(is) filter isText map (_.toChar) import org.presheaf.DiagramSamples def main(args: Array[String]) { val scanner = new XyScanner(chars(new FileInputStream(args(0)))) for (diagram <- scanner) { if (!diagram.isEmpty) println(diagram + "\n") } } class XyScanner(val input: Iterator[Char]) extends Iterator[String] { def matches(input: Iterator[Char], what: String): Boolean = { for (c <- what) { if (!(input.hasNext && c == input.next)) return false } true } // kind of cheap, won't find 'maman' in 'mamaman' def find(input: Iterator[Char], what: String) { while (input.hasNext) { if(matches(input, what)) { return } } } def hasNext = { input.hasNext } private[this] val sb = new StringBuilder def next = { find(input, "\\xymatrix{") if (!hasNext) { "" } else { sb.clear var level = 1 while (input.hasNext && level > 0) { val c = input.next sb append c c match { case '{' => level = level + 1 case '}' => level = level - 1 case _ => } } sb.dropRight(1).mkString("") } } } }