Появилось интересное видео на Adobe TV – рассказ Кевина Хойта о безопасности сервисов. Кевин – мастер, поэтому и рассказывает хорошо. Конечно, ещё и показывает
Увидел у Элада Элрома интересный пост о 10 полезных рецептах в air-кукбуке – тут вам и работа с SQLite, и получение данных о пользователе, и запуск и взаимодействие с нативными процессами, и работа с файлами.
В общем, аптечка с первой помощью. Загляните, может рецепты окажутся полезными. А если будет время и желание – поделитесь с обществом своими рецептами!
Преимущество глобализации, и с этим вряд ли кто будет спорить, заключается в интеграции различных культур и стандартизация отношений, а также сближение и слияние культур разных стран. А как этого добиться во Flash?
В смысле глобализации у технологии проблем нет никаких – flash-плеер почти на всех компьютерах мира. Но в компьютерном мире глобализация – это интернационализация и локализация приложений. И сейчас многие компании активно развивают эту тему. Adobe – в их числе.
К чему эта длинная прелюдия? Хм, я и сам не знаю – хотел просто обратить ваше внимание на статью «The flash.globalization package in Flash Player: Cultural diversity without complexity», в котором ведется речь о том, о чём я написал выше – о локализации и интернационализации приложений, что позволит охватить больше людей, не говорящих на вашем языке.
Прописные истины? Угу, так и есть. Однако ими почему-то пренебрегают. Особенно на Западе, где стандарт – это английский язык.
Но, в любом случае крайне советую вам ознакомиться со статьей Херве Амбларда, где он очень подробно описывает процессы локализации и интернационализации flash-приложений.
Что в этом cf-коде не так, и что можно оптимизировать?
publicvoid function update(required struct odata) hint="update object" output="false" displayname="update"
{
//odata.id - идентификатор записи в таблице БД, который следует загрузить//odata.table - таблица, из которой и нужно загружать записьif(!structkeyexists(odata, "id") || !isnumeric(odata.id) || odata.id==0 || !structkeyexists(odata, "table") || odata.table=="")
{
//показываем ошибочку
application.werrors.showerror(err="requiredparam");
}
try
{
//грузим указанный объект
e=entityloadbypk("#odata.table#", odata.id);
//в структуре odata передаётся массив data, //из которого итератором мы выбираем элементы
b=odata.data.iterator();
//если есть элементы в массиве - выполняется циклwhile(b.hasNext())
{
//выбираем пару
p=b.next();
//a - первая часть пары, то есть название столбца в таблице
a=getToken(p, 1, "|");
//b - вторая часть пары, то есть значение для столбца
b=getToken(p, 2, "|");
//выполняем присвоение объету значение. //К примеру: e.setFirstName("Вася"), где "FirstName" - это наше a, "Вася" - b
e.set&a&(b);
}
//сохраняем объект и очищаем ORM
entitysave(e);
ormflush();
}
catch(Any e)
{
//показываем ошибочку в работе с ORM
application.werrors.showerror(err="entity", ex="#e.message#");
}
}