<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Unified Diff &#187; How To</title>
	<atom:link href="http://www.unifieddiff.com/category/how-to/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.unifieddiff.com</link>
	<description>crazy hacks with a side of shouting</description>
	<lastBuildDate>Sun, 05 Feb 2012 02:47:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>DoD Common Access Card on Linux</title>
		<link>http://www.unifieddiff.com/2010/09/18/cac-on-linux/</link>
		<comments>http://www.unifieddiff.com/2010/09/18/cac-on-linux/#comments</comments>
		<pubDate>Sun, 19 Sep 2010 02:09:34 +0000</pubDate>
		<dc:creator>Bob</dc:creator>
				<category><![CDATA[How To]]></category>
		<category><![CDATA[DoD CAC]]></category>
		<category><![CDATA[Gentoo]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[PKI]]></category>
		<category><![CDATA[Portage]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://www.unifieddiff.com/?p=328</guid>
		<description><![CDATA[There are times when I need to use my Common Access Card at home. Being a Linux user, I figured this would be challenging to configure. It took a few hours of trying different packages and directions, but I finally have it working. Considering the process isn&#8217;t entirely straightforward, I thought it&#8217;d be good to [...]]]></description>
			<content:encoded><![CDATA[<p>There are times when I need to use my <a href="http://www.cac.mil/">Common Access Card</a> at home. Being a Linux user, I figured this would be challenging to configure. It took a few hours of trying different packages and directions, but I finally have it working. Considering the process isn&#8217;t entirely straightforward, I thought it&#8217;d be good to document the steps here.</p>
<p><span id="more-328"></span></p>
<p>My desktop is running Gentoo Linux with the SCM Microsystems SCR331-LC1 smart card reader. Other readers will probably work, but I know for certain that this one does.</p>
<p>1. Download and untar the <a href="http://www.unifieddiff.com/files/cackey-0.5.12_ebuild.tar.bz2">CACKey ebuild</a> into your <em>PORTDIR_OVERLAY</em>.</p>
<p>2. Edit <em>/etc/portage/packages.keywords</em> and add the following lines:</p>
<pre>
app-crypt/cackey ~x86
dev-perl/pcsc-perl ~x86
sys-apps/pcsc-tools ~x86
</pre>
</p>
<p>3. Edit <em>/etc/portage/packages.use</em> and add the following lines:</p>
<pre>
sys-apps/pcsc-lite usb
sys-apps/pcsc-tools usb
</pre>
</p>
<p>4. Download <em>cackey-0.5.12-1.src.rpm</em> from <a href="https://software.forge.mil/sf/frs/do/viewRelease/projects.community_cac/frs.cackey.0_5_12">Software Forge</a> and drop it in <em>/usr/portage/distfiles</em>. Unfortunately, you&#8217;ll need your CAC to download CACKey.</p>
<p>5. Merge some packages:</p>
<pre>$ sudo emerge pcsc-lite pcsc-tools cackey ccid</pre>
</p>
<p>6. In Firefox, go to Edit &gt; Preferences &gt; Advanced &gt; Encryption. Click on the Security Devices button, and click the Load button. Use <em>DoD CAC</em> for the module name, and set the module file to <em>/usr/lib/libcackey.so</em>.</p>
<p>7. Download and install the <a href="http://dodpki.c3pki.chamb.disa.mil/rootca.html">DoD Root certificates</a> in Firefox.</p>
<p>8. Test your CAC at <a href="https://www.us.army.mil/">AKO/DKO</a>.</p>
<p>I originally tried using CoolKey but Firefox always claimed the card was not present. <a href="https://bugzilla.redhat.com/show_bug.cgi?id=534172">This post</a> pointed me in the right direction. It seems that cards manufactured on or after January 14, 2010 no longer work with CoolKey.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.unifieddiff.com/2010/09/18/cac-on-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Building Amarok 1.4 on Leopard</title>
		<link>http://www.unifieddiff.com/2008/06/30/building-amarok-14-on-leopard/</link>
		<comments>http://www.unifieddiff.com/2008/06/30/building-amarok-14-on-leopard/#comments</comments>
		<pubDate>Mon, 30 Jun 2008 18:02:39 +0000</pubDate>
		<dc:creator>Bob</dc:creator>
				<category><![CDATA[How To]]></category>
		<category><![CDATA[Amarok]]></category>
		<category><![CDATA[Autotools]]></category>
		<category><![CDATA[Fink]]></category>
		<category><![CDATA[libxine]]></category>
		<category><![CDATA[OS X]]></category>

		<guid isPermaLink="false">http://www.robertjcarroll.com/?p=31</guid>
		<description><![CDATA[I love Amarok and wanted to install it on my MacBook. With Qt4 on the horizon, it will be possible to run Amarok natively in OS X without an X server. But I didn&#8217;t want to wait for Amarok2 to become stable, so I looked into compiling Amarok 1.4 and running it under X. I [...]]]></description>
			<content:encoded><![CDATA[<p>I love <a href="http://amarok.kde.org/">Amarok</a> and wanted to install it on my MacBook. With Qt4 on the horizon, it will be possible to run Amarok natively in OS X without an X server. But I didn&#8217;t want to wait for Amarok2 to become stable, so I looked into compiling Amarok 1.4 and running it under X.</p>
<p>I tried following the <a href="http://amarok.kde.org/wiki/On_OS_X">On OS X</a> guide with limited success. Apparently, ffmpeg won&#8217;t compile on Leopard and that caused the entire libxine compilation to fail. I tried various combinations of configure flags, but none seemed to help. I looked at the source to try and fix it, but unfortunately I&#8217;m not terribly familiar with x86 assembly.</p>
<p><span id="more-31"></span></p>
<p>The problem code had to do with video rendering, so since Amarok doesn&#8217;t use it I just cut it out of the build process. Edit <strong>src/combined/ffmpeg/Makefile</strong> and find</p>
<pre>xineplug_LTLIBRARIES = xineplug_decode_ff.la xineplug_decode_dvaudio.la</pre>
<p>and replace with</p>
<pre>xineplug_LTLIBRARIES = xineplug_decode_dvaudio.la</pre>
</p>
<p>After that, edit <strong>src/post/Makefile</strong> and find</p>
<pre>SUBDIRS = planar goom visualizations mosaico deinterlace audio</pre>
<p>and replace with</p>
<pre>SUBDIRS = goom visualizations mosaico audio</pre>
<p>Now libxine will build.</p>
<p>With libxine installed, I had a few more steps to build Amarok. I installed taglib</p>
<pre>$ sudo fink install taglib</pre>
<p>I also had to specify the location of the OpenGL framework I wanted to use</p>
<pre>
LDFLAGS=&quot;-Wl,-dylib_file,/System/Library/Frameworks/OpenGL.framework/Versions/ \
  A/Libraries/libGL.dylib:/System/Library/Frameworks/OpenGL.framework/Versions/ \
  A/Libraries/libGL.dylib&quot;
</pre>
<p>And finally, this is how I configured Amarok</p>
<pre>./configure --prefix=/sw --with-qt-includes=/sw/include/qt \
  --with-qt-libraries=/sw/lib/qt3/lib</pre>
</p>
<p>I now have Amarok successfully compiled and running on Leopard. This took me quite a bit of time to get right, so I&#8217;m hoping someone else will find it useful.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.unifieddiff.com/2008/06/30/building-amarok-14-on-leopard/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Custom Draw ListView with Double Buffering</title>
		<link>http://www.unifieddiff.com/2008/05/30/custom-draw-listview-with-double-buffering/</link>
		<comments>http://www.unifieddiff.com/2008/05/30/custom-draw-listview-with-double-buffering/#comments</comments>
		<pubDate>Sat, 31 May 2008 04:33:19 +0000</pubDate>
		<dc:creator>Bob</dc:creator>
				<category><![CDATA[How To]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C++/CLI]]></category>
		<category><![CDATA[GDI]]></category>
		<category><![CDATA[MFC]]></category>
		<category><![CDATA[Win32]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.robertjcarroll.com/?p=29</guid>
		<description><![CDATA[For one of my pet projects, I needed to add a graphic to certain ListView rows. I considered owner-drawing the control, but that seemed messy. What I really wanted was a way to draw on top of whatever Windows painted. I couldn&#8217;t find a nifty .NET way to do this, so remembering a technique from [...]]]></description>
			<content:encoded><![CDATA[<p>For one of my pet projects, I needed to add a graphic to certain ListView rows. I considered owner-drawing the control, but that seemed messy. What I really wanted was a way to draw on top of whatever Windows painted. I couldn&#8217;t find a nifty .NET way to do this, so remembering a technique from the MFC days, I decided to <a href="http://msdn.microsoft.com/en-us/library/bb761817(VS.85).aspx">custom draw</a> the ListView. This would let me inject my own drawing code and let Windows handle the rest. Perfect!</p>
<p>I had originally implemented the ListView using a control style to <a href="http://geekswithblogs.net/cpound/archive/2006/02/27/70834.aspx">eliminate the annoying flicker</a> every time the list was repainted. Once I started custom drawing the control, I saw odd artifacts in the ListView&#8217;s client area when I scrolled or moved the mouse. If I turned off double buffering, it worked fine.</p>
<p><span id="more-29"></span></p>
<p>I studied the custom draw process looking for my mistake, but I couldn&#8217;t find any. I even used the <a href="http://www.aisto.com/roeder/dotnet/">.NET Reflector</a> to look at Microsoft&#8217;s implementation. The message I&#8217;m filtering has a handle to the control&#8217;s back-buffer. So it seemed like I should just be able to draw directly into that. But no matter what I did, it produced the same artifacts.</p>
<p>After about three days of banging my head, I managed to make it work by drawing into my own buffer and then using <a href="http://msdn.microsoft.com/en-us/library/ms532278(VS.85).aspx">BitBlt()</a> to copy my image to the control&#8217;s buffer. I also had to set the double buffer style with a window message rather than using the built-in property, although admittedly, I&#8217;m not sure why.</p>
<p>I like visual aids, so here&#8217;s a code snippet from my project. I changed names and removed a bunch of unnecessary lines for easier reading.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#include &quot;stdafx.h&quot;</span>
<span style="color: #339900;">#include &quot;MyListViewControl.h&quot;</span>
&nbsp;
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> MyListViewControl<span style="color: #008080;">;</span>
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> System<span style="color: #008080;">::</span><span style="color: #007788;">Drawing</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> System<span style="color: #008080;">::</span><span style="color: #007788;">Windows</span><span style="color: #008080;">::</span><span style="color: #007788;">Forms</span><span style="color: #008080;">;</span>
&nbsp;
MyListViewControl<span style="color: #008080;">::</span><span style="color: #007788;">MyListViewControl</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> <span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">bool</span> MyListViewControl<span style="color: #008080;">::</span><span style="color: #007788;">CustomDraw</span><span style="color: #008000;">&#40;</span>Message<span style="color: #000040;">%</span> m<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	System<span style="color: #008080;">::</span><span style="color: #007788;">Drawing</span><span style="color: #008080;">::</span><span style="color: #007788;">Rectangle</span><span style="color: #000040;">^</span> mprc<span style="color: #008080;">;</span>
	System<span style="color: #008080;">::</span><span style="color: #007788;">String</span><span style="color: #000040;">^</span> cchQueueIndex<span style="color: #008080;">;</span>
	ListViewItem<span style="color: #000040;">^</span> mpItem<span style="color: #008080;">;</span>
	LPNMCUSTOMDRAW lpnmcd<span style="color: #008080;">;</span>
	Graphics<span style="color: #000040;">^</span> mpgfx<span style="color: #008080;">;</span>
	HDC hmemdc<span style="color: #008080;">;</span>
	RECT sOrderRect<span style="color: #008080;">;</span>
	RECT sStopRect<span style="color: #008080;">;</span>
	Brush<span style="color: #000040;">^</span> mpbgbr<span style="color: #008080;">;</span>
	Brush<span style="color: #000040;">^</span> mpfgbr<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> nOrderLen<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> nOrderOffset<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> nRightEdge<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> nRectWidth<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> nItem<span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #666666;">// Grab the custom draw info</span>
	lpnmcd <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>LPNMCUSTOMDRAW<span style="color: #008000;">&#41;</span>m.<span style="color: #007788;">LParam</span>.<span style="color: #007788;">ToPointer</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #666666;">// Figure out which drawing stage we're in</span>
	<span style="color: #0000ff;">switch</span> <span style="color: #008000;">&#40;</span>lpnmcd<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>dwDrawStage<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>	
&nbsp;
	<span style="color: #666666;">// Control Pre-paint</span>
	<span style="color: #0000ff;">case</span> <span style="color: #008000;">&#40;</span>CDDS_PREPAINT<span style="color: #008000;">&#41;</span><span style="color: #008080;">:</span>
&nbsp;
		<span style="color: #666666;">// Request to be notified during item draw</span>
		__super<span style="color: #008080;">::</span><span style="color: #007788;">WndProc</span><span style="color: #008000;">&#40;</span>m<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		m.<span style="color: #007788;">Result</span> <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>System<span style="color: #008080;">::</span><span style="color: #007788;">IntPtr</span><span style="color: #008000;">&#41;</span>CDRF_NOTIFYITEMDRAW<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
&nbsp;
&nbsp;
	<span style="color: #666666;">// List Item Pre-paint</span>
	<span style="color: #0000ff;">case</span> <span style="color: #008000;">&#40;</span>CDDS_ITEMPREPAINT<span style="color: #008000;">&#41;</span><span style="color: #008080;">:</span>
&nbsp;
		<span style="color: #666666;">// Request to be notified after item draw</span>
		__super<span style="color: #008080;">::</span><span style="color: #007788;">WndProc</span><span style="color: #008000;">&#40;</span>m<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		m.<span style="color: #007788;">Result</span> <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>System<span style="color: #008080;">::</span><span style="color: #007788;">IntPtr</span><span style="color: #008000;">&#41;</span>CDRF_NOTIFYPOSTPAINT<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
&nbsp;
&nbsp;
	<span style="color: #666666;">// List Item Post-paint</span>
	<span style="color: #0000ff;">case</span> <span style="color: #008000;">&#40;</span>CDDS_ITEMPOSTPAINT<span style="color: #008000;">&#41;</span><span style="color: #008080;">:</span>
&nbsp;
		__super<span style="color: #008080;">::</span><span style="color: #007788;">WndProc</span><span style="color: #008000;">&#40;</span>m<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
		<span style="color: #666666;">// Get the current item</span>
		nItem <span style="color: #000080;">=</span> <span style="color: #0000ff;">static_cast</span><span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span>lpnmcd<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>dwItemSpec<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		mpItem <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>ListViewItem<span style="color: #000040;">^</span><span style="color: #008000;">&#41;</span>this<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>Items<span style="color: #008000;">&#91;</span>nItem<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>		
&nbsp;
		<span style="color: #666666;">// Get the device context and item bounds</span>
		mpgfx <span style="color: #000080;">=</span> this<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>CreateGraphics<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		mprc <span style="color: #000080;">=</span> this<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>GetItemRect<span style="color: #008000;">&#40;</span>nItem, ItemBoundsPortion<span style="color: #008080;">::</span><span style="color: #007788;">Label</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
		<span style="color: #666666;">// *** Your custom drawing code here ***</span>
&nbsp;
		<span style="color: #666666;">// Copy the bubble to the screen DC</span>
		hmemdc <span style="color: #000080;">=</span> <span style="color: #0000ff;">reinterpret_cast</span><span style="color: #000080;">&lt;</span>HDC<span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">static_cast</span><span style="color: #000080;">&lt;</span><span style="color: #0000ff;">void</span><span style="color: #000040;">*</span><span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span>mpgfx<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>GetHdc<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		BitBlt<span style="color: #008000;">&#40;</span> 
			lpnmcd<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>hdc, 
			sOrderRect.<span style="color: #007788;">left</span>, 
			mprc<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>Y, 
			nRectWidth, 
			mprc<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>Height, 
			hmemdc, 
			sOrderRect.<span style="color: #007788;">left</span>, 
			mprc<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>Y, 
			SRCCOPY<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		mpgfx<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>ReleaseHdc<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>System<span style="color: #008080;">::</span><span style="color: #007788;">IntPtr</span><span style="color: #008000;">&#41;</span>hmemdc<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
		<span style="color: #666666;">// Let Windows redraw the border</span>
		m.<span style="color: #007788;">Result</span> <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>System<span style="color: #008080;">::</span><span style="color: #007788;">IntPtr</span><span style="color: #008000;">&#41;</span>CDRF_DODEFAULT<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> MyListViewControl<span style="color: #008080;">::</span><span style="color: #007788;">WndProc</span><span style="color: #008000;">&#40;</span>Message<span style="color: #000040;">%</span> m<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	LPNMHDR lpnmhdr<span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #0000ff;">switch</span> <span style="color: #008000;">&#40;</span>m.<span style="color: #007788;">Msg</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
&nbsp;
	<span style="color: #666666;">// Reflected Notifications</span>
	<span style="color: #0000ff;">case</span> <span style="color: #008000;">&#40;</span>OCM_NOTIFY<span style="color: #008000;">&#41;</span><span style="color: #008080;">:</span>
&nbsp;
		<span style="color: #666666;">// Get the notification</span>
		lpnmhdr <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>LPNMHDR<span style="color: #008000;">&#41;</span>m.<span style="color: #007788;">LParam</span>.<span style="color: #007788;">ToPointer</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>lpnmhdr <span style="color: #000080;">==</span> <span style="color: #0000ff;">NULL</span><span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
&nbsp;
		<span style="color: #666666;">// We want custom draw messages</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>lpnmhdr<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>code <span style="color: #000080;">==</span> NM_CUSTOMDRAW  
				<span style="color: #000040;">&amp;&amp;</span> lpnmhdr<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>hwndFrom <span style="color: #000080;">==</span> this<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>Handle.<span style="color: #007788;">ToPointer</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span>this<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>CustomDraw<span style="color: #008000;">&#40;</span>m<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
				<span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
&nbsp;
		<span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #008000;">&#125;</span>
&nbsp;
	__super<span style="color: #008080;">::</span><span style="color: #007788;">WndProc</span><span style="color: #008000;">&#40;</span>m<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

</p>
<p>And here&#8217;s the header file with the double buffering message call:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#pragma once</span>
&nbsp;
<span style="color: #0000ff;">namespace</span> MyListView
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">public</span> ref <span style="color: #0000ff;">class</span> MyListView <span style="color: #008080;">:</span> 
		<span style="color: #0000ff;">public</span> System<span style="color: #008080;">::</span><span style="color: #007788;">Windows</span><span style="color: #008080;">::</span><span style="color: #007788;">Forms</span><span style="color: #008080;">::</span><span style="color: #007788;">ListView</span>
	<span style="color: #008000;">&#123;</span>
&nbsp;
	<span style="color: #0000ff;">private</span><span style="color: #008080;">:</span>
		<span style="color: #0000ff;">bool</span> CustomDraw<span style="color: #008000;">&#40;</span>System<span style="color: #008080;">::</span><span style="color: #007788;">Windows</span><span style="color: #008080;">::</span><span style="color: #007788;">Forms</span><span style="color: #008080;">::</span><span style="color: #007788;">Message</span><span style="color: #000040;">%</span> m<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #0000ff;">public</span><span style="color: #008080;">:</span>
		<span style="color: #0000ff;">virtual</span> property <span style="color: #0000ff;">bool</span> DoubleBuffered
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">bool</span> get<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> override
			<span style="color: #008000;">&#123;</span>
				LRESULT lStyles <span style="color: #000080;">=</span> <span style="color: #008080;">::</span><span style="color: #007788;">SendMessage</span><span style="color: #008000;">&#40;</span> 
					<span style="color: #008000;">&#40;</span>HWND<span style="color: #008000;">&#41;</span> this<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>Handle.<span style="color: #007788;">ToPointer</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>, 
					LVM_GETEXTENDEDLISTVIEWSTYLE, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
				<span style="color: #0000ff;">return</span> <span style="color: #008000;">&#40;</span>lStyles <span style="color: #000040;">&amp;</span> LVS_EX_DOUBLEBUFFER<span style="color: #008000;">&#41;</span> <span style="color: #000040;">!</span><span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
&nbsp;
			<span style="color: #0000ff;">void</span> set <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">bool</span> fValue<span style="color: #008000;">&#41;</span> override
			<span style="color: #008000;">&#123;</span>
				<span style="color: #666666;">// I tried using the DoubleBuffered property, but I</span>
				<span style="color: #666666;">// get artifacts. So, let's do this the MFC way...</span>
				<span style="color: #008080;">::</span><span style="color: #007788;">SendMessage</span><span style="color: #008000;">&#40;</span> 
					<span style="color: #008000;">&#40;</span>HWND<span style="color: #008000;">&#41;</span> this<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>Handle.<span style="color: #007788;">ToPointer</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>, 
					LVM_SETEXTENDEDLISTVIEWSTYLE, 
					LVS_EX_DOUBLEBUFFER, 
					LVS_EX_DOUBLEBUFFER<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
		<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #0000ff;">protected</span><span style="color: #008080;">:</span>
		<span style="color: #0000ff;">virtual</span> <span style="color: #0000ff;">void</span> WndProc<span style="color: #008000;">&#40;</span>System<span style="color: #008080;">::</span><span style="color: #007788;">Windows</span><span style="color: #008080;">::</span><span style="color: #007788;">Forms</span><span style="color: #008080;">::</span><span style="color: #007788;">Message</span><span style="color: #000040;">%</span> m<span style="color: #008000;">&#41;</span> override<span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #0000ff;">public</span><span style="color: #008080;">:</span>
		MyListViewControl<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

</p>
<p>I spend days searching online and couldn&#8217;t find anyone who talked about custom drawing a .NET ListView with double buffering. I hope somebody will find this useful.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.unifieddiff.com/2008/05/30/custom-draw-listview-with-double-buffering/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HOW TO: Samba as an AD Domain Member</title>
		<link>http://www.unifieddiff.com/2006/10/04/samba-ad-domain-member/</link>
		<comments>http://www.unifieddiff.com/2006/10/04/samba-ad-domain-member/#comments</comments>
		<pubDate>Thu, 05 Oct 2006 01:30:55 +0000</pubDate>
		<dc:creator>Bob</dc:creator>
				<category><![CDATA[How To]]></category>
		<category><![CDATA[Active Directory]]></category>
		<category><![CDATA[Gentoo]]></category>
		<category><![CDATA[Kerberos]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Samba]]></category>

		<guid isPermaLink="false">http://www.robertjcarroll.com/2006/10/05/samba-ad-domain-member/</guid>
		<description><![CDATA[There are probably a million and one articles about how to make Samba 3 an Active Directory domain member. But with all of that, this process still seems to require hours of research. So I&#8217;ve decided to compile my latest experiences here. The domain member box is running Gentoo Linux. So you may need to [...]]]></description>
			<content:encoded><![CDATA[<p>There are probably a million and one articles about how to make Samba 3 an Active Directory domain member. But with all of that, this process still seems to require hours of research. So I&#8217;ve decided to compile my latest experiences here.</p>
<p>The domain member box is running Gentoo Linux. So you may need to adjust the steps to fit your flavor. Make sure the USE flags kerberos, ldap, samba, ssl, and winbind are set. Start by installing an NTP client.</p>
<pre># emerge ntp</pre>
</p>
<p><span id="more-24"></span></p>
<p>The purpose of NTP is to keep your computer&#8217;s clock in-sync with the domain controller. Edit your /etc/ntp.conf file to use your domain controller as the time server. Then sync your clock, start the NTP client, and install Samba:</p>
<pre>
# ntpdate ad01.rit.edu
# /etc/init.d/ntpd start
# rc-update add ntpd default
# emerge samba
</pre>
<p>Now you can configure kerberos. Open your /etc/krb5.conf file and make it look like this:</p>
<pre>
[libdefaults]
  ticket_lifetime = 600
  default_realm = RIT.EDU
  clockskew = 120

[realms]
  RIT.EDU = {
    kdc = ad01.rit.edu
    default_domain = RIT.EDU
  }

[domain_realm]
  .rit.edu = RIT.EDU
  rit.edu = RIT.EDU
</pre>
<p>Test your kerberos setup by requesting a ticket from your domain controller.</p>
<pre>
# kinit administrator
# klist
# kdestroy</pre>
<p>Edit your Samba configuration.</p>
<pre>
[global]
  workgroup = RIT
  realm = RIT.EDU
  server string =

  log file = /var/log/samba/log.%m
  max log size = 50

  hosts allow = 127.0.0.1 129.21.0.0/16
  hosts deny = 0.0.0.0/0
  security = ADS
  allow trusted domains = yes
  password server = ad01.rit.edu
  encrypt passwords = yes
  min protocol = NT1

  winbind enum users = yes
  winbind enum groups = yes
  winbind cache time = 600
  winbind use default domain = yes
  template homedir = /home/%U
  obey pam restrictions = yes
  template shell = /bin/bash

  socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
  domain master = no
  local master = no

  idmap uid = 10000-99999
  idmap gid = 10000-99999
</pre>
<p>Add winbind to the daemon_list variable in /etc/conf.d/samba.</p>
<pre>daemon_list="smbd nmbd <strong>winbind</strong>"</pre>
<p>Join the domain and start Samba.</p>
<pre>
# net ads join -U administrator
# /etc/init.d/samba start
</pre>
<p>Add winbind to the passwd and group lines in /etc/nsswitch.conf.</p>
<pre>
passwd:      compat <strong>winbind</strong>
shadow:      compat
group:       compat <strong>winbind</strong>
</pre>
<p>Test user resolution and add Samba to the startup:</p>
<pre>
# getent passwd administrator
# rc-update add samba default
</pre>
<p>Add the bolded lines to your /etc/pam.d/system-auth file.</p>
<pre>
auth required pam_env.so
<strong>auth sufficient	pam_winbind.so</strong>
auth sufficient	pam_unix.so likeauth nullok <strong>use_first_pass</strong>
auth required pam_deny.so

account	required pam_access.so
<strong>account	sufficient pam_winbind.so</strong>
account	required pam_unix.so

password required pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3
password sufficient pam_unix.so nullok md5 shadow use_authtok
password required pam_deny.so

session	required pam_limits.so
session	required pam_unix.so
<strong>session required pam_mkhomedir.so</strong>
</pre>
<p>That&#8217;s it! Now all you need to do is start samba and your box is an AD domain member.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.unifieddiff.com/2006/10/04/samba-ad-domain-member/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

