<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xml:base="https://www.ccdw.org"  xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
 <title>Creative Constant Development Workgroup blogs</title>
 <link>https://www.ccdw.org/blog</link>
 <description></description>
 <language>en</language>
<item>
 <title>configure software access point on Linux</title>
 <link>https://www.ccdw.org/node/15</link>
 <description>&lt;div class=&quot;field field-name-body field-type-text-with-summary field-label-hidden&quot;&gt;&lt;div class=&quot;field-items&quot;&gt;&lt;div class=&quot;field-item even&quot; property=&quot;content:encoded&quot;&gt;&lt;p&gt;When you have a wire-connected computer with a unused wireless interface, an option is to use the device as an access point to improve the coverage of your WIFI network. This can be done by setting up &lt;a href=&quot;https://en.wikipedia.org/wiki/Hostapd&quot;&gt;hostapd&lt;/a&gt;, which takes care of wireless interface configuration, authentication and security. However, in order for the wireless traffic to actually go through the wired connection and onto the internet and vice versa, the two interfaces needed to be bridged somehow. There are several scenario for configuring the bridge connection. For the &lt;a href=&quot;https://wiki.gnome.org/Projects/NetworkManager&quot;&gt;NetworkManager&lt;/a&gt;, this can be down with the following.&lt;/p&gt;
&lt;div class=&quot;geshifilter&quot;&gt;
&lt;pre class=&quot;text geshifilter-text&quot; style=&quot;font-family:monospace;&quot;&gt;nmcli con del &amp;lt;existing connection for eth0&amp;gt;
nmcli con add ifname br0 type bridge con-name lan
nmcli con add ifname eth0 type bridge-slave master lan con-name eth0-lan&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Afterwards, hostapd can be started with the following configuration:&lt;/p&gt;
&lt;div class=&quot;geshifilter&quot;&gt;
&lt;pre class=&quot;text geshifilter-text&quot; style=&quot;font-family:monospace;&quot;&gt;interface=wlan0
bridge=br0
ctrl_interface=/run/hostapd
ctrl_interface_group=0
ssid=test
channel=11
wpa=2
wpa_passphrase=Hello123
wpa_key_mgmt=WPA-PSK&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;However, the order of two is important. The connections of NetworkManager need to be configured before the hostapd is started. Otherwise, the bridge interface will be taken over by hostapd before NetworkManager can configure it properly. It is less than straightforward to enforce such an order with &lt;span class=&quot;geshifilter&quot;&gt;&lt;code class=&quot;text geshifilter-text&quot;&gt;systemd&lt;/code&gt;&lt;/span&gt;. For current Debian unstable, the dependency in &lt;span class=&quot;geshifilter&quot;&gt;&lt;code class=&quot;text geshifilter-text&quot;&gt;/lib/systemd/system/hostapd.service&lt;/code&gt;&lt;/span&gt; need to be corrected from &lt;span class=&quot;geshifilter&quot;&gt;&lt;code class=&quot;text geshifilter-text&quot;&gt;After=network.target&lt;/code&gt;&lt;/span&gt; to &lt;span class=&quot;geshifilter&quot;&gt;&lt;code class=&quot;text geshifilter-text&quot;&gt;After=network-online.target&lt;/code&gt;&lt;/span&gt; .&lt;br /&gt;
Alternatively, you can create a file &lt;span class=&quot;geshifilter&quot;&gt;&lt;code class=&quot;text geshifilter-text&quot;&gt;/etc/systemd/system/hostapd.service.d/netwait.conf&lt;/code&gt;&lt;/span&gt; with:&lt;/p&gt;
&lt;div class=&quot;geshifilter&quot;&gt;
&lt;pre class=&quot;text geshifilter-text&quot; style=&quot;font-family:monospace;&quot;&gt;[Unit]
After=network-online.target&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;to change the dependency.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</description>
 <pubDate>Mon, 16 Apr 2018 15:23:00 +0000</pubDate>
 <dc:creator>cjj</dc:creator>
 <guid isPermaLink="false">15 at https://www.ccdw.org</guid>
 <comments>https://www.ccdw.org/node/15#comments</comments>
