четверг, 11 августа 2011 г.

Список программ, которые не надо писать.

По мотивам http://www.linux.org.ru/forum/talks/6596877
Если есть время и/или чешутся руки, то их надо... Ну ясен пень почесать. А если у программиста чешутся руки, то от зуда избавляются кодингом. И тут возникает проблема, на что обратить свое драгоценное внимание. Или кому приятно разгребать чужой код, или не дает покоя слава Торвальдса, но по какой то причине мало кто хочет присоединяться к существующим проектам. Все создают свои, новые.
Даже если очень хочется, то вот что писать не надо:
  1. Операционная система. Осилить проект размером с ядро  "Linux" мало кому под силу (да никому уже и не подсилу, ввиду размеров онного.). Если не верите, то взгляните на GNU HURD. или Minix. Второй живет и процветает, но не больше чем ОС для обучения студентов. А сколько напилено всяких "дискетных" операционок (Menuet OS, Kolibri OS). Такие вещи, как *BSD системы тоже никуда не делись. Только  с дровами проблема: они есть, но не под все железо и не всегда новые (привет владельцам видео от ATI и USB GSM  модемов).
  2. VCS. Если ОС не так много (большинство из которых сборки на базе существующих), то тут вообще зоопарк. git,mercurial,bazaar,cvs,svn,darcs... а про платные я и упоминать не стану.
  3. Офисные пакеты. Ну что тут сказать... их не так много, но ничего нового в это отрасли не открыли и все они являются неполными клонами продукта от MS.
  4. текстовый редактор. тут альтернатив, хоть закушайся. от sed до gedit и kate. А сколько клонов у emacs и vim? и это альтернативы не самых простых редакторов. Аналогами notepad можно печь топить. Для каждого "уважающего себя языка программирования" есть редактор написанный на нем самим.
  5. переписыванием существующего на python/ruby/javascript... в последнее время мания какая то: то git на c# или javascript перепишут, то grep на ruby, то pdf читалку на javascript (секта какая то). Зачем? Зачем все это, если можно сделать привязку к существующим библиотекам на с/с++ (за исключением javascript. тут неувязочка выходит)?
  6. Браузеры. Их не так много, если сравнивать с текстовыми редакторами, но куча уже образовалась. Я не говорю про те, что со своим движком и "инфраструктурой". Я про те, что на WebKit. Самой главное, что друг от друга они не различаются.
  7. файловый менеджер а-ля "commander". Их не так много, как текстовых редакторов, но принципиально нового тут открыть нельзя(ну или практически нельзя), а клепать очередной Total только хуже не стоит.
  8. IDE для java. В одиночку такое не осилить. Взгляните на Eclipse и компанию и поймете о чем я.
  9. IM (ICQ,Jabber....). Сотни альтернатив, даже если не считать проприетарные.
  10. mp3 плеер. Есть такие монстры как Banshe и Amarok, есть легкие Deadbeef и mpd. Есть пара-тройка WinAmpов.
  11. Photoshop. Тут альтернатив такого уровня мало. почти нет (если Gimp не рассматривать), а для простых смертных подойдет и то, что есть в DigiKam и его гномьем аналоге.
  12. torrent клиент. Ну тут их сколь угодно. И почти все написаны с использованием одной библиотеки.
