2/22/2018

Создание скриншотов в KDE

В KDE 4 была прекрасная утилита для создания снимков экрана, которая называлась ksnapshot, которую разработчики почему-то не стали портировать в KDE5.
В KDE 5, на замену ksnaphost пришла утилита spectacle

которая умеет делать всё тоже самое что и ksnaphost:

- Создавать снимок десктопа.
- Создавать снимок текущего монитора (если мониторов несколько).
- Создавать снимок прямоугольной области экрана

За более полным списком сюда: https://www.kde.org/applications/graphics/spectacle/

2/16/2018

cpu_meltdow spectre_v1 spectre_v2

Последние версии ядра Linux ( у меня 4.15.3) теперь позволяют посмотреть какие есть баги в процессоре.
cat /proc/cpuinfo:



Пора обновить микрокод процессора.

2/01/2017

Разработчики chromium без дела не сидят.

>>> Running pre-merge checks for www-client/chromium-56.0.2924.76-r1
* Checking for at least 16 GiB RAM ...                                             
* There is NOT at least 16 GiB RAM


* Space constraints set in the ebuild were not met!
* The build will most probably fail, you should enhance the space
* as per failed tests.

5/01/2015

tunctl больше не нужен

Открыл тут для себя что tunctl больше не нужен, и tun/tap устройства можно создавать так:

ip tuntap add eth0 user USER11 group GROUP11 mode tap

2/14/2015

Печать errno в консоли

bash + python для печати  errno в удобочитаемом виде:

strerror () { python -c "import os; print os.strerror($1)"; }

Еще есть утилита perror, поставляемая в составе mysql

2/08/2015

ffmpeg или libav

Gentoo теперь предлагает пользователям самим выбирать между libav и ffmpeg.
Не знаю что делать. Судя по всему проекты почти идентичны.
Посоветуйте что нибудь.

1/26/2015

Парочка полезных настроек gdb для отладки

Говорим gdb чтобы он сохранял историю команд в  ~/.gdb_history

    set history filename ~/.gdb_history
    set history save

Заставляем gdb печатать содержимое структур и объединений в виде дерева.

    set print pretty on
    set print union on

10/22/2014

Как правильно определять строки в строке компиляции

Многие делают так:

gcc -DMYSTRING=\"SomeString\"

Но правильно так:

gcc -DMYSTRING="\"SomeString\""

Допустим у нас есть вот такой код:

 const char * var = "T" MYSTRING "T";

Тогда, в результате его компиляции с помощью строки вида
gcc -DMYSTRING="\"SomeString\""

мы получим:

const char * var = "T" "test" "T";


9/02/2014

Российский разработчик Linux ядра арестован на 15 суток.

Российский разработчик Linux ядра арестован на 15 суток за одиночный пикет на Красной площади.

По информация  Theodore Ts'o: 
https://plus.google.com/u/0/+TheodoreTso/posts/dPPNYreZiU5

А человек, всего лишь, устроил одиночный пикет, который по нашим законам не запрещен.

8/13/2014

gerrit 2.9 и правило 1 + 1 = 2

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

После обновления gerrit'a с версии 2.8.1 на 2.9, исчесзла кнопочка submit для разработчиков даже если количество голосов было больше +2.

В логах геррита при этом появилась ошибка:

ERROR com.google.gerrit.server.project.ChangeControl : Submit rule :(user,submit_rule) for change 3368 of test_repository output invalid result: submit(label(Code-Review,ok(_1F935754))). Reason: A label with the status Code-Review: OK must contain a user.

Как оказалось, перестали работать правила отправки изменений, причем даже те, которые есть в примерах.

Вот тут народ завел баг репорт:

И чтобы не ходить по ссылке, рабочий пример правила 1+1=2, любезно предоставленный неким benjamin...@gmail.com:

sum_list([], 0).
sum_list([H | Rest], Sum) :- sum_list(Rest,Tmp), Sum is H + Tmp.

first_list([], _).
first_list([F], F).
first_list([F | Rest], F).

score(Category, Score, User) :-
  gerrit:commit_label(label(Category, Score), User).

add_category_min_score(In, Category, Min,  P) :-
  findall(Score, score(Category, Score, User), Scores),
  findall(User, score(Category, Score, User), Users),
  sum_list(Scores, Sum),
  Sum >= Min, !,
  first_list(Users, FirstUser),
  P = [label(Category, ok(FirstUser)) | In].

add_category_min_score(In, Category, Min, P) :-
  P = [label(Category, need(Min)) | In].

submit_rule(S) :-
  gerrit:default_submit(X),
  X =.. [submit | Ls],
  gerrit:remove_label(Ls, label('Code-Review', _), NoCR),
  add_category_min_score(NoCR, 'Code-Review', 2, Labels),
  S =.. [submit | Labels].

До сих пор не понимаю, почему авторы gerrit'a выбрали prolog.

2/10/2014

Импорт существующих git-репозиториев в gerrit

Если вам понадобилось перенести существующие репозитории в gerrit то делается это так:

  1. В gerrit создается новый проект, например  myProject.
  2. В уже имеющийся репозиторий добавляется remote MyProject.
  3. Заливаем набор изменений в MyProject.


  • git remote add gerrit_MyProject /path/to/gerrit/repo/MyProject.git
  • git push --mirror gerrit_MyProject

12/27/2013

Обновление Apache с версии 2.2 на версию 2.4

Если при обновлении Apache с версии 2.2 на версию 2.4 у вас вдруг перестал работать Reverse Proxy на внутренний домен по https у которого есть самоподписанный сертификат, и выдается сообщение типа:

