Gamemaker Studio. Использование нового отладчика

В Studio 1.3 появился компиллятор с breakpoints.yoyo degugger

Будет полезным при отладке сложных алгоритмов. Горячие клавиши — F5 продолжить, F9 установить breakpoint, F10, F11 — пошаговая отладка. Есть окошко слежения за переменными проекта.

В настоящее время все еще сырой. Например, установленную точку breakpoint очень сложно убрать.

Новое в iOS 7/7.1

ios 7

Эта статья является переводом раздела официальной документации apple. Источники:

https://developer.apple.com/library/ios/releasenotes/General/WhatsNewIniOS/Articles/iOS7.html

https://developer.apple.com/library/ios/releasenotes/General/WhatsNewIniOS/Articles/iOS7_1.html#//apple_ref/doc/uid/TP40013916-SW1

Из нововведений стоит отметить следующее:

- расширенная поддержка внешних устройств;

- тайлы карт Apple теперь можно изменять;

- поддержка 64-разрядной архитектуры и т.д.

Читать далее

C++. Использование *.dll без вспомогательных файлов.

visual studio 2013
Пример здесь:

http://goffconcepts.com/techarticles/calldll.html

В Visual Studio создаем проект c++ dll, компилируем. В проекте, в котором планируется использовать библиотеку: через контекстное меню добавляем ссылку на dll, добавляем часть кода по ссылке выше.

При необходимости можно в открытое «решение» (solution) добавить новый пустой проект и в нем создать main функцию. Это может потребоваться при отладке dll.

Gamemaker Studio. Использование внешних библиотек dll.

Тема с ответами на вопрос на официальном форуме:

http://gmc.yoyogames.com/index.php?showtopic=614647

Наиболее полное руководство:

http://gmc.yoyogames.com/index.php?showtopic=405812

Создать пустой C++ проект, добавить main.cpp, собрать библиотеку. Пример содержания main.cpp:


#include
#define DLLEXPORT extern "C" __declspec(dllexport)

DLLEXPORT double Multiply(double a, double b) {
return a * b;
}

DLLEXPORT double MsgBox(char* caption, char* message) {
MessageBox(0, message, caption, MB_OK);
return 0;
}

DLLEXPORT double ProcCount() {
SYSTEM_INFO sysinfo;
GetSystemInfo(&sysinfo);
return sysinfo.dwNumberOfProcessors;
}

Сгенерированную таким образом библиотеку нужно перетянуть в окно Gamemaker Studio в папку Included Files.

Более того, можно в Visual Studio настроить экспорт скомпилированных файлов в папку для included. Тогда новые измененная библиотека будет подхватываться автоматически.

Не удалось настроить проект для тестирования библиотеки в Visual Studio. Ругается на объявления char *. При этом GM: Studio воспринимает эту библиотеку нормально.

SmartGit+GitHub. Инструкция

smartgit
Ссылка на первоисточник:

http://derekreynolds.wordpress.com/2011/01/18/how-to-set-up-smartgit-with-github/

Коротко по пунктам:
- установить и запустить git (для windows есть standalone инсталлятор)
- через меню «Программы» найти установленный Git GUI сгенерировать SSH ключ и подключить к аакаунту
- установить SmartGit и забрать нужный проект с GitHub.

ВАЖНО! Вводить нужно не тот адрес, который предлагает GitHub, а адрес вида:
git@github.com:myn/warm-z-twopointtwo-base.git

где «git@github.com:» — общая часть для всех проектов на github.com, дальше идет относительный адрес репозитория.

Либо можно переключить внешний вид адреса в GitHub справа страницы (через ссылки во фразе «You can clone with HTTPS, SSH, or Subversion. «).

Стандартная http авторизация (с примерами)

На сервере авторизацию обычно реализуют своим способом — определяют свои параметры, передаваемые в запросе.
Существуюет другой, более общий способ — через установки значения заголовка «Authorization». Примеры:

C#:

HttpWebRequest webRequest = ...;
webRequest.Credentials = new NetworkCredential(User, Password);

GameMaker Studio (GML):

var auth_base64 = "Basic " + base64_encode(username + ":" + password);
var headers = ds_map_create();
ds_map_add(headers, "Host", host);
ds_map_add(headers, "Authorization", auth_base64);
ds_map_add(headers, "Content-Type", "application/json-rpc");
ah_auth = http_request(protocol + "://" + host + target, 'POST', headers, body);
ds_map_destroy(headers);

Objective-C:

NSString *auth_base = ...; //получение аналогично способу для GML
NSMutableURLRequest *request = ...;
[request setValue:auth_base forHTTPHeaderField:@"Authorization"];

В Objective-C также есть класс NSURLCredential. Не проверен, единственный найденный способ с его использованием — через NSURLConnectionDelegate.

HMAC SHA512 на Objective C

HMAC SHA512 — разновидность шифрования. Не путать с SHA512 hash (подвид семейства SHA2) — алгоритмом хеширования, который используется в таком шифровании.

Код на Objective C:


- (NSString *) sha512:(NSString *) input withSalt: (NSString *) salt {

const char *cKey = [salt cStringUsingEncoding:NSUTF8StringEncoding];
const char *data = [input cStringUsingEncoding:NSUTF8StringEncoding];
unsigned char digest[CC_SHA512_DIGEST_LENGTH];
CCHmac(kCCHmacAlgSHA512, cKey, strlen(cKey), data, strlen(data), digest);

NSString *hash;

NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA512_DIGEST_LENGTH * 2];

for(int i = 0; i < CC_SHA512_DIGEST_LENGTH; i++)
[output appendFormat:@"%02x", digest[i]];
hash = output;
return hash;
}

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

Источники:

http://stackoverflow.com/questions/18859005/sha215-with-salt-for-ios

http://ru.wikipedia.org/wiki/HMAC

Консольное приложение Mac OS игнорирует performSelector:?

Обычно iOS и Mac OS приложения создают цикл обработки сообщений. При создании консольного приложения кода для запуска такого цикла не генерируется. Примерный вариант решения проблемы — изменить функцию main:


{
NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
//какие-то действия
...
while ([runLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]);
}

Возможно, это не совсем правильный/неполный код, потому что потребовалось в коде с ARC приложения-бота, для которого наиболее критичный параметр — скорость разработки.

CocoaPods на русском

http://www.raywenderlich.com/ru/25225/%D0%92%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B2-cocoapods

Фактически требуется:
1)в terminal последовательно выполнить следующие команды


//Для установки
sudo gem update --system
sudo gem install cocoapods
pod setup

//Для создания Podfile
touch Podfile
open -e Podfile


2)Отредактировать файл. Пример:

platform :o sx, '10.8'
pod 'SBJson', '~> 4.0.0'

3)выполнить команду:

pod install

Objective C. Синхронные запросы

Синхронные запросы можно использовать для отладки, когда соединение надежное и ответ от сервера приходит быстро и т.п.

Пример:


NSURL *tempUrl = [NSURL urlWithString:...];
NSString *result = [NSString stringWithContentsOfURL:tempUrl encoding:NSUTF8StringEncoding error:nil];

Аналогичные методы есть у массивов и словарей.