</item>
<item>
 <title>remove master password of alpine</title>
 <link>https://www.ccdw.org/node/14</link>
 <description>&lt;div class=&quot;field field-name-body field-type-text-with-summary field-label-hidden&quot;&gt;&lt;div class=&quot;field-items&quot;&gt;&lt;div class=&quot;field-item even&quot; property=&quot;content:encoded&quot;&gt;&lt;p&gt;For the text-based email client &lt;a href=&quot;https://en.wikipedia.org/wiki/Alpine_(email_client)&quot;&gt;alpine&lt;/a&gt; to remember your passwords for email servers, it is required to create a master password to encrypt the &lt;span class=&quot;geshifilter&quot;&gt;&lt;code class=&quot;text geshifilter-text&quot;&gt;.pine-passfile&lt;/code&gt;&lt;/span&gt;. Sometimes, this is undesirable and there is no official way to disable this requirement. As hinted in &lt;a href=&quot;https://github.com/termux/termux-packages/issues/2023&quot;&gt;this post&lt;/a&gt;, the master password is used as a passphrase for the encrypted key file &lt;span class=&quot;geshifilter&quot;&gt;&lt;code class=&quot;text geshifilter-text&quot;&gt;MasterPassword.key&lt;/code&gt;&lt;/span&gt; . Therefore, it can be removed by decrypting the key file. For alpine-2.21 of Debian Linux, this key file is in the folder &lt;span class=&quot;geshifilter&quot;&gt;&lt;code class=&quot;text geshifilter-text&quot;&gt;~/.alpine-smime/.pwd&lt;/code&gt;&lt;/span&gt; . The passphrase can be removed with the following commands:&lt;/p&gt;
&lt;div class=&quot;geshifilter&quot;&gt;
&lt;pre class=&quot;text geshifilter-text&quot; style=&quot;font-family:monospace;&quot;&gt;cd ~/.alpine-smime/.pwd
mv MasterPassword.key MasterPassword.key.orig
openssl rsa -in MasterPassword.key.orig -out MasterPassword.key&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On the prompt, enter the previous master password created in alpine, the new key file will be created without a passphrase. After this, alpine will no longer prompt for master password upon startup. However, the security of alpine&#039;s password storage is also compromised. This can only be done at your own risk.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</description>
 <pubDate>Sat, 14 Apr 2018 06:56:57 +0000</pubDate>
 <dc:creator>cjj</dc:creator>
 <guid isPermaLink="false">14 at https://www.ccdw.org</guid>
 <comments>https://www.ccdw.org/node/14#comments</comments>
</item>
<item>
 <title>Presence alert in OpenHAB by DHCP server in ASUS router</title>
 <link>https://www.ccdw.org/node/13</link>
 <description>&lt;div class=&quot;field field-name-body field-type-text-with-summary field-label-hidden&quot;&gt;&lt;div class=&quot;field-items&quot;&gt;&lt;div class=&quot;field-item even&quot; property=&quot;content:encoded&quot;&gt;&lt;p&gt;The home automation system &lt;a href=&quot;http://www.openhab.org/&quot;&gt;OpenHAB&lt;/a&gt; has the ability to coordinate difference networked devices to perform automatic control under different conditions. One of the important conditions is the presence of different residents in the house. Using &quot;Network Health&quot; module of OpenHAB allows the presence test through the detection of devices carried by the residents. One simply create item such as&lt;/p&gt;
