madf: (Default)
Сьогодні раптово виявив що у хаскелевій System.Directory немає функції переміщення файлу. Є тільки перейменування.
Різниця суттєва: неможливо перейменувати файл так що нове розташування знаходиться на іншому фізичному пристрої. Помилка приблизно така:

rename: unsupported operation (Invalid cross-device link)

Вихід, звісно, простий:

moveFile :: FilePath -> FilePath -> IO()
moveFile source dest = copyFile source dest >> removeFile source
madf: (Default)
У vim є вбудований механізм для „красивого“ двопанельного відображення diff двох файлів. І є прекрасний плагін DirDiff щоб переглядати diff -r у такому ж красивому двопанельному режимі.
git за допомогою difftool вміє використовувати vimdiff, але не дуже добре у нього з DirDiff. Але виправити це не дуже важко, принаймні з останніми версіями git.

Рецепт )
madf: (Default)
Дещо незвичне використання using.
Мало кому цікавий текст )
Інфа від самого Герба Саттера ("Please explain: function overloading with virtual functions. ")!
madf: (Default)
urxvt рулить нереально.
Чисто випадково у чийомусь файлі ресурсів побачив URxvt.urlLauncher. Почав копати. Виявляється, через механізм розширень (на perl) можна кліком по URL відкривати його у браузері.
Все добре, але ні одна собака не написала як це зробити не тупо по кліку, а, скажімо, по Ctrl+Button1, як мені потрібно. Навіть у офіційній документації нічого немає. А виявляється, все просто. Треба до номеру кнопки додати префікс:
C - Ctrl;
S - Shift;
M - Meta.
Довелось зазирнути у /usr/lib/urxvt/perl/matcher, але моїх знань Perl вистачило.
URxvt.perl-ext-common:  default,matcher                                         
URxvt.urlLauncher:      firefox                                                 
URxvt.matcher.button:   C1                                                      
URxvt.colorUL:          #86a2be
madf: (Default)
Хліб зараз черствіє просто моментально. Годин п’ять пройшло - і вже черствий. Те саме і зі здобою. Раніше у нас вдома була спеціальна штука на якій можна було розпарювати черстві булочки. Це підставка що ставилась у каструлю і утримувала пиріжок чи булочку над поверхнею води. Пару хвилин кипіння - і булочка як свіжа.
Зараз за вікном двадцять перше сторіччя, і такі архаїчні способи відійшли у минуле. Беремо шматок хліба, булочку чи пиріжок і кладемо на хвилину у мікрохвильову піч. Готово!
PS: фізику цього процесу я пояснити не можу.
PPS: обожнюю пиріжки із вишнями!
madf: (Default)
Пошарився тут по сайту Hubble і рішив собі картинку на фон поставити. А то якось чорний фон трошки набрид. А, оскільки, у XMonad фон бачиш тільки на пустому десктопі, то за одно вирішив і термінал зробити напівпрозорим. Сказано - зроблено.
URxvt.depth: 32
URxvt*background: rgba:0000/0000/0000/cccc
URxvt.fading: 70
URxvt.fadeColor: [0]black

І ще xcompmgr у spawn. Правда з ним трохи підторможує repaint у Midnight Comander, але пофігу.
Тепер сиджу у терміналі під космічну музику і з космічним фоном. Ніщо, як кажуть, людське нам не чужде.
А, да. Ще забув. Прийшлось склеїти дві картинки (1280x1024 і 1920x1200) - Xinerama, а feh не вміє роздільно ставити.
madf: (Default)
Slash me, відомий збочинець, крутить Gentoo на VPS. Взяв собі сервачок за мінімальним тарифом 300 MHZ / 256 Mb "на попробувать". Thanks to [livejournal.com profile] shkolin за наводку на 0x2a.
Кілька тіпсів і триксів )
madf: (Default)
З якоїсь невідомої мені причини я дуже давно не користувався флешками. Тому не помітив, що на ноуті запис на флеш вкрай повільний - 100 к/с. Причина - hal за замовчуванням монтує всі пристрої з опцією sync. Вирішується проблема просто: у /etc/hal/fdi/policy/ додаємо файл 95usbflashpolicy.fdi приблизно такого змісту
<?xml version="1.0" encoding="ISO-8859-1"?&rt; <!-- -*- SGML -*- -->
<deviceinfo version="0.2">
    <device>
       <!-- disable sync for mount -->
       <match key="block.is_volume" bool="true">
           <match key="volume.fsusage" string="filesystem">
               <match key="@info.parent:storage.bus" string="usb">
                   <merge key="volume.policy.mount_option.sync"type="bool">false</merge>
                   <merge key="volume.policy.mount_option.flush"type="bool">true</merge>
               </match>
           </match>
       </match>
    </device>
</deviceinfo>
madf: (Default)
Функція mktime використовується для перетворення із broken-down time у класичний timestamp. Час, що передається структурою, mktime вважає локальним, прив'язаним до встановленої time zone. Через це можна отримати дивні результати. Наприклад, 1970-01-01 00:00:00 перестає бути нулем і стає -10800.
Існує функція timegm, що є розширенням GNU до libc, яка має той-же синтаксис, але вважає переданий час таким що належить до UTC. Ця функція є у мене в libc і є у libc FreeBSD 4.6 (я перевірив). Але у мані пишуть:

       For a portable version of timegm(), set the TZ environment variable  to
       UTC, call mktime() and restore the value of TZ.  Something like

              #include <time.h>
              #include <stdlib.h>

              time_t my_timegm (struct tm *tm) {
                  time_t ret;
                  char *tz;

                  tz = getenv("TZ");
                  setenv("TZ", "", 1);
                  tzset();
                  ret = mktime(tm);
                  if (tz)
                      setenv("TZ", tz, 1);
                  else
                      unsetenv("TZ");
                  tzset();
                  return ret;
              }

madf: (Default)
Колись я вже цікавився темою локалей. Сьогодні LOR вирішив одну з найбільших моїх проблем при роботі з локалями у C++.

Re: std::cout вместе с std::wcout
во первых - установите локали, и для C и для C++
 // set up locale
 std::clog << "libc locale: " << std::setlocale(LC_ALL, "") << std::endl; // setup C rtl locale
 std::locale::global(std::locale("")); // setup C++ rtl global default locale
 std::clog << "std C++ locale: " << std::locale().name() << std::endl;


во вторых - установите локаль для потоков ввода-вывода

 std::cout.imbue(std::locale());
 std::cerr.imbue(std::locale());
 std::clog.imbue(std::locale());
 
 std::wcout.imbue(std::locale());
 std::wcerr.imbue(std::locale());
 std::wclog.imbue(std::locale());


и в третьих - отсоедините потоки ввода-вывода C++ от потоков ввода-вывода C библиотеки

 // for correct io with wcin/wcout
 std::ios::sync_with_stdio(false); // not needed if used only w* streams


Джерело: http://www.linux.org.ru/view-message.jsp?msgid=3691230#3691831

Profile

madf: (Default)
madf

April 2017

S M T W T F S
      1
2345678
9101112131415
1617 1819202122
23242526272829
30      

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 19th, 2017 03:10 pm
Powered by Dreamwidth Studios