All streams
Search
Write a publication
Pull to refresh
50
0

Погромист

Send message
Стандартный трюк по оборачиванию лестницы условий, по-моему даже свое название имеет. В Adobe SDK все примеры так обернуты, мы решили по стилю не выделяться.

Впрочем, еще можно встретить вот такое

__try {
    if(foo) __leave;
}
__except(...) {

}


В MS DDK встречается в примерах.
Там dlopen() сюрпризов не преподнес.

Вообще, в деле запуска Java, для мака разницы немного, основных отличий — вот они

#ifdef WINDOWS
	#define CORRECT_JNI_VER JNI_VERSION_1_6
#else //MACINTOSH
	#define CORRECT_JNI_VER JNI_VERSION_1_4
#endif

и вот это
		JavaVMInitArgs vm_args;
		vm_args.version = CORRECT_JNI_VER;
		JavaVMOption* options = new JavaVMOption[vmParamCount];

		options[0].optionString = memoryOpt; // -Xmx...
		options[1].optionString = classpath;
#ifdef MACINTOSH
		options[2].optionString = "-Djava.awt.headless=true";
		options[3].optionString = "-XstartOnFirstThread";
#endif

Я иногда делаю так

static int inSigSegvHandler = 0;
static void sigsegvHandler(int sig) {
    ++inSigSegvHandler;
    if(inSigSegvHandler > 1) { // защита от двойного попадания, сигнал ставлю sigaction + SA_RESTART
        fprintf(stderr, "*** SIG %d TWICE ***\n", sig);
        _exit(2);
    }

    invokeDebuggerToSelf();
    _exit(1);
}


Где функция

void invokeDebuggerToSelf() {
    int pid = getpid();
    char link[MAX_PATH];
    char buf[MAX_PATH]; 
    char bufexe[MAX_PATH]; 
    char pidbuf[16];
    char cmdline[MAX_PATH]; 

    memset(bufexe, 0, sizeof(bufexe));
    memset(link, 0, sizeof(link));
    sprintf(link, "/proc/%d/exe", pid);
    if(readlink(link, bufexe, MAX_PATH) <=0)
        strcpy(bufexe, "где-там-оно-лежит"); // вдруг звезды сойдутся неудачно

    sprintf(pidbuf, "%d", pid);

    int wpid;
    if((wpid=fork()) == 0) {
        execlp("gdb", "gdb", "-batch", "-q", "-x", gdbFile, bufexe, pidbuf, NULL);
    }
    else if(wpid > 0) {
        int status;
	waitpid(wpid, &status, WUNTRACED);
	_exit(0);
    }
}


Этот код я честно слямзил не помню где много лет назад, ну и обрезал по максимуму под свои нужды.

В демоне — очень даже помогает, тут и деманглинг и прочее, и 3rd party код показывает с именами и номерами строк. cmdFile содержит список нужных мне команд, в общем случае там bt + quit.

Главное — strip не увлекаться ;-)
Про doom — все уже украдено до нас — есть DEngine.net и High-Res Texture Pack, рекомендую. Там же поддерживается heretic / Hexen.
(скачивает старый wolfenstein 3d, скачивает опенсорц движок, собирает, запускает, матерится, читает ридми, подбирает константы)

— Spien!!!

;-)

А вообще я насчитал 31 игру, в которые я успел плотно поиграть и пройти. Многие — не по одному разу. Из них вот эти — есть и сейчас и я них периодически отрываюсь

Blood — в dosemu
Doom — dengine.net, обновленные текстуры взяты там же
Duke — Eduke32
Quake I — darkplaces
JK StarWars — Wine (не только Dark Force но и с Кайлом Катарном и Джереком)
UFO — dosemu
Wolfenstein — Linux port

это не считая тетриса и вторых героев в телефоне.
Что-то я не вижу у вас стандартных танцев с бубном вокруг сертификатов, самоподписей, тест мода и прочих чудес. Вы на 64битах на чем запускали?
Как замена шаред-хостингу или простой vds-ке с LAMP унутре — облако подходит плохо, это общеизвестный факт. Но почему-то клиенты облачных «сервисов» хотят именно этого — даже амазон прогнулся со своими микроинстансами.

Облака тем ценны, что сервисы предоставляют, вообще-то. Которые серьезно экономят и время и деньги. Вот те которыми пользуюсь лично я в своих проектах, на примере амазона

— Cloudfront
— S3
— RDS (лицензионный оракел в комплекте)
— Beanstalk
— EC2
— Cloudwatch
— LBS
— SNS

еще бы цена за терабайт с EC2 была погуманнее — вообще было бы замечательно.

Или рэкспейсовских загонов поменьше — а то намедни увидел «у вас диск больше 80 гигов, я на горячую клон поднять не могу, слишком большой». А образ — создает, минут сорок шкрябало. Пришлось подымать из образа и потом синхронизировать, тьфу. Два часа коту под хвост.

— И что это было, Бэрримор?
— Темза, сэр!

