2013-12-03

одного потока хватит всем...

В GDI+ внутри Graphics.DrawImage лочится критическая секция. Поэтому  заводить более одного рабочего потока для рисования -- бессмысленно. А если еще и гуй отрисовывается картинками, то вообще фигня получается.

2013-11-25

Dot syntax in Objective C

По рсс приползло прекрасное (или ужасное, как посмотреть).
Люди делают в Objective-C вызов метода через точку. К примеру, a.plus(b) вместо [a plus:b] :
Заводят рид-онли свойство plus, которое возвращает блок (ака лямбда), который зовет у self метод plus: с переданным параметром.
Получается (a.plus)(b).

PS. Смотреть тут

2013-11-20

о посредниках.

Чтобы Visual Studio 2013 увидела 2008-ю как toolset (IDE от 2013, компилятор от 2008), нужно установить 2010-ю.

2013-10-18

Разработчики openSUSE -- <нехорошее слово>.


Есть программа, назовем ее abc, плагины к которой на других системах находятся в /usr/lib/abc (c погрешностью до /usr/lib64/abc или /usr/lib/x86_64-linux-gnu/abc).
В сусе эти плагины ВНЕЗАПНО лежат в /usr/lib64/libabc-1_0.

PS. Project Owner заменил мой код (беру из `ldd abc` путь к libabc.so, к нему добавляю "/abc") на другой костыль: вызов abc с несуществующим плагином и парсинг пути из сообщения об ошибке.

2013-07-22

Заменил Caps Lock на Ctrl.

Собственно, сабж.

Если кому интересно:
[HKEY_CURRENT_USER\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,1d,00,3a,00,00,00,00,00 


2013-06-21

Способ реализации "приватного" АПИ

Интересный трюк:
template < typename T > 
class access_key {
private:
    friend T;
    access_key() {}
};

class repairmen;

class elevator {
public:
    void fix( access_key<repairman> );
};

class repairman {
public:
    void fix_elevator( elevator & e ) { 
        e.fix( access_key<repairman>() ); 
    }
}
увидел тут

2013-05-08

Много видал я извращений с макросами, но такого ...

Cello is a GNU99 C library which brings higher level programming to C.

Interfaces allow for structured design;
Duck Typing allows for generic functions;
Exceptions control error handling;
Constructors/Destructors aid memory management;

Ссылки на примеры:
Пример программы:

#include "Cello.h"

int main(int argc, char** argv) {

  /* Tables require "Eq" and "Hash" on key type */
  var prices = new(Table, String, Int);
  put(prices, $(String, "Apple"),  $(Int, 12)); 
  put(prices, $(String, "Banana"), $(Int,  6)); 
  put(prices, $(String, "Pear"),   $(Int, 55));

  /* Tables also supports iteration */
  foreach (key in prices) {
    var price = get(prices, key);
    print("Price of %$ is %$\n", key, price);
  }

  /* "with" automatically closes file at end of scope. */
  with (file in open($(File, NULL), "prices.bin", "wb"))) {

    /* First class function object */
    lambda(write_pair, args) {

      /* Run time type-checking with "cast" */
      var key = cast(at(args, 0), String);
      var val = cast(get(prices, key), Int);

      try {
        print_to(file, 0, "%$ :: %$\n", key, val);
      } catch (e in IOError) {
        println("Could not write to file - got %$", e)
      }

      return None;
    };

    /* Higher order functions */
    map(prices, write_pair);
  }

  delete(prices);
}

На что только люди не пойдут, чтоб на С++ не писать.

2013-04-18

продолжаем извращаться

Еще один вариант "типизированных" коллекций в Objective C
#define NSArray_(T) NSArray
#define NSDictionary_(K,V) NSDictionary
NSArray_(NSString) * strings = …
NSDictionary_(NSString,NSString) * dict =