&lt;div class=&quot;geshifilter&quot;&gt;
&lt;pre class=&quot;text geshifilter-text&quot; style=&quot;font-family:monospace;&quot;&gt;Switch Resident1 {nh=&quot;android-xxxxxx&quot;}
Switch Resident2 {nh=&quot;android-yyyyyy&quot;}
...&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This works well except the time resolution for the arrival and departure is limited by the period of network checking (which is set by &lt;span class=&quot;geshifilter&quot;&gt;&lt;code class=&quot;text geshifilter-text&quot;&gt;networkhealth:refresh&lt;/code&gt;&lt;/span&gt; and defaulted to 1 minute). For real-time arrival notification, it can be achieved by the DHCP server of the local area network. We can configure it to flip on the corresponding presence switch as soon as a DHCP lease is offered to the corresponding device. For ISC DHCP server running on a computer, this can be done using the &quot;on commit&quot; event handling block. For ASUS router, which runs dnsmasq for dhcpd, we will need to update to the &lt;a href=&quot;http://asuswrt.lostrealm.ca/&quot;&gt;Asuswrt-Merlin&lt;/a&gt; firmware to enable similar facility. Once that&#039;s done and you can login to the router for a shell, you make an addition to the &quot;dnsmasq.conf&quot; by creating the file, &lt;span class=&quot;geshifilter&quot;&gt;&lt;code class=&quot;text geshifilter-text&quot;&gt;&quot;/jffs/configs/dnsmasq.conf.add&quot;&lt;/code&gt;&lt;/span&gt;, with the single-line content:&lt;/p&gt;
&lt;div class=&quot;geshifilter&quot;&gt;
&lt;pre class=&quot;text geshifilter-text&quot; style=&quot;font-family:monospace;&quot;&gt;dhcp-script=/jffs/machab.sh&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This will make dnsmasq call the script, &lt;span class=&quot;geshifilter&quot;&gt;&lt;code class=&quot;text geshifilter-text&quot;&gt;&quot;/jffs/machab.sh&quot;&lt;/code&gt;&lt;/span&gt;, whenever a lease is offered. The content of the file is as follows:&lt;/p&gt;
&lt;div class=&quot;geshifilter&quot;&gt;
&lt;pre class=&quot;text geshifilter-text&quot; style=&quot;font-family:monospace;&quot;&gt;#!/bin/sh
HABURL=&#039;URL for the OpenHAB server with authentication credential&#039;
MAPDAT=${0%/*}/machab.map
mac=$2
item=&#039;&#039;
if [ ! -r &quot;${MAPDAT}&quot; ]; then exit 1; fi
while read m n; do
	if [ &quot;$mac&quot; = &quot;$m&quot; ]; then item=${n}; fi
done &amp;lt; ${MAPDAT}
if [ -z &quot;$item&quot; ]; then exit 0; fi
wget -O /dev/null --post-data=ON --no-check-certificate \
 --header &quot;Content-Type: text/plain&quot; ${HABURL}/rest/items/$item&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;(Remember to change the HABURL setting to suit your situation.)&lt;br /&gt;
The script look up the MAC address of the device from the map file, &lt;span class=&quot;geshifilter&quot;&gt;&lt;code class=&quot;text geshifilter-text&quot;&gt;&quot;/jffs/machab.map&quot;&lt;/code&gt;&lt;/span&gt;, which contains something like:&lt;/p&gt;
&lt;div class=&quot;geshifilter&quot;&gt;
&lt;pre class=&quot;text geshifilter-text&quot; style=&quot;font-family:monospace;&quot;&gt;xx:xx:xx:xx:xx:xx	Resident1
yy:yy:yy:yy:yy:yy	Resident2
...&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;and flip the corresponding switch to &quot;ON&quot;.&lt;br /&gt;
Finally, enable the &quot;JFFS custom scripts and configs&quot; from the administration web page of the router as shown below.&lt;br /&gt;
&lt;img src=&quot;/sites/default/files/asus-merlin1.png&quot; width=&quot;600&quot; /&gt;&lt;br /&gt;
You might need to reboot the router for the configuration to take effect.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</description>
 <pubDate>Sun, 18 Oct 2015 18:01:27 +0000</pubDate>
 <dc:creator>cjj</dc:creator>
 <guid isPermaLink="false">13 at https://www.ccdw.org</guid>
 <comments>https://www.ccdw.org/node/13#comments</comments>
</item>
<item>
 <title>telnet and http server on NodeMCU v2</title>
 <link>https://www.ccdw.org/node/12</link>
 <description>&lt;div class=&quot;field field-name-body field-type-text-with-summary field-label-hidden&quot;&gt;&lt;div class=&quot;field-items&quot;&gt;&lt;div class=&quot;field-item even&quot; property=&quot;content:encoded&quot;&gt;&lt;p&gt;The NodeMCU v2 firmware for esp8266 only allows one TCP server. Usually, one will use this to serve a status page for the wireless unit. But, sometimes, maybe during development, it is desirable to also have a telnet access to the unit over WIFI to do some tweaking. Here, we achieve this by leaving a backdoor on the http port. By connecting to port 80 with telnet and enter &quot;telnet&quot; as the first input line, the connection is switch to a telnet service allows direct interaction with the Lua interpreter. The actual code is listed below:&lt;/p&gt;
&lt;div class=&quot;geshifilter&quot;&gt;
&lt;pre class=&quot;lua geshifilter-lua&quot; style=&quot;font-family:monospace;&quot;&gt;srv&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;net&lt;span style=&quot;color: #66cc66;&quot;&gt;.&lt;/span&gt;createServer&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;net&lt;span style=&quot;color: #66cc66;&quot;&gt;.&lt;/span&gt;TCP&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;180&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
srv&lt;span style=&quot;color: #66cc66;&quot;&gt;:&lt;/span&gt;listen&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;80&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #aa9900; font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;c&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt; 
  c&lt;span style=&quot;color: #66cc66;&quot;&gt;:&lt;/span&gt;on&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ff6666;&quot;&gt;&quot;receive&quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #aa9900; font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;c&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;d&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt; 
    &lt;span style=&quot;color: #aa9900; font-weight: bold;&quot;&gt;if&lt;/span&gt; d&lt;span style=&quot;color: #66cc66;&quot;&gt;:&lt;/span&gt;sub&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #ff6666;&quot;&gt;&quot;telnet&quot;&lt;/span&gt; &lt;span style=&quot;color: #aa9900; font-weight: bold;&quot;&gt;then&lt;/span&gt;
      &lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;-- switch to telnet service&lt;/span&gt;
      node&lt;span style=&quot;color: #66cc66;&quot;&gt;.&lt;/span&gt;output&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #aa9900; font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;s&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
        &lt;span style=&quot;color: #aa9900; font-weight: bold;&quot;&gt;if&lt;/span&gt; c &lt;span style=&quot;color: #66cc66;&quot;&gt;~=&lt;/span&gt; &lt;span style=&quot;color: #aa9900;&quot;&gt;nil&lt;/span&gt; &lt;span style=&quot;color: #aa9900; font-weight: bold;&quot;&gt;then&lt;/span&gt; c&lt;span style=&quot;color: #66cc66;&quot;&gt;:&lt;/span&gt;send&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;s&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #aa9900; font-weight: bold;&quot;&gt;end&lt;/span&gt;
      &lt;span style=&quot;color: #aa9900; font-weight: bold;&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
      c&lt;span style=&quot;color: #66cc66;&quot;&gt;:&lt;/span&gt;on&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ff6666;&quot;&gt;&quot;receive&quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #aa9900; font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;c&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;d&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
        &lt;span style=&quot;color: #aa9900; font-weight: bold;&quot;&gt;if&lt;/span&gt; d&lt;span style=&quot;color: #66cc66;&quot;&gt;:&lt;/span&gt;byte&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;4&lt;/span&gt; &lt;span style=&quot;color: #aa9900; font-weight: bold;&quot;&gt;then&lt;/span&gt; c&lt;span style=&quot;color: #66cc66;&quot;&gt;:&lt;/span&gt;close&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;-- ctrl-d to exit&lt;/span&gt;
        &lt;span style=&quot;color: #aa9900; font-weight: bold;&quot;&gt;else&lt;/span&gt; node&lt;span style=&quot;color: #66cc66;&quot;&gt;.&lt;/span&gt;input&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;d&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #aa9900; font-weight: bold;&quot;&gt;end&lt;/span&gt;
      &lt;span style=&quot;color: #aa9900; font-weight: bold;&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
      c&lt;span style=&quot;color: #66cc66;&quot;&gt;:&lt;/span&gt;on&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ff6666;&quot;&gt;&quot;disconnection&quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #aa9900; font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;c&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
        node&lt;span style=&quot;color: #66cc66;&quot;&gt;.&lt;/span&gt;output&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #aa9900;&quot;&gt;nil&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
      &lt;span style=&quot;color: #aa9900; font-weight: bold;&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
      &lt;span style=&quot;color: #0000aa;&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ff6666;&quot;&gt;&quot;Welcome to NodeMCU&quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
      node&lt;span style=&quot;color: #66cc66;&quot;&gt;.&lt;/span&gt;input&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ff6666;&quot;&gt;&quot;&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\r&lt;/span&gt;&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
      &lt;span style=&quot;color: #aa9900; font-weight: bold;&quot;&gt;return&lt;/span&gt;
    &lt;span style=&quot;color: #aa9900; font-weight: bold;&quot;&gt;end&lt;/span&gt;
    &lt;span style=&quot;color: #aa9900; font-weight: bold;&quot;&gt;if&lt;/span&gt; d&lt;span style=&quot;color: #66cc66;&quot;&gt;:&lt;/span&gt;sub&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;~=&lt;/span&gt; &lt;span style=&quot;color: #ff6666;&quot;&gt;&quot;GET /&quot;&lt;/span&gt; &lt;span style=&quot;color: #aa9900; font-weight: bold;&quot;&gt;then&lt;/span&gt; &lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;-- only process GET method&lt;/span&gt;
      c&lt;span style=&quot;color: #66cc66;&quot;&gt;:&lt;/span&gt;close&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
      &lt;span style=&quot;color: #aa9900; font-weight: bold;&quot;&gt;return&lt;/span&gt;
    &lt;span style=&quot;color: #aa9900; font-weight: bold;&quot;&gt;end&lt;/span&gt;
    &lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;-- serve a webpage&lt;/span&gt;
    c&lt;span style=&quot;color: #66cc66;&quot;&gt;:&lt;/span&gt;send&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ff6666;&quot;&gt;&quot;&amp;lt;!DOCTYPE html&amp;gt;&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&amp;lt;html&amp;gt;&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&amp;lt;head&amp;gt;&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
    c&lt;span style=&quot;color: #66cc66;&quot;&gt;:&lt;/span&gt;send&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ff6666;&quot;&gt;&quot;&amp;lt;title&amp;gt;Hello World!&amp;lt;/title&amp;gt;&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
    c&lt;span style=&quot;color: #66cc66;&quot;&gt;:&lt;/span&gt;send&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ff6666;&quot;&gt;&quot;&amp;lt;/head&amp;gt;&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&amp;lt;body&amp;gt;&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
    c&lt;span style=&quot;color: #66cc66;&quot;&gt;:&lt;/span&gt;send&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ff6666;&quot;&gt;&quot;&amp;lt;h1&amp;gt;Hello World!&amp;lt;/h1&amp;gt;&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
    c&lt;span style=&quot;color: #66cc66;&quot;&gt;:&lt;/span&gt;send&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ff6666;&quot;&gt;&quot;&amp;lt;/body&amp;gt;&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&amp;lt;/html&amp;gt;&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
    c&lt;span style=&quot;color: #66cc66;&quot;&gt;:&lt;/span&gt;close&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #aa9900; font-weight: bold;&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt; 
&lt;span style=&quot;color: #aa9900; font-weight: bold;&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</description>
 <pubDate>Tue, 04 Aug 2015 18:07:44 +0000</pubDate>
 <dc:creator>cjj</dc:creator>
 <guid isPermaLink="false">12 at https://www.ccdw.org</guid>
 <comments>https://www.ccdw.org/node/12#comments</comments>
</item>
<item>
 <title>flashing esp-01 with NodeMCU v2</title>
 <link>https://www.ccdw.org/node/11</link>
 <description>&lt;div class=&quot;field field-name-body field-type-text-with-summary field-label-hidden&quot;&gt;&lt;div class=&quot;field-items&quot;&gt;&lt;div class=&quot;field-item even&quot; property=&quot;content:encoded&quot;&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/themadinventor/esptool&quot;&gt;esptool.py&lt;/a&gt; is your friend. Simply do:&lt;/p&gt;
&lt;div class=&quot;geshifilter&quot;&gt;
&lt;pre class=&quot;text geshifilter-text&quot; style=&quot;font-family:monospace;&quot;&gt;./esptool.py --port /dev/ttyUSB0 write_flash 0x00000 ~/Downloads/nodemcu_float_0.9.6-dev_20150704.bin &lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This works for my esp-01 module. However for the NodeMCU v2 module that I have, more options need to be add to the command line:&lt;/p&gt;
&lt;div class=&quot;geshifilter&quot;&gt;
&lt;pre class=&quot;text geshifilter-text&quot; style=&quot;font-family:monospace;&quot;&gt;./esptool.py --port /dev/ttyUSB0 write_flash 0x00000 ~/Downloads/nodemcu_float_0.9.6-dev_20150704.bin -fs 32m -fm dio -ff 40m&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;It probably has to do with the larger flash size for the v2 module. However, I don&#039;t understand why it would not work with the old command.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</description>
 <pubDate>Tue, 04 Aug 2015 17:32:54 +0000</pubDate>
 <dc:creator>cjj</dc:creator>
 <guid isPermaLink="false">11 at https://www.ccdw.org</guid>
 <comments>https://www.ccdw.org/node/11#comments</comments>
</item>
<item>
 <title>TP-Link TL-WR720N DMZ Proto 41</title>
 <link>https://www.ccdw.org/node/2</link>
 <description>&lt;div class=&quot;field field-name-body field-type-text-with-summary field-label-hidden&quot;&gt;&lt;div class=&quot;field-items&quot;&gt;&lt;div class=&quot;field-item even&quot; property=&quot;content:encoded&quot;&gt;&lt;p&gt;It seemed that the proto 41 for ipv6 traffic is not forwarded to the DMZ by TP-Link 150Mbps Wireless N Router &lt;a href=&quot;http://www.tp-link.com/en/products/details/?model=TL-WR720N&quot;&gt;TL-WR720N&lt;/a&gt;. This put out the hope of setting up 6to4 in my apartment. There is a slight chance that the filtering was done by the ISP. However, I had no suitable option to test this.&lt;br /&gt;
As it seems, the same is true for TL-WR702N.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;field field-name-field-tags field-type-taxonomy-term-reference field-label-above&quot;&gt;&lt;div class=&quot;field-label&quot;&gt;Tags:&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;field-items&quot;&gt;&lt;div class=&quot;field-item even&quot;&gt;&lt;a href=&quot;/taxonomy/term/2&quot; typeof=&quot;skos:Concept&quot; property=&quot;rdfs:label skos:prefLabel&quot; datatype=&quot;&quot;&gt;hardware&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</description>
 <pubDate>Mon, 19 May 2014 02:12:42 +0000</pubDate>
 <dc:creator>cjj</dc:creator>
 <guid isPermaLink="false">2 at https://www.ccdw.org</guid>
 <comments>https://www.ccdw.org/node/2#comments</comments>
</item>
<item>
 <title>Brief steps to dual boot Debian Sid on SONY VAIO Pro 11</title>
 <link>https://www.ccdw.org/node/8</link>
 <description>&lt;div class=&quot;field field-name-body field-type-text-with-summary field-label-hidden&quot;&gt;&lt;div class=&quot;field-items&quot;&gt;&lt;div class=&quot;field-item even&quot; property=&quot;content:encoded&quot;&gt;&lt;p&gt;(The following assumes that a USB network adapter is available to get internet connection. If not, you will need to use the regular iso instead of netinst in step 2 and download the kernel package mentioned in step 7 in Windows before installing it in Linux.)&lt;/p&gt;
&lt;p&gt;1. Make room for Linux: In Windows 8, use disk management to make room for Linux installation. (See, e.g., &lt;a href=&quot;http://pcsupport.about.com/od/windows-8/a/disk-management-windows-8.htm&quot;&gt;this&lt;/a&gt;.)&lt;/p&gt;
&lt;p&gt;2. Create installation media: Download firmware-included netinst iso image from &lt;a href=&quot;http://cdimage.debian.org/cdimage/unofficial/non-free/cd-including-firmware/7.1.0/amd64/iso-cd/&quot;&gt;here&lt;/a&gt; to make a bootable USB flash drive.&lt;/p&gt;
&lt;p&gt;3. Boot the installation media: Shutdown system and press the ASSIST button to enter BIOS setting and disable &quot;Secure Boot&quot;. Boot the USB drive and proceed with installation.&lt;/p&gt;
&lt;p&gt;4. Network availability: When it reaches network configuration, plug in a USB network dongle that can be recognized and configured to continue the installation.&lt;/p&gt;
&lt;p&gt;5. Disk partition: Choose to use all available free space on SSD and use the second GPT system partition (partition #3), which is flagged as bootable, as the GPT Boot Partition for Linux. Finish the installation but stop before rebooting the system.&lt;/p&gt;
&lt;p&gt;6. Bypass the BIOS problem: Open a console (press Alt-2) and mount/find the GPT Boot Partition. In the GPT Boot Partition, copy &quot;EFI/debian/grubx64.efi&quot; to &quot;EFI/Boot/bootx64.efi&quot; before rebooting the system. (For reference, see, e.g., &lt;a href=&quot;http://askubuntu.com/questions/150174/sony-vaio-with-insyde-h2o-efi-bios-will-not-boot-into-grub-efi&quot;&gt;this&lt;/a&gt; piece of information.)&lt;/p&gt;
&lt;p&gt;7. Support for built-in WIFI: Install latest firmware-iwlwifi and a kernel package of linux-3.11-rc1 or newer from, e.g., &lt;a href=&quot;http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.11-rc2-saucy/&quot;&gt;here&lt;/a&gt; to get the built-in Intel 7260 wireless working.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;field field-name-field-tags field-type-taxonomy-term-reference field-label-above&quot;&gt;&lt;div class=&quot;field-label&quot;&gt;Tags:&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;field-items&quot;&gt;&lt;div class=&quot;field-item even&quot;&gt;&lt;a href=&quot;/taxonomy/term/5&quot; typeof=&quot;skos:Concept&quot; property=&quot;rdfs:label skos:prefLabel&quot; datatype=&quot;&quot;&gt;linux&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;field-item odd&quot;&gt;&lt;a href=&quot;/taxonomy/term/2&quot; typeof=&quot;skos:Concept&quot; property=&quot;rdfs:label skos:prefLabel&quot; datatype=&quot;&quot;&gt;hardware&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</description>
 <pubDate>Tue, 23 Jul 2013 06:54:00 +0000</pubDate>
 <dc:creator>cjj</dc:creator>
 <guid isPermaLink="false">8 at https://www.ccdw.org</guid>
 <comments>https://www.ccdw.org/node/8#comments</comments>
</item>
<item>
 <title>Visual Studio 命令提示字元 (2010)</title>
 <link>https://www.ccdw.org/node/6</link>
 <description>&lt;div class=&quot;field field-name-body field-type-text-with-summary field-label-hidden&quot;&gt;&lt;div class=&quot;field-items&quot;&gt;&lt;div class=&quot;field-item even&quot; property=&quot;content:encoded&quot;&gt;&lt;p&gt;Visual Studio 2010 Express提供了一個簡單的C++編譯環境：『Visual Studio 命令提示字元 (2010)』。&lt;br /&gt;
開啟後的終端機環境中可以用『cl』命令來編譯連結一般的C++程式。如：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;span class=&quot;geshifilter&quot;&gt;&lt;code class=&quot;text geshifilter-text&quot;&gt;cl hello.cpp&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;而&lt;a href=&quot;http://www.opengl.org/resources/libraries/glut/&quot;&gt;glut&lt;/a&gt;的程式（在&lt;a href=&quot;http://www.idfun.de/glut64/&quot;&gt;glut&lt;/a&gt;有正確安裝後）也可以直接編譯。&lt;br /&gt;
不過如果要編譯WIN32的程式，在命令列則要加上kernel32.lib，user32.lib，gdi32.lib等額外的程式庫以供連結：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;span class=&quot;geshifilter&quot;&gt;&lt;code class=&quot;text geshifilter-text&quot;&gt;cl hello-win.cpp kernel32.lib user32.lib gdi32.lib /FeHelloWin.exe&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;field field-name-field-tags field-type-taxonomy-term-reference field-label-above&quot;&gt;&lt;div class=&quot;field-label&quot;&gt;Tags:&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;field-items&quot;&gt;&lt;div class=&quot;field-item even&quot;&gt;&lt;a href=&quot;/taxonomy/term/1&quot; typeof=&quot;skos:Concept&quot; property=&quot;rdfs:label skos:prefLabel&quot; datatype=&quot;&quot;&gt;c++&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</description>
 <pubDate>Tue, 01 May 2012 01:41:00 +0000</pubDate>
 <dc:creator>cjj</dc:creator>
 <guid isPermaLink="false">6 at https://www.ccdw.org</guid>
 <comments>https://www.ccdw.org/node/6#comments</comments>
</item>
<item>
 <title>Google Earth (v6) 的中文字形 (debian sid amd64)</title>
 <link>https://www.ccdw.org/node/5</link>
 <description>&lt;div class=&quot;field field-name-body field-type-text-with-summary field-label-hidden&quot;&gt;&lt;div class=&quot;field-items&quot;&gt;&lt;div class=&quot;field-item even&quot; property=&quot;content:encoded&quot;&gt;&lt;p&gt;&lt;span style=&quot;color:red&quot;&gt;*** 本則資訊已過時 ***&lt;/span&gt; Linux版的Google Earth從發行以來，中文的顯示一直都不能隨裝即用。一個主要的原因在於它用的圖形介面程式庫是它所附帶，32位元的QT動態程式庫。因為不是使用者系統中所的QT動態程式庫，使用者不能用qtconfig來更正中文字形。這一點，在一般32位元的Linux系統上，可以用系統中已安裝的動態程式庫(libQT*.so檔們)來取代，詳細步驟可以參考[1]。在64位元的系統上，由於系統中的32位元相容程式庫常有不全(如debian sid的libQtWebKit.so)，單純的刪去附帶的版本會造成程式無法啟動。這時，可以試著用[1]中打包好的檔案來跑看看。但如果還是動不了，要自行補全所有的程式庫可能要費好一些功夫。 一個比較簡單的方法是利用QT程式庫的通用命令列參數: -stylesheet來指定Google Earth的style(見[2])。這個方法用在Window下，網路上已經多次被提到(例如[3])。只是，雖然Google Earth是用QT寫成的，Google似乎用到了一些標準外的方法，以至於在指定stylesheet時一些popup的繪製立即會出現問題。而對style的指定，也常看不到想要的效果。不過，經過一些嘗試，以下的stylesheet在debian sid amd64的平台下大致可以讓Google Earth到達“可用”的狀態:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;* { font-family: &quot;AR PL UMing TW&quot;; } QMenu, QMenuBar { background: rgb(240,240,240); }&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;(雖然仍有少數地方顯示不出字形來)上面的font-family行解決了中文字的顯示，而background行是用來避開popup menu中看不到字的問題。使用者可以把上面的style碼存到“/opt/google/earth/free/ge.qss”檔中，並用&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;google-earth -stylesheet ge.qss&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;來啟動Google Earth。&lt;span style=&quot;color:red&quot;&gt;《如果你發現了更好的設定項目，歡迎留言分享。》&lt;/span&gt; 不過這些都只是針對QT Widgets部分的設定。如果Earth的圖面上有中文的話，使用者還是可能會看到變成方塊的字。這時候可以用選單中[工具]-&amp;gt;[選項...]-&amp;gt;[3D檢示]-&amp;gt;[選擇3D字形](或是[Tools]-&amp;gt;[Options...]-&amp;gt;[3D View]-&amp;gt;[Choose 3D Font])來選擇可用的中文字形即可。 [1] &lt;a href=&quot;http://swyear.blogspot.com/2011/05/opensuse-google-earth-6.html&quot;&gt;http://swyear.blogspot.com/2011/05/opensuse-google-earth-6.html&lt;/a&gt; [2] &lt;a href=&quot;http://doc.qt.nokia.com/4.7-snapshot/stylesheet.html&quot;&gt;http://doc.qt.nokia.com/4.7-snapshot/stylesheet.html&lt;/a&gt; [3] &lt;a href=&quot;http://www.cnblogs.com/agateriver/archive/2010/05/16/1736626.html&quot;&gt;http://www.cnblogs.com/agateriver/archive/2010/05/16/1736626.html&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;field field-name-field-tags field-type-taxonomy-term-reference field-label-above&quot;&gt;&lt;div class=&quot;field-label&quot;&gt;Tags:&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;field-items&quot;&gt;&lt;div class=&quot;field-item even&quot;&gt;&lt;a href=&quot;/taxonomy/term/3&quot; typeof=&quot;skos:Concept&quot; property=&quot;rdfs:label skos:prefLabel&quot; datatype=&quot;&quot;&gt;hacking&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</description>
 <pubDate>Sun, 23 Oct 2011 22:40:00 +0000</pubDate>
 <dc:creator>cjj</dc:creator>
 <guid isPermaLink="false">5 at https://www.ccdw.org</guid>
 <comments>https://www.ccdw.org/node/5#comments</comments>
</item>
<item>
 <title>Indent style for my C++ coding</title>
 <link>https://www.ccdw.org/node/4</link>
 <description>&lt;div class=&quot;field field-name-body field-type-text-with-summary field-label-hidden&quot;&gt;&lt;div class=&quot;field-items&quot;&gt;&lt;div class=&quot;field-item even&quot; property=&quot;content:encoded&quot;&gt;&lt;p&gt;I prefer to indent my code with TABs. Some people do not like that because a TAB can represent different amount of spaces in different editors or viewers. However, I like TABs for their semantic meaning of levels of grouping. How a code editor or viewer displays this grouping information should be left to the liking of its user. And, using two spaces (or four) is just wasting an extra character when we can just set the TAB size to 2 (or 4). I also favor compactness and readability. It&#039;s desirable to make the code visually shorter as long as it remains readable. Overly loose formatting can pose an obstacle to the concentration of thought just like that overly tight formatting can also trap and tangle the flow of thought.&lt;/p&gt;
&lt;p&gt;Following is a list of styling choices that I adopt for my C++ coding.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;One variable per line of declaration.&lt;/li&gt;
&lt;li&gt;Cuddle up &lt;strong&gt;while&lt;/strong&gt; but not &lt;strong&gt;else&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;No line break in the declaration of a function.&lt;/li&gt;
&lt;li&gt;No space between function name and parenthesized argument list.&lt;/li&gt;
&lt;li&gt;Colon &lt;strong&gt;:&lt;/strong&gt; is space-cuddled and each inheritance starts on a newline in a class definition.&lt;/li&gt;
&lt;li&gt;No space before comma &lt;strong&gt;,&lt;/strong&gt; or semicolon &lt;strong&gt;;&lt;/strong&gt;, after left parenthesis &lt;strong&gt;(&lt;/strong&gt;, and before right parenthesis &lt;strong&gt;)&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Comma &lt;strong&gt;,&lt;/strong&gt; and semicolon &lt;strong&gt;;&lt;/strong&gt; in &lt;strong&gt;for&lt;/strong&gt;-statement are spaced after.&lt;/li&gt;
&lt;li&gt;Left brace &lt;strong&gt;{&lt;/strong&gt; stands alone with the same level and on a newline for definitions of classes and functions.&lt;/li&gt;
&lt;li&gt;Left brace &lt;strong&gt;{&lt;/strong&gt; is space-cuddled and followed by a newline in a compound statement.&lt;/li&gt;
&lt;li&gt;Right parenthesis always starts on a newline.&lt;/li&gt;
&lt;li&gt;Colon &lt;strong&gt;:&lt;/strong&gt; is space-cuddled and each base and member constructor starts on a newline in a constructor definition.&lt;/li&gt;
&lt;li&gt;Labels are single-spaced to the left edge.&lt;/li&gt;
&lt;li&gt;Class sectioning (&lt;strong&gt;private:&lt;/strong&gt;, &lt;strong&gt;protected:&lt;/strong&gt;, and &lt;strong&gt;public:&lt;/strong&gt;) is on the same level as the class definition.&lt;/li&gt;
&lt;li&gt;Operators are spaced before and after with operands or parenthesized expressions.&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;field field-name-field-tags field-type-taxonomy-term-reference field-label-above&quot;&gt;&lt;div class=&quot;field-label&quot;&gt;Tags:&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;field-items&quot;&gt;&lt;div class=&quot;field-item even&quot;&gt;&lt;a href=&quot;/taxonomy/term/1&quot; typeof=&quot;skos:Concept&quot; property=&quot;rdfs:label skos:prefLabel&quot; datatype=&quot;&quot;&gt;c++&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</description>
 <pubDate>Sat, 20 Aug 2011 23:42:00 +0000</pubDate>
 <dc:creator>cjj</dc:creator>
 <guid isPermaLink="false">4 at https://www.ccdw.org</guid>
 <comments>https://www.ccdw.org/node/4#comments</comments>
</item>
</channel>
</rss>
