02 ноября 2011

Безопасности в Android нет.

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

Что делает пользователь iOS для запуска нового приложения на устройстве? Покупает приложение, запускает. Что делает пользователь Android? Покупает неизвестно откуда взявшийся непроверенный кусок кода, смотрит на диалог "а вот тут надо какие-то разрешения", кликает OK, запускает. Всё, больше ничего не надо. Зашиваем в malware какой-нибудь universal androot и делаем с девайсом всё, что хотим.

Пользователю не нужны все эти "разрешения". Кому они могли бы понадобиться, так это review отделу, который бы смотрел - ага, тут доступ к контактам и сети, не уплывают ли первые во вторую? Но такого нет.

01 октября 2011

Time machine on SMB (Windows) shares

Итак, благодаря некоторым событиям, я перешёл в категорию людей, которые делают бэкапы. Чем делать вопрос практически не вставал - Time machine. Она есть, она надёжна, самостоятельна и проста (а ещё "путешествие во времени" красиво выглядит). А вот куда... Каждый раз втыкать внешний USB винт надоело быстро, это был верный способ перестать бэкапиться вообще. Так что по сети, а ввиду отсутсвия Time Capsule - на SMB сетевой диск. И вот для этого придётся немного пошаманить.
Для начала берём панель настроек Secrets и разрешаем в ней показывать в Time Mаchine неподдерживаемые диски (Show unsupported network volumes in Time Machine). Монтируем диск. Качаем скрипт, и если файловая система не case sensitive (эй! 21 век!), то оригинал. Запускаем:

sh ./makeImage.sh 600 /Volumes/backup
где число - максимальный размер файла с бэкапом, а путь - его будущее расположение.
После этого выбираем диск в Time Machine и бэкапимся. Без проводов.

Есть ещё lifehack как использовать несколько мест для бэкапа, например, на работе и дома на разные диски. Time Machine хранит свои настройки в /Library/Preferences/com.apple.TimeMachine.plist. Настроив бэкап дома, копируем этот файл куда-нибудь с суффиксом .home, настроив на работе - с суффиксом .work. Правим простой скриптик:
#!/bin/sh
profile=`basename $0`
defaults write com.apple.TimeMachine AutoBackup -bool false
sudo cp /Users/phoenix/cfg/com.apple.TimeMachine.plist.$profile /Library/Preferences/com.apple.TimeMachine.plist
defaults write com.apple.TimeMachine AutoBackup -bool true

под свои нужды, делаем на него симлинки:
ln -s timeswitch.sh home
ln -s timeswitch.sh work
и настраиваем Marco Polo(кстати, а есть ли альтернативы? программа более не поддерживается) запускать их в нужных местах.
Всё, теперь ноут бэкапится сам, всегда и везде.

30 сентября 2011

Remotix video

Вышло видео про Remotix, мне очень понравилось.


26 сентября 2011

Remotix и новости россыпью


Ну вот и зарелизили Remotix (и для iOS тоже). В духе эппол уличшились стабилити, компатибилити и секурити, ну и на планшетках он теперь совсем как живой смотрится. И вообще он теперь "как надо".

Кроме того переехал на ssd, ssd оказался говно, так что у меня теперь 3 бэкапа и восстанавливаю я из них свой мак за пару часов практически не отвлекаясь. Time machine - отдельная басня в стиле эппол - просто работает. Но если тебе надо, чтобы работало не просто, а как-то затейливо... то это непросто.

Переехал на другой mbp (тоже с ssd). 13" это, конечно, мало. SSD - это просто a must, без него совершенно невозможно - мысль сто раз успеет прокрутиться по кругу и уйти в неведомые дали, пока что-то там запускается на традиционном HDD. Трекпады эппол - лучшие трекпады в мире, но мне пока мышка удобнее. Дизайн mbp немного неудачен - все нужные порты толпятся на одном торце, и рудиментарный dvd привод на другом.

Съездил в Питер, с собой были только Acer Iconia Tab A500 & Acer Liquid. Икония очень так даже ничего, со своими задачами (навигация и почитать в метро в основном) справилась. Liquid за год сдал и разряжается непростительно быстро и иногда внезапно.

Жду Deus Ex: Human Revolution под мак. Такими темпами как раз до середины доберусь к его выходу. Свет очей цифровой дистрибуции Steam в 21 веке спустя год со своего выпуска не научился работать на case sensitive файловой системе. Что за болячка такая?

Так и живём.

24 сентября 2011

Опять курощение iTunes

После какого-то очердного обновления iTunes отказался работать, и тебя мативировал, и меня мативировал, примерно вот так:

При этом запустить его предложенным способом невозможно - указанной настройки тупо нет.

