согласен насчет удобства, но это администрации решать. во всяком случае, когда я пользовался этим методом — мне ответили в течении 5 минут и очень быстро проблема разрешилась.
вот тут Вы абсолютно правы, никто не заставляет публиковать на хабре. поэтому тенденции последнего времени превращают для многих хабр в своеобразный околоайтишный фишки.нет.
многие люди перестали писать технические статьи, делиться опытом, да и просто излагать мысли, потому что нет смысла. ради трех комментариев? один из которых «у вас запятой нет», а второй «автор — молодец!». ради кармы? не смешите, любой, кто зайдет в топ хабралюдей сразу понимает что нужно писать, чтобы быть «кармоплодовитым».
система кармы в своем нынешнем виде не отражает интересность человека, она лишь отражает отношение к нему большинства. а это не правильно. я вот, к примеру, не очень то и люблю радзинского и его стиль изложения, но уверен, что на его карму это никак не влияет и не должно.
я бы задумался об этой проблеме, пока не получилось так, что не будет и тех двух интересных статей за неделю.
на этом месте мне надоело писать, потому что я вспомнил, что это уже писали до меня раз 10.
вряд ли можно написать хороший топик мотивируясь исключительно копеечной выгодой от рекламы. а вот как стимул для того, чтобы топик всё таки написать — вполне себе отличная затея.
заказной интересный топик ничем не отличается от просто интересного топика и наоборот. так что вряд ли вопрос поддержки авторов и заказные топики как то взаимосвязаны.
спасибо за статью. несколько уточнений хотелось бы внести:
— в описании виджета (xml файл с параметрами <appwidget-provider>) лучше установить android:updatePeriodMillis=«0», ибо в некоторых сборках есть значение по умолчанию, т.е. принудительное обновление раз в час, а с этим параметром автоматических обновлений не будет гарантировано:
— вы не упомянули о методе onReceive(...) в AppWidgetProvider, который обрабатывает события. в вашем случае он не нужен, но существует большая проблема в версии Android 1.5, там не вызывается автоматически метод onDeleted(...) (к примеру, на очень распространенном HTC Hero), что потенциально ведет к проблемам, в вашем случае желательно этот fix применить, чтобы таки чистить систему после своей деятельности:
@Override
public void onReceive(Context context, Intent intent) {
// v1.5 fix that doesn't call onDelete Action
final String action = intent.getAction();
Log.w("onReceive() action", action);
if (AppWidgetManager.ACTION_APPWIDGET_DELETED.equals(action)) {
final int appWidgetId = intent.getExtras().getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
if (appWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID) {
this.onDeleted(context, new int[]{appWidgetId});
}
} else {
try {
super.onReceive(context, intent);
} catch (IndexOutOfBoundsException ex) {
Log.e("onReceive", ex.getMessage());
ex.printStackTrace();
}
}
— в методе onUpdate(...) вы в отдельном потоке обновляете все активные виджеты, этого делать не стоит. это системный вызов и он обновит данные сам в отдельном потоке:
@Override
public void onUpdate(Context ctxt, AppWidgetManager mgr, int[] appWidgetIds)
{
...
new Thread(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
for (int i = 0; i < ids.length; i++)
{
appWidgetManager.updateAppWidget(ids[i], buildUpdate(context, ids[i]));
}
}
}).start();
super.onUpdate(ctxt, mgr, appWidgetIds);
....
т.е. просто уберите new Thread(...), все будет работать как надо;
— чтобы было понятнее, вот такая конструкция с перебором ID:
@Override
public void onUpdate(Context ctxt, AppWidgetManager mgr, int[] appWidgetIds)
{
final Context context = ctxt;
final AppWidgetManager appWidgetManager = mgr;
final int[] ids = appWidgetIds;
....
for (int i = 0; i < ids.length; i++)
{
appWidgetManager.updateAppWidget(ids[i], buildUpdate(context, ids[i]));
}
....
позволяет вызвать метод updateAppWidget для всех активных виджетов на экране, т.е. в массиве ids есть указатели на все активные виджеты и перебором вы отправляете всем им нужную команду.
[offtopic] кстати, хорошая мысль: если вы пригласили человека на хабр, то не давать ему публиковать первый топик, пока пригласивший не подскажет что не так и не поставить галку «поехали!».
всецело согласен. а то у нас с идеями складывается ситуация «быстро спиздил и ушел — называется нашел». и тут дело даже не в авторском праве, а в простом уважении к идеям других.
интересная тенденция, я ночью-утром поглядывал на результаты голосования (где с пяти до семи утра) и там с большим отрывом лидировали «На себя», а как только за 8 утра перевалило — сразу вперед вырвались «На чужого дядю». перед работой значит хабр почитывают, а фрилансеры всё пишут по утрам.
пользуясь тем, что я «На себя», посплю немного. удачного вам рабочего дня.
1. отличная тестируемость: JUnit, GWTTestCases, Selenium, профилируемость: Firebug, Compile Report, SpeedTracer, спагетти-код может и присутствует, но только в уже откомпилленом варианте, который никто поддерживать в здравом уже не будет, на что тогда вообще создавать проект в GWT;
2. длительная, да. минус конечно, но вполне терпимый;
3. это руки;
4. кхм, это вы не видели как в других фреймворках это делается. если вообще возможно;
5. все могут. я, честно сказать, не сталкивался, но вполне допускаю. но это рабочие моменты и они к вопросу «использовать или нет» не относятся;
6. (:
7. это уж слишком, как по мне. да и с дизайнерами проще разговаривать. впрочем, это фичареквест больше чем недостаток. а что-то компилирует?
8. это из серии «потому что», вот у Seesmic не очень то и подтормаживает.
я, признаться честно, GWT изучаю пару месяцев и у меня есть о чем сказать в негативном ключе, но вы уж очень предвзяты. вполне допускаю, что это не идеальный фреймворк, но уж точно один из тех, на которые стоит взглянуть. а учитываю хорошую интеграцию в GAE, а значит и неплохой бесплатный хостинг + привязка к домену, так и вообще прекрасный вариант.
а я бывает даже баги правлю в Eclipse (: но всё не исправишь, да и время дороже.
недавно вот не выдержал Eclipse'овского автоформатирования html, оно просто ужасно. казалось бы банальная вещь, да и пережить её можно, но очень не хочется.
есть Ultimate Edition с 30 дневным триальным ограничением, есть бесплатная Community Edition, с рядом ограничений (вот сравнение). те, кому нужна полная версия, но они по каким-либо причинам они не могут заплатить, обычно используют EAP, предрелизную сборку, обычно очень стабильную, там тоже ограничение на использование в 30 дней, но не реже чем раз в 30 дней выходит новая сборка.
очень неубедительно. о каких костылях вы говорите? в итоге вы получаете кроссбраузерный javascript, да, пусть тяжелый, но очень функциональный и весьма расширяемый в любую сторону.
конечно же, в сайте, где хватает 3 статичных страничек, он бессмысленен. в других же случаях он вполне себе в списке рекомендуемых к рассмотрению кандидатов.
к сожалению, Community Edition не поддерживает GWT, как и многое другое.
плагин для Eclipse от Google прекрасен, но в Eclipse столько мельких и не очень недоработок, что я после очередной попытки его использовать, через полчаса сдаюсь и возвращаюсь в IntellijIdea.
вряд ли. потом путаница возникает.
раз уж IDE предоставляет инструменты для работы с библиотеками и формированием war, то почему бы ими не воспользоваться.
многие люди перестали писать технические статьи, делиться опытом, да и просто излагать мысли, потому что нет смысла. ради трех комментариев? один из которых «у вас запятой нет», а второй «автор — молодец!». ради кармы? не смешите, любой, кто зайдет в топ хабралюдей сразу понимает что нужно писать, чтобы быть «кармоплодовитым».
система кармы в своем нынешнем виде не отражает интересность человека, она лишь отражает отношение к нему большинства. а это не правильно. я вот, к примеру, не очень то и люблю радзинского и его стиль изложения, но уверен, что на его карму это никак не влияет и не должно.
я бы задумался об этой проблеме, пока не получилось так, что не будет и тех двух интересных статей за неделю.
на этом месте мне надоело писать, потому что я вспомнил, что это уже писали до меня раз 10.
— в описании виджета (xml файл с параметрами <appwidget-provider>) лучше установить android:updatePeriodMillis=«0», ибо в некоторых сборках есть значение по умолчанию, т.е. принудительное обновление раз в час, а с этим параметром автоматических обновлений не будет гарантировано:
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" ... android:updatePeriodMillis="0" ...> </appwidget-provider>— вы не упомянули о методе onReceive(...) в AppWidgetProvider, который обрабатывает события. в вашем случае он не нужен, но существует большая проблема в версии Android 1.5, там не вызывается автоматически метод onDeleted(...) (к примеру, на очень распространенном HTC Hero), что потенциально ведет к проблемам, в вашем случае желательно этот fix применить, чтобы таки чистить систему после своей деятельности:
@Override public void onReceive(Context context, Intent intent) { // v1.5 fix that doesn't call onDelete Action final String action = intent.getAction(); Log.w("onReceive() action", action); if (AppWidgetManager.ACTION_APPWIDGET_DELETED.equals(action)) { final int appWidgetId = intent.getExtras().getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); if (appWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID) { this.onDeleted(context, new int[]{appWidgetId}); } } else { try { super.onReceive(context, intent); } catch (IndexOutOfBoundsException ex) { Log.e("onReceive", ex.getMessage()); ex.printStackTrace(); } }— в методе onUpdate(...) вы в отдельном потоке обновляете все активные виджеты, этого делать не стоит. это системный вызов и он обновит данные сам в отдельном потоке:
@Override public void onUpdate(Context ctxt, AppWidgetManager mgr, int[] appWidgetIds) { ... new Thread(new Runnable(){ @Override public void run() { // TODO Auto-generated method stub for (int i = 0; i < ids.length; i++) { appWidgetManager.updateAppWidget(ids[i], buildUpdate(context, ids[i])); } } }).start(); super.onUpdate(ctxt, mgr, appWidgetIds); ....т.е. просто уберите new Thread(...), все будет работать как надо;
— чтобы было понятнее, вот такая конструкция с перебором ID:
@Override public void onUpdate(Context ctxt, AppWidgetManager mgr, int[] appWidgetIds) { final Context context = ctxt; final AppWidgetManager appWidgetManager = mgr; final int[] ids = appWidgetIds; .... for (int i = 0; i < ids.length; i++) { appWidgetManager.updateAppWidget(ids[i], buildUpdate(context, ids[i])); } ....позволяет вызвать метод updateAppWidget для всех активных виджетов на экране, т.е. в массиве ids есть указатели на все активные виджеты и перебором вы отправляете всем им нужную команду.
а для какие языки \ фреймворки подходят по вашему списку? может я чего не знаю просто.
пользуясь тем, что я «На себя», посплю немного. удачного вам рабочего дня.
2. длительная, да. минус конечно, но вполне терпимый;
3. это руки;
4. кхм, это вы не видели как в других фреймворках это делается. если вообще возможно;
5. все могут. я, честно сказать, не сталкивался, но вполне допускаю. но это рабочие моменты и они к вопросу «использовать или нет» не относятся;
6. (:
7. это уж слишком, как по мне. да и с дизайнерами проще разговаривать. впрочем, это фичареквест больше чем недостаток. а что-то компилирует?
8. это из серии «потому что», вот у Seesmic не очень то и подтормаживает.
я, признаться честно, GWT изучаю пару месяцев и у меня есть о чем сказать в негативном ключе, но вы уж очень предвзяты. вполне допускаю, что это не идеальный фреймворк, но уж точно один из тех, на которые стоит взглянуть. а учитываю хорошую интеграцию в GAE, а значит и неплохой бесплатный хостинг + привязка к домену, так и вообще прекрасный вариант.
недавно вот не выдержал Eclipse'овского автоформатирования html, оно просто ужасно. казалось бы банальная вещь, да и пережить её можно, но очень не хочется.
конечно же, в сайте, где хватает 3 статичных страничек, он бессмысленен. в других же случаях он вполне себе в списке рекомендуемых к рассмотрению кандидатов.
плагин для Eclipse от Google прекрасен, но в Eclipse столько мельких и не очень недоработок, что я после очередной попытки его использовать, через полчаса сдаюсь и возвращаюсь в IntellijIdea.
раз уж IDE предоставляет инструменты для работы с библиотеками и формированием war, то почему бы ими не воспользоваться.