• Приходит ли в негодность домофон, если держать дверь открытой?

    @tambourine
    портится ровно по тем же причинам, по которым в подъезде появляется запах мочи
    Ответ написан
    Комментировать
  • Вы тоже заметили, что в черновики стали заносить как то многовато статей?

    @egorinsk
    Я приписываю в адресной строке g cache: перед адресом и открываю оригинал, спасибо Гуглу.
    Ответ написан
    1 комментарий
  • Си в качестве «первого» языка

    Fastto
    @Fastto
    Начинай сразу с objective-C, с реального приложения. Нет ничего хуже, чем отсутствие заинтересованности, даже если сейчас чешется, удержать это ощущение на долго не получится, а живой проект будет отличным мотиватором.
    Язык — это лишь способ реализации определенных задач, если цель твоя iOS — просто глупо начинать с C. Я лично не вижу ни одного «за». А глубокие материи ты и на С все равно так вот сразу не познаешь, все прийдет с опытом.

    Из литературы посоветую — Фаулер «Рефакторинг. Улучшение существующего кода.» — поможет сразу писать код более правильно и ускорить процесс «вникания в высшие матери»
    Ответ написан
    3 комментария
  • Бан телефонных номеров в веб-приложении

    ruskar
    @ruskar
    Conflict Intelligence Team
    Имхо, обычные способы бана по телефону бесполезны. Просто очень хорошо знаком с работой досок «изнутри» и с методами работы этих самых «некоторых товарищей».

    Вот что эти товарищи будут делать, когда увидят сообщение «объявление не размещено, т.к. ваш номер телефона забанен на нашем сайте!»? Да они тупо возьмут другой номер и запостят своё объявление. И так до следующего раза.

    На одном из своих проектов я решил проблему по-другому. Задача такая: максимально достоверно опознать «нехорошего человека».

    Что я для этого делаю?



    Если пользователь указал для своего объявления номер телефона, который у меня в чёрном списке, я:
    1. ставлю ему бессрочные Cookie с меткой что данный пользователь — тот ещё петрушка;
    2. также запоминаю в базе максимальное количество идентифицирующих его данных (IP, юзер агент браузера и т.д.);
    3. его объявление сохраняю в базе и помечаю его как «полускрытое». Это значит, что объявление видно исключительно ему, для него создаётся видимость, будто всё прошло успешно и объявление опубликовано. На самом же деле, всем остальным пользователям сайта оно не показывается (в том числе незалогиненным);
    4. если «нехороший человек» догадался, что я его обманул и теперь он вбивает очередной свой шлак, то, используя пункты 1 и 2 я снова его определяю, заношу в чёрный список уже новый номер, повторяю по новой пукнты 1 и 2.

    В результате все «редиски» смотрят на мой сайт довольные, думают что я нормально опубликовал их объявления, не пытаются всеми возможными и невозможными способами обойти защиту (поскольку они подумали, что они её обошли), а в действительности сайт остаётся чистым.
    Ответ написан
    4 комментария
  • Android, глобальные данные

    palmut
    @palmut
    Лучше данные хранить либо в SharedPreferences, либо в файлах кеша. Зависит от размера и формата самих данных. А доступ к ним обеспечить через наследника Application. Если данных очень много, то лучше их хранить в базе SQLite и работать через провайдер. Никто никогда не гарантирует время жизни приложения — система сама определяет когда выгружать по мере надобности. Теоретически можно написать свой Service, который будет «висеть» в памяти постоянно, но пользователи приложения это не оценят.
    Ответ написан
    5 комментариев
  • Android, проблемы после обновления SDK?

    ara89
    @ara89
    Вот сегодня увидел в твиттере ссылку с описанием решения вашей проблемы
    Ответ написан
    3 комментария
  • JS. Централизованная обработка ошибок

    alienator
    @alienator
    Никто за вас не решит, что лучше.

    Конечно, можно и нужно иметь try/catch на самом верхнем уровне. И дать ему какое-то полезное поведение — записать в лог, вывести красивое окошко и т.п., чтобы не пугать пользователя системными сообщениями.

    Это необходимый минимум.

    А дальше смотрите глубже. Что вам даст функция-обработчик внутри объекта исключения? Во многих случаях она уже бесполезна; она слишком далеко от точки возникновения ошибки, чтобы попробовать ее исправить (например, вызвать код повторно со значением по умолчанию, подождать освобождения ресурса и т.п., короче, какой-нибудь while/try).

    Перед каждым вызовом функции, которая может выбросить исключение, перед каждым входом в компонент у вас есть три пути:

    • обработать какие-то (или все) исключения здесь
    • обработать и передать выше (повторный throw)
    • ничего не делать (передать сразу наверх)


    Вам придется опускать обработку исключений глубже хотя бы там, где понадобится finally код. И там, где вы можете сделать что-то осмысленное, прежде чем полностью отваливаться с криками в лог.

    И вот там, поглубже, внутри компонента, уже действует ряд разумных рекомендаций:

    1. Не ловить всё подряд. Обрабатывать только те исключения, с которыми известно, что делать. Если не совсем известно, делать re-throw.

    2. re-throw делать аккуратно. Не надо, опять же, хватать больше от жадности, а потом пропускать исключения ненужных классов. Для ява-скрипта это выражается вот в чем:

    Нехорошо:
    try {
         // ...
    } catch (e) {
         if (! e instanceof MyError) {
              throw e;
         }
        // ...
    }
    


    Хорошо:
    try {
         // ...
    } catch (e if e instanceof MyError) {
        // ...
    }
    


    3. То, что вы делаете в finally, важнее, чем то, что делаете в catch. Есть что подчистить — надо подчистить.

    4. Не надо терять информацию об ошибке (генерить или ре-генерить исключение более широкого класса). Правда, при разработке либы лучше наоборот, свои мелочи держать в себе и заменять низкоуровневые ошибки на более общие.

    Ну, что хотел сказать, то сказал. Удачи.
    Ответ написан
    3 комментария
  • Android, SimpleXML, ProGuard?

    megatron
    @megatron
    Попробуй так:
    -keep class com.simpleframework.** { *; }
    Ответ написан
    4 комментария
  • Android. Вертикальные отступы в LinearLayout?

    Часто бывает, что лэйауты в статике сильно отличаются от создаваемых на лету. Попробуйте запихнуть контролы в отдельные XML и через инфлейтер вставлять. Может еще дополнительно оберните в LinearLayout или RelativeLayout.
    Ответ написан
    1 комментарий
  • Android. Загрузка изображения в WebView из stream'а или массива байт?

    Можно использовать загрузку изображений через контент-провайдер. Ссылка из страницы получается content://com.path.to.package/file.ext

    В манифесте <provider android:name=".ImageProvider" android:authorities="com.path.to.package" />

    В классе провайдера определяете функцию

    @Override
    public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {
    	File file = new File(....); 
    	ParcelFileDescriptor parcel = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY);
    	return parcel;
    } 
    


    Как-то так.
    Ответ написан
    1 комментарий