tag:blogger.com,1999:blog-48764077850984398962024-02-08T21:40:49.303+03:00Linux ManiacsNotes about linux and programmingAlexhttp://www.blogger.com/profile/07688849026396952965noreply@blogger.comBlogger101125tag:blogger.com,1999:blog-4876407785098439896.post-84089135134734063952018-02-22T09:27:00.000+03:002018-02-22T09:27:35.650+03:00Создание скриншотов в KDEВ KDE 4 была прекрасная утилита для создания снимков экрана, которая называлась ksnapshot, которую разработчики почему-то не стали портировать в KDE5.<br />
В KDE 5, на замену ksnaphost пришла утилита spectacle<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://www.kde.org/images/screenshots/resized/spectacle.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="330" data-original-width="540" height="195" src="https://www.kde.org/images/screenshots/resized/spectacle.png" width="320" /></a></div>
<br />
которая умеет делать всё тоже самое что и ksnaphost:<br />
<br />
- Создавать снимок десктопа.<br />
- Создавать снимок текущего монитора (если мониторов несколько).<br />
- Создавать снимок прямоугольной области экрана<br />
<br />
За более полным списком сюда: <a href="https://www.kde.org/applications/graphics/spectacle/" target="_blank">https://www.kde.org/applications/graphics/spectacle/</a>Alexhttp://www.blogger.com/profile/07688849026396952965noreply@blogger.com0tag:blogger.com,1999:blog-4876407785098439896.post-83207312582859406002018-02-16T06:26:00.001+03:002018-02-16T06:26:39.967+03:00cpu_meltdow spectre_v1 spectre_v2<div class="separator" style="clear: both; text-align: left;">
Последние версии ядра Linux ( у меня 4.15.3) теперь позволяют посмотреть какие есть баги в процессоре.</div>
<div class="separator" style="clear: both; text-align: left;">
cat /proc/cpuinfo:</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-wkDL2jrzt-M/WoZN5MzYbTI/AAAAAAAAyQM/IG_E-MJ5_fo41P4_ksOpZUkCX5Za7P2NgCLcBGAs/s1600/intel_cpu_bugs.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="500" data-original-width="453" src="https://1.bp.blogspot.com/-wkDL2jrzt-M/WoZN5MzYbTI/AAAAAAAAyQM/IG_E-MJ5_fo41P4_ksOpZUkCX5Za7P2NgCLcBGAs/s1600/intel_cpu_bugs.png" /></a></div>
<br />
Пора обновить микрокод процессора.Alexhttp://www.blogger.com/profile/07688849026396952965noreply@blogger.com0tag:blogger.com,1999:blog-4876407785098439896.post-65817033743450102382017-02-01T07:19:00.001+03:002017-02-01T07:19:57.517+03:00Разработчики chromium без дела не сидят.<span style="font-family: monospace;"><span style="background-color: white;">>>> Running pre-merge checks for </span><span style="background-color: white; color: #18b218;">www-client/chromium-56.0.2924.76-r1</span><span style="background-color: white;">
</span><br /> <span style="background-color: white; color: #54ff54; font-weight: bold;">*</span><span style="background-color: white;"> Checking for at least 16 GiB RAM ... </span><br /> <span style="background-color: white; color: #ff5454; font-weight: bold;">*</span><span style="background-color: white;"> There is NOT at least 16 GiB RAM</span></span><br />
<span style="font-family: monospace;"><span style="background-color: white;"><br /></span></span>
<span style="font-family: monospace;"><span style="background-color: white; color: #ff5454; font-weight: bold;">* </span><span style="background-color: white;">Space constraints set in the ebuild were not met!
</span><br /><span style="background-color: white; color: #ff5454; font-weight: bold;"> * </span><span style="background-color: white;">The build will most probably fail, you should enhance the space
</span><br /><span style="background-color: white; color: #ff5454; font-weight: bold;"> * </span><span style="background-color: white;">as per failed tests.</span><br />
</span>Alexhttp://www.blogger.com/profile/07688849026396952965noreply@blogger.com1tag:blogger.com,1999:blog-4876407785098439896.post-42453996493768133302016-07-14T21:54:00.001+03:002016-07-14T22:03:41.139+03:00Gentoo: Как исправить ntp-client failed to start.Очень просто - заменить его на ntpd.<br />
<blockquote class="tr_bq">
<span style="background-color: white; font-family: monospace;">rc-update del ntp-client</span></blockquote>
<blockquote class="tr_bq">
<span style="font-family: monospace;">rc-service ntpd start</span></blockquote>
<blockquote class="tr_bq">
<span style="font-family: monospace;">rc-update add ntpd default</span></blockquote>
<span style="font-family: monospace;">
</span>Alexhttp://www.blogger.com/profile/07688849026396952965noreply@blogger.com0tag:blogger.com,1999:blog-4876407785098439896.post-38617954734725786202015-05-01T22:27:00.000+03:002015-05-01T22:27:01.686+03:00tunctl больше не нуженОткрыл тут для себя что tunctl больше не нужен, и tun/tap устройства можно создавать так:<br />
<br />
<span style="background-color: #eeeeee; font-family: Verdana, sans-serif;">ip tuntap add eth0 user USER11 group GROUP11 mode tap</span>Alexhttp://www.blogger.com/profile/07688849026396952965noreply@blogger.com0tag:blogger.com,1999:blog-4876407785098439896.post-6669638583180957212015-02-14T10:52:00.001+03:002015-02-14T10:52:34.357+03:00Печать errno в консолиbash + python для печати errno в удобочитаемом виде:<br />
<br />
<span style="background-color: #eeeeee;">strerror () { python -c "import os; print os.strerror($1)"; }</span><br />
<br />
Еще есть утилита perror, поставляемая в составе mysqlAlexhttp://www.blogger.com/profile/07688849026396952965noreply@blogger.com0tag:blogger.com,1999:blog-4876407785098439896.post-12069844714565955772015-02-08T13:27:00.000+03:002015-02-08T13:27:12.613+03:00ffmpeg или libavGentoo теперь предлагает пользователям самим выбирать между libav и ffmpeg.<div>
Не знаю что делать. Судя по всему проекты почти идентичны.</div>
<div>
Посоветуйте что нибудь.</div>
Alexhttp://www.blogger.com/profile/07688849026396952965noreply@blogger.com2tag:blogger.com,1999:blog-4876407785098439896.post-81272853646052617072015-01-26T13:35:00.002+03:002015-01-26T13:35:39.681+03:00Парочка полезных настроек gdb для отладкиГоворим gdb чтобы он сохранял историю команд в ~/.gdb_history<br />
<br /> set history filename ~/.gdb_history<br /> set history save<div>
<br /></div>
<div>
Заставляем gdb печатать содержимое структур и объединений в виде дерева.<br />
<br />
set print pretty on<br />
set print union on<br />
<br /></div>
Alexhttp://www.blogger.com/profile/07688849026396952965noreply@blogger.com0tag:blogger.com,1999:blog-4876407785098439896.post-53682451883750404782015-01-19T18:27:00.002+03:002015-01-19T18:27:46.735+03:00Полезная штучка для отладки.<br />
Отключение рандомизации виртуального адресного пространства:<br />
setarch x86_64 -v -RAlexhttp://www.blogger.com/profile/07688849026396952965noreply@blogger.com0tag:blogger.com,1999:blog-4876407785098439896.post-31245638399541627772014-10-22T12:51:00.003+04:002014-10-23T07:35:49.028+04:00Как правильно определять строки в строке компиляцииМногие делают так:<br />
<br />
<strike style="background-color: #eeeeee;">gcc -DMYSTRING=\"SomeString\"</strike><br />
<br />
Но правильно так:<br />
<br />
<span style="background-color: #eeeeee;">gcc -DMYSTRING="\"SomeString\""</span><br />
<span style="background-color: #eeeeee;"><br /></span>
<span style="background-color: white;">Допустим у нас есть вот такой код:</span><br />
<span style="background-color: white;"><br /></span>
<span style="background-color: white;"> const char * var = "T" MYSTRING "T";</span><br />
<span style="background-color: white;"><br /></span>
<span style="background-color: white;">Тогда, в результате его компиляции с помощью строки вида</span><br />
<span style="background-color: #eeeeee;">gcc -DMYSTRING="\"SomeString\""</span><br />
<span style="background-color: white;"><br /></span>
<span style="background-color: white;">мы получим:</span><br />
<span style="background-color: white;"></span><br />
const char * var = "T" "test" "T";<br />
<div>
<br /></div>
<span style="background-color: white;"><br /></span>Alexhttp://www.blogger.com/profile/07688849026396952965noreply@blogger.com2tag:blogger.com,1999:blog-4876407785098439896.post-81617639221121503842014-09-02T19:14:00.002+04:002014-09-02T19:14:57.726+04:00Российский разработчик Linux ядра арестован на 15 суток.<div>
Российский разработчик Linux ядра арестован на 15 суток за одиночный пикет на Красной площади.</div>
<div>
<br /></div>
<div>
По информация Theodore Ts'o: </div>
<a href="https://plus.google.com/u/0/+TheodoreTso/posts/dPPNYreZiU5">https://plus.google.com/u/0/+TheodoreTso/posts/dPPNYreZiU5</a><div>
<br /></div>
<div>
А человек, всего лишь, устроил одиночный пикет, который по нашим законам не запрещен.</div>
Alexhttp://www.blogger.com/profile/07688849026396952965noreply@blogger.com7tag:blogger.com,1999:blog-4876407785098439896.post-22289292007611891022014-08-13T15:23:00.000+04:002014-08-13T15:23:46.236+04:00gerrit 2.9 и правило 1 + 1 = 2У нас принято, что, для того, чтобы изменения попали в репозиторий, патч должен получить одобрении как минимум двух сторонних ревьюверов.<br />
<br />
После обновления gerrit'a с версии 2.8.1 на 2.9, исчесзла кнопочка submit для разработчиков даже если количество голосов было больше +2.<br />
<br />
В логах геррита при этом появилась ошибка:<br />
<br />
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.<br />
<div>
<br /></div>
<div>
Как оказалось, перестали работать правила отправки изменений, причем даже те, которые есть в примерах.</div>
<div>
<br /></div>
<div>
Вот тут народ завел баг репорт:</div>
<div>
<a href="https://code.google.com/p/gerrit/issues/detail?id=2469" target="_blank">https://code.google.com/p/gerrit/issues/detail?id=2469</a></div>
<div>
<br /></div>
<div>
И чтобы не ходить по ссылке, рабочий пример правила 1+1=2, любезно предоставленный неким <a href="https://code.google.com/u/116754539882543378014/" style="text-decoration: none;">benjamin...@gmail.com</a>:<br />
<br />
sum_list([], 0).<br />
sum_list([H | Rest], Sum) :- sum_list(Rest,Tmp), Sum is H + Tmp.<br />
<br />
first_list([], _).<br />
first_list([F], F).<br />
first_list([F | Rest], F).<br />
<br />
score(Category, Score, User) :-<br />
gerrit:commit_label(label(Category, Score), User).<br />
<br />
add_category_min_score(In, Category, Min, P) :-<br />
findall(Score, score(Category, Score, User), Scores),<br />
findall(User, score(Category, Score, User), Users),<br />
sum_list(Scores, Sum),<br />
Sum >= Min, !,<br />
first_list(Users, FirstUser),<br />
P = [label(Category, ok(FirstUser)) | In].<br />
<br />
add_category_min_score(In, Category, Min, P) :-<br />
P = [label(Category, need(Min)) | In].<br />
<br />
submit_rule(S) :-<br />
gerrit:default_submit(X),<br />
X =.. [submit | Ls],<br />
gerrit:remove_label(Ls, label('Code-Review', _), NoCR),<br />
add_category_min_score(NoCR, 'Code-Review', 2, Labels),<br />
S =.. [submit | Labels].<br />
<br />
До сих пор не понимаю, почему авторы gerrit'a выбрали prolog.<br />
<br /></div>
Alexhttp://www.blogger.com/profile/07688849026396952965noreply@blogger.com1tag:blogger.com,1999:blog-4876407785098439896.post-28780576448147603012014-02-10T13:25:00.001+04:002014-02-10T13:25:14.189+04:00Импорт существующих git-репозиториев в gerritЕсли вам понадобилось перенести существующие репозитории в gerrit то делается это так:<br />
<br />
<ol>
<li>В gerrit создается новый проект, например myProject.</li>
<li>В уже имеющийся репозиторий добавляется remote MyProject.</li>
<li>Заливаем набор изменений в MyProject.</li>
</ol>
<br />
<br />
<ul>
<li>git remote add gerrit_MyProject /path/to/gerrit/repo/MyProject.git</li>
<li>git push --mirror gerrit_MyProject</li>
</ul>
Alexhttp://www.blogger.com/profile/07688849026396952965noreply@blogger.com0tag:blogger.com,1999:blog-4876407785098439896.post-34934591205766124462013-12-27T08:08:00.000+04:002013-12-27T08:08:59.220+04:00Обновление Apache с версии 2.2 на версию 2.4Если при обновлении Apache с версии 2.2 на версию 2.4 у вас вдруг перестал работать Reverse Proxy на внутренний домен по https у которого есть самоподписанный сертификат, и выдается сообщение типа:<br />
<br />
<span style="background-color: #f3f3f3;">[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)</span><br />
<div>
<br /></div>
<div>
То скорее всего дело в следующих опциях, которые в версии 2.2 по умолчанию были выставлены в off, а в 2.4 по умолчанию on:</div>
<br />
SSLProxyCheckPeerCN off<br />
SSLProxyCheckPeerExpire off<br />
<br />
<div>
Новый Apache теперь по умолчанию не доверяет самоподписанным сертификатам.</div>
Alexhttp://www.blogger.com/profile/07688849026396952965noreply@blogger.com0tag:blogger.com,1999:blog-4876407785098439896.post-30465710882588779862013-12-03T11:13:00.002+04:002013-12-03T11:14:18.203+04:00Средства для CodeReviewНарод, подскажите кто какими средствами пользуется для CodeReview?<br />
Мы пытались использовать <a href="https://www.atlassian.com/software/crucible/overview">Crucible</a> - но оно нам не понравилось.<br />
Сейчас мы выбираем между <a href="http://www.reviewboard.org/">ReviewBoard</a> и <a href="https://code.google.com/p/gerrit/">Gerrit</a>.<br />
<br />
И вообще, расскажите как этот процесс поставлен у вас?<br />
<br />Alexhttp://www.blogger.com/profile/07688849026396952965noreply@blogger.com2tag:blogger.com,1999:blog-4876407785098439896.post-36015491759195264002013-07-01T10:09:00.000+04:002013-07-01T10:09:12.886+04:00Немного про volatileВ языках C и C++ есть такое замечательно ключевое слово <b><i>volatile</i></b>.<br />
Согласно стандарту языка C, переменная обозначенная типом с квалификатором <b>volatile</b> может быть изменена каким-то неизвестным способом (may be modified in ways, unknown to the implementation).<br />
<br />
Допустим у нас есть вот такой код:<br />
<br />
<pre class="brush:c">int a = 0;
int main (void) {
while (*(int*)&a == 0)
/* do smth. */ ;
return 0;
}
</pre>
<br />
Компилятор, скорее всего во время оптимизации этого кода отбросит все ненужные шаги по инициализации переменной, проверки ее на 0 и т.д., т.к. для него очевидно что это просто бесконечный цикл, и можно сгенерировать следующий код:<br />
<br />
<pre class="brush:c">00008294<main>:
8294: eafffff b 8294 <main>
</pre>
<br />
Очевидно, что для того, чтобы заставить компилятор сгенерировать код, который бы проверял каждый раз значение переменной a, нужно использовать ключевое слово volatile при объявлении a<br />
<pre class="brush:c">volatile int a = 0;
int main (void) {
while (*(int*)&a == 0)
/* do smth. */ ;
return 0;
}
</pre>
<br />
Но если скомпилировать эту программу мы увидим все тот же бесконечный цикл:<br />
<pre class="brush:c">00008294<main>:
8294: eafffff b 8294 <main>
</pre>
<br />
<span lang="EN-US"><br /></span>
<span lang="EN-US">Это все происходит из-за того, что при преобразовании в теле цикла к указателю на int, снимается квалификатор типа volatile, и когда мы разыменовываем указатель, то уже имеем переменную типа int, которая и сравнивается с 0.</span><br />
<span lang="EN-US"><br /></span>
<span lang="EN-US">Поэтому, чтобы добиться желаемого эффекта volatile нужно употребить сразу в двух местах:</span><br />
<span lang="EN-US"><br /></span>
<br />
<pre class="brush:c">volatile int a = 0;
int main (void) {
while (*(volatile int*)&a == 0)
/* do smth. */ ;
return 0;
}
</pre>
<br />
И тогда наконец-то мы получим то, что хотели:<br />
<br />
<pre class="brush:c">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
</pre>
Alexhttp://www.blogger.com/profile/07688849026396952965noreply@blogger.com0tag:blogger.com,1999:blog-4876407785098439896.post-77755481843095282112012-07-23T23:47:00.001+04:002013-06-03T20:26:33.016+04:00не работает ptrace в Ubuntu<pre>Обнаружили тут, что системный вызов ptrace не работает в Ubuntu </pre>
<pre>и вываливается с ошибкой 'operation not permitted'.</pre>
<pre> </pre>
<pre>Оказывается такое поведение по умолчанию включено в Ubuntu начиная с версии 10.10</pre>
<pre></pre>
<pre>Чтобы изменить поведение по умолчанию нужно немного поправить настройки ядра:</pre>
<pre>echo 0 > <tt class="backtick">/proc/sys/kernel/yama/ptrace_scope</tt></pre>
<pre></pre>
<pre>Или поправить файлик: </pre>
<pre>/etc/sysctl.d/10-ptrace.conf </pre>
Alexhttp://www.blogger.com/profile/07688849026396952965noreply@blogger.com4tag:blogger.com,1999:blog-4876407785098439896.post-7290016305588085272012-03-26T21:49:00.000+04:002012-03-26T21:49:09.814+04:00Визуализация разработки компилятора GCC в 1989-2012<div class="separator" style="clear: both; text-align: left;">
</div>
<div class="separator" style="clear: both; text-align: left;">
Ребята с помощью утилиты <a href="http://code.google.com/p/gource" target="_blank">Gource</a> визуализировали процесс разработки компилятора gcc. </div>
<div class="separator" style="clear: both; text-align: left;">
На мой взгляд получилось и наглядно и красиво.</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div style="text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/ZEAlhVOZ8qQ?feature=player_embedded' frameborder='0'></iframe></div>
<div style="text-align: left;">
<span id="goog_95770785"></span><span id="goog_95770786"></span></div>Alexhttp://www.blogger.com/profile/07688849026396952965noreply@blogger.com1tag:blogger.com,1999:blog-4876407785098439896.post-74693837486125727512012-03-22T17:12:00.000+04:002012-03-22T18:11:31.666+04:00GCC - 25 лет.Ровно 25 лет назад, в далеком 1987 году Ричард Столлман анонсировал первый публичный релиз набора компиляторов GCC.<br />
<br />
И к этой знаменательно дате приурочен выход новой версии GCC-4.7.0.<br />
<br />
Компилятор GCC-4.7.0 содержит много новых возможностей, которых не было в ветке 4.6.x.<br />
Из основных можно отметить: <br />
<ul>
<li>Транзакционная память. </li>
<li>Поддержка большого количества фич стандарта ISO C++11, таких как atomics и новая модель памяти, определяемы пользователем литералы и т.д.</li>
<li>Значительно улучшен фреймворк оптимизации на этапе линковки (link-time optimization framework (LTO))</li>
<li>Улучшена поддержка расширений формата отладочной информации DWARF ()</li>
<li>Добавлена поддержка аппаратных платформ: </li>
<ul>
<li>Adapteva's Epiphany process</li>
<li>National Semiconductor's CR16 </li>
<li>TI's C6X </li>
<li>Tilera's TILE-Gx and TILEPro.</li>
<li>Intel Haswell</li>
<li>AMD Piledriver </li>
<li>ARM Cortex-A7 family. </li>
</ul>
</ul>
<br />
Более подробно об изменениях можно почитать тут:<br />
<a href="http://gcc.gnu.org/gcc-4.7/changes.html">http://gcc.gnu.org/gcc-4.7/changes.html</a>Alexhttp://www.blogger.com/profile/07688849026396952965noreply@blogger.com0tag:blogger.com,1999:blog-4876407785098439896.post-87882515900023004072012-03-22T16:42:00.000+04:002012-03-23T13:35:56.268+04:00Как узнать версию библиотеки libc?Достаточно просто запустить файл библиотеки:<br />
<br />
/lib/libc.so.6<br />
<br />
<pre class="brush:plain">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:
<http: bugs.html="" libc="" software="" www.gnu.org="">.</http:>
</pre>Alexhttp://www.blogger.com/profile/07688849026396952965noreply@blogger.com2tag:blogger.com,1999:blog-4876407785098439896.post-61093251825432980222012-02-15T22:22:00.000+04:002012-02-15T23:08:07.185+04:00libreoffice + Gentoo = SIGILLНу вот как так можно собирать libreoffice-bin чтобы он падал по SIGILL? <br />
После очередного обновления он именно этим и начал заниматься.<br />
<br />
<br />
После расследования оказалось что падает при попытке исполнения инструкции vmovsd, которая является SIMD инструкцией AVX расширения процессора Intel и на моем процессоре не поддерживается.<br />
<br />
Багрепорт и немного расследования:<br />
<a href="https://bugs.gentoo.org/show_bug.cgi?id=403931">https://bugs.gentoo.org/show_bug.cgi?id=403931</a><br />
<br />
Лечится сборкой LO из исходников или откатом на предыдущую версию.Alexhttp://www.blogger.com/profile/07688849026396952965noreply@blogger.com0tag:blogger.com,1999:blog-4876407785098439896.post-49409595342333200802012-02-06T10:59:00.000+04:002012-02-07T00:14:53.996+04:00Переезжаем с Postgresql 8.4 на Postgresql 9.1 в Ubuntu<br />
Делается это так:<br />
<br />
<i>$ su - postgres</i><br />
<br />
Делаем backup на всякий случай: <br />
<br />
<i>$ pg_dumpall >backup_db</i><br />
<br />
Останавливаем сервер:<br />
<br />
<i>$ pg_dropcluster --stop 9.1 main</i><br />
<br />
Переносим данные со старого сервера: <br />
<br />
<i>$ pg_upgradecluster 8.4 main</i><br />
<br />
Удаляем старый сервер: <br />
<br />
<i>$ pg_dropcluster 8.4 main</i><br />
<br />
<i>... </i><br />
<i>Profit ! </i>Alexhttp://www.blogger.com/profile/07688849026396952965noreply@blogger.com4tag:blogger.com,1999:blog-4876407785098439896.post-13204656550756334562012-02-01T22:11:00.000+04:002012-02-01T23:22:24.542+04:00Linux_x86_64 и Skype21 век на дворе а skype до сих пор не распространяется для 64-х битных<br />
линуксов.<br />
Постоянно приходится извращаться, потому что при каждом обновлении в Gentoo появляются проблемы с камерой и каждый раз при обновлении<br />
приходится добавлять в /usr/bin/skype вот такую строчку:<br />
<br />
<i>export LD_PRELOAD=/usr/lib32/libv4l/v4l1compat.so</i><br />
<br />
Чего-то надоело уже.<br />
<br />
Может кто знает, чем его можно заменить, но так, чтобы было возможность общаться с контактами из skype'а?<br />
Есть какой нибудь транспорт, как например в xmpp?<br />
<br />
<span style="font-size: xx-small;">p.s. Пост был из будущего</span>Alexhttp://www.blogger.com/profile/07688849026396952965noreply@blogger.com10tag:blogger.com,1999:blog-4876407785098439896.post-45486338462211728012012-01-27T09:42:00.000+04:002012-02-02T13:37:55.788+04:00Настройка Apache + git + trac<br />
Для хранения кода своих мелких проектов я частенько использую репозитории обычно или git или svn и систему багтрекинга trac. <br />
<br />
Ниже для того, чтобы не забыть как это настраивается опишу все шаги на примере Ubuntu 10.10<br />
<br />
<b><span style="font-size: small;">1. Установка необходимого софта.</span></b><br />
<br />
Устанавливаем весь необходимый софт:<br />
<div style="background-color: black; color: #cccccc;">
$ apt-get install apache2 git subversion postgresql trac python-psycopg2 libapache2-mod-python</div>
<br />
Включаем в апаче модули, которые нужны для доступа к репозиторию: <br />
<span style="background-color: black; color: #cccccc;">$ a2enmod dav dav_fs </span><br />
<br />
<b><span style="font-size: small;">2. Настройка git репозитория </span></b><br />
<br />
Для примера создам тестовый репозитория с именем my_proj.<br />
Для этого на сервер создаем каталог где у нас будут храниться данные,<br />
как для bare репозитори, так и для обычного <br />
<div style="color: #eeeeee;">
<br /></div>
<div style="background-color: black; color: #cccccc;">
$ mkdir -p /proj/git_repos_bare</div>
<div style="background-color: black; color: #cccccc;">
$ cd /proj/git_repos_bare</div>
<div style="background-color: black; color: #cccccc;">
<br /></div>
<div style="background-color: black; color: #cccccc;">
$ git init --bare my_proj_init</div>
<span style="background-color: black;"></span><br />
Далее создаем каталог, где будут храниться репозитории:<br />
<div style="background-color: black; color: #cccccc;">
$ mkdir -p /proj/git_repos</div>
<div style="background-color: black; color: #cccccc;">
$ cd /proj/git_repos</div>
<br />
Создаем пустой репозиторий:<br />
<div style="background-color: black; color: #cccccc;">
$ git clone --bare /proj/git_repos_bare/my_proj_init my_proj</div>
<br />
Даем права на доступ в репозиторий пользователю www-data от имени<br />
которого будет хозяйничать апач:<br />
<div style="background-color: black; color: #cccccc;">
$ chown -R www-data:www-data /proj/git_repos</div>
<br />
<b>3. Настройка Trac</b><br />
<br />
Для того чтобы настроить trac сначала потребуется настроить базу данных в которой он будет хранить информацию о коммитах, логи и прочее.<br />
Trac поддерживает много всяких БД: SQLite, MySQL, PostgreSQL.<br />
Мне больше всего нравится PostgreSQL, но и с любой другой БД проблем возникнуть не должно.<br />
<br />
<b>3.1 Настройка postgres:</b><br />
<br />
Создаем пользователя:<br />
<div style="background-color: black; color: #cccccc;">
$ psql -d template1 -U postgres</div>
<div style="background-color: black; color: #cccccc;">
<br /></div>
<div style="background-color: black; color: #cccccc;">
$ template1=# CREATE USER trac WITH PASSWORD 'trac';</div>
<br />
Создаем базу в которой trac будет хранить свои данные:<br />
<div style="background-color: black; color: #cccccc;">
$ template1=# CREATE DATABASE "trac-my_proj" WITH OWNER = trac TABLESPACE = pg_default CONNECTION LIMIT = -1;</div>
<br />
На этом этапе настройка базы данных завершена.<br />
<br />
<b>3.2 Настройка Trac</b> <br />
<br />
Теперь нужно настроить окружение Trac.<br />
<br />
Создаем каталог где будут храниться окружения Trac'а:<br />
<div style="background-color: black; color: #cccccc;">
$ mkdir -p /var/trac</div>
<div style="background-color: black; color: #cccccc;">
$ cd /var/trac</div>
<br />
Настраиваем окружение:<br />
trac-admin {Название проекта} initenv {Имя репозитория} {Строка соединения с БД} {Тип репозитория} {Путь к репозиторию}<br />
<br />
В нашем случае это будет выглядеть так:<br />
<div style="background-color: black; color: #cccccc;">
$ trac-admin my_proj initenv my_proj postgres://trac:trac@localhost/trac-my_proj git /proj/git_repos/my_proj</div>
<br />
Добавляем пользователя который будет являться администратором в Trac :<br />
<div style="background-color: black; color: #cccccc;">
$ trac-admin my_proj permission add test TRAC_ADMIN</div>
<br />
Разрешаем апачу хозяйничать в каталоге с файлами Trac'а:<br />
<div style="background-color: black; color: #cccccc;">
$ chown -R www-data:www-data /var/trac/my_proj</div>
<br />
<b>3.3 Установка плагина для git репозитория</b><br />
<br />
Поумолчанию trac в качестве системы контроля версий поддерживает только subversion, поэтому нужно установить дополнительный плагин для того, чтобы можно было использовать git репозиторий:<br />
<div style="background-color: black; color: #cccccc;">
$ easy_install http://github.com/hvr/trac-git-plugin/tarball/master</div>
<br />
Чтобы проверить что Trac заработал нужно запустить tracd:<br />
<div style="background-color: black; color: #cccccc;">
$ tracd --port 8000 /var/trac/my_proj</div>
<br />
Теперь на результаты деятельности можно посмотреть через браузер:<br />
<b>http://127.0.0.1:8000/</b><br />
<br />
Если все ок, то должна отобразиться заглавная Wiki страничка.<br />
<br />
<b>4. Настройка Apache</b><br />
<br />
Теперь для того чтобы иметь унифицированные механизм аутентификации и доступа к репозиториям и баг трекеру настраиваем apache.<br />
<br />
Сначала добавим пользователя которому нужно дать доступ в репозитории и в баг трекер:<br />
<div style="background-color: black; color: #cccccc;">
$ htpasswd -c /var/trac/users.auth test</div>
<br />
Вводим пароль и готово.<br />
<br />
Далее правим конфигурационный файл апача:<br />
<i> /etc/apache2/sites-enabled/000-default</i><br />
<br />
Если же хочется использовать https, то править нужно:<br />
<i> /etc/apache2/sites-enabled/default-ssl</i><br />
<br />
Сначала устанавливаем Python handler который будет выводить список проектов при заходе на страничку yourdomain/trac:<br />
<pre class="brush:plain"><Location /trac/ >
SetHandler mod_python
PythonInterpreter main_interpreter
PythonHandler trac.web.modpython_frontend
PythonOption TracEnvParentDir /var/trac
PythonOption TracUriRoot /trac/
PythonOption PYTHON_EGG_CACHE /tmp/.eggs
</Location>
</pre>
<br />
После этого, нужно сказать апачу чтобы он не разрешал неавторизованным пользователям ходить в баг трекер.<br />
<pre class="brush:plain"> <LocationMatch /trac/*>
AuthType Basic
AuthName "Input your username and password to access."
AuthUserFile /var/trac/users.auth
Require valid-user
</LocationMatch>
</pre>
<br />
Далее настраиваем git.<br />
Прописываем переменные окружения, в которых указываем корень каталога с репозиториями, http-бэкенд и прописываем алиас пути к репозиториям через web: <br />
<pre class="brush:plain"> SetEnv GIT_PROJECT_ROOT /proj/git_repos
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /gitweb "/usr/lib/cgi-bin/gitweb.cgi"
ScriptAlias /git/ /usr/lib/git-core/git-http-backend
Alias /git "/proj/git_repos"
</pre>
<br />
и запрещаем вход без пароля:<br />
<pre class="brush:plain"><Locationmatch /git/*>
DAV on
AuthType Basic
AuthName "Git Access"
AuthUserFile /var/trac/users.auth
Require valid-user
</LocationMatch>
</pre>
<br />
<br />
Делаем в каталоге с репозиторием:<br />
<div style="background-color: black; color: #cccccc;">
$ git update-server-info</div>
<br />
И ,наконец, перезапускаем апач:<br />
<div style="background-color: black; color: #cccccc;">
$ service apache2 restart</div>
<br />
На этом настройка апача завершена.<br />
<br />
<b>5. Проверка что все работает.</b><br />
<br />
Проверяем что репозиторий работает:<br />
<div style="background-color: black; color: #cccccc;">
$ git clone http://test@mydomain/git/my_proj</div>
<div style="background-color: black;">
<br /></div>
<div style="background-color: black; color: #cccccc;">
Cloning into 'my_proj'...</div>
<div style="background-color: black; color: #cccccc;">
Password for 'mydomain':</div>
<div style="background-color: black; color: #cccccc;">
warning: You appear to have cloned an empty repository.</div>
<br />
Добавляем файлы в репозиторий, и делаем начальный коммит:<br />
<div style="background-color: black; color: #cccccc;">
git push origin master:master</div>
<br />
Вот как-то так. <br />
<br />
Если возникли какие-то проблемы, то посмотреть что идет не так можно в логах:<br />
/var/log/apache2Alexhttp://www.blogger.com/profile/07688849026396952965noreply@blogger.com2tag:blogger.com,1999:blog-4876407785098439896.post-34385646532834824622011-12-21T10:00:00.000+04:002011-12-21T10:00:08.932+04:00Code @ C++: Find sum of elements in the array<a href="http://jia3ep.blogspot.com/2011/04/find-sum-of-elements-in-array.html?spref=bl">Code @ C++: Find sum of elements in the array</a>: Наткнулся на задачу, которую предлагают в Yandex на собеседовании: Ниже приведены три варианта суммирования чисел с плавающей точкой (предп...Alexhttp://www.blogger.com/profile/07688849026396952965noreply@blogger.com1