- Говорят, 5-й Silverlight будет последним. Слухи такие. А мы тут, как идиоты, под сильвер аппликухи пытаемся делать. Ужас какой.
-
- engadget.com/2011/11/09/talk-mounts-that-version-5-could-be-silverlights-last-might-on
- microsoft.com/silverlight/future
- weblogs.asp.net/scottgu/archive/2010/11/04/silverlight-questions
- habrahabr.ru/company/microsoft/blog/107582
- habrahabr.ru/blogs/silverlight/132298
-
Tools
Записки программиста, обо всем и ни о чем. Но, наверное, больше профессионального.
2011-11-30
Silverlight
Posted by Valentin at 17:50 0 comments
Labels: Microsoft
SQL, аналитика
- MySQL, переменные в запросах. Хорошая, годная статья. В красках проиллюстрировано использование выборки «окном», отрицательные стороны индексов, использование переменных в запросах и ваще webew.ru/articles/3923.webew
-
- Доп.материалы по теме
- rsdn.ru/article/db/WindowFunctions
- olap.ru/home.asp?artId=891
- asuxxi.narod.ru/oradoc/ora/ora065
- docs.google.com/Doc?id=ddd4649x_4ggr4npc3
-
Posted by Valentin at 03:22 0 comments
2011-11-29
Не надо жадничать
- Боюсь, что уже поздно, но ведь лучше поздно чем никогда, правда? 15 ноября была опубликована глава из Руководства Администратора Debian. С целью подтолкнуть сбор средств на благую цель — сделать это руководство бесплатным приложением к дистрибутиву. Глава доступна в виде PDF файла. В ней рассказано про APT-и-компания
-
- raphaelhertzog.com/2011/11/15/20-things-to-learn-with-the-free-chapter-of-the-debian-administrators-handbook
-
- Я залил 10 евро. А вы?
-
- А еще Intel подготовил нам няшку — чипсет с четырехканальной памятью, полоса до 52 гигабайт/секунду. На борту до 64 гигабайт DDR-3 1600 Mhz. Процессоры нынче 6-ти ядерные, в следующем году должны появится 8-ми ядерные на техпроцессе 22 нанометра. А пока этого техпроцесса нет, то 6-ти ядерники выдают тепла до 130 Вт. Короче, к концу следующего года надо планировать апгрейд. Путем замены мамки, камня, памяти. Летать будет — только держись.
-
- tomshardware.com/reviews/core-i7-3960x-x79-performance
- wikipedia.org/wiki/Sandy_Bridge#Ivy_Bridge
- anandtech.com/show/5091/intel-core-i7-3960x-sandy-bridge-e-review-keeping-the-high-end-alive
-
Posted by Valentin at 01:18 0 comments
Labels: documentation, linux
2011-11-28
Что за напасть
- Только за сегодня сразу два показательных поста в моей ленте. Про оперативную работу на местах:
-
- Хитровыебаное падло на МЛ-ке, крякая спецсигналом, пробирается левее пятого ряда. Случившиеся тут-же менты изымают его из потока, короткая стычка, и наглое падло уже лежит еблищем на капоте, два мента надевают на него наручники, третий в целлофановом пакетике радостно тащит какой-то пистолет в багажник..
-
- dalnoboi.livejournal.com/151591
-
- Про обработку заявлений от граждан:
- ...
- Кто-то скажет, что я ничего не добился. Это не так. Больше такого случая не повторится, как минимум пару лет.
-
- flavorchemist.livejournal.com/52736
-
- То ли радоваться успехам, то ли огорчаться податливости пропаганде. Полезнее радоваться, разумеется.
-
Posted by Valentin at 00:56 2 comments
Labels: gov.ru
2011-11-26
Вполне электронная
- Я приятно удивлен! На сайте госдумы вполне приличный поиск законопроектов, и мало того, к поиску сделан внешний API. И еще БД переехала с Oracle на PostgreSQL. Просто разрыв шаблона — как-то я уже привык полагать, что ничего кроме потемкинских деревень у государевых людей не увидишь. А тут такое.
-
- ...
- Оптимизация БД позволила снизить время обработки тестовой выборки из 65 тысяч поисковых запросов с 10 часов до 15 минут.
- ...
-
- habrahabr.ru/blogs/e_gov/133305
-
- а в это время, в цивилизованных странах
- androidsecuritytest.com/features/logs-and-services/loggers/carrieriq
- xda-developers.com/android/the-rootkit-of-all-evil-ciq
- 4pda.ru/2011/11/24/50519
-
Posted by Valentin at 04:14 2 comments
2011-11-25
yield
- Генераторы — это прекрасная штука. И тут появляется он, йилд:
-
- Для понимания, что делает yield, необходимо понимать, что такое генераторы. Генераторам же предшествуют итераторы
- ...
- Всё, к чему можно применить конструкцию «for… in...», является итерируемым объектом: списки, строки, файлы…
- ...
- Генераторы это тоже итерируемые объекты, но прочитать их можно лишь один раз. Это связано с тем, что они не хранят значения в памяти, а генерируют их на лету
- ...
- Yield это ключевое слово, которое используется примерно как return — отличие в том, что функция вернёт генератор
-
- habrahabr.ru/blogs/python/132554
-
- Я для себя уяснил тему генераторов и йилда после написания такого кусочка кода:
-
def fib(): a, b = 0, 1 while 1: yield b # return and continue a, b = b, a+b if b > 100: return def testYeld(): """ yeld example (http://www.python.org/dev/peps/pep-0255/) """ print 'Fibonacci by generator func, aka yeld op: ', list(fib()) print 'iterate by hand:' gen = fib(); ln = '' for x in gen: ln += str(x) + ', ' print ln |
- И немного серебрянки.
- Нормальное, кастомизированное контекстное меню (ПКМ) для Silverlight-ных аппликух: c-sharpcorner.com/uploadfile/dpatra/right-click-and-context-menu-in-silverlight-4
-
Posted by Valentin at 03:08 0 comments
Labels: python
2011-11-24
Трудности перевода
- Вот вроде и стандарты есть, и POSIX по определению — portable, а все равно, никуда не деться от вот таких няшек:
-
- if (getenv("A_FLAG")) {
- ...
- }
- ...
- А корень зла тут в том, что после putenv() результат getenv() может стать либо NULL, либо "", в зависимости от платформы.
-
- easy-coding.blogspot.com/2011/11/getenv-putenv
-
- Пока есть из чего делать электричество, труд наш бесконечен. И это не может не радовать — без куска хлеба не останемся :(
-
- А вот пхпистам на заметку, годная статья:
-
- Хотел было назвать статью «профессиональное PHP программирование», но по факту — это лишь «заметки бывалого», которые будут полезны начинающим разработчикам, хотя, возможно, привлеку внимание и «старшего» поколения ;)
-
- anton.shevchuk.name/php/about-php
-
Posted by Valentin at 02:19 0 comments
Labels: citation
2011-11-23
Сизиф.js
- Почему я стараюсь не сочинять текст в окне браузера а копипастить в него:
-
- Бывали ли у вас случаи, когда во время долгого заполнения нудной формы или написания красноречивого и пылкого комментария *внезапно* крашился браузер? Или вы закрывали вкладку, в которой работаете, или отключалось электропитание (а ИБП, по известному закону, нет)?
- ...
- В результате была написана простенькая свистелка, способная хранить данные, вводимые в форму, в Local Storage браузера и при повторной загрузке той же страницы (query params matter) заполнять ими форму. Данные конкретной формы в Local Storage чистятся при её отправке или ресете.
-
- habrahabr.ru/blogs/webdev/131288
-
- Автор пугает — краш браузера, сбой электропитания. Все проще — форму отправляешь, а она не отправляется. Жамкаешь «взад» и получаешь пустую форму. Такое бывает гораздо чаще, чем перечисленные автором пугалки. Отсюда понятно, что функции «свистелки» надо встраивать в браузер. Если уж на сайте хреновая форма и сам сайт хреновый — нужно искать вебмастера а не яваскрипт.
-
- Хотя, если Sisiphus будет помечать оберегаемую форму характерным узнаваемым значком, чтобы пользователи сразу видели, что они под «защитой», да если автоочистку сделать настраиваемой (события, таймер, отмена автоочистки), набирать текст прямо в браузере было бы не так сцыкотно.
-
- Но плагин лучше. А еще лучше обьединить оба метода, когда и браузер набранное сохранит и вебмастер озаботится удобством пользователя.
-
Posted by Valentin at 01:55 2 comments
Labels: web-develop
2011-11-22
Язык
- Как же все-таки приятно послушать неравнодушного профессионала, толкующего о своем (и твоем):
-
- Страуструп поступил очень мудро, обеспечив практически полную совместимость своего детища со сверх популярным и тогда, и что более удивительно -- сейчас, Си. Если бы не этот шаг, вряд ли бы плюсы стали бы тем, чем они стали. Но это достоинство языка с каждым днем становится все большим и большим его недостатком, добавляя множество дыр и низкоуровневых проблем в язык вроде как высокоуровневый и современный. Многие до сих пор так толком и не понимаю, что С и C++ это два совершенно разных языка, на которых нужно писать совершенно по-разному. И расхожее сочетание "C/C++" это просто какой-то root of all evil. Мне сплошь и рядом попадаются люди, которые худо-бедно программировали на Си, потом за день выучили ключевое слово "class" и стали считать себя большими гуру в плюсах (к примеру, такой случай). "Специалист" подобного рода узнается слету -- у него в коде вы обязательно найдете любимый printf... Плюсы очень мощный и одновременно довольно сложный инструмент, на овладение и глубокое понимание которого требуется много времени. Без полной перестройки мозгов начать программировать на C++ после С никак не получится, и те, кто этого не понимает, серьезно портят репутацию языка. Когда Линус Торвальдс, ни черта на смыслящий в C++, начинает поучать других на тему, почему плюсы это зло, выглядит это чертовски комично.
- ...
- Лично я не считаю, в отличии от многих, что новый стандарт это революция, и C++11 это совершенно новый язык. Дело в том, что C++98 несет в себе просто нереальное количество недодуманностей, ограничений и откровенных недоработок, поэтому я бы сказал, что новый стандарт разрабатывал Капитан Очевидность и главная задача, которая стояла перед ним -- латание старых дыр и огрех, затянувшееся на непростительные 10+ лет.
- Я отношу себя к той категории людей, которым не нужно читать умные толстые книжки о том, чем может быть вам полезно то или иное новшество в языке. Я из тех, кто много много лет в нетерпении ерзал на стуле, ожидая, когда же наконец комитет закроет все эти бесчисленные проблемы в дизайне моего любимого языка...
-
- cdriper-rss.livejournal.com/30406
-
- Сто лет я не писал на С/С++. Но еще помню как радовался обьектности, перейдя с простого С. И как же мне хорошо сейчас, когда я пишу на Python и прочей динамике :)
-
- Что поделать, C'est la vie. Недостатки C++ обусловлены его достоинствами. Это инструмент из разряда тех, которые нельзя давать в руки недоучкам без присмотра. Я имею в виду большие проекты, для мелких поделок неважно чем винтики крутить, толковой отверткой или мультитулом. Вообще, нынче представляется разумным большие проекты писать не на C++ а на чем-нибудь более безопасном. Вроде Java или C#. И не надо сразу кричать про производительность получаемого кода, если очень надо, торомозной код можно и на ассемблере изложить.
-
- А я тут, кстати, декораторами побаловался:
def testDecorators(): print 'testDecorators...' class decorBeforeAfter(object): def __init__(self, f): print 'decorBeforeAfter init...' self.f = f def __call__(self, *args, **kws): print "before", self.f.__name__ res = self.f(*args, **kws) print "after", self.f.__name__ return res def checkReg(fn, *args, **kwargs): print 'checkReg [%s]...' % fn.__name__ def crFunc(*args, **kwargs): print 'crFunc [%s]...' % fn.__name__ for a in args: print ' arg=[%s]' % a for k in kwargs: print ' kvarg[%s]=[%s]' % (k, kwargs[k]) res = fn(*args, **kwargs) print 'crFunc done' return res print 'checkReg done' return crFunc print 'define doWork...' # @decorBeforeAfter @checkReg def doWork(a, b, c='baz', d=''): print 'doWork a=[%s], b=[%s], c=[%s], d=[%s]' % (a,b,c,d) return 'qux' print 'invoke doWork...' res = doWork('foo', 'bar', d='oops') print 'res = [%s]' % res #def testDecorators(): |
- Понравилось, но не очень. Код перестает быть прозрачным и безопасным — IMHO, ясен пончик. Хотя если не вдаваться в детали реализации, код читать заметно легче.
-
- artima.com/weblogs/viewpost.jsp?thread=240808
- ibm.com/developerworks/linux/library/l-cpdecor
- wiki.python.org/moin/PythonDecorators
- wiki.python.org/moin/PythonDecoratorLibrary#Singleton
- saltycrane.com/blog/2008/01/how-to-use-args-and-kwargs-in-python
-
Posted by Valentin at 02:19 0 comments
Labels: language, programming
2011-11-21
Ringtone
- Что-то по вечерам стало так лениво, хоть ложись и глазки закрывай. Для разгона посмотрел Бешеных Псов Тарантиновских. И захотелось мне песенку из саундтрека в телефон закинуть, в качестве рингтона.
-
- Нашел на ютубе ролик, скачал, конвертнул в mp3, отправил в тел по почте (лень было блютуз запускать :). Взял тел, открыл почту, скачал песенку, перебросил ее в папку /sdcard/media/ringtones. Пытаюсь назначить песенку рингтоном — не играет и не назначается. Пытаюсь проиграть стандартным медиаплеером — не играется, говорит, что «данный формат не поддерживается». Вот напасть.
-
- Повторил все телодвижения, только уже с форматом OGG, через блютус попробовал. Также безуспешно.
-
- А засада оказалась в том, что в Андроиде вся эта рингтоновая тряхомудия интегрирована с медиатекой. Файл регистрируется в медиатеке в процессе его скачивания, что через Интернет, что через блютус. Если скачанный файл вручную переместить, медиатека его потеряет. Заголовок есть, файла нет. При этом никто не говорит, что, мол «не могу найти файл». Говорит, что «формат не поддерживается». Кнопки «зарегистрировать в медиатеке» нету, кнопки «переиндексировать хранилище» нету. Справится с этой напастью можно либо перезапустив аппарат, либо перемонтировав карту памяти, через настройки — хранилище.
-
- И вот кому послать горячий привет? Пусть ему станет горячо.
-
- Заклинание получения песенки.ogg из ютубовского ролика:
ffmpeg -i George_Baker_Selection_Little_Green_Bag.flv -ac 2 -f wav lgb.wav ffmpeg -i lgb.wav -acodec libvorbis -aq 6 lgb.ogg
Posted by Valentin at 01:44 4 comments
Labels: PDA
2011-11-18
Make
- Практика применения тулзы make
-
- Утилита Make вполне гибкая и может отследить точно, что нужно пересобрать, чтобы всё было обновлено, и при этом не пересобирать лишнее. Вот как выглядит правило в Makefile о том, что серверу Джанго нужно:
-
- .PHONY: run
- run: bin/django syncdb bin/sass compile_trans
- ./bin/django runserver 0.0.0.0:8000
-
- habrahabr.ru/blogs/django/132524
-
- Статья может стать хорошим вводным материалом в тему Make. Не могу сказать, что make это лучший выбор для проектов на Джанго, но для общего развития, для начала, вполне годится. Надо же с чего-то начинать? А make это классика.
-
- А Fabric круче. И, главное, на Python :)
-
Posted by Valentin at 16:20 0 comments
Labels: development, linux, python
2011-11-17
Неделя не задалась
- С понедельника стала осыпаться моя новая машинка. Проработала без упрека больше двух недель и вдруг пошли падающие процессы. В среду нашлась сбойная планка памяти, одна из четырех по 4 гига. Когда в среду вечером я запустил комп на трех рабочих планках, стабильная работа прочувствовалась как бальзам на раны.
-
- Добавить к этому прочие неприятности, вроде битых секторов на дисках виртмашин, битых БД, сдохший у начальника телефон, прочие нервотрепки — точно, неделя не задалась.
-
- Но это все не интересно. Интересно вот что:
-
- Антрополог Дуайт Рид (Dwight W. Read) ... полагает, что интеллектуальные способности особенно сильно зависят от объема так называемой рабочей памяти (working memory). Говоря упрощенно, это та часть памяти, в которой хранится и обрабатывается информация, непосредственно необходимая субъекту в данный момент.
-
- По современным представлениям, рабочая память имеет довольно сложную структуру. Центральное место в ней занимает «исполнительный компонент» (central executive component), ... Его главная задача — удерживать внимание на той информации, которая необходима субъекту для решения насущных задач. Сама эта информация может храниться где-то еще. Ее обычно называют кратковременной памятью (short-term memory) и рассматривают как компонент рабочей памяти... Компьютерным аналогом кратковременной памяти (понимаемой как часть рабочей памяти) являются регистры процессора. Кроме того, в состав рабочей памяти входит ряд вспомогательных структур (см. Baddeley's model of working memory).
-
- Ключевое значение имеет объем кратковременной памяти, измеряемый количеством идей или концепций, с которыми «исполнительный компонент» рабочей памяти может работать одновременно. Эту важнейшую характеристику рабочей памяти называют short-term working memory capacity (ST-WMC). Многочисленные эксперименты показали, что у человека ST-WMC ≈ 7 (хотя некоторые исследователи склоняются к более низким оценкам, порядка 4-5). Большинство животных не может обдумывать комплексно, как часть единой логической операции, более одной, максимум двух идей (ST-WMC ≤ 2).
- ...
- Шимпанзе из Таи манипулируют двумя объектами: орехом и камнем, который используется в качестве молотка (см. видео). Наковальней служат элементы рельефа, которыми не нужно манипулировать — например, плоский выход скальных пород или корень дерева. В Таи все взрослые обезьяны умеют колоть орехи. Очевидно, управляться с двумя объектами может научиться любой шимпанзе.
-
- Шимпанзе из Боссу пытаются совладать сразу с тремя объектами, потому что у них принято использовать в качестве наковальни небольшой камень, который нужно выбрать и правильно установить. Обычно наковальня получается шаткая, и ее нужно придерживать. Иногда используется и четвертый объект — камень-клин, которым шимпанзе подпирают наковальню, чтобы не шаталась. Но в этом случае сначала обезьяна возится с двумя объектами (наковальней и клином), а потом с тремя (наковальней, которую всё равно нужно придерживать, орехом и молотом). С четырьмя предметами одновременно никто работать не пытается (клин не придерживают).
-
- Обучение искусству раскалывания орехов протекает долго и мучительно. В возрасте полутора лет обезьяны начинают имитировать отдельные действия, входящие в комплекс (например, стучат по ореху рукой). Примерно в 2,5 года они уже выполняют последовательности из двух действий (например, кладут орех на камень и стучат рукой). Лишь в возрасте 3,5 лет они оказываются в состоянии правильно выполнить всю цепочку операций: найти наковальню, положить орех и стукнуть камнем.
-
- Если шимпанзе из Боссу не научился колоть орехи до 5 лет, то не научится уже никогда. Бедная обезьяна будет до конца своих дней с завистью смотреть на соплеменников, ловко колющих орехи, но так и не сообразит, в чём же тут секрет. Таких «двоечников» в популяции Боссу примерно четверть. Они иногда возобновляют попытки, но не могут понять, что нужны три предмета, и пытаются обойтись двумя.
- elementy.ru/ newsid 430954
- dn54.livejournal.com/142540
-
- Получается что? Получается, что те, у кого рабочая память поширше, справляются со сложными задачками легше :)
- А уж если кому не дано (в детстве межушную мышцу не прокачали?), те могут и под презрительное «дебил» попасть.
-
- В этом отношении, как мне кажется, в славное племя программистов попадют сливки — людям с относительно небольшой рабочей памятью очень сложно вести серьезные программные проекты. Уж очень много «идей или концепций» надо держать в голове в процессе разработки.
-
Posted by Valentin at 01:38 2 comments
Labels: citation
2011-11-16
PhotoRec
- Если у вас чудесным (загадочным) образом пропадут фотки с флешки, или какие другие файлы, не приведи Господь, воспользуйтесь восстановительной тулзой. Таких много, но мне понравилась одна конкретная — PhotoRec.
-
- cgsecurity.org/wiki/PhotoRec_Step_By_Step
- cgsecurity.org/wiki/TestDisk_Download
- blog.mypapit.net/2007/10/how-to-recover-photo-files-from-sd-card-mmc-with-photorec
-
- Понравилась простотой, открытостью и функциональностью. Тулза опенсорцная, консольная (запускать под рутом), кроссплатформная. Восстанавливает всякие файлы со всяких дисков и партиций.
-
- Рекомендую.
-
- Правда мне не помогла :) вся чудесность тулзы, ибо восстанавливать было нечего. Редиски флешку почистили. Собственно, первое правило восстановления — если что, немедленно перевести девайс в режим «только чтение» и тут же снять посекторный образ. Восстанавливать файло можно и с образа.
- А может это была не та флешка — не знаю. Приключения могли быть всякие, я со свечкой не стоял. Мотороллер не мой...
-
Posted by Valentin at 02:11 0 comments
2011-11-15
flac to mp3
- Рецепт, как превратить один огромный файл FLAC с разметкой треков в файле CUE во много небольших файлов mp3, по трекам. С сохранением тегов. Части рецепта не мои, моя компиляция и проверка в бою :)
-
- На примере альбома Blake – Together
-
- Установить софт
aptitude install cuetools shntool aptitude install flac wavpack
- и еще вот это: packages.debian.org/squeeze/kid3
-
- Разбить большой файл на маленькие
cuebreakpoints Blake\ -\ Together.cue | shnsplit -o flac Blake\ -\ Together.flac cuetag Blake\ -\ Together.cue split-track*.flac
-
- Перекодировать маленькие флаки в mp3. Скриптом
#!/bin/bash # name flac2mp3.sh OUT_DIR="./mp3" [ ! -d ${OUT_DIR} ] && mkdir -p ${OUT_DIR} # modify the lame options to your # preference lame_opts=" --vbr-new -V 2 -B 256 " for x in "${@}" do FLAC=${x} MP3="${FLAC%.flac}.mp3" [ -r "$FLAC" ] || { echo can not read file \"$FLAC\" >&1 ; exit 1 ; } ; metaflac --export-tags-to=- "$FLAC" | sed 's/=\(.*\)/="\1"/' > tmp.tmp . ./tmp.tmp rm tmp.tmp echo "Converting ${FLAC} to MP3 format" flac -c -d "$FLAC" | lame ${lame_opts} \ --tt "$TITLE" \ --tn "$TRACKNUMBER" \ --tg "$GENRE" \ --ty "$DATE" \ --tc "$COMMENT" \ --ta "$ARTIST" \ --tl "$ALBUM" \ --add-id3v2 \ - ${OUT_DIR}/"$MP3" done |
- bash ../flac2mp3.sh split-track*.flac
-
- После чего остается только пакетом переименовать полученные mp3-файлы в нечто более внятное, исходя из содержимого тегов. Хотя можно и скрипт чутка поправить, чтобы мп3-шки сразу создавались с нужными именами. Но мне проще применить kid3.
-
- Немного про «with» в Python tony.su/2011/11/11/python-context-managers коротко и внятно о важном.
Posted by Valentin at 02:12 0 comments
2011-11-14
Masked shell input
- Грех жаловатся на память, все-таки вспомнил, что надо сказать «Б» сказавши «А». Как в MS Windows в командной строке замаскировать звездочками ввод пароля, я написал. А вот как это сделать в Linux:
stty_orig=`stty -g` stty -echo read secret stty $stty_orig
- tech-recipes.com/rx/278/hide-password-entry-in-bournebash-shell-script
-
- Правда, тут будет без звездочек. Зато «из коробки».
-
- Какие бывают двойные смыслы.
-
- В эпизоде «Captain Cook» сериала Blackadder Goes Forth есть момент, когда генерал интересуется у Блекаддера, знает ли он журнал (забыл название, что-то вроде Страна и Король). На что тот отвечает, что да, знает, прекрасная бумага — мягкая, прочная и отлично абсорбирует :)
- А генерал говорит -
- top-hole, Blackadder I thought it would be right up your alley.
-
- Сперва я пару минут втыкал, о чем это он. Даже на паузу поставил. Так и не докумекал, отложил на потом. И вот, узнал о чем речь.
- На первом уровне сказанное означает примерно следующее:
- превосходно, я подумал, что вы с этим прекрасно справитесь (подразумевается, что он выдает Блекаддеру некое задание).
- А на втором, я полагаю, нечто похожее на:
- (отсыл к «дырке»), я так и думал, что вы чистите им проход (clean up — right up).
- forum.wordreference.com/showthread.php?t=424007
-
- Обратите внимание, дословный перевод вообще смысла не имеет. Сплошные фразеологизмы.
-
- Вообще, я не понимаю, как можно переводить на другие языки подобные сериалы. Там более половины построено на игре слов и смыслов, с отсылками к глубоким культурным слоям, причем национальным. Только как стихи, задавшись целью сохранить поэтику и допустив потерю всего остального.
-
- Сериал, кстати, превосходный (некоторым нравится даже в переводе на русский). Жалко, скоро кончится :(
-
Posted by Valentin at 03:44 1 comments
Labels: language
2011-11-12
Extend root partition
- Намедни я наступил на грабельки, заботливо заныканные в визарде разбиения диска, том, что в установщике Debian Squeeze.
-
- При установке Дебиана, рутовый раздел получился размером в 300 мегабайт с хвостиком (это мне досталось от авторазбивателя, экономный, собака). И мне этого не хватило, потому как у меня одновременно живут два ядра - из бекпортов и обычное. Все место на рутовом разделе сожрали ядра и их модули, все в папке /lib
-
- Как временное решение, одно ядро я снес
- aptitude purge linux-image-2.6.32-5-amd64
- aptitude autoclean
- После чего появилось время подумать о расширении рутового раздела или его переносе. Под эту задачу я провел эксперимент (сразу скажу - удачный) на виртмашине. Трудности возникли только на этапе переконфигурации граба, и то только потому, что я не знал, как его переконфигурить.
-
- Итак, для переноса раздела я стартовал машину с liveCD GParted gparted.sourceforge.net/livecd
-
- Потом проделал следующие операции с разделами:
- уменьшил раздел /home (чтобы что-то продать ненужное, сначала надо что-то ненужное купить);
- уменьшил раздел primary, в котором появилось свободное место (это sda2);
- копипастом перенес рутовый раздел на освобожденное место;
- расширил новый раздел (это получился sda3) до максимума, 10 гигов;
- установил у него флаг бутовости;
- удалил старый рутовый раздел sda1 (эту жопу никому не могу рекомендовать, не делайте этого!).
-
- На этом операции с разделами закончены. Перезапустил машину и увидел
- grub rescue>
- Потыркался немного и пошел читать help.ubuntu.com/community/Grub2#Rescue_Mode grub_rescue Booting
-
- Почитав, сгенерировал такие команды:
- set prefix=(hd0,3)/boot/grub
- set root=hd0,3
- insmod normal
- normal
-
- После чего попал в обычное меню граба и смог запустить операционку. Войдя рутом в ось, стал шаманить с грабом, в попытке заставить его загружаться с нового раздела. К успеху привела такая команда
- dpkg-reconfigure grub-pc
- меня спросили про всякое а я ответил как сумел, в частности сказал, что граб ставить надо на все доступные ему разделы.
-
- Если наберусь смелости, проделаю эдакое на проблемной железке. Поглядим, что из этого выйдет. В принципе, я убедился в том, что рутовый раздел можно заменить/перенести/расширить. Процесс стремный, но вероятность успеха велика. Да и трудоемкость небольшая.
-
Posted by Valentin at 03:26 0 comments
2011-11-11
Глупости какие
- Шесть единичек — 11 год, 11 месяц, 11 день. Прикольно.
-
- Намедни заглянул в избирательную комиссию, за открепительным талоном (у них это называется «открепительное удостоверение»). Причина проста как репа — я хочу провести поцедуру голосования с удобством, по месту жительства. Ибо ехать в ебеня, где у меня прописка — ни разу не удобно.
-
- Так вот, заглянул. Говорю — а дайте
талончик открепительный. Отвечает тетя
— да бери, только заявление напиши, вот
и бланк тебе. Вписал я в бланк ФИО, место
прописки и прочие мелочи, вроде «почему
я не могу явиться на свой участок
голосования». Настал момент, когда надо
выяснить, а какой у меня номер участка.
Вот тут моя инициатива и накрылась
сами-знаете-чем. Патамучта нельзя
быть красивой такойполучить открепительный талон где попало. Его можно получить только по месту прописки. Вот. - Забрал я заяву, попрощался и с чистой совестью покинул скорбное заведение.
-
- В связи с этим проишествием, у меня риторический вопрос — а нахуя, граждане? В смысле, зачем нужна такая процедура, если ее суть извращена. Суть ведь в том, что человек не может (не хочет) посещать контору в местах прописки (отмененной, кстати, теоретически). А по факту, эту контору один бес, посетить надо.
-
- И ваще, где «электронная Россия»? Что интернетов не хватает? Не могут в день выборов мой паспорт пробить по центральной БД на предмет — голосовал/не голосовал/может/не может? Чтобы дать мне возможность зайти и голоснуть на любом участке? Я уж не говорю о «электронных выборах», модель которых умные люди разработали уж много лет назад, взяв за основу принципы криптографии с открытым ключом.
-
- Фигня какая-то.
-
- Чтобы не было дурного послевкусия, вот симпатичное/полезное. Про конечные автоматы:
-
- Конечные автоматы и т.н. автоматное программирование -- вещи, с которыми программисты часто сталкиваются при решение задач лексического и синтаксического разбора, при описании поведения объектов в играх, при реализации всевозможных протоколов связи.
- По сути дела, Finite State Machine (FSM) это некий объект, у которого есть состояние, описываемое конечным множеством значений, плюс есть некое конечное множество событий, которые могут быть поданы на вход такому объекту. Самый простой пример FSM это, например, выключатель. Объект с двумя состояниями "вкл" и "выкл" и двумя событиями -- "включить" и "выключить".
- Другой простой пример -- автоматическая дверь с датчиком контроля состояния
- С точки зрения программы FSM описывается фактически как таблица, где по горизонтали идут события, а по вертикали идут состояния. Каждая ячейка этой таблицы, расположенная на пересечении конкретного события и конкретного состояния, есть указатель на некий код, который должен быть выполнен, когда на вход объекту, находящемуся в указанном состоянии, подается указанное событие.
- cdriper-rss.livejournal.com/29555
-
- Наш человек.
-
Posted by Valentin at 03:38 2 comments
Labels: gov.ru
2011-11-10
Справочник
- Мне сайт пригодился в качестве справочника, а вообще там залежи полезной информации. Годный ресурс.
-
- Я HTML верстки и прочих CSS чураюсь, а тут понадобилось вспомнить, в чем разница между display: none и visibility: hidden
- Так на сайте мгновенно нашелся ответ со 100% релевантностью webdesign.about.com/od/css/f/blfaqhidden
-
- Почти в том же стиле, Python Tips, Tricks, and Hacks, с частичным переводом на русский habrahabr.ru/blogs/python/85238, хотя, в принципе, для понимания достаточно заголовков и кода к ним :)
-
Posted by Valentin at 02:09 0 comments
Labels: cheatsheet
2011-11-09
SDF to text
- На днях компилял библиотеки FDO. Долго возюкался, но своего добился. Как мне и надо было, я сумел получить работающий враппер к FDO для Python.
-
- py.fdo-3.6.0_5104.zip - Python bindings for FDO, compiled Python wrapper for FDO 3.6. Platform Windows 2003, x86. К пакету прилагается скрипт экспорта (дамп) данных из файлов SDF. Решил выложить пакет здесь, ибо убедился в том, что найти готовые бинарники вместе с враппером нелегко. Пришлось собирать самому. Заодно и свой дампер из SDF в текст добавил.
-
- sites.google.com/site/vasnake
-
- Всю эту бодягу с компиляцией я затеял
по одной простой причине. Понадобилось
мне, внезапно, сваять экспорт данных
из формата
SDF. Такой это хитро
жопыймудрый формат, что прямую конвертацию из него ни в один из более распространенных форматов сделать невозможно. Как я понял, причина проста — гадский Автодеск в формат SDF заложил много фишек, недоступных в старых добрых шейпах и иже с ними. -
- Метод борьбы с несовместимостью очевиден, делай раз — переливай данные в удобный для обработки формат; делай два — адаптируй данные под целевую платформу. Шаг первый я фактически сделал, нарисовав сегодня за полдня скрипт (см. в пакете disasm.py) выдающий содержимое SDF-файла в виде текста. Почти WKT. Шаг второй у каждого свой и, часто, тривиален.
-
- Чуть не забыл, скрипт мой не протестирован на всем разнообразии вышеупомянутых фишек. Так что дотачивать будете сами (ну или меня попрОсите).
-
- Откуда ноги растут
- fdo.osgeo.org/documentation
- fdo.osgeo.org/content/fdo-360-downloads
- trac.osgeo.org/fdo/browser/trunk/Fdo/Python
- trac.osgeo.org/fdo/wiki
-
Posted by Valentin at 02:40 0 comments
Labels: Autodesk, GIS, opensource, python
2011-11-08
FDO
- Бобер, выдыхай!
- Я таки скомпилял обертку к FDO для Python. Потратил не меньше трех дней, мазафака. То ли кризис так влияет, то ли у Автодеска всё так нынче делается, но просто (без затей) собрать релиз из исходников не вышло. И это релиз, не альфа и не бета. Отягощает сборку еще тот факт, что под MS Windows все очень плохо с инструментарием — в сравнении с Linux, конечно.
-
- В целом, чтобы собрать из исходников FDO, надо строго выполнить инструкции, записанные в файлике OpenSourceBuild__README.txt и сделать поправки на следующее:
- * MS Visual Studio нужно не абы какую, а строго 2008 (она же 9.0) в комплектации C#, C++ профессиональную (или в какую там входят MFC, ATL). Express не пойдет, ибо этих мфц и атл там нету. Мазохисты, вроде меня, могут собрать и экспрессом.
- * Python надо строго 2.4, о как.
- * Понадобится внести правки в некоторые исходники.
- * Понадобится копировать недостающие библиотеки в нужные места руками, в зависимости от ошибок компиляции.
- * Надо быть готовым, что соберется не все а только основное :)
-
- В связи с последним замечанием, есть шанс, что сборка не будет работать так хорошо, как хотелось бы (это я буду завтра заценивать, насколько хорошо она работает).
-
- Какие у меня (постфактум) получились изменения в исходниках:
--- C:/d/sdf/fdo/orig/OpenSource_FDO/setenvironment.bat Fri Nov 19 19:44:26 2010 +++ C:/d/sdf/fdo/OpenSource_FDO/setenvironment.bat Mon Nov 07 21:33:02 2011 @@ -1,6 +1,6 @@ -@echo off +@echo on rem rem Copyright (C) 2004-2006 Autodesk, Inc. rem rem This library is free software; you can redistribute it and/or @@ -27,12 +28,12 @@ if "%1" == "x86_amd64" goto setvcvarsall if "%1" == "x86_ia64" goto setvcvarsall goto usage :setvcvarsall -SET ACTIVENAMECHECK="Microsoft Visual Studio 9" -SET ACTIVEPATHCHECK="C:\Program Files\Microsoft Visual Studio 9.0\VC" +SET ACTIVENAMECHECK="Microsoft Visual Studio 10" +SET ACTIVEPATHCHECK="c:\Program Files\Microsoft Visual Studio 10.0\VC" if exist %ACTIVEPATHCHECK% goto VSExist SET ACTIVEPATHCHECK="C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC" if exist %ACTIVEPATHCHECK% goto VSExist :VSExist @@ -98,11 +99,11 @@ if not exist "%SDEHOME%" SET SDEHOME= if exist "%SDEHOME%\bin\sde.dll" SET SDEVER_ARCUNITTEST=92 if exist "%SDEHOME%\bin\sde91.dll" SET SDEVER_ARCUNITTEST=91 SET ACTIVENAMECHECK="7-Zip" -SET ACTIVEPATHCHECK="C:\Program Files\7-Zip" +SET ACTIVEPATHCHECK="d:\app\7-Zip" if exist %ACTIVEPATHCHECK% set PATH=%PATH%;%ACTIVEPATHCHECK% SET ACTIVENAMECHECK="Graphviz" SET ACTIVEPATHCHECK="C:\Program Files\ATT\Graphviz\bin" if exist %ACTIVEPATHCHECK% set PATH=%PATH%;%ACTIVEPATHCHECK% @@ -112,23 +113,23 @@ SET ACTIVEPATHCHECK="C:\Program Files\doxygen\bin" if exist %ACTIVEPATHCHECK% set PATH=%PATH%;%ACTIVEPATHCHECK% if not exist %ACTIVEPATHCHECK% echo OPTIONAL %ACTIVENAMECHECK% documentation package not recognized in the Windows PATH. Update the setenvironment.bat script file with the correct path SET ACTIVENAMECHECK="GnuWin32 Bison/Sed" -SET ACTIVEPATHCHECK="c:\Program Files\GnuWin32\bin" +SET ACTIVEPATHCHECK="c:\d\GnuWin32\bin" if exist %ACTIVEPATHCHECK% set PATH=%PATH%;%ACTIVEPATHCHECK% if not exist %ACTIVEPATHCHECK% echo OPTIONAL %ACTIVENAMECHECK% package not recognized in the Windows PATH. Update the setenvironment.bat script file with the correct path SET ACTIVENAMECHECK="Python 2.4" -SET ACTIVEPATHCHECK=C:\progra~1\Python24 -if exist %ACTIVEPATHCHECK% SET PYTHON_HOME=C:\progra~1\Python24 +SET ACTIVEPATHCHECK=C:\Python24 +if exist %ACTIVEPATHCHECK% SET PYTHON_HOME=%ACTIVEPATHCHECK% if exist %ACTIVEPATHCHECK% set PATH=%PATH%;%ACTIVEPATHCHECK% if not exist %ACTIVEPATHCHECK% echo OPTIONAL %ACTIVENAMECHECK% package not found. Update the setenvironment.bat script file with the correct path SET ACTIVENAMECHECK="SWIG 1.3.31" -SET ACTIVEPATHCHECK=C:\progra~1\swigwin-1.3.31 -if exist %ACTIVEPATHCHECK% SET SWIG_HOME=C:\progra~1\swigwin-1.3.31 +SET ACTIVEPATHCHECK=c:\d\swigwin-1.3.31 +if exist %ACTIVEPATHCHECK% SET SWIG_HOME=%ACTIVEPATHCHECK% if exist %ACTIVEPATHCHECK% set PATH=%PATH%;%ACTIVEPATHCHECK% if not exist %ACTIVEPATHCHECK% echo OPTIONAL %ACTIVENAMECHECK% package not found. Update the setenvironment.bat script file with the correct path goto end --- C:/d/sdf/fdo/orig/OpenSource_FDO/setenvironmentVS10.bat Tue Mar 30 01:20:03 2010 +++ C:/d/sdf/fdo/OpenSource_FDO/setenvironmentVS10.bat Mon Nov 07 22:35:13 2011 @@ -1,6 +1,6 @@ -@echo off +@echo on rem rem Copyright (C) 2004-2006 Autodesk, Inc. rem rem This library is free software; you can redistribute it and/or @@ -75,11 +75,11 @@ if not exist "%FDOGDAL%" SET FDOGDAL=%FDOTHIRDPARTY%\gdal if not exist "%FDOGDAL%" echo OPTIONAL FDO environment variable FDOGDAL is not set if not exist "%FDOGDAL%" SET FDOGDAL= SET ACTIVENAMECHECK="7-Zip" -SET ACTIVEPATHCHECK="C:\Program Files\7-Zip" +SET ACTIVEPATHCHECK=d:\app\7-Zip if exist %ACTIVEPATHCHECK% set PATH=%PATH%;%ACTIVEPATHCHECK% SET ACTIVENAMECHECK="Graphviz" SET ACTIVEPATHCHECK="C:\Program Files\ATT\Graphviz\bin" if exist %ACTIVEPATHCHECK% set PATH=%PATH%;%ACTIVEPATHCHECK% @@ -89,23 +89,23 @@ SET ACTIVEPATHCHECK="C:\Program Files\doxygen\bin" if exist %ACTIVEPATHCHECK% set PATH=%PATH%;%ACTIVEPATHCHECK% if not exist %ACTIVEPATHCHECK% echo OPTIONAL %ACTIVENAMECHECK% documentation package not recognized in the Windows PATH. Update the setenvironment.bat script file with the correct path SET ACTIVENAMECHECK="GnuWin32 Bison/Sed" -SET ACTIVEPATHCHECK="c:\Program Files\GnuWin32\bin" +SET ACTIVEPATHCHECK=c:\d\GnuWin32\bin if exist %ACTIVEPATHCHECK% set PATH=%PATH%;%ACTIVEPATHCHECK% if not exist %ACTIVEPATHCHECK% echo OPTIONAL %ACTIVENAMECHECK% package not recognized in the Windows PATH. Update the setenvironment.bat script file with the correct path SET ACTIVENAMECHECK="Python 2.4" -SET ACTIVEPATHCHECK=C:\progra~1\Python24 -if exist %ACTIVEPATHCHECK% SET PYTHON_HOME=C:\progra~1\Python24 +SET ACTIVEPATHCHECK=C:\Python24 +if exist %ACTIVEPATHCHECK% SET PYTHON_HOME=%ACTIVEPATHCHECK% if exist %ACTIVEPATHCHECK% set PATH=%PATH%;%ACTIVEPATHCHECK% if not exist %ACTIVEPATHCHECK% echo OPTIONAL %ACTIVENAMECHECK% package not found. Update the setenvironment.bat script file with the correct path SET ACTIVENAMECHECK="SWIG 1.3.31" -SET ACTIVEPATHCHECK=C:\progra~1\swigwin-1.3.31 -if exist %ACTIVEPATHCHECK% SET SWIG_HOME=C:\progra~1\swigwin-1.3.31 +SET ACTIVEPATHCHECK=c:\d\swigwin-1.3.31 +if exist %ACTIVEPATHCHECK% SET SWIG_HOME=%ACTIVEPATHCHECK% if exist %ACTIVEPATHCHECK% set PATH=%PATH%;%ACTIVEPATHCHECK% if not exist %ACTIVEPATHCHECK% echo OPTIONAL %ACTIVENAMECHECK% package not found. Update the setenvironment.bat script file with the correct path goto end --- C:/d/sdf/fdo/orig/OpenSource_FDO/Fdo/Python/Resource/FdoWrapper.rc Wed Feb 16 18:43:18 2011 +++ C:/d/sdf/fdo/OpenSource_FDO/Fdo/Python/Resource/FdoWrapper.rc Mon Nov 07 22:37:54 2011 @@ -5,11 +5,12 @@ #define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 2 resource. // -#include "afxres.h" +//#include "afxres.h" +#include "winresrc.h" ///////////////////////////////////////////////////////////////////////////// #undef APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// --- C:/d/sdf/fdo/orig/OpenSource_FDO/Fdo/Python/Swig/Fdo/FdoIncludes.i Wed Jan 06 04:06:08 2010 +++ C:/d/sdf/fdo/OpenSource_FDO/Fdo/Python/Swig/Fdo/FdoIncludes.i Mon Nov 07 22:57:32 2011 @@ -432,11 +432,14 @@ %include "Fdo/Schema/SchemaException.h" %include "Fdo/Schema/ClassDefinition.h" %include "Fdo/Schema/AutogenerationException.h" %include "Fdo/Schema/Class.h" + +%ignore FdoClassCapabilities::Set; %include "Fdo/Schema/ClassCapabilities.h" + %include "Fdo/Schema/ClassCollection.h" %include "Fdo/Schema/ClassType.h" %include "Fdo/Schema/DataPropertyDefinition.h" %include "Fdo/Schema/DataPropertyDefinitionCollection.h" %include "Fdo/Schema/DataType.h" --- C:/d/sdf/fdo/orig/OpenSource_FDO/Thirdparty/apache/xalan/projects/Win32/Res/AllInOne/AllInOne.rc Wed Mar 24 22:43:20 2010 +++ C:/d/sdf/fdo/OpenSource_FDO/Thirdparty/apache/xalan/projects/Win32/Res/AllInOne/AllInOne.rc Mon Nov 07 22:37:54 2011 @@ -5,11 +5,12 @@ #define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 2 resource. // -#include "afxres.h" +//#include "afxres.h" +#include "winresrc.h" ///////////////////////////////////////////////////////////////////////////// #undef APSTUDIO_READONLY_SYMBOLS |
- И скрипт сборки:
@echo off chcp 1251 > nul set wd=%~dp0 pushd "%wd%" set NLS_LANG=AMERICAN_CIS.UTF8 set PYTHONPATH= @cls set INCLUDE=c:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include;%INCLUDE% set LIBPATH=c:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\lib;%LIBPATH% set LIB=c:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\lib;%LIB% set SWIG_HOME=c:\d\swigwin-1.3.31 set PYTHON_HOME=c:\Python24 set PYTHON_INCLUDE=%PYTHON_HOME%\include set PYTHON_LIB=%PYTHON_HOME%\libs\python24.lib set FDO=c:\d\sdf\fdo\OpenSource_FDO set FDOTHIRDPARTY=%FDO%\Thirdparty SET FDOUTILITIES=%FDO%\Utilities SET XALANROOT=%FDOTHIRDPARTY%\apache\xalan SET XERCESCROOT=%FDOTHIRDPARTY%\apache\xerces SET NLSDIR=%FDOTHIRDPARTY%\apache\xalan\src\xalanc\NLS SET ACTIVEPATHCHECK=d:\app\7-Zip set path=%path%;c:\WINDOWS\Microsoft.NET\Framework\v3.5;c:\d\GnuWin32\bin;c:\Python24;c:\d\swigwin-1.3.31;c:\d\Microsoft SDKs\Windows\v7.1\Bin @REM ~ goto TEST call setenvironmentVS10.bat x86>nul set @REM ~ call build_thirdparty.bat -w sdf -w fdo call build_thirdparty.bat -a clean set @REM ~ call build.bat -py=build call build.bat -a clean exit :TEST set FDO=c:\d\sdf\fdo\OpenSource_FDO\fdo set path=c:\d\sdf\fdo\OpenSource_FDO\Utilities\ExpressionEngine\Bin\Win32\Release;%path% pushd Fdo\Python\UnitTest call UnitTests.cmd popd exit C:\d\sdf\fdo\OpenSource_FDO\Fdo\Python\UnitTest>python Src/main.py Testing ApplySchemaTest... Testing CapabilitiesTest:Capabilities... Testing ClientServicesTest:ClientServices... Testing ClientServicesTest:ConnectionCreation... Testing CommandTest:ApplySchemaCommandCreation... Testing CommandTest:InsertCommandCreation... Testing CommandTest:SelectCommandCreation... Testing LOBTest... Testing StringBufferTest... Testing TypeMapTest:Enumerations... Testing TypeMapTest:Exceptions... Testing TypeMapTest:PrimitiveArrays... Testing TypeMapTest:Primitives... ---------------------------------------------------------------------- Ran 13 tests in 0.070s OK |
- Видно, что я пытался использовать MS Visual Studio 10 (это была одна из попыток), но пусть это никого не смущает. Использование Студии 2008 жестко зашито в конфигах FDO и компиляла реально Студия 2008 Express.
-
- Послевкусие после сборки фдо довольно гнусное. Как то я не ожидал, что сборка free проекта потребует наличия сильно небесплатной Студии (да еще и конкретной, старой версии!), плюс еще и неслабой правки вручную. Нехорошо это.
-
- Ненавижу Автодеск :)
-
- sgillies.net/blog/400/fdo-and-python
-
Posted by Valentin at 03:02 0 comments
Labels: Autodesk, GIS, Microsoft, opensource, python
2011-11-06
Vietcong
- Сегодня открылась страшная тайна!
- Я узнал причину (и, что важнее, устранил ее) по которой было невозможно стартовать сервер игрухи, для мочилова по локальной сети.
-
- Раньше был комп с WinXP и на нем, в незапамятные времена, установили Vietcong. Играли периодически, до недавнего времени. Но вот настал срок и старый комп ушел. Пришел новый, с Win7. И на новом компе Vietcong работать не захотел.
-
- Одну из причин нашли довольно быстро - если воткнуть в микрофонный вход звуковухи хоть микрофон, хоть наушники - начинает играть (вот такой странный Вьетконг, да).
-
- С другой было сложнее. Запускаем Vietcong в режиме сервера, чтобы в локальной сети поиграть, а он сообщает "connection timed out". Забарывали по разному, по всякому — неудачно. И вот, сегодня, в голову постучалось: вместе с компом был закуплен новый, хороший роутер. Как только мы сменили роутер обратно на старый, о боги! Оно заработало :)
-
- Сетевой код вьетконга так хитро написан, что сервер даже самому себе засылает нечто такое, что мой новый замечательный роутер не хочет передавать. То ли пакеты корявые, то ли широковещание особое - не знаю. Поскольку все остальное работает без нареканий, разбираться детально не буду, времени жаль.
-
- А свой старый роутер я никому не отдам, вот.
-
Posted by Valentin at 02:45 2 comments
2011-11-05
Альтернатива
- Коммуникационная библиотека libpurple и GUI от Мозиллы — XUL. Получился приличный мессенджер без заморочек. Легко установить, легко использовать. Можно носить на флешке. Море плагинов, ибо их легко делать. Когда мне надоест Pidgin, поставлю себе Instantbirg IM:
-
- Увидел свет релиз многоплатформенного открытого клиента для мгновенного обмена сообщениями Instantbird 1.1, развиваемого на основе технологий Mozilla. Интерфейс Instantbird написан с использованием языка XUL и базируется на web-движке Gecko, в приложении активно используются вкладки (табы), поддерживается установка дополнений. С точки зрения поддержки протоколов и базовых возможностей, Instantbird близок к Pidgin, так как использует библиотеку libpurple. Организация стилевого оформления сообщений напоминает Adium. Код программы распространяется в рамках лицензии GPLv2, бинарные сборки доступны для Windows, Mac OS X и Linux. Продукт локализован и поддерживает русский язык.
- ...
- В настоящий момент для Instantbird уже подготовлено около 300 дополнений
- ...
- Плагины с реализацией поддержки новых протоколов могут создаваться на JavaScript
-
- opennet.ru/opennews/art 32074
-
- Q. How do I install Instantbird on Linux?
- A. Extract the content of the downloaded archive, and launch the file named "instantbird". If a popup dialog asks you if you want to edit or launch the file, select "launch".
-
- Q. Is Instantbird portable (usable from a USB stick)?
- A. If you start Instantbird from a USB stick, it will, by default, store your user profile on the hard disk.
- You can tell Instantbird to store your user profile on the USB stick by using the -profile command line argument.
- To do this, right click on the instantbird.exe file and select "Create Shortcut", then on the properties of the shortcut, edit the target and append -profile ./foldername to it.
-
- instantbird.com/faq installlinux
- instantbird.org
-
Posted by Valentin at 02:31 3 comments
Labels: im, opensource, pidgin
2011-11-04
В следующий раз поставлю Linux
- Было у меня желание, раз уж приходится мудохаться с напильником вокруг Вин7, то чего бы не поставить Дебианчик и дотачивать его. Все пользы больше. Но не поддался слабости, доточил свой movieshell (исходники прилагаются) под Windows7. Узнал много нового, что полезно. Но в следующий раз наверняка поставлю Linux.
-
- К чему это я? Это я про то, как программулина, написанная на Python + Tkinter и отлаженная на Windows XP, оказалась практически неработоспособна на Windows7. Потому как злые люди поменяли поведение виндовых подсистем. Раньше работало так, а теперь иначе.
-
- Короче, доточил. А главное, я решил вопрос с максимизацией окна! Облазил полтырнету, нигде нет рабочего рецепта «как вызвать maximize у окна нарисованного Tkinter». Пришлось сперва использовать конструкцию вида:
- w, h = tk.winfo_screenwidth(), tk.winfo_screenheight()
- tk.geometry("%dx%d+0+0" % (w-100, h-100))
- Что нехорошо, ибо на экране полно всяких панелек, сокращающих доступную окну площадь.
-
- Перебрав с два десятка вариантов, я нашел рабочий. Вот:
h = string.atoi(sh, 0) win32gui.PostMessage(h, win32con.WM_SYSCOMMAND, win32con.SC_MAXIMIZE, 0) |
- Применяемый в коде self.tk это не что иное, как результат вызова Tkinter.Tk(), что обычно в примерах называют root. Вызов «tk.after» нужен для срабатывания максимайза после завершения инициализации окна. И еще, при использовании SendMessage оно тоже работает, но только не в Вин7. В семерке необходимо использовать асинхрон — PostMessage.
-
- Сцылки по теме
- vasnake.blogspot.com/2010/12/magnate
- sites.google.com/site/vasnake
- vasnake.blogspot.com/2010/12/blog-post_29
- vasnake.blogspot.com/2011/10/blog-post_24
- vasnake.blogspot.com/2011/10/getlogicaldrives
-
Posted by Valentin at 03:23 1 comments
2011-11-03
Орешек
- Орех, это который NUT.
- Пришлось мне на днях конфигурить бережное выключение станции, снабженной ИБП. На компе, понятное дело :) установлен Debian Squeeze, UPS я взял от Powercom, модель Smart King Pro 700 (сразу скажу — неудачно закупился, дефектный упс оказался, что-то с егойным контроллером. Если посмотреть на цену девайса и сравнить с ценой приличных моделей аналогичной функциональности, удивляться не приходится).
-
- Проблема была сформулирована так: если пропадает питание, станция должна аккуратно гасить виртмашины, крутящиеся на ней с помощью VirtualBox.
-
- Итого, при исчезновении питания, задача упс-ного софта — заслать команду выключения станции и подождать, пока все процессы аккуратно завершатся. Задача скриптов выключения — сделать виртмашинам savestate (аналог гибернации) в нужное время. Получается куча скриптов и конфигов.
-
- Что самое сложное в процессе отладки скриптов выключения компа? Самое сложное, это пережить задротство с выключением-включением системы каждый раз, как вызывается проверка. Я это пережил, систему вроде отладил, сохраняю результат (как советовал добрый человек — лучший бекап, это выложить файл в Интернет, пусть его люди сами раскопируют :). Чуть не забыл, в моем конфиге используется концепция «пропало питание и не поднялось через 2 секунды — гаси машину». Обычно используется концепция «пропало питание — тяни на батареях пока они не высохнут, потом быстренько гаси машину».
-
- Поехали.
-
- Конспект выданных с консоли команд (все от рута, ясен пончик) при настройке системы:
# создание и включение скрипта гашения виртмашин: nano /etc/default/virtualbox nano /etc/init.d/rc.vbox chmod 755 /etc/init.d/rc.vbox update-rc.d rc.vbox remove update-rc.d rc.vbox defaults # установка софта для UPS: aptitude install nut aptitude install sysv-rc-conf # редактирование конфигов UPS: nano /etc/default/nut nano /etc/nut/nut.conf nano /etc/nut/ups.conf nano /etc/nut/upsd.conf nano /etc/nut/upsd.users nano /etc/nut/upsmon.conf nano /etc/nut/upssched.conf nano /root/upssched-cmd # размещение скрипта, вызываемого при переходе на батареи: chmod +x /root/upssched-cmd chown nut:nut /root/upssched-cmd mv /root/upssched-cmd /sbin/ # доп.телодвижения, необходимые для работы конфига: mkdir /var/run/nut/upssched chown -R nut:nut /var/run/nut touch /var/log/test.log # запуск, проверка и прочее: /etc/init.d/nut start sysv-rc-conf upsdrvctl start upsc pcmskp upsd upsd -c reload upscmd -l upscmd -l pcmskp |
- После (вернее, в процессе) конфигурирования мне понадобилось пару раз перезапустить машину, чтобы софт правильно прихватил порт USB с упсом.
-
- Теперь содержимое вышеуказанных скриптов и конфигов. Из текста выброшены почти все каменты (копирайты оставил):
-
cat /etc/default/virtualbox # юзер, под которым работают виртмашины (он их запускает) SHUTDOWN_USERS="valik" # что делать с виртмашинами SHUTDOWN=savestate |
cat /etc/init.d/rc.vbox #!/bin/sh ### BEGIN INIT INFO # Provides: vboxcontrol # Required-Start: vboxdrv $network $local_fs # Required-Stop: ssh $network $local_fs # Should-Start: samba # Should-Stop: samba # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Description: VirtualBox VM Control ### END INIT INFO # ко мне скрипт пришел чере «испорченный телефон», да и я его местами подкрутил, # alas. # This version is Vbox4, v1.0 by David Fuchs Based on: # Version 20090301 by Kevin Swanson based on: # Version 2008051100 by Jochem Kossen # http://farfewertoes.com # # Released in the public domain # # This file came with a README file containing the instructions on how # to use this script. # PATH=/sbin:/bin:/usr/sbin:/usr/bin:$PATH DEVICE=/dev/vboxdrv LOG="/var/log/vbox-install.log" NOLSB= DEBIAN=yes MODPROBE=/sbin/modprobe if $MODPROBE -c | grep -q '^allow_unsupported_modules *0'; then MODPROBE="$MODPROBE --allow-unsupported-modules" fi [ -f /lib/lsb/init-functions ] || NOLSB=yes [ -f /etc/vbox/vbox.cfg ] && . /etc/vbox/vbox.cfg if [ -n "$INSTALL_DIR" ]; then VBOXMANAGE="$INSTALL_DIR/VBoxManage" DODKMS="$INSTALL_DIR/src/vboxhost/do_dkms" BUILDVBOXDRV="$INSTALL_DIR/src/vboxhost/vboxdrv/build_in_tmp" BUILDVBOXNETFLT="$INSTALL_DIR/src/vboxhost/vboxnetflt/build_in_tmp" BUILDVBOXNETADP="$INSTALL_DIR/src/vboxhost/vboxnetadp/build_in_tmp" else VBOXMANAGE="/usr/lib/virtualbox/VBoxManage" DODKMS="/usr/share/virtualbox/src/vboxhost/do_dkms" BUILDVBOXDRV="/usr/share/virtualbox/src/vboxhost/vboxdrv/build_in_tmp" BUILDVBOXNETFLT="/usr/share/virtualbox/src/vboxhost/vboxnetflt/build_in_tmp" BUILDVBOXNETADP="/usr/share/virtualbox/src/vboxhost/vboxnetadp/build_in_tmp" fi [ -z "$DEBIAN" -o -x $VBOXMANAGE -a -x $BUILDVBOXDRV ] || exit 0 if [ -n "$NOLSB" ]; then if [ -f /etc/redhat-release ]; then system=redhat elif [ -f /etc/SuSE-release ]; then system=suse elif [ -f /etc/gentoo-release ]; then system=gentoo fi fi [ -r /etc/default/virtualbox ] && . /etc/default/virtualbox if [ -z "$NOLSB" ]; then . /lib/lsb/init-functions fail_msg() { echo "" log_failure_msg "$1" } succ_msg() { log_end_msg 0 } begin_msg() { log_daemon_msg "$@" } else if [ "$system" = "redhat" ]; then . /etc/init.d/functions fail_msg() { echo -n " " echo_failure echo echo " ($1)" } succ_msg() { echo -n " " echo_success echo } elif [ "$system" = "suse" ]; then . /etc/rc.status fail_msg() { rc_failed 1 rc_status -v echo " ($1)" } succ_msg() { rc_reset rc_status -v } elif [ "$system" = "gentoo" ]; then if [ -f /sbin/functions.sh ]; then . /sbin/functions.sh elif [ -f /etc/init.d/functions.sh ]; then . /etc/init.d/functions.sh fi fail_msg() { eerror "$1" } succ_msg() { eend "$?" } begin_msg() { ebegin "$1" } if [ "`which $0`" = "/sbin/rc" ]; then shift fi else fail_msg() { echo " ...failed!" echo " ($1)" } succ_msg() { echo " ...done." } fi if [ "$system" != "gentoo" ]; then begin_msg() { [ -z "${1:-}" ] && return 1 if [ -z "${2:-}" ]; then echo -n "$1" else echo -n "$1: $2" fi } fi fi case "$1" in start) ;; stop) echo "Run rc.vbox stop" >> /var/log/test.log wait=0 log_daemon_msg "Stopping vms..." for i in $SHUTDOWN_USERS; do # don't create the ipcd directory with wrong permissions! if [ -d /tmp/.vbox-$i-ipc ]; then export VBOX_IPC_SOCKETID="$i" VMS=`$VBOXMANAGE --nologo list runningvms | sed -e 's/^".*".*{\(.*\)}/\1/' 2>/dev/null` if [ -n "$VMS" ]; then if [ "$SHUTDOWN" = "poweroff" ]; then begin_msg "Powering off remaining VMs" for v in $VMS; do $VBOXMANAGE --nologo controlvm $v poweroff done succ_msg elif [ "$SHUTDOWN" = "acpibutton" ]; then begin_msg "Sending ACPI power button event to remaining VMs" for v in $VMS; do $VBOXMANAGE --nologo controlvm $v acpipowerbutton wait=30 done succ_msg elif [ "$SHUTDOWN" = "savestate" ]; then begin_msg "Saving state of remaining VMs" for v in $VMS; do $VBOXMANAGE --nologo controlvm $v savestate done succ_msg fi fi fi done # wait for some seconds when doing ACPI shutdown if [ "$wait" -ne 0 ]; then begin_msg "Waiting for $wait seconds for VM shutdown" sleep $wait succ_msg fi ;; *) echo "Usage: $0 {stop}" exit 1 ;; esac exit 0 |
cat /etc/default/nut START_UPSD=yes START_UPSMON=yes |
cat /etc/nut/nut.conf MODE=standalone |
cat /etc/nut/ups.conf [pcmskp] driver = usbhid-ups port = auto desc = "sqz on powercom smart king pro 700" |
cat /etc/nut/upsd.conf LISTEN 127.0.0.1 LISTEN ::1 |
cat /etc/nut/upsd.users [local_mon] password = 12345678 actions = SET instcmds = ALL upsmon master |
cat /etc/nut/upsmon.conf MONITOR pcmskp@localhost 1 local_mon 12345678 master # RUN_AS_USER nutmon # говорят, это ужасная дыра в безопасности RUN_AS_USER root MINSUPPLIES 1 SHUTDOWNCMD "/sbin/shutdown -h +0" NOTIFYCMD /sbin/upssched POLLFREQ 5 POLLFREQALERT 5 HOSTSYNC 15 DEADTIME 15 POWERDOWNFLAG /etc/killpower NOTIFYMSG ONLINE "UPS %s on line power" NOTIFYMSG ONBATT "UPS %s on battery" NOTIFYFLAG ONLINE SYSLOG+WALL+EXEC NOTIFYFLAG ONBATT SYSLOG+WALL+EXEC RBWARNTIME 43200 NOCOMMWARNTIME 300 FINALDELAY 5 |
cat /etc/nut/upssched.conf CMDSCRIPT /sbin/upssched-cmd PIPEFN /var/run/nut/upssched/upssched.pipe LOCKFN /var/run/nut/upssched/upssched.lock AT ONBATT * START-TIMER nopower 2 AT ONLINE * CANCEL-TIMER nopower |
cat /sbin/upssched-cmd #!/bin/bash # nopower timer from /etc/nut/upssched.conf # я почикал оригинальный скрипт, надеюсь, Paul не в претензии. ## # upssched-cmd: Notification script for use with Network UPS tools (NUT) # 1.0 # # Copyright (C) 2005 Paul J. Lucas # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ## MAIL=/usr/bin/mail EMAIL=root [ -z "$PAGER" ] && PAGER=$EMAIL notify() { echo $2 | $MAIL -s "$3" $1 echo $2 >> /var/log/test.log echo $2 | wall } case $1 in nopower) notify $PAGER $1 "UPS on battery now, timer nopower done" shutdown -h +0 powerevent /sbin/upsmon -c fsd ;; COMMBAD) notify $PAGER $1 "UPS communications lost" ;; COMMOK) notify $PAGER $1 "UPS communications established" ;; FSD) notify $EMAIL $1 "UPS being shut down by master" ;; LOWBATT) notify $EMAIL $1 "UPS has a low battery" ;; NOCOMM) notify $PAGER $1 "UPS unavailable" ;; ONBATT) notify $PAGER $1 "UPS on battery power" ;; ONLINE) notify $PAGER $1 "UPS on line power" ;; REPLBATT) notify $EMAIL $1 "UPS battery needs replacement" ;; SHUTDOWN) notify $EMAIL $1 "NUT shutting system down" ;; esac |
- Вот так. У меня работает.
-
- Некоторые использованные источники:
- networkupstools.org/documentation
- networkupstools.org/stable-hcl — проверьте перед покупкой ИБП!
- blasterspike.it/2011/03/28/how-to-install-nut-on-ubuntu-10-10-maverick-meerkat
- blog.shadypixel.com/monitoring-a-ups-with-nut-on-debian-or-ubuntu-linux/#comment-1549
- smilecouple.org/2011/05/27/install-virtual-box-4-on-ubuntu-with-phpvirtualbox4
- code.google.com/p/phpvirtualbox/wiki/vboxwebServiceConfigLinux
- rogerprice.org/NUT.html#UPSSCHED-CMD
- homepage.mac.com/pauljlucas/personal/macmini/ups
-
- Напоследок посоветую посвятить выбору производителя и модели UPS не менее пары часов времени. Сэкономите время же и деньги. Понравившуюся модель проверяйте на совместимость с софтом и количество параметров под управлением софта. Как я заметил, народ рекомендует MGE. А я денег пожалел на упс. oops :(
-
Posted by Valentin at 04:55 2 comments
2011-11-02
Примета времени
Posted by Valentin at 00:21 0 comments
2011-11-01
CyanogenMod
- Говорила мне мама — ты же программист, сынок, ты же знаешь — работает, не трогай. Да кто же слушает мам?
-
- Был (его железная часть и сейчас есть, вот операционке — вечная память) у меня толковый смартфон, всем меня устраивал (кроме, разве, невозможности флеш-ролики глядеть). И вот, захотелось мне странного и перепрошил я в Булыжник свежую версию Андроида. Порадовался мелким улучшениям. А потом, потом я обнаружил страшное — аппарат жутко (по сравнению с тем, что было) тормозит и лагает, аж до пропуска управляющих команд; браузер может сожрать батарею за несколько часов, вися в фоне. На днях у меня лопнуло терпение — пару раз батарея села в ноль пока я спал. То ли МТС шалит, то ли сам аппарат, поди разберись. И я решил — все, кватит накуй, прошью более другого Андроида. Цианоген тут как раз рекомендовали.
-
- Пацан сказал, пацан сделал. Вторые сутки у меня в Булыжнике сидит обцианогененный Андроид. Я пока доволен.
-
- Вот отчет о перепрошивке.
-
- Пара слов о сути процесса. Проведя нынешнюю прошивку, я прочувствовал, в чем фокус (в предыдущий раз не разобрался). Фокус в том, что заливка новой системы проводится в два этапа (если тел целочка в смысле прошивок). Сначала на тел заливается так называемый «рекавери», фактически организуется дуал-бутовая система, где рядом со штатной осью располагается вспомогательная. Если Андроид это минилинукс, то эта вспомогательная будет микролинукс (рекавери ее зовут, что странно — скажите поручик, расстегай это рыба или мясо? Расстегай — это команда). И после того, как у вас появляется возможность в любой момент загрузится в микролинукс, вы получаете изячный и примитивный способ заменить минилинукс на что угодно. И в любое желаемое время.
-
- Замена проводится через автоматическую распаковку в нужное место некоего архивчика, содержащего образ новой системы. Все что требуется, это разместить архивчик в обусловленном месте на карту памяти. Причем это можно сделать прям в процессе, приказав микролинуксу замонтировать карту как юсб-драйв, после чего залить с большого компа файл по юсб на карту памяти.
-
- Итак, сперва я зафиксировал список используемых мною аппликух, чтоб потом не вспоминать мучительно, что из маркета качать:
-
- AccuWeather quick
- Adobe flash player 11
- Advanced task killer
- amoeba
- barcode scanner
- beamreader PDF viewer
- blink flash led in your way (уже не надо, в цианогене есть)
- bluetooth file transfer
- colordict dictionary translate
- colornote notepad notes
- digital clock + widget
- fbreader
- fring
- ghost commander file manager
- handy locator lite
- keepassdroid
- moon+ reader
- navy clock II
- paragon keyboard (уже не надо, в цианогене есть)
- qr droid
- quickpic
- skype
- yandex.maps
-
- Потом внимательно изучил доступные материалы, начав отсюда:
- wiki.cyanogenmod.com/wiki/Unofficial_Ports#Motorola_Milestone
- Освежил память о предыдущем своем опыте:
- vasnake.blogspot.com/2011/07/froyo
-
- Потом раздобыл все нужные файлы (полный список ниже) и подготовил вирт.машину с виндой. Сделал хардресет телу (инструкция ниже); подключил тел к виртуалке.
-
- Потом делал как рекомендовано, попутно записывая, что шло не так, получилась улучшенная и поправленная инструкция по прошивке CyanogenMod на Motorola Milestone:
-
- A) First install the USB drivers from Motorola (Motorola_Mobile_Drivers_4.7.1_MotoConnect_1.1.31.exe).
-
- B) Then install the RSD Lite Tool (RSD_Lite_4.9.rar)
-
- C) Use RSD Lite to flash the Recovery-Only SBF (vulnerable_recovery_only_RAMDLD90_78.zip)
- Detailed Instructions for Step C ->
- Start the RSD Lite, select the SBF file
- 1. Plug in your phone (while it's off)
- 2. Go into the Bootloader Mode by holding UP (on the hardware keyboard) and press Power-On for 2-3 seconds (if UP doesn't work try pressing X) — Этот пункт реально не пошел, пришлось загрузить тел в штатный режим, в надежде, что прошивальщик сам разберется. Разобрался.
- 3. Now select your phone which should be now visible in the RSD Lite tool
- 4. Press Start — первая попытка не удалась, пришлось повторить, сразу после старта зажав (и удерживая до окончания процесса) на аппаратной клаве тела кнопу «стрелка вверх». И все срослось.
- 5. The phone will reboot 1-3 times during the downgrade process. DO NOT unplug it!
-
- D) Install Androidiani OpenRecovery
- Detailed instructions for Step D-> Installing OpenRecovery:
- 1. Download Open Recovery (any will do,but Androidiani is recommended) (OpenRecovery-3_3.zip) — и распакуйте, будет папка и файл update.zip
- 2. Copy the update.zip file to the root of your SD — либо загрузив тел в штатный режим и подключив его как флеш-диск, либо загрузив в рекавери и подключив его там как юсб-драйв.
- 3. Copy the OpenRecovery folder to the root of your SD.
- Reboot your phone into recovery menu — см.ниже инструкцию захода в рекавери
- NOTE: If you get an error about "EOCD Marker" at this point, that means you did not flash the vulnerable recovery properly. Go back to previous section, re-flash vulnerable recovery with RSD Lite and hold the up key during the whole operation until RSD Lite finishes.
- 4. Apply the update.zip — в рекавери будет соответствующий пункт меню
- You are now in Open Recovery. You can now root the phone, do Nandroid backup/restore etc; You can now install Cyanogen for Milestone.
-
- E) Lastly follow the steps for installing Cyanogen for Milestone and Google Apps
- If you are already rooted/have an OpenRecovery installed on your Milestone:
- 1. Put Google Apps (gapps-gb-20111029-signed.zip) and the latest Cyanogen zip file (update-cm-7.1.0.2-Milestone-KANG-signed.zip) in the Openrecovery/updates folder — должно быть уже всем понятно, что указанные файлы надо положить в нужное место на карте памяти уже понятным способом. Интересно, что будет с системой, если не ставить Гугл Аппс?
- 2. Factory Reset / Wipe Cache Partition AND Dalvik Cache — в меню рекавери в самом конце списка будут такие пункты меню, их надо выполнить
- 3. Flash the Cyanogen update.zip file — тоже, в меню рекавери через соотв.пункты меню
- 4. Flash the Google Apps zip file
-
- F) (if applicable) -> Make sure to install the correct baseband for you phone
- from the Androidiani menu if you are not using European 3G frequencies on your network — менять частоту для радио мне не понадобилось. Но можно :)
-
- Перезагрузиться (я еще раз хардресет не сделал, но некоторые рекомендуют).
-
- После загрузки в штатный режим сразу сделать важное — переустановить язык, лучше на аглицкий, ибо бага: Market FC: "Go to Settings/Language & Keyboard/Select Language. Select English even if already selected."
- code.google.com/p/cyanogenmod4milestone/issues/detail?id=651#c10
-
- И дальше как обычно при обживании нового девайса — инициализация, проверка всех настроек (их там дохерища, я прощелкивал их пару часов), синхронизация, заливка прикладух.
-
- Как попасть в рекавери (микролинукс) и потом сделать хардресет (© не мой):
-
- 1. Выключить телефон
- 2. Нажать кнопку Х на хардверной клавиатуре и держать не отпуская
- 3. Нажать кнопку питания и держать до появления моторольского логотипа (буква М в белом круге)
- 4. Отпустить питание и продолжаю держать кнопку Х на хардверной клавиатуре до появления треугольника с восклицательным знаком внутри (с момента появления моторольского логотипа до появления треугольника проходит секунд 15)
- 5. Отпустить кнопку Х на хардверной клавиатуре
- 6. Нажать громкость вверх и держать
- 7. Коротко нажать кнопку камеры (именно камеры, а не Х) - появляется меню синими буквами. Все - вы в меню рекавери. Кнопки можно отпустить.
-
- 8. Выбираем Wipe data/factory reset — ПОДУМАВ сперва, хотите ли вы этого!
-
- Где, что:
- www.droid-developers.org/wiki/CyanogenMod_4_Milestone_FAQ
- wiki.cyanogenmod.com/wiki/Unofficial_Ports#Motorola_Milestone
- forum.xda-developers.com/showthread.php?t=941346
- code.google.com/p/androidiani-openrecovery/downloads/list
- android.doshaska.net/cm7
- github.com/nadlabak/android/downloads
-
- Применявшиеся файлы, слева md5sum:
6e92d69286de1665d9d9264c29481663 Motorola_Mobile_Drivers_4.7.1_MotoConnect_1.1.31.exe e0ad8bc0537216ad0db5e4a5554dbac9 RSD_Lite_4.9.rar b075353a6e18ef3b515ed3d73d03e484 vulnerable_recovery_only_RAMDLD90_78.zip 827a26ac602a4ada4338743ef77b38dc OpenRecovery-3_3.zip 4c8748db820475c455e1f0a0322afc37 gapps-gb-20111029-signed.zip 8cfe40ddbc346d24742cc28d57d0961d update-cm-7.1.0.2-Milestone-KANG-signed.zip
Posted by Valentin at 04:10 2 comments
Архив блога
-
▼
2011
(293)
-
▼
ноября
(26)
- Silverlight
- SQL, аналитика
- Не надо жадничать
- Что за напасть
- Вполне электронная
- yield
- Трудности перевода
- Сизиф.js
- Язык
- Ringtone
- Make
- Неделя не задалась
- PhotoRec
- flac to mp3
- Masked shell input
- Extend root partition
- Глупости какие
- Справочник
- SDF to text
- FDO
- Vietcong
- Альтернатива
- В следующий раз поставлю Linux
- Орешек
- Примета времени
- CyanogenMod
-
▼
ноября
(26)