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 = 

2013-04-15

Немножко извращений с Objective C

1. Ехал лямбда через лямбда... 
Реальный код, убрал несущественное...
- (void) processItems:(NSDictionary *) items
                using:(void (^)(Item * item)) processor
{
    [self runBlock:^() {
        NSError * error = [self catchNSError:^() {
            [items enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
                [obj enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
                    processor(obj);                                        
                }];
            }];
        }];
    }];
}

2. Типизированные коллекции в Obj-C
NSArray/*<NSString*>*/ * strings = ...
NSDictionary/*<NSString*,NSString*>*/ * dict = ...

2013-03-13

СЯУ, почему grep -- grep.

 В честь команды ed-а
 g/regular-expression/p.

2013-03-06

ubuntu mir


Глянул на ланчпаде исходники Mir-а. Хороший С++11, с auto, лямбдами, умными указателями.
Используют boost и google-protobuf.

6 дней работы над новым старым проектом.


>python svn-diffstat.py -rXXX
22 files changed: 2741 insertions(+), 4069 deletions(-) = -1328

svn-diffstat.py, если че.