;-)
Намедни искал себе смартфон без так бесящего меня тачскрина, с нормальной клавиатурой, влезающий в карман трусов. Пришлось купить нокию E72 — альтернативой был только RIM.

Что называется — сам в шоке, да.

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

Эх, нокиЯ…
Окаменел — в хорошем смысле, ибо выдерживает массу издевательств, даже особо изощренные. Ванильным ведром вот к примеру — выдерживает, по крайней мере еще лет пять назад — выдерживал.

В отличие от пи федоры, которая такого не прощает. Или новеля — суси. Они оба — с рождения перепатчены так, что от ванили там мало что остается. Конечно, там патчей много полезных и нужных, но попробуй их отдели от тонны трехстрочников, которые регулярно пролетают исключительно в LKML. ;-)

Вот кстати Линус тут открытым текстом над работой еще ведра 2.3 (ух, давно было!) заявлял — ванильное ведро оно для мейнтейнеров, на продакшен не ставьте. Ставьте с патчами Алана и К.
Ну, я-то еще в 90х наигрался с компиляциями и патчами, уже старый стал и ленивый ;-)

Кстати в любом случае я ваниллу не рекомендую, берите пачсет вашего дистрибутивного вендора. А то преценденты отвала юзерланда после переезда на ваниллу — они таки бывают не только в федорином горе. Если это не дебиан конечно, этому мамонту все едино, окаменел еще до рождения.

Если без хардкора — то работает из коробки, и апдейты ведер не приводят к необходимости шаманить. И новеай отключать в конфигах не надо, к слову.

Вот пару раз прилетал корявый апдейт libNVCtrl — да, это было неприятно. То месяцами живешь в s2disk, перезагружаясь только при апдейтах ядра и иксов, а тут — нате вам с кисточкой, перезагрузите. Перезагрузил — после того как из очередного засыпания монитор так и не проснулся, да.
(смотрит с ужасом) вы эту новую версию из ванильных сырцов собираете что-ли? 8-)

а насчет фуль-скрина — да, у некоторых казуальных игрушек есть такое. Не умеют xrandr очевидно. Приходится их в окошко указывать. Но тут не факт что это нвидия виновата — она-то честно expose всю нужную траву.

Вот если в конфиге это стандартное поведение запретить — то да, это содом выходит, но тут уж — у всех подряд крышу сносит.
(недоумевает)

а зачем эти ужимки и прыжки? Копируешь из knowledge base 2 строчки, и все.

sudo zypper addrepo ...
sudo zypper install ...


и проприетарная нвидия со своим драйвером уже на месте. Апдейты и прочее — в комплекте.

С двухмониторной конфигурацией тоже отлично — прицепил 2й монитор, запустил nvidia-settings, выбрал — что он физически справа от предыдущего, TwinView. Более того — у обоих мониторов совершенно разные разрешения — 1280*1024 и 1980*1200 соответственно.

KDE тут же разобралось что их два, прекрасно перекидывает мышкой окошки с одного на другой, максимизирует тоже не на два экрана сразу. Я даже ящик не перезагружал. Что с моим xrandr не так? OpenGL, Composite/Damage, Render — все на месте. Вайновые игры — в наличии.

Про «нормальный фреймбуфер» — это что?
А если еще про мак вспомним и его NSString / CFStringRef? Или всяких там плагинов под кроссплатформенный пакет?

Бывает, что конертация строк, путей, и прочего — pain in ass еще тот.

Вот к примеру частенько приходится тягать с собой гору всяких platform dependent traits в виде UTF16Char, UTF8Char и прочих, и в нужных местах переконвертировать системозависимым способом между std::[w]string, UTF{16|8}Char*, char*, wchar_t* и пр.

Оно конечно не так чтобы сложно, по надцатому-то разу, но ведь еще и изобретать приходится вот такое

public class MyKewlInputStream(const std::wstring&) 
    defined by system-specific implementation 

что изрядно доставляет.

И не сказать чтобы такое счастье пишется один раз в пятилетку — большие старые пакеты предоставляют свои строки, свои стримы, свои конвертеры, и пр. и пр., которые как-то надо оборачивать. И из этих оберток — еще и системоспецифичные хэндлы, форки и дескрипторы торчат, как иголки из подушечки для булавок.

К примеру — адобовые PMString / WideString, PMStream.

Оборачивать приходится просто для того, чтобы не писать каждый раз нечто вроде такого

    WideString wsFileName(fileName.c_str());
    PMString pmFileName = PMString(wsFileName);

    IDFile idFileName;
    FileUtils::PMStringToIDFile(pmFileName, idFileName);
    InterfacePtr<IPMStream> stream(StreamUtil::CreateFileStreamWriteLazy(
                                                      idFileName, kOpenOut | kOpenTrunc));

    // Наконец-то у нас что-то system specific InDesign API и можно с этим работать


или такого (крестится)

