Обратите внимание на строки 9 и 10, тут любопытно, я встречал языки, где в качестве имён переменных можно использовать
символы Юникода (тот же ПХП), а тут, мало того, можно писать юникодные символы с использованием слеш-ю-нотации!{
string @string = @"string ""string""";
Console.WriteLine (@string.Insert (1, "tt"));
}
Console.WriteLine (@string); // ошибка!
Вещь, с которой не ожидал столкнуться — автоматическое приведение типов. Я как-то был уверен (о Си-шарпе я только слышал, но ничего определённого не знал), что тут будет как в Гоу или Си — нужно преобразовывать переменные к какому-то единому типу, а уже потом что-то с ним делать. Оказалось, ничего подобного:
byte байтраз = 3, байтдва = 5;
// строка кода ниже выведет System.Int32 (а не System.Byte, как я ожидал)
// арифметические операции определены только для типов int и больше,
// поэтому произойдёт преобразование типов
Console.WriteLine ((байтраз + байтдва).GetType());
Console.WriteLine ("Первый байт равен: " + байтраз); // строки спокойно складываются с числами






// gcc -framework CoreFoundation -framework IOKit gethensleep.c -o getthensleep
// Evgeny Stepanischev May 2013
#include <IOKit/IOKitLib.h>
#include <CoreFoundation/CoreFoundation.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <stdbool.h>
#include <sys/param.h>
#define RETURNONFAIL(code) do { if (errcode != KERN_SUCCESS) {\
fprintf(stderr, "Error code: 0x%Xn", GETCODE(errcode));\
return code;\
} } while (0)
#define GETCODE(err) ((err)&0x3fff)
#define THRESHOLD 0.2
typedef struct {
int16_t x;
int16_t y;
int16_t z;
} ostruct;
void macSleep() {
io_registry_entry_t r = IORegistryEntryFromPath(
kIOMasterPortDefault,
"IOService:/IOResources/IODisplayWrangler"
);
if (r) {
IORegistryEntrySetCFProperty(r, CFSTR("IORequestIdle"), kCFBooleanTrue);
IOObjectRelease(r);
}
}
int main() {
mach_port_t masterPort;
kern_return_t errcode;
io_iterator_t iterator;
io_object_t service;
io_connect_t connect;
void *in;
ostruct *out;
size_t osize = 40, isize = 40;
errcode = IOMasterPort(MACH_PORT_NULL, &masterPort);
RETURNONFAIL(-1);
CFMutableDictionaryRef matchingDictionary = IOServiceMatching("SMCMotionSensor");
errcode = IOServiceGetMatchingServices(masterPort, matchingDictionary, &iterator);
RETURNONFAIL(-2);
service = IOIteratorNext(iterator);
IOObjectRelease(iterator);
if (service == kIOReturnNoDevice) {
return -3;
}
errcode = IOServiceOpen(service, mach_task_self(), 0, &connect);
IOObjectRelease(service);
RETURNONFAIL(-4);
in = malloc(isize);
out = malloc(osize);
if (in == NULL || out == NULL) {
return -6;
}
memset(out, 0, osize);
memset(in, 1, isize);
int16_t prevz;
bool inited = false;
for(;;) {
errcode = IOConnectCallStructMethod(connect, 5, in, osize, out, &isize);
RETURNONFAIL(-5);
if (inited) {
float min = MIN(prevz, (*out).z);
float max = MAX(prevz, (*out).z);
if (max) {
float dev = 1 - min / max;
if (dev > THRESHOLD) {
macSleep();
}
}
} else {
inited = true;
}
prevz = (*out).z;
usleep(10000);
}
return 0;
}
Порог срабатывания (0.2) я подобрал экспериментальным путём. Скомпилировать можно компилятором gcc (входит в XCode), строка компиляции указана первой в приведёном коде. Можно засунуть в автозагрузку и наслаждаться эффектом.// нужно добавить ещё один ключ компиляции: -framework ApplicationServices
#include <ApplicationServices/ApplicationServices.h>
void macLock () {
CGSCreateLoginSession(NULL);
}
Думаю, его просто забыли убрать, наверное это рудимент прежней модели Макбука. Но наличие сенсора не говорит о том, что он работает. Я сегодня
потратил пару часов, чтобы разобраться как в Маке читают этот сенсор и написал вот такую программу на Си:
// MacbookPro (OS X 10.5+) SMS reading. Evgeny Stepanischev May 2013
// gcc -framework IOKit motion.c
#include <IOKit/IOKitLib.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
do { if (errcode != KERN_SUCCESS) {\
fprintf(stderr, "Error code: 0x%Xn", GETCODE(errcode));\
return code;\
} } while (0)
#define GETCODE(err) ((err)&0x3fff)
typedef struct {
int16_t x;
int16_t y;
int16_t z;
} ostruct;
int main() {
mach_port_t masterPort;
kern_return_t errcode;
io_iterator_t iterator;
io_object_t service;
io_connect_t connect;
void *in;
ostruct *out;
size_t osize = 40, isize = 40;
errcode = IOMasterPort(MACH_PORT_NULL, &masterPort);
RETURNONFAIL(-1);
CFMutableDictionaryRef matchingDictionary = IOServiceMatching("SMCMotionSensor");
errcode = IOServiceGetMatchingServices(masterPort, matchingDictionary, &iterator);
RETURNONFAIL(-2);
service = IOIteratorNext(iterator);
IOObjectRelease(iterator);
if (service == kIOReturnNoDevice) {
return -3;
}
errcode = IOServiceOpen(service, mach_task_self(), 0, &connect);
IOObjectRelease(service);
RETURNONFAIL(-4);
in = malloc(isize);
out = malloc(osize);
if (in == NULL || out == NULL) {
return -6;
}
memset(out, 0, osize);
memset(in, 1, isize);
errcode = IOConnectCallStructMethod(connect, 5, in, osize, out, &isize);
RETURNONFAIL(-5);
printf("%d, %d, %d\n", (*out).x, (*out).y, (*out).z);
return 0;
}
Программа выводит три числа: показатели наклона влево/вправо, назад/вперёд и показатель ускорения, который меняется, если ноут резко поднять или опустить.
Я сегодня пошёл симку менять, прежняя, резанная под мини-сим, померла, воспользовавшись случаем сменил её на нормальную мини-сим. Меняя, увидел на симке надпись «LTE» и спросил у персонала что это значит. Оказалось — теперь в некоторых смартфонах доступен режим ЛТЕ для интернета. У нас ЛТЕ уже давненько, но на только для УСБ-модемов, симка из которых (если вставить её в смарт) позвонить никуда не позволяла. В общем, нужны, как я понял: специальная симка, телефон, поддерживающий российский ЛТЕ (у меня — Нокия 920, причём нужна самая последняя прошивка) и что-то включить в «личном кабинете» (мне сотрудницы сами включили).Наиболее полное исследование над словами «мама» и «папа» как универсальными терминами было проведено лингвистом Романом Якобсоном. Он объяснил, что для человека наиболее простыми для воспроизведения являются открытые гласные звуки. Дети могут произносить гласные звуки с первых дней жизни. Что они и делают. Постоянно. Как только они начинают экспериментировать с другими звуками, они пробуют самые простые согласные. Обычно они начинают со звуков, производимых с закрытыми губами, так называемых «губных согласных», например, [m], [p], [b]. Дети собирают всю энергию, чтобы вытолкнуть этот новый гласный звук «мммм», а затем расслабляют рот в наиболее простом открытом гласном «а». Добавляя сюда естественное повторение в детской речи (лепет), мы получаем «ма–ма», «ба–ба», «па–па» и так далее.Я ещё, учась в школе, сообразил, что слово «мама», вероятно, так распространено во всех языках, потому что его проще всего произнести, что бы оно там не значило. Но я думал, что оно ничего не значит для младенца, просто какие-то звуки, ан нет, учёные считают, что оно имеет отношение к желанию поесть.
Так почему же дети все–таки тяготеют к звуку [m], а не [p] или [b]? Конечно же, из–за женской груди. Звук [m] — самый простой для детского рта, приложенного к теплой аппетитной груди. Даже став взрослыми мы продолжаем ассоциировать «мммм» с чем–то вкусненьким. То же делает и ребенок.
Якобсон в своей работе полагает, что ребенок не имеет ни малейшего понятия о том, что вас зовут мамой или папой или как–то еще. Слово «мама» не значит «я люблю тебя, дорогая женщина–ангел, принесшая в жертву сон, карьеру и упругость ягодиц». Оно значит «еда».
Так что когда ребенок зовет папу «мамой» и все больше начинает тревожиться, что папа не становится «мамой», на самом деле он не зовет свою мать. Он способен понять, что волосатый плоскогрудый болван, который пытается петь колыбельную, не является Главным Блоком Раздачи Еды №1. А Главный Блок Раздачи Еды №1 или хотя бы подходящий латексный заменитель, который этот Блок обычно носит с собой, должен быть доставлен немедленно.
Не знаю, рассказывают ли сейчас в школах кто такая Валентина Терешкова, когда я там учился,
её имя произносили рядом с Гагариным и Леоновым.Во время обучения она проходила тренировки на устойчивость организма к факторам космического полёта. Тренировки включали в себя термокамеру, где надо было находиться в лётном комбинезоне при температуре +70 °C и влажности 30 %, сурдокамеру — изолированное от звуков помещение, где каждая кандидатка должна была провести 10 суток.Всё-таки детская память — удивительная штука. Космос в моём детстве занимал далеко не центральное место среди моих интересов, был какой-то всплеск внимания к этой теме, но не более, чем ко всему остальному, но вот через много лет увидел это фото и сразу понял — на нём Терешкова! Не уверен, что где-то встречал это лицо во взрослые годы, её как-то подзабыли.
Утилита лежит там же — на «ГитХабе».


