Thursday, February 10, 2011

О несобственных интегралах

Вообще говоря, на английском их называют improper integrals. "Proper" имеет два основных значения: "надлежащий/правильный" (как в "do your job properly") и "собственный" (например, "proper noun" — "имя собственное").

Так что переводчик, похоже, тем ещё кретином был. Это ж надо было совсем нихрена не шарить в математике, чтобы выбрать такой перевод =\
(Если кому-то такие "аргументы" кажутся неубедительными, можете узнать из Википедии, что, например, на нидерландском понятие звучит как "Oneigenlijke", на польском — "niewłaściwa", что google translate переводит как "ненадлежащий" и "неуместный" соответственно. Невменяемо термин переводится, видимо, только в России и Украине.)

Ну да ладно, хотя бы дроби в нашем языке "правильные" и "неправильные", и то хорошо =)

Thursday, January 20, 2011

смайлокод

int main(){
    int _ = 0;
    1 ^_^ 2 ^_- 3 -_- 4 -_^ 5 *_* 6 <_< 7;
    return _;
}

Tuesday, January 18, 2011

кругозорорасширение

Оказывается, есть ряд сайтов, на которых можно "вживую" пощупать различные языки программирования, следуя пошаговым туториалам. То бишь javascript-ом эмулируется интерактивная консоль. Естественно, всё in english only.

tryruby.org  (только вот поддержка браузеров там так себе)
tryhaskell.org
tryerlang.org
try-clojure.org (недоделан, но какое-никакое представление о языке даёт)
trypython.org (требует Silverlight (якого у мене нема, так что не затестил))

Tuesday, January 4, 2011

Ruby: наследие Smalltalk

I always knew that one day Smalltalk would replace Java.
I just didn't know it would be called Ruby.
 
—Kent Beck
Если совсем вкратце, суть языка Smalltalk состоит в том, что:
  1. всё, что ни есть — объект, числа и строки в том числе;
  2. объектам можно посылать произвольные сообщения, а уж что эти объекты будут с ними делать — на их усмотрение. Сообщение, как нетрудно догадаться, — тоже объект.
Ruby, появившийся на полтора десятка лет позже, включил в себя обе эти черты. У всех объектов есть метод send:
-5.send :abs => 5
51.send :gcd, 34 => 17
7.send :send, :+, 24 => 33
Сообщение — это объект класса Symbol; в коде он начинается с двоеточия. В качестве аргументов send посылаются сообщение и необходимые аргументы. Заметьте, что в последнем примере отсылается сам :send, и, вообще говоря, цепочка :send-ов перед параметрами может быть любой длины :-)

Однако как эти свойства можно применить на практике?

Sunday, December 26, 2010

О маразме некоторых преподавателей информатики

СПбГУ. Специальность "Прикладная математика и информатика", 1 курс. Лекции читает некто К. Для пущей определённости могу заметить, что его фамилия и слово "кретин" различаются лишь 2-й и 3-й буквами.

Итак, дело дошло до зачёта. Мне там выпал билетик про каноническую форму перестановок. Программу этот <censored> принял, но его придирки были фееричненькие. Там критиковать их было, наверное, бессмысленно (всё равно такие не лечатся, да и вообще — на зачёте себе дороже), так что раскритикую здесь. В пух и прах.

Friday, December 24, 2010

Sort of introduction to J.

Firstly, what is J? Yeah, it's a letter in English alphabet. But other than that, J is a programming language. As I suppose, this is a language for lazy mathematicians—so hopelessly lazy that they don't want to type long function names. Thus it's VERY concise language.

Let's consider just one example. Suppose we wanna investigate the sequence of first digits of powers of 2. (1,2,4,8,16,32,64,128,256,...) The question is: what's the frequency of the digit 7? (You can find via search engines several versions of this problem: this, for example.)
Using J, we can find (well, estimate) the answer in one line:
(+%~(#&I.&(7=<.&(10^1|(10^.2)&*&i.)))) 1000000
0.05799
The exact answer is
.
That follows from the equidistribution theorem.

So, what does this mess of symbols mean?

Monday, December 20, 2010

GPS & Ruby: dealing with performance bottlenecks

About a month ago, I posted about how to convert pure GPS data into Ruby class instances. But as it turned out this converting in general takes more time than processing the data.

For tests I've used 2.7MB .nmea file. It contains about 5 thousand GPRMC sentences from which about 3 thousand contain useful information.

The first version of readNMEA function takes about 0.87 seconds (on my Asus EeePC 1001P) to make an array of GPRMC class instances. How can we improve that?

Firstly, access to the elements of an array (by index) is faster than access to the elements of a hash (by key). Thus using old-style regular expressions decreases the time from 0.87 to 0.72 seconds: