Android: не используйте String.isEmpty

Ни eclipse ни intellj Idea ни android lint не предупреждают, что String.isEmpty() появился в Java 6, и после Android 2.3.


java.lang.NoSuchMethodError: java.lang.String.isEmpty
at pro.ezway.carmonitor.entity.TroubleCode.hasTitle(TroubleCode.java:142)
at pro.ezway.carmonitor.ui.fragments.TroubleCodesFragment$TroubleCodesAdapter.getView(TroubleCodesFragment.java:242)
at android.widget.AbsListView.obtainView(AbsListView.java:1315)
at android.widget.ListView.makeAndAddView(ListView.java:1727)

Read more

Android: запуск дефолтного ланчера

Есть неочевидная ситуация: вы пишете лаунчер лончер или что-то его заменяющее, отдебажили, всё работало. Конечно же, вы поставили его как програму по умолчанию и теперь он стартует вместо дефолтого. И вдруг, вылезает некая бага, которая начинает крушить, бомбить ронять телефон, перезапуская приложение. Перезапустится, конечно же, то, что упало, а упал лончер. И он снова падает. Development mode в продакшене отключён. Ну вы поняли.

На самом деле бывают ситуации ещё хуже, например, для vendor lock-in приложений, которые вообще скрывают, что они работают под андроид.

Предвкушая первую мысль как вернуть дефолтный лончер: вызвать в приложении finish(). Чёрт, это же домашний экран %)

Read more

Groovy: java слишком проста

Возьмём довольно частую задачку: есть несколько значений первой переменной, нужно сделать присвоить второй переменной какое-то значение, в зависимости от первой переменной, т.е. value mapping.

В джаве это делается примерно так:


String alertClass = "";
switch(code.toUpperCase().charAt(0)) {
case 'U':
alertClass = "alert";
break;
case 'P':
alertClass = "alert-error";
break;
case 'B':
alertClass = "alert-warning";
break;
case 'C':
alertClass = "alert-info";
break;
}
// now alertClass has value

Read more

Android: отложенное действие

Бывает необходиость выполнить что-то не сразу, а чуть позже в главном(main) потоке для GUI

Этот код поможет(на время разработки)


public class AwesomeActivity extends WorkspaceActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
. . .
new Handler() {{
postDelayed(new Runnable() {
@Override
public void run() {
// do something here
hideShutter();
}
}, 1500);
}};
}
}

Read more

Удивительное время!

\"\"
Посмотрите, что происходит вокруг! Жизнь людей меняется с молниеносной скоростью!

Технологии внедряются в повседневную жизнь с нереальной скоростью! Они развиваются на столько быстро, что люди не поспевают за ними.
Так было всегда - любые инновации долго входили в массы. Но в отличии от настоящего времени раньше были альтернативы. Современные инструменты \"подсаживают\" на себя людей, не оставляя альтернативы. Поэтому сейчас невозможно не учиться всю жизнь (в разной степени в зависимости от специфики)

Обернитесь, посмотрите, что поменялось за 10 лет у нас и за 20 в развитых странах!

Read more

ruX mind: о выборе сотрудников

Очень много читал и слышал о роли людей в команде или в компании, про их эффективность, оценки KPI. Даже читал, что в стартапе инвестор вкладывается по большей части не в идею, а в конкртеных людей. Ну да, я никогда с этим не спорил, принимал за правду. Да и логично, как говорится \"Не Боги горшки обжигают\".

А сегодня вечером пришёл инсайт и в очередной раз показал какой глубокий смысл в роли людей.

Read more

Play framework: SELECT .. IN

Наткнулся на очередную невозможность сделать казалось бы простые вещи: выполнить запрос SELECT .. WHERE something In listт.е. выбрать все записи, в которых поле something равно чему то из списка list.

Обойти можно через JPA:


@Entity
@Table(name="ezTroubleCode")
public class TroubleCode extends Model {
@Index(name = "IDXcode")
@Column(nullable=false, length=5)
public String code;

. . .

/**
* Search for codes by codeId
*/
public static List<troublecode> findByCode(List<string> codes) {
Query q = JPA.em().createQuery("SELECT tc FROM TroubleCode tc WHERE code IN (:codes)");
q.setParameter("codes", codes);
return q.getResultList();
}
}
</string></troublecode>

Read more

Мысли: о ведении проектов

\"\"
Последние пол года после заморозки закрытия проекта GeoChat я принимаю участие в других проектах. Причин этому несколько:

  • Отдохнуть от ведения проекта (за это время я уже соскучился по этому делу)
  • Уйти временно в разработку (меня уже воротит от кодинга)
  • Нет идей - и я не знаю что с этим делать, надеюсь коучи на MTE из меня их выпотрашат, а преподы помогут посмотреть вокруг и увидеть пробеммы (а значит и возможности)
  • Поглазеть на то, как другие фаундеры ведут процесс, может чем научится. Ага, наивный чукотский юноша
  • \"Don\'t put all your eggs in one basket\" (ц)
  • Во всех проектах есть определённый share

Но пост совсем не об этом :)

Read more

ИТМО: работа во время учебы

Мне часто задают вопрос можно ли работать и учиться в НИУ ИТМО парелельно и не напряжно?

Мой ответ - да.

Ну а как же! Всегда можно устроится в макдак убирать со столов и мыть туалеты. Стабильность, постоянный рост, достойная зарплата, гибкий график, коллектив! Выделю отдельно коллектив - только там тебе не скажут что ты работаешь половой тряпкой, зато обязательно будут говорить про преподов-козлов, которые мешают спать на лекциях и требуют домашние задания. А еще можно вместе поржать над ботаниками, которые получают нищебродскую стипуху

Если все устраивает (как и половину студентов) - дальше не стоит утруждать себя чтением.

Read more