Это, конечно, все мое имхо. Но я думаю, что писать очередной "мега ****, такой же, как  **, только другой" не стоит.

    вторник, 2 августа 2011 г.

    double2string

    Варианты конвертации double в string:

     
    String.Format("{0:0.00}", 123.4567);      // "123.46"
    String.Format("{0:0.00}", 123.4);         // "123.40"
    String.Format("{0:0.00}", 123.0);         // "123.00" 
    String.Format("{0:0.##}", 123.4567);      // "123.46"
    String.Format("{0:0.##}", 123.4);         // "123.4"
    String.Format("{0:0.##}", 123.0);         // "123"
    String.Format("{0:0.0}", 0.0);            // "0.0"
    String.Format("{0:0.#}", 0.0);            // "0"
    String.Format("{0:#.0}", 0.0);            // ".0"
    String.Format("{0:#.#}", 0.0);            // "" 

    воскресенье, 24 июля 2011 г.

    Android приложения

    Вот список программ, которые юзаю в своем телефоне. Записал сюда, чтобы не забыть.


    1. AppMonster - Программа для резервного копирования приложений.
    2. Я.Карты - собственно  карты, но отечественные
    3. DroidStats - Позволяет отследить длительность звонков, с кем больше всего велись разговоры, или смс. Можно установить месячные лимиты на звонки/смс и длительность разговоров
    4. FBreader - читалка книг. очень удобная.
    5. ES-Проводник - встроенного проводника в моем HTC Wildfire S нет, поэтому юзаю этот.
    6. Dropbox - в представлении не нуждается
    7. AdobeReader - в представлении не нуждается
    8. QuickOffice - читалка файлов офиса.
    9. RealCalc - калькулятор. неплохой такой калькулятор.
    10. OperaMobile - Opera но для ведройда.
    11. AnryBirds - игрушка - убийца времени.
    12. Google Reader - клиент к одноименному сервису.
    13. ArmySniper - очередная убийца времени.
    14. aFirewall - Блокирование нежелательных входящих звонков.
    15. Springpad - клиент к одноименному сервису
    16. Я.Маркет - клиент к Яндекс.Маркет со встроенным сканером штрих-кодов
    17. QRDroid - сканер qr-кодов.

    воскресенье, 26 июня 2011 г.

    Ноутбук HP-g62 и Linux

    Проблемой данного ноутбука, обладателем которого я являюсь, является наличие двух графических чипов. один от ATI, а второй от INTEL. в последних ядрах linux (2.6.33 и выше) ядро загружается с ошибками, а то и вовсе не запускается. решение проблемы является блокировка загрузки модуля radeon при запуске системы.

    четверг, 26 мая 2011 г.

    Ария - На Службе Силы Зла

    Эта песня, лет 10-12 назад, произвела на меня большое впечатление. Собственное ее текст и видео с концерта.

    воскресенье, 15 мая 2011 г.

    Лучшие фразы Бендера из Футурамы

    репост с этого сайта
    Моя любимая фраза:Сравните свою жизнь с моей, а потом убейте себя!

    воскресенье, 1 мая 2011 г.

    Fedora 14 и Kde 4.6.0

    Для установки kde4 под версией 4.6.0 в fedora 14 необходимо следующее:

    1. Добавить репозиторий в /etc/yum.repos.d/

    2. Запустить установку командой:
    yum install @kde-desktop


    3. Наслаждаемся :)

    вторник, 19 апреля 2011 г.

    Fedora и удаление зависимостей.

    Если необходимо удалить пакет и всё, что он за собой потянул во время установки необходимо поставить пакет yum-plugin-removewith-leaves.


    вторник, 12 апреля 2011 г.

    Почему git плох?

    Крики из зала

    Очень часто в сети можно услышать/прочитать, что git сложнее, чем
    "правильные" dvc. Цель данного поста не заставить читателей переходить
    на git, а показать, что в повседневном использовании он ничем не
    отличается от других систем контроля версий.
    Рассмотрим наиболее используемые команды. Эти комманды я ввожу
    десяток раз на день (если не чаще), как и многие другие
    пользователи. Я не вижу смысла сравнивать по редко используемые или
    специфичные только для определенных workflow. И так, поехали...

    воскресенье, 10 апреля 2011 г.

    Обновление Debian до Sid

    Debian Sid - ветка дистра с самым новым софтом. Но и самая низкая стабильность (Такая же, как и у Ubuntu :) ). Если вам нужно самое новое ПО, то вам сюда.

    вторник, 5 апреля 2011 г.

    Настройка git для домашних нужд.

    Git у меня используется для хранения текста диссертации (LaTeX). Один репозиторий хранится на github.com, второй на флэшке.  Ну и конфиги хранятся под git'ом. Далее приведу мой конфиг для git`а и как с этим жить.

    суббота, 26 марта 2011 г.

    Список наиболее используемого софта в Linux.

    При смене системы(или после неудачного эксперимента) приходится ставить большое количество софта заново. Чтобы нечего ни забыть, решил записать список используемого софта в блог.


    понедельник, 21 марта 2011 г.

    Набор интересных цитат.


    На сайте http://eax.me нашел список интересных цитат. 

    пятница, 18 марта 2011 г.

    среда, 16 марта 2011 г.

    понедельник, 14 марта 2011 г.

    Секреты долголетия.

    На сайте membrana опубликованы результаты исследования продолжительности жизни людей, которые собирались с 1921 года. Вот основные из них:


    воскресенье, 13 марта 2011 г.

    Каждая ветка в отдельной дирректории для Git (как в bzr)

    В bazaar есть удобная модель ветвления репозитория: каждая ветка находится в отдельной директории. Это очень удобно, например когда пишется текст/книга/диссертация/диплом и нужно скопировать в главу N абзац, который был в ней пол года назад, но потом был удален по требованиям редактора/таракана в голове/научного руководителя. Или не просто скопировать, а следить за тем, какая она была некоторое время назад, и причесывая текущее состояние работы по ее образу и подобию. В Git такой модели ветвления нет, но есть локальные ветки (в bazaar они тоже есть).  Для того, чтобы можно было использовать такой способ работы представлен следующий скрипт.


    пятница, 11 марта 2011 г.

    Последняя версия Mono для Ubuntu и Fedora

    Через пакетный менеджер сабж недоступен. Единственный вменяемый способ- скрипт для полуавтоматической сборки и установки из исходников.

    Monodevelop в Fedora 14

    При запуске monodevelop не может найти nunit. Лечится так:

    sudo ln -vs /usr/lib/mono/2.0/nunit.* /usr/lib/monodevelop/AddIns/NUnit/  

    OpenSuSe 11.3 -> 11.4

    Обновился, а оно умерло :( Ушел на Fedora.

    четверг, 3 марта 2011 г.

    Monodevelop 2.6 В OpenSuse 11.3

    Вот тут есть репозиторий с последней версией monodevelop (на данный момент 2.6 beta).

    среда, 2 марта 2011 г.

    flac в mp3

    Вот скрипт для конвертации flac в mp3.  Для работы необходимы пакеты flac и lame.


    #!/bin/sh

    for flac in *.flac;
    do
    mpeg=`echo $flac | cut -f1 -d.`.mp3
    cat "$flac" | flac -d -c - | lame --cbr -b 192 - - | cat - > "$mpeg"
    done


    вторник, 22 февраля 2011 г.

    Последняя версия Mono для Ubuntu

    Вот тут есть описание установки последней версии mono для ubuntu. Жалко, что не через пакетный менеджер.

    воскресенье, 13 февраля 2011 г.

    LibreOffice в OpenSuSe

    Вот так ставится libreoffice в opensuse:

    zypper ar -f http://download.opensuse.org/repositories/LibreOffice:/Stable/openSUSE_11.3/ LibreOffice

    zypper ref

    zypper in --from LibreOffice libreoffice

    пятница, 11 февраля 2011 г.

    Выделение участков кожи на изображении

    Нашел (студенты принесли) статью "Алгоритмы биометрической идентификации личности человека на основе инвариантных признаков профильного изображения лица" автор Мумтозали Тухтасинов. В ней приведен предикат для выделения на изображении участков, которые соответствуют цвету человеческой кожи. Вот и сам предикат:

    R>95 and G>40 and B>20 and max(R,G,B)-min(R,G,B)>15 and |R-G|>15 and R>G and R>B and [(R*100)/(R+G+B)]<57 and [(G*100)/(R+G+B)]<35 and [(B*100)/(R+G+B)]<35

    где R,G,B - количество красного, зеленого и синего соответственно.

    Судя по тестам, эта штука работает достаточно неплохо.

    воскресенье, 6 февраля 2011 г.

    TexLive 2010 и OpenSuSe 11

    В репозитории Publishing/openSUSE_11.3 есть пакет texlive-2010. Добавляем и пользуемся.

    суббота, 5 февраля 2011 г.

    Вкусности mono-2.10

    Что нового ожидается в mono-2.10(вкусности, которые интересны мне):

    - csharp - интерактивный repl/shell. Можно будет писать скрипты на C# с #!/usr/bin/csharp в первой строке. Или писать так: csharp -e 'from l in System.IO.Directory.GetFiles ("/bin") where l.Length > 18 select l;' или так csharp -e 'Math.Sin(0.1);'
    - Интерпретаторы языков f#, ironpython.
    -"Новый" (он появился еще 2.8) сборщик мусора SGen ускорил (на некоторых задачах) скорость на 35-40%.

    понедельник, 24 января 2011 г.

    Рекомендуемые репозитории для fedora

    Рекомендуемые репы для fedora:

    texlive -
    fedorapeople
    RussianFedoraRemix  -

    Список дополнительных репов есть тут
    Установка google-chrome тут

    понедельник, 10 января 2011 г.

    C# DirIterator

    сделал такую простую, но нужную мне, штуку:


    using System;
    using System.IO;
    using System.Collections.Generic;
    
    namespace Program
    {
            class MainClass
            {
                    public delegate void PathDelegate(FileInfo di);
                    /// 
                    /// Вызывает pd для каждого файла во всех поддиректориях в rd
                    /// 
                    ///                 /// root directory
                    /// 
                    static void dirMap(DirectoryInfo rd,MainClass.PathDelegate pd)
                    {
                            FileInfo[] files= null;
                            DirectoryInfo[] subdirs=null;
                            try
                            {
                                    files=rd.GetFiles("*");
                            }
                            catch(Exception ex)
                            {
                              Console.WriteLine("error on "+rd.FullName+": "+ex.ToString());
                            }
                            if (files!=null) {
                                    foreach (FileInfo file in files) {
                                            pd(file);
                                    }
                            }
                            subdirs=rd.GetDirectories("*");
                            foreach (DirectoryInfo d in subdirs) {
                                    dirMap(d,pd);
                            }
                    }
    
                    public static void Main (string[] args)
                    {
                            if(args.Length<1){
                               Console.WriteLine("usage: yatsrobot path");
                            }
    
    
                            Console.WriteLine("scaning "+args[0]);
    
                            if(Directory.Exists(args[0])){
                                    Console.WriteLine("directory extists");
                                    var di=new DirectoryInfo(args[0]);
                                    dirMap(di,x=> Console.WriteLine(x.FullName));
                            }
                            else{
                                    Console.WriteLine("directory not extists");
                                    return;
                            }
                    }
            }
    }