Но подкастов-то надо! (Предпочитаю не использовать этого монстра ещё для чего-то, кроме как на ipod заливать подкасты.) И лайона ставить рано пока. Так что идём в сам iTunes и правим файл /Applications/iTunes.app/Contents/Info.plist, заменяя


 <key>LSMinimumSystemVersionByArchitecture</key>
<dict>
<key>i386</key>
<string>10.5.0</string>
<key>ppc</key>
<string>10.5.0</string>
<key>x86_64</key>
<string>10.7.0</string>
</dict>


на

 <key>LSMinimumSystemVersionByArchitecture</key>
<dict>
<key>i386</key>
<string>10.5.0</string>
<key>ppc</key>
<string>10.5.0</string>
<key>x86_64</key>
<string>10.6.7</string>
</dict>

ну или как-то так, смотря какая у вас там версия ирбиса стоит. Ну и первый запуск после колдунства должен быть непосредственно iTunes.app, а не через скрипт, который я уже предлагал, то есть
sudo chmod +x /Applications/iTunes.app/Contents/MacOS/iTunes
ему таки временно надо сделать.

27 мая 2011

Flexiglass

Первое, о чём думаешь, когда после мака садишься работать за какой-то другой компьютер, это: "Где мои хоткеи?" - после чего идёшь за мышкой.

Вчера окончательно и бесповоротно стал патриотом и зарегистрировал свою копию программы для управления окнами для мака под названием Flexiglass, после того как туда добавилась критичная для меня возможность по хоткею перекинуть окно на второй монитор. Но не хоткеями едиными, есть там и улучшения для жестов, вроде так не хватавшей после Linux'овых DE возможности потаскать окно за любую его часть. И это с мышкой, трекпадом и графическими планшетами. И много чего ещё, вы лучше видео посмотрите. В общем, хороша, чертовка, умеет всё то, ради чего у меня стояли программы от конкурентов, и даже без учёта действующей сейчас скидки стоит дешевле. Среди первых в Top Paid категории Productivity и в общем Top Paid в Mac App Store.

Это то, чего Apple не доложила в оконную среду. Удобство.

PS.: любопытно, что финальным вариантом названия в ходе обсуждения стало моё предложение. Так что и мои 5 копеек там есть.

08 апреля 2011

Android: logout from google account

По работе приходится иметь дело со множеством девайсов на андроиде, меняться ими с коллегами, нужна возможность отвязать девайс от гугль аккаунта без factory reset (мало удовольствия вбивать пароль от офисного wi-fi, например, как и отдавать свой gmail кому-то).
Официально (через API) основной аккаунт удалить нельзя. На рутованом аппарате это достигается удалением файла /data/system/accounts.db и перезагрузкой.

01 апреля 2011

SMO Hate

Вот пишет человек блог, и мнит себя великим сеошником-смошником, упоминает какую-то неведомую тебе технологию, а ссылка ведёт на тег в его блоге, по которому находится только тот пост, в котором ты на эту ссылку и кликнул. Смысл? Чмошники.

08 марта 2011

Rails 3, virtual attr validations

Давненько собирался написать про валидацию виртуальных атрибутов в моделях Rails, а тут по случаю опробовал Rails 3, наступил на грабли в данном вопросе, так что повод появился.
Зачем могут понадобиться виртуальные атрибуты модели? Затем, чтобы опять же отделить внутренний способ хранения данных от их отображения, например в базе дата хранится как соответствующий тип Date, а на клиенте должна быть представлена в американском формате mm/dd/yy. Вводить её будут так же. Нужно проверять и только потом конвертировать в свой внутренний формат.
Немного о граблях. Были они вызваны тем, что в коде сеттера для такого виртуального атрибута я делал проверку valid? у модели. Модель пропускалась через валидации, некоторые поля модели к тому времени установлены не были (nil), соответственно валидаторы (в частности, один мой собственный) записывали в массив ошибок сообщение, что поле с нулевым значением неверно. Когда приходило время настоящей валидации, эта ошибка сохранялась, и, несмотря на то, что модель уже валидна, она считалась неверной.
А теперь как надо.

class SomeModel < ActiveRecord::Base
validates :v_field, :presence => true, :custom_format => true
before_save :set_attr

def set_attr
self.field = @v_field.convert_to_internal
end

def v_field
@v_field || field.convert_to_formatted
end

def v_field=(val)
@v_field = val
end
end

class CustomFormatValidator < ActiveModel::EachValidator
def validate_each(object, attribute, value)
real_attr = attribute.to_s.gsub /v_/, ''
begin
if( value.length > 0 )
return
else
object.errors[real_attr.to_sym] << (options[:message] || "is not valid")
end
rescue Exception => e
Rails.logger.add(0, e.to_s )
object.errors[real_attr.to_sym] << (options[:message] || "is not valid")
end
end
end

Теперь всё идёт как надо - форматированное значение лежит в отдельном поле, валидация происходит 1 раз после того, как модель полностью установлена, после валидации - конвертация во внутренний формат.