[proxy:error] [pid 21402] (502)Unknown error 502: [client 127.0.0.1:44485] AH01084: pass request body failed to 127.0.0.1:8081 (127.0.0.1)

То скорее всего дело в следующих опциях, которые в версии 2.2 по умолчанию были выставлены в off, а в 2.4 по умолчанию on:

SSLProxyCheckPeerCN off
SSLProxyCheckPeerExpire off

Новый Apache теперь по умолчанию не доверяет самоподписанным сертификатам.

12/03/2013

Средства для CodeReview

Народ, подскажите кто какими средствами пользуется для CodeReview?
Мы пытались использовать Crucible - но оно нам не понравилось.
Сейчас мы выбираем между ReviewBoard и Gerrit.

И вообще, расскажите как этот процесс поставлен у вас?

7/01/2013

Немного про volatile

В языках C и C++ есть такое замечательно ключевое слово volatile.
Согласно стандарту языка C, переменная обозначенная типом с квалификатором volatile может быть изменена каким-то неизвестным способом (may be modified in ways, unknown to the implementation).

Допустим у нас есть вот такой код:

int a = 0;


int main (void) {

   while (*(int*)&a == 0)

      /* do smth. */ ;

   return 0;

}


Компилятор, скорее всего во время оптимизации этого кода отбросит все ненужные шаги по инициализации переменной, проверки ее на 0 и т.д., т.к. для него очевидно что это просто бесконечный цикл, и можно сгенерировать следующий код:

00008294<main>:

   8294:   eafffff    b    8294 <main>

Очевидно, что для того, чтобы заставить компилятор сгенерировать код, который бы проверял каждый раз значение переменной a, нужно использовать ключевое слово volatile при объявлении a
volatile int a = 0;


int main (void) {

   while (*(int*)&a == 0)

      /* do smth. */ ;

   return 0;

}


Но если скомпилировать эту программу мы увидим все тот же бесконечный цикл:
00008294<main>:

   8294:   eafffff    b    8294 <main>


Это все происходит из-за того, что при преобразовании в теле цикла к указателю на int, снимается квалификатор типа volatile, и когда мы разыменовываем указатель, то уже имеем переменную типа int, которая и сравнивается с 0.

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


volatile int a = 0;


int main (void) {

   while (*(volatile int*)&a == 0)

      /* do smth. */ ;

   return 0;

}


И тогда наконец-то мы получим то, что хотели:

00008294<main>:

         8294:   e59f2010   ldr     r2, [pc, #16]   ; 82ac
      <main+0x18>
         8298:   e5923000        ldr     r3, [r2]
         829c:   e3530000        cmp     r3, #0
         82a0:   0afffffc        beq     8298 <main+0x4>
         82a4:   e3a00000        mov     r0, #0
         82a8:   e12fff1e        bx      lr
         82ac:   000104f4        .word   0x000104f4

7/23/2012

не работает ptrace в Ubuntu

Обнаружили тут, что системный вызов ptrace не работает в Ubuntu 
и вываливается с ошибкой 'operation not permitted'.
 
Оказывается такое поведение по умолчанию включено в Ubuntu начиная с версии 10.10

Чтобы изменить поведение по умолчанию нужно немного поправить настройки ядра:
echo 0 > /proc/sys/kernel/yama/ptrace_scope

Или поправить файлик: 
/etc/sysctl.d/10-ptrace.conf 

3/26/2012

Визуализация разработки компилятора GCC в 1989-2012

Ребята с помощью утилиты Gource визуализировали процесс разработки компилятора gcc. 
На мой взгляд получилось и наглядно и красиво.

3/22/2012

GCC - 25 лет.

Ровно 25 лет назад, в далеком 1987 году Ричард Столлман анонсировал первый публичный релиз набора компиляторов GCC.

И к этой знаменательно дате приурочен выход новой версии GCC-4.7.0.

Компилятор GCC-4.7.0 содержит много новых возможностей, которых не было в ветке 4.6.x.
Из основных можно отметить:
  • Транзакционная память.
  • Поддержка большого количества фич стандарта ISO C++11, таких как atomics и новая модель памяти, определяемы пользователем литералы и т.д.
  • Значительно улучшен фреймворк оптимизации на этапе линковки (link-time optimization framework (LTO))
  • Улучшена поддержка расширений формата отладочной информации DWARF ()
  • Добавлена поддержка аппаратных платформ: 
    • Adapteva's Epiphany process
    • National Semiconductor's CR16 
    • TI's C6X 
    • Tilera's TILE-Gx and TILEPro.
    • Intel Haswell
    • AMD Piledriver 
    • ARM Cortex-A7 family.

Более подробно об изменениях можно почитать тут:
http://gcc.gnu.org/gcc-4.7/changes.html

Как узнать версию библиотеки libc?

Достаточно просто запустить файл библиотеки:

/lib/libc.so.6

GNU C Library stable release version 2.14.1, by Roland McGrath et al.
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 4.5.3.
Compiled on a Linux 3.2.0 system on 2012-01-18.
Available extensions:
        C stubs add-on version 2.1.2
        crypt add-on version 2.1 by Michael Glad and others
        Gentoo patchset 3
        GNU Libidn by Simon Josefsson
        Native POSIX Threads Library by Ulrich Drepper et al
        Support for some architectures added on, not maintained in glibc core.
        BIND-8.2.3-T5B
libc ABIs: UNIQUE IFUNC
For bug reporting instructions, please see:
.