Третье надгробье валяется около чужой могилы, подпирает кирпичи оградки. Я уже очень торопился (в тот день мы объехали шесть деревень, да ещё и приехали с другого конца Татарстана), так что там написано никуда не записал, сейчас на фотографии я могу разобрать только слово «прахъ» и год — 1811, если не ошибаюсь.
Следующая могила из села Старое Исаково Бугульминского района, если правильно помню. Надпись хорошо видно — первого мая 1901 похоронен Шулешкин Александр Трофимович, 15 июля 1835 года рождения. Фамилия удивительно знакомая, кажется, я когда-то уже с ней сталкивался, изучая историю тех мест.
Дальше две безымянные могилы из Нового Исакова и Дубовки Бугульминского района. Если на первой ещё угадываются какие-то полустёртые письмена, но на второй их, кажется, и не было никогда.
Когда-то, ещё в детстве, когда мы с бабушками навещали могилы родственников, я видел только ухоженные могилы — чужие меня не интересовали, выпадали из моего поля зрения, а те, куда мы пришли конечно были ухоженными — мы за ними присматривали. И оттуда я вынес детское заблуждение, что могилы они почти вечные — если их сделали, они никуда с кладбища не денутся. Заблуждение, конечно. Новый опыт посещений кладбищ говорит об обратном: могилы умирают так же как люди. Памятники разрушаюся, кресты гниют, а чаще всего банально нехватает места и хоронят поверх старых могил, просто убирая приметы прежних.
В предпоследний день в Грузии обнаружил, что как-то умудрился повредить матрицу на своём «Макбуке», сначала она ещё как-то функционировала — мне даже удалось зарегистрироваться
на рейс, но по приезде в Россию, отказала совсем — теперь на ней только разнообразные полосы, которые видно на фото.
Очень опрометчиво как мне кажется, очень надеюсь,
что никто не слил себе копии паспортов. Правда, я не очень
понимаю зачем они, но слышал несколько историй (уж
не знаю правдивых ли), когда по копии паспорта брали кредит, который
потом приходилось выплачивать владельцу паспорта, а не настоящему заёмщику.
Красивее всего он выглядит в темноте, к сожалению, у меня не получился снимок — по всей его длине проходят волны света. Когда
мы шли по нему днём, я с удивлением обнаружил в стеклянных стенках сотни светодиодов. На снимке плохо видно, но вот эти светлые квадратики —
работающие светодиоды внутри стекла.
Удивил меня и факт их наличия, и то, что они днём тоже работали. Выглядит восхитительно. Соединены они едва заметными проводками,
идущими внутри стекла горизонтально, если сильно не приглядываться, они совершенно неразличимы.