?

Log in

No account? Create an account
Написано финном с изрядной долей самоиронии. На английском языке. Часть -- правда, часть -- выдумки. Источник мощного когнитивного диссонанса на всё время прочтения. Прошу: http://www.ilmatar.net/~np/misc/foreigners_guide_to_finland.html .

Tags:

rtmpdump: error code 32

If you like me spent hours searching what does the rtmpdump's error (when trying to download live streams)

Caught signal: 13, cleaning up, just a second...
, following by

ERROR: WriteN, RTMP send error 32


mean, then after browsing many public sources (and finding no evidence there), measuring the connection throughtput (thanks to iftop program) and trying different internet providers I can, with a high level of confidence guess that error means

"your (average) connection speed is slower than what server expects, and your client is enough behind the stream that server has no more data for you"

Tags:

Фотографии загружены на сторонний хостинг и со временем могут стать недоступными.

http://imm.io/sTnT
http://imm.io/sToO
http://imm.io/sTpF
http://imm.io/sTq0

Tags:

В частности, теперь Flash требует кнопка "Browse".

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

Теперь нужно думать, что с этим делать.

Есть у кого-нибудь идеи (поставить реше^WAdobe Flash не предлагать)?
Иисалми и Yливьеска -- города в центральной Финляндии, на широтах, соответственно, 63,5° и 64°. В обоих по ~20 000 населения. В названии второго города не опечатка, просто аналогичной буквы в русском языке нет, а коверкать название не хочу. Читается приблизительно как буква 'ю' в слове 'дюза'.

Иисалми:


Read more...Collapse )

Tags:

Лоймаа - город в западной Финляндии с населением в ~16 тысяч жителей.



другие фотографииCollapse )

Tags:

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

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

Однако, если подойти к вопросу с огоньком, то можно создать то, что хочется пересматривать ещё и ещё. Наслаждайтесь.

Tags:

Cupt bits

Half a year since the last status update, so here we go:

  • New mailing lists: cupt-user and cupt-devel, thanks to the Alioth people&infrastructure. The first, cupt-user is the preferred form of the feedback (except of the bug reports, which still go to the Debian BTS) from now on, also I intend send there announcements and questions to all users who care. The second, cupt-devel, is set as maintainer address for the Cupt package in Debian; also, as the name suggests, a place for discussions about the code if any.

  • New versions: 2.3, 2.4 and 2.5 have been released bringing many new command line switches, an opt-in ANSI color support for the action preview prompt, improvements in the error and warning messages and more.

  • Multiarch: Cupt in wheezy won't support multiarch. No standard is published yet and not enough time to test for a stable release. Once the standard is published, I plan (but don't promise) to set the branch in the repository and evaluate the implementation details.

  • Localizations: the code and message strings seem now ready, and I'm going to send a call for translations in a week.

Tags:

Не смог найти первоисточник, но фраза очень остра:

"When people ask me 'plz' because it's shorter than 'please' I tell them 'no' because it's shorter than 'yes"

Конечно, всё хорошо в меру. Я предпочту 'IIRC' фразе 'if I remember correctly' в кругу работников отрасли информационных технологий. Для человека, с которым я не знаком, я, пожалуй, употреблю полный вариант.

Tags:

bureaucratic programming

Suppose that you need to write an interface to a function which draws triangles. It could look like this: (the language is a C++-based pseudocode)

void rawDrawTriangle(size_t a, size_t b, size_t c) { ... }
bool isValidTriangle(size_t a, size_t b, size_t c)
{
  return (a + b > c) && (a + c > b) && (b + c > a);
}

void drawTriangle(size_t a, size_t b, size_t c)
{
  if (max(a, b, c) > MAX_LINE_LENGTH)
  {
    throw("one of sides is too big");
  }
  if (!isValidTriangle(a, b, c))
  {
    throw("invalid triangle");
  }
  rawDrawTriangle(a, b, c);
}

void userFunction()
{
  ...
  drawTriangle(3, 5, 7);
  ...
}


And the following is how a bureaucratic version of the code could look like:

class Certificate
{
  time_t getCreationTime() const { ... }
  Certificate() { ... }
};

class TriangleIsValidCertificate: public Certificate
{
 public:
  const size_t a;
  const size_t b;
  const size_t c;
 private:
  TriangleIsValidCertificate(size_t a, size_t b, size_t c) { ... }
 friend class TriangleCertificationAuthority;
};

class TriangleCertificationAuthority
{
  static TriangleIsValidCertificate getTriangleIsValidCertificate(size_t a, size_t b, size_t c)
  {
    msleep(random() * 2);
    if ((a + b > c) && (a + c > b) && (b + c > a))
    {
      if (a == b && a == c)
      {
        msleep(random() * 10); // hm, suspicious query
      }
      return TriangleIsValidCertificate(a, b, c);
    }
    else
    {
      throw("invalid triangle");
    }
  }
};

class LineIsDrawableCertificate: public Certificate
{
 public:
  const size_t length;
 private:
  LineIsDrawableCertificate(size_t l) { ... }
 friend class LineCertificationAuthority;
};

class LineCertificationAuthority
{
  static LineIsDrawableCertificate getLineIsDrawableCertificate(size_t length)
  {
    msleep(rand());
    if (length <= MAX_LINE_LENGTH)
    {
      return LineIsDrawableCertificate(length);
    }
    else
    {
      throw("the line is too long");
    }
  }
};

void drawTriangle(size_t a, size_t b, size_t c, LineIsDrawableCertificate lineCerts[3], TriangleIsValidCertificate tivCert)
{
  msleep(rand() * 5);
  if (lineCerts[0].length != a || lineCerts[1].length != b || lineCerts[2].length != c)
  {
    throw("your application is rejected");
  }
  if (tivCert.a != a || tivCert.b != b || tivCert.c != c)
  {
    throw("your application is rejected");
  }
  if (time() - tivCert.getCreationTime() > '60 milliseconds')
  {
    throw("your application is rejected");
  }
  msleep(rand());
  rawDrawTriangle(a, b, c);
}

void userFunction()
{
  ...
  size_t a = 3, b = 5, c = 7;
  auto aCert = LineCertificationAuthority::getLineIsDrawableCertificate(a);
  auto bCert = LineCertificationAuthority::getLineIsDrawableCertificate(b);
  auto cCert = LineCertificationAuthority::getLineIsDrawableCertificate(c);
  auto tviCert = TriangleCertificationAuthority::getTriangleIsValidCertificate(a, b, c);
  drawTriangle(a, b, c, array(aCert, bCert, cCert), tviCert);
  ...
}