tag:blogger.com,1999:blog-79218117363147280502024-02-22T21:48:41.851+03:00Alter EgoAndrey ``Bass'' Shcheglovhttp://www.blogger.com/profile/00882744014756862371noreply@blogger.comBlogger29125tag:blogger.com,1999:blog-7921811736314728050.post-484834028929957252016-12-26T17:52:00.003+03:002016-12-26T17:52:57.006+03:00hexdump, UTF-16 и порядок байтУтилита <span style="font-family: "courier new" , "courier" , monospace;">hexdump</span>, вызванная без аргументов, похоже, для вывода использует порядок байт того "железа", на котором работает. На подавляющем большинстве современных компьютеров это приводит к искажениям, если исходные данные в кодировке <span style="font-family: "courier new" , "courier" , monospace;">UTF-16</span> (неважно, <i>big-endian</i> или <i>little-endian</i>). Вот канонический вывод файла в <span style="font-family: "courier new" , "courier" , monospace;">UTF16-BE</span>:<br />
<br />
<pre>$ <b>hexdump -C latin-utf16be-bom.txt</b>
00000000 <b>fe ff</b> 00 41 00 42 00 43 00 44 00 45 00 46 00 47 |ЧЪ.A.B.C.D.E.F.G|
00000010 00 48 00 49 00 4a 00 4b 00 4c 00 4d 00 4e 00 4f |.H.I.J.K.L.M.N.O|
00000020 00 50 00 51 00 52 00 53 00 54 00 55 00 56 00 57 |.P.Q.R.S.T.U.V.W|
00000030 00 58 00 59 00 5a 00 0d 00 0a 00 61 00 62 00 63 |.X.Y.Z.....a.b.c|
00000040 00 64 00 65 00 66 00 67 00 68 00 69 00 6a 00 6b |.d.e.f.g.h.i.j.k|
00000050 00 6c 00 6d 00 6e 00 6f 00 70 00 71 00 72 00 73 |.l.m.n.o.p.q.r.s|
00000060 00 74 00 75 00 76 00 77 00 78 00 79 00 7a 00 0d |.t.u.v.w.x.y.z..|
00000070 00 0a |..|
00000072
</pre>
<br />
А вот вывод "по умолчанию" для того же самого файла:<br />
<br />
<pre>$ <b>hexdump latin-utf16be-bom.txt</b>
0000000 <b>fffe</b> 4100 4200 4300 4400 4500 4600 4700
0000010 4800 4900 4a00 4b00 4c00 4d00 4e00 4f00
0000020 5000 5100 5200 5300 5400 5500 5600 5700
0000030 5800 5900 5a00 0d00 0a00 6100 6200 6300
0000040 6400 6500 6600 6700 6800 6900 6a00 6b00
0000050 6c00 6d00 6e00 6f00 7000 7100 7200 7300
0000060 7400 7500 7600 7700 7800 7900 7a00 0d00
0000070 0a00
0000072
</pre>
<br />
Для <span style="font-family: "Courier New",Courier,monospace;">UTF16-LE</span>, соответственно, всё наоборот.<br />
<br />
Будьте бдительны!Andrey ``Bass'' Shcheglovhttp://www.blogger.com/profile/00882744014756862371noreply@blogger.com0tag:blogger.com,1999:blog-7921811736314728050.post-49135526769527410522016-08-03T13:26:00.000+03:002016-08-03T14:26:56.733+03:00Включение поддержки git-p4 в MSys Git<a href="https://github.com/msysgit/msysgit">MSys Git</a> (1.x) собран без поддержки <i>Python</i>, и, как следствие, сценарий <a href="https://git-scm.com/docs/git-p4">git-p4</a> — это просто заглушка:<br />
<br />
<div style="background: #f8f8f8; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;"><pre style="line-height: 125%; margin: 0;"><span style="color: #008800; font-style: italic;">#!/bin/sh</span>
<span style="color: #aa22ff;">echo</span> >&2 <span style="color: #bb4444;">"fatal: git was built without support for `basename $0` (NO_PYTHON=YesPlease)."</span>
<span style="color: #aa22ff;">exit </span>128
</pre></div><br />
<a href="https://git-for-windows.github.io/">Git for Windows</a> (2.x) страдает той же проблемой с той лишь разницей, что сценарий <code>git-p4</code> наличествует (но всё равно нет интерпретатора <i>Python</i>).<br />
<br />
Лечится это следующим образом:<br />
<ol><li>заменяем штатный <code>git-p4</code> ("заглушку" в <code>%ProgramFiles%\Git\libexec\git-core</code>) на сценарий Python <a href="https://github.com/git/git/blob/master/git-p4.py">отсюда</a> (только для <i>MSys Git</i>);</li>
<li>устанавливаем <i>Python</i> 2.x для <i>Windows</i> (его можно не добавлять в <code>PATH</code> во избежание конфликтов с <em>Cygwin</em>);</li>
<li>создаём символическую ссылку на <code>python.exe</code> как <code>%ProgramFiles%\Git\bin\python.exe</code> (<i>MSys Git</i>) или <code>%ProgramFiles%\Git\usr\bin\python2.exe</code> (<i>Git for Windows</i>), напр., с помощью <a href="http://www.farmanager.com/">FAR</a>.</li>
<li>Всё.</li>
</ol><br />
На тему использования <i>Git</i> совместно с <i>Perforce</i> есть <a href="http://answers.perforce.com/articles/KB/2790">замечательная статья</a> собственно авторов <i>Perforce</i>. Возможно, работающий исключительно на клиенте <code>git-p4</code> действительно лучше по сравнению с несколько корявой серверной альтернативой — <a href="https://www.perforce.com/perforce/doc.current/manuals/git-fusion/">Git Fusion</a>.Andrey ``Bass'' Shcheglovhttp://www.blogger.com/profile/00882744014756862371noreply@blogger.com0tag:blogger.com,1999:blog-7921811736314728050.post-14010225199337635602015-05-18T20:00:00.000+03:002015-05-18T20:00:00.612+03:00Microsoft прекрасен...По долгу службы на работе приходится использовать Windows 8. Да, шрифты г*но, поставил <a href="http://www.classicshell.net/">Classic Shell</a>, колюсь и плачу, но приходится терпеть. Единственное, что в Windows 8 есть прекрасного — это Hyper-V: там работает Linux.<br />
<br />
Также по долгу службы приходится использовать Skype, который любит показывать рекламу. Много рекламы. Слава богу, у нас есть файл <code>/etc/hosts</code> и есть права его менять:<br />
<br />
<pre>127.0.0.1 live.rads.msn.com
127.0.0.1 ads1.msn.com
127.0.0.1 static.2mdn.net
127.0.0.1 g.msn.com
127.0.0.1 a.ads2.msads.net
127.0.0.1 b.ads2.msads.net
127.0.0.1 ad.doubleclick.net
127.0.0.1 ac3.msn.com
127.0.0.1 rad.msn.com
127.0.0.1 msntest.serving-sys.com
127.0.0.1 bs.serving-sys.com
127.0.0.1 flex.msn.com
127.0.0.1 ec.atdmt.com
127.0.0.1 cdn.atdmt.com
127.0.0.1 db3aqu.atdmt.com
127.0.0.1 cds26.ams9.msecn.net
127.0.0.1 sO.2mdn.net
127.0.0.1 aka-cdn-ns.adtech.de
127.0.0.1 secure.flashtalking.com
127.0.0.1 adnexus.net
127.0.0.1 *.adnexus.net
127.0.0.1 adnxs.com
127.0.0.1 *.rad.msn.com
127.0.0.1 *.msads.net
127.0.0.1 *.msecn.net
</pre>
<br />
И тут (Сюрприз! Сюрприз!) невесть из какой задницы вылезший Windows Defender радует меня своим интеллектом:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQSEfjOlAXxklj0A6BySw_CmPHMX330GnX3F0YaC8TsutT_w4KD7YFGrJmU_fPHOKTffVjp6IAADTOn66HaQT-FrbEW76Ep8hzP-Dat1MuCqKI-wE___ieeIE2s8QV7G9hRkBRJQmAyj7d/s1600/msft-fucking-defender.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQSEfjOlAXxklj0A6BySw_CmPHMX330GnX3F0YaC8TsutT_w4KD7YFGrJmU_fPHOKTffVjp6IAADTOn66HaQT-FrbEW76Ep8hzP-Dat1MuCqKI-wE___ieeIE2s8QV7G9hRkBRJQmAyj7d/s1600/msft-fucking-defender.png" /></a></div>
<br />
Т. е. Майкрософт считает неправильным моё естественное нежелание лицезреть их рекламу. Да неужели?Andrey ``Bass'' Shcheglovhttp://www.blogger.com/profile/00882744014756862371noreply@blogger.com0tag:blogger.com,1999:blog-7921811736314728050.post-6990980182004123162013-08-21T14:01:00.003+04:002013-08-21T14:15:19.886+04:00Установка OpenJDK 7 на Mac OS X 10.6.8, часть 2<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixeUA031m9N73z7YoTxn5Ql5rw-zHso1DM0CmdXEGYq2KI3i-5ygCBsp22VCm4g41bDjPfiAT3DpIqFgO_8ZcNZTBV-sj15lzhzVgk-LkgxWqpllRSlMzBGQ6M8uoSxfmFND0rEQR07Xfz/s1600/Java+Duke.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixeUA031m9N73z7YoTxn5Ql5rw-zHso1DM0CmdXEGYq2KI3i-5ygCBsp22VCm4g41bDjPfiAT3DpIqFgO_8ZcNZTBV-sj15lzhzVgk-LkgxWqpllRSlMzBGQ6M8uoSxfmFND0rEQR07Xfz/s1600/Java+Duke.jpg" /></a></div>Пока думал над <a href="http://andrewbass.blogspot.com/2013/08/openjdk-7-mac-os-x-1068.html">вчерашней проблемой</a> сборки <i>JDK</i>, в голову пришла следующая идея. Каждый фрагмент <i>native</i>-кода, не компилирующийся на <i>10.6 Snow Leopard</i>, можно обернуть следующим образом:<br />
<pre style='color:#000000;background:#ffffff;'><span style='color:#7f0055; '>#</span><span style='color:#7f0055; '>if</span><span style='color:#7f0055; '> __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ </span><span style='color:#7f0055; '>></span><span style='color:#7f0055; '>=</span><span style='color:#7f0055; '> 1070</span>
<span style='color:#3f7f59; '>/*</span>
<span style='color:#3f7f59; '> * 10.7+ Implementation goes here</span>
<span style='color:#3f7f59; '> */</span>
<span style='color:#7f0055; '>#</span><span style='color:#7f0055; '>else</span><span style='color:#7f0055; '> </span><span style='color:#3f7f59; '>// __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__</span>
<span style='color:#7f0055; '>#</span><span style='color:#7f0055; '>define</span><span style='color:#7f0055; '> __MAC_OS_X_VERSION_MAJOR__ __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ </span><span style='color:#7f0055; '>/</span><span style='color:#7f0055; '> 100</span>
<span style='color:#7f0055; '>#</span><span style='color:#7f0055; '>define</span><span style='color:#7f0055; '> __MAC_OS_X_VERSION_MINOR__ __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ </span><span style='color:#7f0055; '>/</span><span style='color:#7f0055; '> 10 </span><span style='color:#7f0055; '>%</span><span style='color:#7f0055; '> 10</span>
<span style='color:#7f0055; '>#</span><span style='color:#7f0055; '>define</span><span style='color:#7f0055; '> __MAC_OS_X_VERSION_UPDATE__ __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ </span><span style='color:#7f0055; '>%</span><span style='color:#7f0055; '> 10</span>
<span style='color:#3f7f59; '>/*</span>
<span style='color:#3f7f59; '> * If the class is not found, java.lang.NoClassDefFoundError will be thrown.</span>
<span style='color:#3f7f59; '> */</span>
<span style='color:#7f0055; font-weight:bold; '>const</span> jclass throwable = (*env)->FindClass(env, <span style='color:#2a00ff; '>"</span><span style='color:#2a00ff; '>java/lang/UnsupportedOperationException</span><span style='color:#2a00ff; '>"</span>);
<span style='color:#7f0055; font-weight:bold; '>if</span> (throwable != <span style='color:#7f0055; font-weight:bold; '>NULL</span>) {
<span style='color:#7f0055; font-weight:bold; '>char</span> message[64];
<span style='color:#7f0055; font-weight:bold; '>sprintf</span>(message, <span style='color:#2a00ff; '>"</span><span style='color:#2a00ff; '>Not implemented in Mac OS X </span><span style='color:#2a00ff; '>%d</span><span style='color:#2a00ff; '>.</span><span style='color:#2a00ff; '>%d</span><span style='color:#2a00ff; '>.</span><span style='color:#2a00ff; '>%d</span><span style='color:#2a00ff; '>"</span>, __MAC_OS_X_VERSION_MAJOR__, __MAC_OS_X_VERSION_MINOR__, __MAC_OS_X_VERSION_UPDATE__);
(*env)->ThrowNew(env, throwable, message);
}
<span style='color:#7f0055; '>#</span><span style='color:#7f0055; '>endif</span><span style='color:#7f0055; '> </span><span style='color:#3f7f59; '>// __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__</span>
</pre>Это позволит по крайней мере собрать код (а заодно и оценить объём <i>native</i>-кода, опирающегося на специфичное для 10.7 API).<br />
<br />
Второй плюс заключается в том, что на этапе исполнения мы получим простое и понятное <span style="font-family: "Courier New",Courier,monospace;">UnsupportedOperationException</span> вместо аварийного останова <i>JVM</i>.Andrey ``Bass'' Shcheglovhttp://www.blogger.com/profile/00882744014756862371noreply@blogger.com0tag:blogger.com,1999:blog-7921811736314728050.post-22544172995728887652013-08-20T17:32:00.001+04:002013-08-20T17:32:10.700+04:00Установка OpenJDK 7 на Mac OS X 10.6.8... или почему не стоит этого делать.<br />
<br />
Как известно, есть добрый человек, который всем страждущим <a href="https://github.com/hgomez/obuildfactory">облегчает задачу сборки</a> <i>OpenJDK</i>. Также известно, что с некоторых пор он по неясной причине перестал поддерживать процесс сборки <i>OpenJDK 7+</i> на <i>Mac OS X 10.6.8</i> (<i>Snow Leopard</i>), с заявлением вроде "собирайте на свой страх и риск".<br />
<br />
В общем, попытка собрать <i>OpenJDK 7</i> из <a href="http://hg.openjdk.java.net/jdk7u/jdk7u">исходного кода</a> привела к следующему:<br />
<br />
<pre>Building lib:sources/openjdk7/build/macosx-x86_64/lib/lwawt/liblwawt.dylib
Begin parallel compiles: sources/openjdk7/jdk/make/sun/lwawt
sources/openjdk7/jdk/src/macosx/native/sun/java2d/opengl/CGLLayer.m: In function '__Java_sun_java2d_opengl_CGLLayer_nativeSetScale_block_invoke_1':
sources/openjdk7/jdk/src/macosx/native/sun/java2d/opengl/CGLLayer.m:224: error: request for member 'contentsScale' in something not a structure or union
make[5]: *** [sources/openjdk7/build/macosx-x86_64/tmp/sun/sun.lwawt/lwawt/obj64/CGLLayer.o] Error 1
sources/openjdk7/jdk/src/macosx/native/sun/awt/CGraphicsDevice.m: In function '__Java_sun_awt_CGraphicsDevice_nativeGetScaleFactor_block_invoke_1':
sources/openjdk7/jdk/src/macosx/native/sun/awt/CGraphicsDevice.m:298: warning: comparison between pointer and integer
sources/openjdk7/jdk/src/macosx/native/sun/awt/CGraphicsDevice.m:300: warning: 'NSScreen' may not respond to '-backingScaleFactor'
sources/openjdk7/jdk/src/macosx/native/sun/awt/CGraphicsDevice.m:300: warning: (Messages without a matching method signature
sources/openjdk7/jdk/src/macosx/native/sun/awt/CGraphicsDevice.m:300: warning: will be assumed to return 'id' and accept
sources/openjdk7/jdk/src/macosx/native/sun/awt/CGraphicsDevice.m:300: warning: '...' as arguments.)
sources/openjdk7/jdk/src/macosx/native/sun/awt/CGraphicsDevice.m:300: error: incompatible types in assignment
make[5]: *** [sources/openjdk7/build/macosx-x86_64/tmp/sun/sun.lwawt/lwawt/obj64/CGraphicsDevice.o] Error 1
sources/openjdk7/jdk/src/macosx/native/sun/awt/AWTView.m: In function '__Java_sun_lwawt_macosx_CPlatformView_nativeGetLocationOnScreen_block_invoke_1':
sources/openjdk7/jdk/src/macosx/native/sun/awt/AWTView.m:1337: warning: 'NSWindow' may not respond to '-convertRectToScreen:'
sources/openjdk7/jdk/src/macosx/native/sun/awt/AWTView.m:1337: error: incompatible types in assignment
make[5]: *** [sources/openjdk7/build/macosx-x86_64/tmp/sun/sun.lwawt/lwawt/obj64/AWTView.o] Error 1
</pre>
<br />
Ну и анализ ошибок сборки:<br />
<ol>
<li> До <i>10.7 Lion</i> в классе <code>CALayer</code> (который является суперклассом <code>CGLLayer</code>) отсутствует свойство <a href="https://developer.apple.com/library/mac/documentation/graphicsimaging/Reference/CALayer_class/Introduction/Introduction.html#jumpTo_18"><code>contentsScale</code></a>. Соответственно, не будет работать реализация метода <i>AWT</i> <code>sun.java2d.opengl.CGLLayer#nativeSetScale()</code>.</li>
<li> До <i>10.7 Lion</i> в классе <code>NSScreen</code> отсутствует свойство <a href="https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSScreen_Class/Reference/Reference.html#jumpTo_8"><code>backingScaleFactor</code></a>. Соответственно, не будет работать реализация метода <i>AWT</i> <code>sun.awt.CGraphicsDevice#nativeGetScaleFactor()</code>.</li>
<li> До <i>10.7 Lion</i> в классе <code>NSWindow</code> отсутствует метод <a href="https://developer.apple.com/library/mac/documentation/cocoa/reference/applicationkit/Classes/NSWindow_Class/Reference/Reference.html#jumpTo_57"><code>convertRectToScreen()</code></a>. Соответственно, не будет работать реализация метода <i>AWT</i> <code>sun.lwawt.macosx.CPlatformView#nativeGetLocationOnScreen()</code>.</li>
</ol>
Очевидно, что <i>бинарные</i> сборки <i>JDK 1.7</i> тоже не стоит устанавливать на <i>10.6 Snow Leopard</i>, несмотря на многочисленные известные обходные пути с использованием <i><a href="http://charlessoft.com/">Pacifist</a></i> или <i>PackageMaker</i> (<a href="http://timhooker.blogspot.ru/2013/05/install-java-jdk7-on-mac-osx-snow.html">1</a>, <a href="http://hphamb.blogspot.ru/2012/09/install-jdk-7-on-mac-os-x-1068.html">2</a>). В том маловероятном случае, когда будет вызван один из вышеупомянутых методов <i>AWT</i>, <i>JVM</i> просто завершит работу.<br />
<br />
Таким образом, кроме случаев, когда целью установки <i>JDK</i> является чисто серверная разработка (без использования <i>AWT</i>), единственной альтернативой для тех, кто не желает обновляться до <i>10.7 Lion</i>, будет собрать <i>JDK</i> c поддержкой <i>X11</i> (<code>sun.awt.X11.XToolkit</code>) вместо стандартного <code>apple.awt.CToolkit</code>.Andrey ``Bass'' Shcheglovhttp://www.blogger.com/profile/00882744014756862371noreply@blogger.com11tag:blogger.com,1999:blog-7921811736314728050.post-72678685651165600892013-08-13T14:57:00.001+04:002013-08-13T14:57:30.290+04:00Вот чем меня бесят содомиты из компании Apple...... так это тем, что нихрена не тестируют работу <i>Mac OS X</i>, устновленной на case-sensistive раздел. Несколько дней "мак" работал через пень-колоду. Каждые несколько секунд планировщик пытался запустить <span style="font-family: "Courier New",Courier,monospace;">/usr/libexec/flashupdater</span>. На деле же файл называется <span style="font-family: "Courier New",Courier,monospace;">/usr/libexec/FlashUpdater</span>.<br />
<ul>
<li><a href="https://discussions.apple.com/thread/3945523">https://discussions.apple.com/thread/3945523</a></li>
<li><a href="https://discussions.apple.com/thread/3951392">https://discussions.apple.com/thread/3951392</a></li>
<li><a href="http://blogs.adobe.com/spohl/2012/06/08/adobe-flash-player-background-updater-for-mac-is-live/">http://blogs.adobe.com/spohl/2012/06/08/adobe-flash-player-background-updater-for-mac-is-live/</a></li>
<li><a href="http://forums.macrumors.com/showthread.php?t=1584989">http://forums.macrumors.com/showthread.php?t=1584989</a></li>
</ul>
<b>P. S.</b> Тем же страдают другие содомиты из компаний <a href="http://store.steampowered.com/"><i>Valve</i></a> и <a href="http://us.blizzard.com/en-us/games/d3/"><i>Blizzard</i></a>, пишущие софт для <i>Mac OS X</i>, разработанной содомитами из компании <i>Apple</i>. Но это, слава б*гу, работе не мешает. Пусть пишут. Юниксоиды хреновы.Andrey ``Bass'' Shcheglovhttp://www.blogger.com/profile/00882744014756862371noreply@blogger.com0tag:blogger.com,1999:blog-7921811736314728050.post-59810582765378194432013-08-05T20:16:00.001+04:002013-08-05T20:16:12.396+04:00Mac OS X и прелести резервного копированияСегодня столкнулся с тем, что <i>Time Machine</i>, при нехватке свободного места на диске, предназначенном для хранения резервных копий, может запросто завершить работу с сообщением об ошибке, оставив на диске "половину бэкапа".<br />
<br />
С "половиной бэкапа" стандартными средствами ничего сделать нельзя (ни удалить, ни "дописать").<br />
<br />
В общем, меня спасла <a href="http://pondini.org/TM/A10.html">вот эта</a> статья. Andrey ``Bass'' Shcheglovhttp://www.blogger.com/profile/00882744014756862371noreply@blogger.com0tag:blogger.com,1999:blog-7921811736314728050.post-19449318016473131952013-08-05T15:35:00.000+04:002013-08-05T15:35:01.066+04:00Сила BSD и слабость GNUПытаюсь написать <a href="https://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D0%B5%D1%81%D0%BF%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D1%8F">портируемый</a> шелл-скрипт. Читаю <b>man [</b><br />
("<b>man test</b>" на моём "маке" выдаёт справку по реализации <b>test</b> в <i>GNU Coreutils</i>).<br />
<br />
<i>RHEL 6.x</i> (на самом деле, любой <i>GNU userspace</i>):<br />
<pre> <b>-h</b> <u>FILE</u>
<u>FILE</u> exists and is a symbolic link (same as <b>-L</b>)
<b>-L</b> <u>FILE</u>
<u>FILE</u> exists and is a symbolic link (same as <b>-h</b>)
</pre>
<br />
И ничерта не понятно, какой из ключей стоит использовать, а какой оставлен для совместимости с античными версиями.<br />
<br />
<i>Mac OS X</i> (то же самое, кстати, справедливо и для <i>FreeBSD</i> — проверено):<br />
<pre><b> -h</b> <u>file</u> True if <u>file</u> exists and is a symbolic link. This operator is retained for compatibility with pre-
vious versions of this program. Do not rely on its existence; use <b>-L</b> instead.
</pre>
<br />
Nuff said, как говорится.Andrey ``Bass'' Shcheglovhttp://www.blogger.com/profile/00882744014756862371noreply@blogger.com2tag:blogger.com,1999:blog-7921811736314728050.post-79435710659287207272013-07-04T17:54:00.000+04:002013-07-04T18:48:09.300+04:00"Хотя это немного слишком анально сохраняющий вкус для многих людей"Именно так служба Google Translate <a href="http://translate.google.com/#en/ru/though%20it%20is%20a%20little%20bit%20too%20anally%20retentive%20for%20many%20people%27s%20tastes">переводит</a> фразу "though it is a little bit too anally retentive for many people's tastes".<br />
<br />
А началось всё с того, что ваш покорный слуга решил выяснить, каковы в C# договорённости для именования констант. А они, как оказалось, вот такие:<br />
<div class="post-text">
<blockquote class="tr_bq">
The recommended naming and capitalization convention is to use Pascal casing for constants (Microsoft has a tool named <a href="http://code.msdn.microsoft.com/sourceanalysis">StyleCop</a> that documents all the preferred conventions and can check your source for compliance - though it is a little bit <i>too</i> anally retentive for many people's tastes) </blockquote>
</div>
<a href="http://stackoverflow.com/questions/242534/c-sharp-naming-convention-for-constants">Источник</a>.Andrey ``Bass'' Shcheglovhttp://www.blogger.com/profile/00882744014756862371noreply@blogger.com0tag:blogger.com,1999:blog-7921811736314728050.post-31163628542438792512013-06-24T17:11:00.001+04:002016-08-03T13:28:33.358+03:00git-flowОткрыл для себя замечательную реализацию <i>разумной</i> парадигмы создания веток (branching) и управления новыми версиями (release management) -- <a href="https://github.com/nvie/gitflow">git-flow</a>. Вроде бы совсем не rocket science, но самоорганизоваться проще, когда уже есть готовые инструменты.<br />
<br />
Ссылки:<br />
<ul><li>научно-популярная <a href="http://nvie.com/posts/a-successful-git-branching-model/">статья</a>, с которой всё началось;</li>
<li><a href="http://danielkummer.github.io/git-flow-cheatsheet/">презентация</a> для ленивых.</li>
</ul>В довершение могу сказать, что для пользователей "маков"<br />
<ul><li><i>git-flow</i> доступен не только в дереве <i>HomeBrew</i>, но и в <i>MacPorts</i>;</li>
<li>замечательный <i>Git</i>-клиент <a href="http://www.sourcetreeapp.com/">SourceTree</a> поддерживает <i>git-flow</i>.</li>
</ul><br />
Andrey ``Bass'' Shcheglovhttp://www.blogger.com/profile/00882744014756862371noreply@blogger.com0tag:blogger.com,1999:blog-7921811736314728050.post-11708315908554781272013-06-24T12:47:00.001+04:002013-06-24T12:49:55.309+04:00Закладки в Visual Studio 2010Дабы сэкономить время, установил Express-версию, которая до сих пор, в общем, всем устраивала.<br />
<br />
На днях выяснилось, что закладки ("Bookmarks") есть -- в том смысле, что их можно создавать/удалять, и есть навигация, но вот <i>окна "Bookmarks"</i> -- нету!<br />
<br />
Обратился к <a href="http://social.msdn.microsoft.com/Forums/en-US/15703fc0-f318-48af-861c-bf0e9ee0919d/whats-the-difference-between-visual-studio-express-2010-and-visual-studio-professional-2010-in">коллективному разуму</a> -- действительно. Окно "Bookmarks" есть только в версии Professional.<br />
<br />
Забавно.<br />
<br />Andrey ``Bass'' Shcheglovhttp://www.blogger.com/profile/00882744014756862371noreply@blogger.com0tag:blogger.com,1999:blog-7921811736314728050.post-61703335530981266532013-05-27T15:00:00.002+04:002013-05-27T15:02:01.349+04:00Установка Bugzilla из MacPortsТак исторически сложилось, что я употребляю <i><a href="https://www.macports.org/">MacPorts</a></i>, а не <i><a href="http://www.finkproject.org/">Fink</a></i> или <i><a href="http://mxcl.github.io/homebrew/">Домашнее Пиво</a></i> (возможно, в силу того, что <a href="https://www.google.com/search?q=MacPorts+driving+you+to+drink">алкогольные запои</a> случались и до <i>MacPorts</i>).<br />
<br />
Поскольку установка <i><a href="http://www.bugzilla.org/">Bugzilla</a></i> не сразу увенчалась успехом, хочу сделать несколько ремарок, которые, надеюсь, сэкономят тебе время, мой читатель.<br />
<ol><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFMCtsYveCCYUkQUyoaJI_ZrXuozdFgZ1jpgEZUHO11uBIFEjIcbyk3nvVqCJV85DPQ3wZ8UJclL-g-OiggK0MpnbxHpqujWAFIILFTK4bVX6AzoX5BASTF_NdB5sI_tZ_nDxZnFH6iV54/s1600/Screen+shot+2013-05-27+at+14.52.34.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="165" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFMCtsYveCCYUkQUyoaJI_ZrXuozdFgZ1jpgEZUHO11uBIFEjIcbyk3nvVqCJV85DPQ3wZ8UJclL-g-OiggK0MpnbxHpqujWAFIILFTK4bVX6AzoX5BASTF_NdB5sI_tZ_nDxZnFH6iV54/s1600/Screen+shot+2013-05-27+at+14.52.34.png" width="320" /></a>
<li><i>Mac OS X</i> уже включает веб-сервер <i>Apache</i>, однако <i>Bugzilla</i> требует именно <i>Apache</i>, установленного из <i>MacPorts</i>. Поэтому надо убедиться, что номера портов и/или IP-адреса (директива <span style="font-family: "Courier New",Courier,monospace;">Listen</span>) в <span style="font-family: "Courier New",Courier,monospace;">/etc/apache2/httpd.conf</span> и <span style="font-family: "Courier New",Courier,monospace;">/opt/local/apache2/conf/httpd.conf</span> не конфликтуют. Если вы ещё не успели установить <i>Vim</i> – в <i>Mac OS X</i> есть замечательный инструмент <i>FileMerge</i>.<br /><br />После этого смело можно сказать:<br /><br /><span style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;"># <b>port load apache2</b></span></span></li>
<li><i>Bugzilla</i> требует нескольких модулей <i>PERL</i>, которые не указаны в списке зависимостей порта. Как минимум, придётся установить следующее:</li>
<ul>
<li><b>p5.12-perlmagick</b> (Image::Magick)</li>
<li><b>p5.12-html-parser</b> (HTML::Parser)</li>
<li><b>p5.12-html-scrubber</b> (HTML::Scrubber)</li>
<li><b>p5.12-template-gd</b> (Template::Plugin::GD::Image)</li>
</ul>
<li>Наконец, в <i>Bugzilla</i> 2.22.3 (наиболее новая в <i>MacPorts</i> версия на настоящий момент) есть <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=390442">проблема несовместимости</a> с <i>PERL</i> 5.9.5+, исправленная только в версии 2.22.6. Применение патча проблему устраняет.</li>
</ol>
<br />
<br />Andrey ``Bass'' Shcheglovhttp://www.blogger.com/profile/00882744014756862371noreply@blogger.com1tag:blogger.com,1999:blog-7921811736314728050.post-89697869254768870922013-05-21T14:59:00.003+04:002013-05-21T14:59:35.803+04:00Монтирование внешнего жёсткого диска в Mac OS XЕсли в MacBook просто воткнуть внешний USB-диск, отформатированный как HFS+, то все POSIX-атрибуты файлов на внешнем диске будут проигнорированы. Это следствие того, что флаг "Owners Enabled" для внешних дисков по умолчанию снят, и стандартными средствами (я имею в виду <i>Disk Utility</i>) его значение не изменить.<br />
<br />
В случае, когда мы переносим уцелевшие настройки и данные с полуживого диска, вытащенного из мёртвого "мака", такое поведение нам не подходит.<br />
<br />
На помощь приходит команда <a href="https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man8/vsdbutil.8.html">vsdbutil</a>:<br />
<br />
<span style="font-family: "Courier New",Courier,monospace;"><b>$</b> sudo /usr/sbin/vsdbutil -a /Volumes/МойПолуживойДиск</span><br />
<br />
Как и многое на "маке", это отнюдь не POSIX-way, но, слава богу, хотя бы работает. Andrey ``Bass'' Shcheglovhttp://www.blogger.com/profile/00882744014756862371noreply@blogger.com2tag:blogger.com,1999:blog-7921811736314728050.post-8856085847674896712012-01-20T21:15:00.001+04:002012-01-20T21:15:06.010+04:00Торжество науки над предрассудками<div><p>Метро. Девочка читает электронную книгу. Литий-ионная батарея, жидкокристаллический экран и очень много транзисторов. Читает про Господа нашего. Разумеется, без Его промысла не было бы <i>чудес</i> науки. Ведь церковь помогала науке на протяжении веков.</p>
<p><b>P. S.</b> По-моему, когда священники РПЦ запрещают своей православной пастве пользоваться сотовыми -- это правильно. Ибо нечего. Пусть отключат себе ещё свет и воду и живут в пещере. Большего же недостойны.</p>
</div>Andrey ``Bass'' Shcheglovhttp://www.blogger.com/profile/00882744014756862371noreply@blogger.com0tag:blogger.com,1999:blog-7921811736314728050.post-69369945116360726712011-11-15T13:49:00.000+04:002011-11-15T13:49:07.748+04:00Просто и со вкусом<div dir="ltr" style="text-align: left;" trbidi="on"><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg015OpDj-LReJgZFjNWBm68ePvAAAPJIZ-0Bu1LaqJM8OHW-qzWSRAugS8yYf412cn34C4OGohyrpS6SXhSwe8mMwl1RP3TDO8Cuez7i5yh9FNRbAMWSUqSQ2a315YTS6etYwIpfQ4uVgN/s1600/IntelliJ+IDEA+Installer+for+Mac+OS+X.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg015OpDj-LReJgZFjNWBm68ePvAAAPJIZ-0Bu1LaqJM8OHW-qzWSRAugS8yYf412cn34C4OGohyrpS6SXhSwe8mMwl1RP3TDO8Cuez7i5yh9FNRbAMWSUqSQ2a315YTS6etYwIpfQ4uVgN/s1600/IntelliJ+IDEA+Installer+for+Mac+OS+X.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Инсталлятор IntelliJ IDEA для Mac OS X</td></tr>
</tbody></table><br />
</div>Andrey ``Bass'' Shcheglovhttp://www.blogger.com/profile/00882744014756862371noreply@blogger.com0tag:blogger.com,1999:blog-7921811736314728050.post-12258901668088924862011-10-26T18:55:00.000+04:002011-10-26T18:55:08.483+04:00Lost in translation,..<div dir="ltr" style="text-align: left;" trbidi="on">... или проблемы локализации.<br />
<br />
Было "Show Inherited Members".<br />
Стало "Показать спрятанные члены".<br />
<br />
И вроде не придерёшься -- они ведь действительно по умолчанию "спрятаны". Но в мозгу появляется <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKS_sxDkxGyYLrOR8crOKi5YnQNGy-d6HamKzfpLYDC70PcGUC6KMGrrG_8jzFcPPTjUSQdDg8ohE91vmTpm7h0y3rPHn3EPf_SRq5SQCZocBilryob8oQ8_SsjMz8IhwUeKV2Y3bLjbA/s1600/shnur.jpg">совсем другая картинка</a>. <br />
<br />
<br />
</div>Andrey ``Bass'' Shcheglovhttp://www.blogger.com/profile/00882744014756862371noreply@blogger.com0tag:blogger.com,1999:blog-7921811736314728050.post-90119961144133981872011-10-11T19:34:00.005+04:002011-10-17T20:11:14.371+04:00Отчёт о Google Developer Day 2011 в Москве<div dir="ltr" style="text-align: left;" trbidi="on">Первое впечатление от конференции -- лёгкое разочарование. Ожидал увидеть серьёзную в массе своей публику, которую в былые годы можно было увидеть на Java Days и Sun Tech Days -- а вместо этого увидел 2-3 тысячи посетителей и нескольких докладчиков, производивших впечатление <strike><span style="color: white;">задротов</span></strike> немытых бородатых школьников в одежде, которую не стирали недели две. И я понял, что для компании Google, со всеми её API, WebGL и offline HTML5, я -- совсем не целевая аудитория.<br />
<br />
Однако, первое впечатление оказалось ошибочным. По меньшей мере две лекции из пяти прослушанных понравились.<br />
<br />
Помимо лекций, были прикладные разработчики (например, <a href="https://market.android.com/developer?pub=ZeptoLab">ZeptoLab</a>) и представители разных <a href="http://www.gtugs.org/">GTUGs</a>. А ещё были ребята, накупившие радиодеталей, спаявшие какие-то интересные устройства и подключившие эти устройства к телефонам через порт micro-USB. И эти три категории произвели совершенно разное впечатление.<br />
<br />
<ol style="text-align: left;"><li><i>ZeptoLab</i> -- представители глупейшего по своей задумке (сравнимого с <i>Angry Birds</i>), но при этом блестяще выполненного и коммерчески успешного проекта.</li>
<li>Ребята с микросхемами и паяльниками -- авторы блестящих идей, у которых, тем не менее, вряд ли будет коммерческое продолжение. Нередко интереснейший <i>proof of concept</i>, которому суждено остаться лишь прототипом.</li>
<li>Представители групп <i>GTUGs</i> -- стремятся подражать, скажем, ребятам из <i>ZeptoLab</i>, но при этом или переживают творческий кризис, или не обладают ресурсами/усидчивостью, чтобы довести дело до конца. Когда они выступали, у меня зародилась мысль (впоследствии подтверждённая одной из лекций), что "делать то, что интересно" и "запустить успешный стартап" -- это две большие разницы.<br />
<br />
Потому как лично мне алгоритмические задачи из сборника <a href="http://projecteuler.net/">Project Euler</a> как раз интересны. А вот унылая задача по созданию "расширения для браузера Google Chrome, которое бы оптимизировало потребление памяти, когда в браузере открыто 100500 разных страниц" -- как раз не интересна совершенно.</li>
</ol>Из понравившихся лекций, во-первых, могу упомянуть посвящённую стартапам (<i>VC Panel: Entrepreneurship, Incubation and Venture Capital</i> by <a href="http://www.google.com/profiles/donalddodge">Don Dodge</a>). Присутствовали 3 "ангела", в т. ч. <a href="http://unova.ru/card/alexander_galitsky">Александр Галицкий</a> (не путать с Андреем Галицким из Sun Microsystems). Несколько тезисов:<br />
<br />
<ul style="text-align: left;"><li>Для того, чтобы в первый раз отправиться к "ангелу", не нужно никакого бизнес-плана -- достаточно презентации из 15 слайдов. Также желательно иметь либо прошлый опыт создания стартапа (неважно, положительный или нет), либо работающий прототип.</li>
<li>Как только стартап "раскрутился", и у вас есть возможность избавиться от венчурного капитала и перейти к финансированию проекта за счёт клиентов -- необходимо сделать это немедленно. Есть даже такое понятие -- <a href="http://en.wikipedia.org/wiki/Bootstrapping#Business">startup bootstrapping</a>.</li>
<li>Поскольку рынок меняется стремительно, то наличие продукта отнюдь не гарантирует выживания. Гораздо более ценным активом является умение быстро адаптироваться к обстоятельствам.</li>
<li>Никогда не стройте компанию на продажу. Идите за своей мечтой.</li>
<li>Процесс создания компании и стремление заработать большие деньги -- зачастую две разные вещи. Если бы вы вложили деньги в Apple 20 лет назад, сейчас вы были бы уже очень богаты. Но всю работу сделали бы не вы, а Стив Джобс.</li>
<li>Если вы хотите запустить свой стартап, сначала поработайте в чужом стартапе. Учитесь на чужом опыте.</li>
<li>Есть "правило 3-х "F" -- берите в долг в первую очередь у членов семьи, друзей и дураков (friends, family and fools). Только после того, как эти 3 источника исчерпаны, идите к "ангелам".</li>
<li>Стоимость стартапа, определяемая "ангелами", обычно варьируется от 1 до 5 млн. долларов. По одному миллиону к начальной стоимости добавляет каждый из четырёх факторов: (а) наличие опытной команды, (б) наличие здравой идеи и/или использование хорошей технологии, (в) быстро растущий рынок и, наконец, (г) наличие у проекта пользователей или клиентов.</li>
<li>Известные науке успешные стартапы были, как правило, организованы (по меньшей мере) двумя людьми, один из которых занимался собственно продуктом, а другой -- продвижением продукта на рынок. За примерами далеко ходить не надо -- Гейтс/Балмер, Возняк/Джобс, Билл Джой/Скотт МакНили.</li>
<li>При этом было упомянуто про некий 12-летний цикл, через который проходит каждый венчурный капиталист, но сформулировать в подробностях уже не могу. Комментарии приветствуются.</li>
<li>Галицкий настоятельно не советовал гнаться за большими деньгами в поисках финансирования. Почему -- неясно, но упомянул, что однажды сам выбрал того "ангела", который предлагал больше, и потом горько об этом пожалел.</li>
</ul>К слову о стартапах -- докучи очень рекомендую <a href="http://www.youtube.com/watch?v=pngVqaIJank">интервью</a> Дмитрия Потапенко и <a href="http://alenacpp.blogspot.com/2009/12/blog-post_17.html">статью</a> <a href="http://alenacpp.blogspot.com/">Алёны C++</a>. По моему опыту -- и то, и другое очень верно.<br />
<br />
<br />
Вторая понравившаяся лекция (на этот раз техническая) -- это "<i>How To Build Kick Ass Games in the Cloud</i>" by <a href="http://www.google.com/profiles/fredsa">Fred Sauer</a>. Более ранняя версия презентации доступна <a href="http://www.google.com/events/io/2011/sessions/kick-ass-game-programming-with-google-web-toolkit.html">здесь</a>.<br />
Ребята из Google посмотрели на ребят из Microsoft и выпустили свой ответ <a href="http://en.wikipedia.org/wiki/Microsoft_XNA">XNA</a> -- <a href="http://code.google.com/p/playn/">PlayN</a>.<br />
<br />
Как для XNA существует <a href="http://farseerphysics.codeplex.com/">двумерный физический движок</a>, основанный на <a href="http://box2d.org/">Box2D</a>, так и для PlayN существует <a href="http://gwtbox2d.appspot.com/">свой аналог</a>, причём интегрированный в платформу. Опять же, аналогично XNA, можно <i>один раз</i> написать приложение для платформы Android (на Java) и незначительным изменением кода добиться того, чтобы то же самое приложение работало в браузере Chrome. Причём приложение, портированное на платформу Chrome, может работать в offline-режиме, что достигается средствами HTML5.<br />
<br />
При этом (опциональная) серверная часть будет работать на инфраструктуре Google App Engine со всеми прелестями выходящей версии 1.5.5 (Python 2.7, подобный диалекту MySQL CloudSQL, JDBC-драйвера и пр.).<br />
<br />
Вдаваться в подробности и перевирать содердание лекции не буду -- вместо этого просто рекомендую посмотреть презентацию.<br />
<br />
Ссылки по теме:<br />
<ul><li><a href="http://code.google.com/p/playn/wiki/DemoLinks">http://code.google.com/p/playn/wiki/DemoLinks</a></li>
<li><a href="http://chrome.angrybirds.com/">http://chrome.angrybirds.com/</a> (к слову, работает не только в <i>Chrome</i>, но и, скажем, в <i>SeaMonkey</i>)</li>
<li><a href="http://en.wikipedia.org/wiki/Cross-Origin_Resource_Sharing">http://en.wikipedia.org/wiki/Cross-Origin_Resource_Sharing</a></li>
<li><a href="http://code.google.com/appengine/">http://code.google.com/appengine/</a></li>
</ul></div>Andrey ``Bass'' Shcheglovhttp://www.blogger.com/profile/00882744014756862371noreply@blogger.com0tag:blogger.com,1999:blog-7921811736314728050.post-2173029407341714662011-07-15T19:57:00.000+04:002011-07-15T19:57:50.726+04:00"Колбаса у нас была. Свободы не было." Навеяно спором с коллегой.Поразительно, но есть такой сорт недалёких людей, которым в благополучное советское время жилось плохо -- особенно от отсутствия свободы и сознания, как тяжела доля диссидентов и гомосексуалистов. <br />
Прошло 20 лет. <br />
<br />
Недалёких людей избавили от постылого Комсомола. В страну вернули диссидентов. На телеэкраны выпустили гомосексуалистов. Архипелага ГУЛаг бульше нет, и теперь никто не посадит ни за мужеложство, ни за политический анекдот. "Единая Россия" твёрдой рукой ведёт всех в светлое будущее, не забывая даже самые маленькие горные народы.<br />
<br />
Прощай, СССР. Быть может, твоим гражданам действительно не хватало свободы. Но таких, кому не хватало мозгов, было гораздо меньше, чем сейчас.Andrey ``Bass'' Shcheglovhttp://www.blogger.com/profile/00882744014756862371noreply@blogger.com0tag:blogger.com,1999:blog-7921811736314728050.post-80242073681458187472011-06-14T14:52:00.000+04:002011-06-14T14:52:26.322+04:00О ZFS и похожих файловых системах<div dir="ltr" style="text-align: left;" trbidi="on">Озаботившись вопросом хранения данных вместе с чексуммами (напомню, ext4 пока поддерживает чексуммы лишь для метаданных), решил исследовать вопрос. И вот какая таблица получилась:<br />
<table border="1" cellpadding="2" cellspacing="2" style="text-align: left; width: 100%;"><tbody>
<tr> <th style="background-color: #990000; color: white; vertical-align: top;">Distribution<br />
<br />
</th> <th style="background-color: #990000; color: white; vertical-align: top;">Kernel<br />
<br />
</th> <th style="background-color: #990000; color: white; vertical-align: top;">Userland<br />
<br />
</th> <th style="background-color: #990000; color: white; vertical-align: top;">Zpool<br />
version<br />
<br />
</th> </tr>
<tr> <td style="background-color: #99ff99; vertical-align: top;">OpenIndiana</td> <td style="background-color: #6666cc; vertical-align: top;">OpenSolaris</td> <td style="background-color: #33ccff; vertical-align: top;">OpenSolaris</td> <td style="background-color: #99ff99; vertical-align: top;">28</td> </tr>
<tr> <td style="background-color: #99ff99; vertical-align: top;">Debian<br />
GNU/Linux w/ZFS kernel module (see <a href="http://zfsonlinux.org/spl-building-deb.html">1</a> and <a href="http://zfsonlinux.org/zfs-building-deb.html">2</a>)</td> <td style="background-color: #cc33cc; vertical-align: top;">Linux</td> <td style="background-color: #ff6600; vertical-align: top;">GNU<br />
w/Debian packaging</td> <td style="background-color: #66ff99; vertical-align: top;">28</td> </tr>
<tr> <td style="background-color: #66ff99; vertical-align: top;">NexentaCore<br />
Platform 3.0.1</td> <td style="background-color: #6666cc; vertical-align: top;">OpenSolaris</td> <td style="background-color: #ff6600; vertical-align: top;">GNU<br />
w/Debian packaging</td> <td style="background-color: #66ff99; vertical-align: top;">26</td> </tr>
<tr> <td style="background-color: #33ff33; vertical-align: top;">Debian<br />
GNU/Linux w/<a href="http://packages.debian.org/stable/zfs-fuse">zfs-fuse</a><br />
package</td> <td style="background-color: #cc33cc; vertical-align: top;">Linux<br />
<br />
</td> <td style="background-color: #ff6600; vertical-align: top;">GNU<br />
w/Debian packaging</td> <td style="background-color: #33ff33; vertical-align: top;">23</td> </tr>
<tr> <td style="background-color: #33cc00; vertical-align: top;">Debian<br />
GNU/kFreeBSD w/<a href="http://packages.debian.org/stable/zfsutils">zfsutils</a><br />
package<br />
<br />
</td> <td style="background-color: #ffcc00; vertical-align: top;">FreeBSD<br />
<br />
</td> <td style="background-color: #ff6600; vertical-align: top;">GNU<br />
w/Debian packaging<br />
<br />
</td> <td style="background-color: #33cc00; vertical-align: top;">15<br />
<br />
</td> </tr>
<tr> <td style="background-color: #33cc00; vertical-align: top;">FreeBSD<br />
8.2</td> <td style="background-color: #ffcc00; vertical-align: top;">FreeBSD</td> <td style="background-color: #ffff33; vertical-align: top;">FreeBSD</td> <td style="background-color: #33cc00; vertical-align: top;">15</td> </tr>
<tr> <td style="background-color: #009900; vertical-align: top;">NetBSD</td> <td style="background-color: #ffcc00; vertical-align: top;">NetBSD</td> <td style="background-color: #ffff33; vertical-align: top;">NetBSD</td> <td style="background-color: #009900; vertical-align: top;">?</td> </tr>
<tr> <td style="background-color: #cccccc; vertical-align: top;">DragonFly<br />
BSD w/<a href="http://en.wikipedia.org/wiki/HAMMER">HAMMER</a> FS<br />
<br />
</td> <td style="background-color: #ffcc00; vertical-align: top;">DragonFly<br />
BSD<br />
<br />
</td> <td style="background-color: #ffff33; vertical-align: top;">DragonFly<br />
BSD<br />
<br />
</td> <td style="background-color: #cccccc; vertical-align: top;">N/A<br />
<br />
</td> </tr>
<tr> <td style="background-color: #cccccc; vertical-align: top;">Debian<br />
GNU/Linux w/<a href="http://en.wikipedia.org/wiki/Btrfs">Btrfs</a><br />
<br />
</td> <td style="background-color: #cc33cc; vertical-align: top;">Linux<br />
<br />
</td> <td style="background-color: #ff6600; vertical-align: top;">GNU<br />
w/Debian packaging<br />
<br />
</td> <td style="background-color: #cccccc; vertical-align: top;">N/A<br />
<br />
</td> </tr>
</tbody> </table>Лично я, видимо, соберу ядрёный модуль и продолжу использовать Debian Linux.<br />
</div>Andrey ``Bass'' Shcheglovhttp://www.blogger.com/profile/00882744014756862371noreply@blogger.com6tag:blogger.com,1999:blog-7921811736314728050.post-77444931297216000232011-04-01T06:33:00.000+04:002011-04-01T06:33:17.023+04:00VisualAssist X Trial Expired...Почему-то все мало-мальски нормальные расширения для Visual Studio, превращающие сей "продукт" в нечто, отдалённо похожее на среду разработки, либо просто платны, либо тоже платны, но тщательно это скрывают.<br />
<br />
С первыми всё понятно: ReSharper -- хорошая штука, поэтому ReSharper стоит денег, денег я платить не желаю, поэтому и не ставлю.<br />
<br />
Со вторыми накалываюсь уже второй раз: расширение, изначально заявлявшее, что оно бесплатное, умолчало о том, что это ознакомительная версия. Видимо, так и подсаживают народ на иглу.<br />
<br />
Теперь у меня голый <strike>блокнот.exe</strike> devenv.exe, и в меню "Refactor" доступны только "Rename" и "Move". Зато, блядь, с красивыми градиентами в меню и на кнопочках. Цвет которых меняется от версии к версии, дабы народ продолжал покупать. Вот только за что народ платит деньги, если Eclipse умел всё то же самое и ещё больше ещё 10 лет назад -- мне непонятно.<br />
<br />
Видимо, пора начать следовать советам и перелезать на Emacs. Там хотя бы предлагают редактор, а получаешь IDE -- а не наоборот.Andrey ``Bass'' Shcheglovhttp://www.blogger.com/profile/00882744014756862371noreply@blogger.com0tag:blogger.com,1999:blog-7921811736314728050.post-2576299623181431332010-11-29T14:32:00.000+03:002010-11-29T14:32:50.829+03:00Google и ПидарасыНет, это не продолжение <a href="http://ru.wikipedia.org/wiki/%D0%A7%D0%B0%D0%BF%D0%B0%D0%B5%D0%B2_%D0%B8_%D0%9F%D1%83%D1%81%D1%82%D0%BE%D1%82%D0%B0">знаменитого романа</a> Пелевина. Я хочу написать о другом.<br />
<br />
На днях я услышал рассказ о хорошем друге своего хорошего друга. О том, как он уехал в Штаты и устроился на работу в <a href="http://ask.com/">ask.com</a>, потому что (цитирую) "в Google ему что-то не понравилось".<br />
<br />
Теперь я точно знаю, <a href="http://googleblog.blogspot.com/2010/10/working-to-stop-bullying-national-ally.html">что именно</a> не понравилось тому парню в Google.<br />
<br />
И если гугловские HR'ы прочитают этот пост, то работать в Google мне уже точно не светит. Впрочем, и жалеть об этом я буду уже куда меньше =)Andrey ``Bass'' Shcheglovhttp://www.blogger.com/profile/00882744014756862371noreply@blogger.com0tag:blogger.com,1999:blog-7921811736314728050.post-54847756672727816432010-11-15T19:44:00.001+03:002010-11-15T19:45:38.728+03:00У Scala IDE для Eclipse есть одна неприятная несовместимость...... со Spring IDE.<br />
<br />
Несовместимость известна и описана <a href="https://www.assembla.com/spaces/scala-ide/tickets/1000048">здесь</a>. <br />
<br />
Проблема в том, что в смешанных Java/Scala-проектах, когда включены и Java Builder, и Scala Builder, исходный Scala-код обрабатывается обоими билдерами последовательно (вместо одного). И, конечно же, Java Builder при виде Scala-кода выдаёт кучу ошибок. По легенде, связано это с тем, что оба плагина используют JDT Weaving.<br />
<br />
Обходной путь следующий: нужно исключить файлы с расширением <b>*.scala</b> из категории "Java Source File".<br />
<br />
<div style="text-align: center;">До: </div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinKvWO7Eykn8EvFH9I8_LA2f-0EXw_SgX-b5VdEA6r2J2tZsP25gy0yO8xHbp9OPwNuLcQzok7jFr2rMZ8aCSskN3RQZYXx-Z7AUG_9U7KmN8OTtT5XcfVXzjrV2CLVHaVmWIgWoCC0uqJ/s1600/scala-ide-before.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="202" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinKvWO7Eykn8EvFH9I8_LA2f-0EXw_SgX-b5VdEA6r2J2tZsP25gy0yO8xHbp9OPwNuLcQzok7jFr2rMZ8aCSskN3RQZYXx-Z7AUG_9U7KmN8OTtT5XcfVXzjrV2CLVHaVmWIgWoCC0uqJ/s320/scala-ide-before.png" width="320" /></a></div><br />
<div style="text-align: center;">После: </div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhh755LwP-GdLF8V0Ecl09PZCWNrwnqWVwV5K_SyWOusJEDXdEKfTDn3hiKTfIAoJBCirXd6ybj8xNAQ2jmnx7iIlEsM1CyLKc1YDlIiIOaCIoOpib1PA0ZIQ8YOrrQTPW18vdy5UvI4tjW/s1600/scala-ide-after.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="202" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhh755LwP-GdLF8V0Ecl09PZCWNrwnqWVwV5K_SyWOusJEDXdEKfTDn3hiKTfIAoJBCirXd6ybj8xNAQ2jmnx7iIlEsM1CyLKc1YDlIiIOaCIoOpib1PA0ZIQ8YOrrQTPW18vdy5UvI4tjW/s320/scala-ide-after.png" width="320" /></a></div><br />
После этого стектрейсы из кода на Scala при отображении уже не содаржат столь удобных гиперссылок, но это, поверьте, меньшее из зол.<br />
<br />
Зато плагин в целом работает.Andrey ``Bass'' Shcheglovhttp://www.blogger.com/profile/00882744014756862371noreply@blogger.com0tag:blogger.com,1999:blog-7921811736314728050.post-59968493384986289232010-11-03T15:48:00.000+03:002010-11-03T15:48:50.605+03:00О космических перелётах<ul><li>Очень трудно улететь на Альфу Центавра, если ты уделяешь этому лишь час в сутки, а с 9:00 до 18:00 производишь электронные спиночесалки. Жизнь слишком коротка.</li>
<li>Если основным твоим занятием является производство этектронных спиночесалок, то жди гениальных озарений именно в этой области. Озарения, касающиеся космических перелётов, приходят к другим парням. А тебя, скорее всего, озарит лишь идея спиночесалки, работающей в состоянии невесомости. Она как раз подойдёт для тех парней, которые полетят на Альфу Центавра.</li>
<li>Слепая смена компании ни к чему не приведёт. Даже в Яндексе есть вакансии сборщиков спиночесалок, и у тебя есть все шансы угодить прямиком на одну из таких вакансий. Поэтому ставить себя нужно прежде всего <i>внутри</i> компании.</li>
</ul><b>P. S.</b> Тезисы не мои. Очень метко сформулировал мой коллега.Andrey ``Bass'' Shcheglovhttp://www.blogger.com/profile/00882744014756862371noreply@blogger.com3tag:blogger.com,1999:blog-7921811736314728050.post-17971925528205145622010-09-22T11:48:00.000+04:002010-09-22T11:48:11.459+04:00Решение ещё одной (15-й) задачи из сборника -- тоже без строчки кода<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWtdwAp8TptWbmP8fAlFOR3e20q4wGbFNu1ueOhwfa5PhB0Oqjx6Nt0vL3Pny2Q_aiXOTY5GgqRL2G3BS8NO6YLdu9adbpfCNe_Z7M2AWH9-EmLsIRltadIHfn-FbmOvFN0J2aOZE0CWK9/s1600/euler15.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWtdwAp8TptWbmP8fAlFOR3e20q4wGbFNu1ueOhwfa5PhB0Oqjx6Nt0vL3Pny2Q_aiXOTY5GgqRL2G3BS8NO6YLdu9adbpfCNe_Z7M2AWH9-EmLsIRltadIHfn-FbmOvFN0J2aOZE0CWK9/s640/euler15.png" /></a></div>Andrey ``Bass'' Shcheglovhttp://www.blogger.com/profile/00882744014756862371noreply@blogger.com0tag:blogger.com,1999:blog-7921811736314728050.post-85416314880302464812010-08-19T20:55:00.001+04:002010-08-19T20:56:29.130+04:00Решение 11-й задачи из Project Euler без единой строчки кодаСама задача <a href="http://projecteuler.net/index.php?section=problems&id=11">здесь</a>.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgITS5i_ouEe80sbkGV6Hbhlxk9T90KPTTWqvGwQZTOwvVOSLnsUcrprERYfuiGBBD6E1dTehrojm-nFxnveCXmVny7G644mxh2HwYASiyhl7n1ZjMGMC5YwMQlk7PCPZXs7JNbSz6CGCbc/s1600/euler-11.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgITS5i_ouEe80sbkGV6Hbhlxk9T90KPTTWqvGwQZTOwvVOSLnsUcrprERYfuiGBBD6E1dTehrojm-nFxnveCXmVny7G644mxh2HwYASiyhl7n1ZjMGMC5YwMQlk7PCPZXs7JNbSz6CGCbc/s320/euler-11.png" /></a></div><br />
Мне было просто лень...Andrey ``Bass'' Shcheglovhttp://www.blogger.com/profile/00882744014756862371noreply@blogger.com0