Чехарда с Layout при работе с камерой в Android

Официальный метод работы с камерой в Android такой:

  1. создать камеру и задать ей правильные параметры
  2. задать ей SurfaceView
  3. зарегистрировать callback
  4. принять кадр
  5. ???
  6. PROFIT!!!

Те, кто шаг номер два пропускает — ССЗБ.

Остальным рекомендую обратить внимание на метод SurfaceView::setZOrderMediaOverlay. Правильное его использование предотвращает чехарду с Z-сортировкой слоев после pause/resume. В противном случае SurfaceView камеры будет постоянно то вылезать на передний план, то прятаться за задником сцены.

Как протестировать пульт телевизора и увидеть инфракрасный луч?

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

Инфракрасный свет от пульта RM-887

Второй пульт явно кушает меньше электричества, чем первый.

Инфракрасный свет от пульта BBK RC019-01R

Все пульты в квартире светят голубым, а ещё говорят, что свет инфраКРАСНЫЙ. :)

Цитата с башорга

Пессимист считает, что стакан наполовину пуст.
Оптимист считает, что стакан наполовину полон.
Программист считает, что стакан в два раза больше, чем нужно.
SEOшник считает, что стакан, бокал скачать бесплатно пустой наполовину, частично порожний без смс.

Тестовые задания для программистов. Издание исправленное и дополненное

Я просто оставлю это здесь.

[user@domain ~]# cc -Wall -Werror -pedantic Binary.c
BinaryPrint.c:6:5: error: C++ style comments are not allowed in ISO C90
BinaryPrint.c:6:5: error: (this will be reported only once per input file)
cc1: warnings being treated as errors
BinaryPrint.c: In function 'BinaryPrint':
BinaryPrint.c:13: warning: ISO C90 forbids mixed declarations and code
Bash

diff -r afee20b80dff BinaryPrint.c
--- a/BinaryPrint.c     Tue Feb 22 09:11:12 2011 +0300
+++ b/BinaryPrint.c     Tue Nov 15 18:51:10 2011 +0300
@@ -3,31 +3,31 @@

 void BinaryPrint( long n )
 {
-    // Частный случай - n равно нулю
+    unsigned long mask = 1 << (sizeof(n) * 8 - 1);
+
+    /* Пропускаем бесполезные нули слева */
+    int skipZero = 1;
+
+    /* Частный случай - n равно нулю */
     if (n == 0)
     {
         printf("0\n");
         return;
     }

-    unsigned long mask = 1 << (sizeof(n) * 8 - 1);
-
-    // Пропускаем бесполезные нули слева
-    int skipZero = 1;
-
     while (mask)
     {
-        // Определим текущий бит
+        /* Определим текущий бит */
         unsigned char c = (n & mask) ? 1 : 0;

-        // Отключим пропуск нулей в дальнейшем
+        /* Отключим пропуск нулей в дальнейшем */
         if (skipZero && c)
             skipZero = 0;

         if (!skipZero)
             printf("%d", c);

-        // Сдвинем маску на один бит вправо
+        /* Сдвинем маску на один бит вправо */
         mask >>= 1;
     }
     printf("\n");
Diff
[user@domain ~]# cc -Wall -Werror -pedantic RemoveDups.c
RemoveDups.c:8:5: error: C++ style comments are not allowed in ISO C90
RemoveDups.c:8:5: error: (this will be reported only once per input file)
cc1: warnings being treated as errors
RemoveDups.c: In function 'RemoveDups':
RemoveDups.c:16: warning: value computed is not used
RemoveDups.c:22: warning: value computed is not used
RemoveDups.c:24: warning: value computed is not used
Bash
diff -r afee20b80dff RemoveDups.c
--- a/RemoveDups.c      Tue Feb 22 09:11:12 2011 +0300
+++ b/RemoveDups.c      Tue Nov 15 18:56:00 2011 +0300
@@ -5,25 +5,25 @@
     const char * src = pStr;
     char * dst = pStr;

-    // Пока не дойдем до конца строки
+    /* Пока не дойдем до конца строки */
     while (*src)
     {
-        // Записываем в pStr текущий символ, если указатели разные
+        /* Записываем в pStr текущий символ, если указатели разные */
         if (dst != src)
             *dst = *src;

-        // Сдвигаем dst вправо
-        *dst++;
+        /* Сдвигаем dst вправо */
+        dst++;

-        // Пока не конец строки и следующий символ такой же
+        /* Пока не конец строки и следующий символ такой же */
         while ((*src + 1) && *(src + 1) == *src)
         {
-            // Сдвигаем указатель src вправо
-            *src++;
+            /* Сдвигаем указатель src вправо */
+            src++;
         }
-        *src++;
+        src++;
     }
-    // Запишем ноль в конец строки
+    /* Запишем ноль в конец строки */
     *dst = 0;
 }
Diff

Читайте также: «Вопросы программисту на собеседовании с ответами».

Личный блог Евгения Жирнова