#ifdef WINDOWS
    // клятый фотошоп нам подсунул под виндой UTF16Char*
    uint16* result = fSpec->mReference;
    numUtf16 = (uint32)wcslen((const wchar_t*)result);
    // для остроты ощущений это все еще в Java сунем
    jstring filePath = env->NewString(result, numUtf16);
    ...
#else
    // а под маком Fork aka FSIORefNum, добро пожаловать в отладчик
    CFStringRef path = FSRefToCFString(&fSpec->mReference);
    uint32 numUtf16 = (uint32)CFStringGetLength(path);
    UniChar* result = nil;
    if(numUtf16 > 0) {
        result = new UniChar[numUtf16+1]; 
	CFRange rangeToCopy; 
        rangeToCopy.location = 0; 
        rangeToCopy.length = numUtf16;
	CFStringGetCharacters(path, rangeToCopy, result);

        // для остроты ощущений это все еще в Java сунем
        jstring filePath = env->NewString(result, numUtf16);
        ...
    }
    CFRelease(path);
#endif


Или вспомним мозилловые nsString / nsCString и конертации туда-сюда, NS_CStringToUTF16 и NS_LITERAL, NS_UTF16ToCString и прочие. А их же SOA и do_GetService()?

nsresult GetAsText(
    const nsACString &aCharset, 
    const char* aData, 
    PRUint32 dataLength, 
    nsAString& aResult)
{
    nsresult rv;
    nsCAutoString charsetGuess = aCharset;

    nsCAutoString charset;
    nsCOMPtr<nsICharsetAlias> alias = do_GetService(NS_CHARSETALIAS_CONTRACTID, &rv);
    NS_ENSURE_SUCCESS(rv, rv);

    rv = alias->GetPreferred(charsetGuess, charset);
    NS_ENSURE_SUCCESS(rv, rv);
    ...
}
(обратите внимание — в 10-строчнике мы видим 3 разных ns*String и const char* до кучи)

Как только склеиваем ежа с ужом — тут и начинаются три метра колючей проволоки.

Не Qt единым, что называется ;-)
Я в свое время провел блиц-опрос — что вам бы хотелось хранить в облаке с домашнего компьютера, кроме рабочих файлов?

И на первое место вышли даже не фотографии, но — именно домашние медиа-коллекции. И аргумент убойный — если медиабиблиотеку собирал десять лет подряд, то она имеет большую субьективную ценность.

Выборка была нерепрезентативная — опрашивал я друзей и знакомых, подавляющим большинством там были айтишники.

Но тем не менее.
(усиливает накал паранойи)

Хэши файлов сравниваются по идее до шифрования а не после. Вуаловцы себе не враги — хранить кучу раз одно и то же.

Результат — несмотря на супермощное шифрование, компания точно знает, что ты залил в облако нелицензионный контент.

(переходит к обычному состоянию)
Насколько я помню, ГЭС уже и так построены в большинстве пригодных мест, так что ресурс уже использован.

По солнечным батареям — в солнечных местах можно из них крыши делать, а вырабатываемую ими энергию — в электросеть подавать. Как раз дадут резерв по мощности, потребление днем выше. В Германии так делали, но излишки стало некудпа девать, емнип.
Дополню.

В упоминаемые 90е годы рисовать приходилось массу всего, начиная от тулбаров и заканчивая своими деревьями и таблицами. Занимало это уйму времени и в силу тормознутости тогдашнего железа еще и обвешивалось кучей хаков — эти события всегда считаем, а эти слишком старые, а тут вообще рыбу заворачиваем.

А уж развлечения на тему локализации — вообще превращались в нечто из области эзотерики. «Вот этот набор контролов есть только во французской версии», ага. И при поддержке 20ти языков — число формочек достигало невероятных цифр. И это — в Delphi, тогдашнем RAD нумер один.

Это сейчас хорошо — UTF рулит, а в 90е нарисовать на формочке одновременно японский и китайский было возможно только в том случае, если мы написали свой отдельный edit box с блэкджеком, полностью саморисованный.

Сравните с нынешней ситуацией — картинки подложить в случае если клиент некрофил ;-)
1% — это нормально, это разумная цифра.

А вот если их будет 50%, то акций «еще надцать гигабайт бесплатно тем кто сказал три раза ку» станет поменьше.
Я в свое время вообще шифрование прозрачное делал на уровне драйвера ФС пофайлово, чтобы незашифрованное до драйвера диска не долетало. И бонусом — эту шифрованную папку в дропбокс скармливал, только дропбокс запускал от другого пользователя, чтобы на лету не расшифровывало ;-)

В результате — сам сижу паном, работаю, а все кто не я — тем шифрованный контент.

Увы — при таком подходе замучился подпорки ставить, потому как размеры файла с точностью до байта выдержать надо было. Вот так в папочку кинешь зип, зайдешь — а тебе в ответ «corrupted end-of-central signature».

Так что хорошую идею отложил в долгий ящик.

Information

Rating
Does not participate
Location
München, Bayern, Германия
Date of birth
Registered
Activity