<?xml version="1.0" encoding="UTF-8" ?><rdf:RDF 
  xmlns="http://purl.org/rss/1.0/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xml:lang="ja">
  <channel rdf:about="http://w.atwiki.jp/gen3/">
    <title>プログラミングに関する私的メモ</title>
    <link>http://w.atwiki.jp/gen3/</link>
    <atom:link href="https://w.atwiki.jp/gen3/rss10.xml" rel="self" type="application/rss+xml" />
    <atom:link rel="hub" href="https://pubsubhubbub.appspot.com" />
    <description>プログラミングに関する私的メモ</description>

    <dc:language>ja</dc:language>
    <dc:date>2026-01-27T15:14:57+09:00</dc:date>
    <utime>1769494497</utime>

    <items>
      <rdf:Seq>
                <rdf:li rdf:resource="https://w.atwiki.jp/gen3/pages/36.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/gen3/pages/15.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/gen3/pages/34.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/gen3/pages/35.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/gen3/pages/33.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/gen3/pages/1.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/gen3/pages/2.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/gen3/pages/32.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/gen3/pages/31.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/gen3/pages/30.html" />
              </rdf:Seq>
    </items>
	
		
    
  </channel>
    <item rdf:about="https://w.atwiki.jp/gen3/pages/36.html">
    <title>Googleスプレッドシートによる複式簿記の作成</title>
    <link>https://w.atwiki.jp/gen3/pages/36.html</link>
    <description>
      *バージョン
-最初のバージョンは家計簿として使えるものを目指す
-次のバージョンは個人事業主が青色申告に使える決算書を生成することを目指す
*全体の構成
-科目定義　仕訳科目を定義するシート
-仕訳帳　仕訳を入力するシート
-計算書　仕訳項目について1-12月集計を一覧するシート
-仕訳元帳　仕訳科目をキーにして仕訳を抽出するシート
以上が複式簿記の最低限の機能を持つセットとなる。

-勘定元帳　勘定科目をキーにして仕訳を抽出するシート(未作成)
-決算書1　青色申告の「xx年度分所得税青色申告決算書(一般用)」を表示するシート(未作成)
-決算書2　青色申告の、月別売上金及び仕入金額を表示するシート(未作成)
-貸借対照表(未作成)

*科目定義シートの作成
シートに「科目定義」と名前を付け、最初の2行を以下のようなデザインにする。
2行目までがデザイン、3行目以降はデータとしての仕訳科目である。
&amp;image(20251007X03.jpg)
-A列　仕訳科目
-B列　区分　勘定科目のグループ(収益、費用、資産、負債、資本)の事。それらをまとめていう言葉が見当たらなかったので、ここでは区分という言葉を使うことにした。
-C列　備考　自由なメモ欄
最初の二行を固定表示にすると便利です。メニューから「表示＞固定＞2行」を選択すると最初の2行がスクロールしないように固定されます。
このシートでは、仕訳科目を第3行以下で各自の都合に合わせて定義します。
上記ではとりあえず家計簿で使いそうな仕訳科目の例を記載しています。上記の仕訳科目の例は、以後の使い方の説明の中で使います。
ですが実際には各自自分で使うものを定義してください。

*仕訳帳シートの作成
シートを追加し「仕訳帳」と名前を付け、以下のようなデザインにする。
&amp;image(20251007X01.jpg)
※記帳するときに手入力するセルは、うす緑に着色している。
-A列　取引番号　あらかじめ連番を入れておく
-B列　日付　セルB1に集計開始日を置くことにする。ただし今のところ1月1日にしか対応していない。つまり4月開始のつもりで4/1を入れても12月までしか集計できない。改良すべき点。
-C列　借方仕訳科目　計算書の仕訳項目から選択入力できるようにする。文字入力すれば補完されるように、以下で作っていく。
-D列　金額
-E列　貸方仕訳科目　計算書の仕訳項目から選択入力できるようにする。文字入力すれば補完されるように、以下で作っていく。
-F列　摘要　任意のコメントを記帳する
-G列　クレジットカードの引落月を記帳する列。クレジットカード会社ごとに引落月が違うため自動化できないので手入力するための列。
-H列　中間結果用の列。普段は非表示にしておく列。月で集計をする計算式が簡単になるように、B列の月の値だけを表示する。このとき、セルB1に指定した集計開始基準日より以前の日付の場合は-1と表示するような式にして、前年度からの繰越仕訳を取り扱えるようにする。セルH2に次の式を入れる。(セルH3に式を入れると、仕訳を日付順ソートしたときに式が移動してしまうことがあるので、それを避けるため)
 =ARRAYFORMULA(if(isblank(B2:B),&quot;&quot;,  if(isnumber(B2:B), if(B2:B&lt;$B$1,-1,  month(B2:B)), &quot;月&quot;)))
-I列　中間結果用の列。普段はI列を非表示にしておく。仕訳帳で使われている仕訳科目を抽出する。元帳シートから参照される。セルI2に次の式を入れる。I3に入れないのは、H列と同じくソートによる式の移動を避けるため。
 =UNIQUE({&quot;使用仕訳科目一覧&quot;; $C$3:$C; $E$3:$E})
uniqe関数の範囲を指定する引数について補足すると、{}で囲んで;で列を区切ると、その全体が一つの列として扱われる。

**仕訳科目の入力規則を設定する
以下のように、Googleスプレッドシートの「入力規則」をセルに設定すると、入力の手間が軽減される。

***借方仕訳科目の入力規則の設定
C列の借方仕訳科目の入力値について、科目定義シートで定義されている仕訳科目から選択できるようにする。以下その手順。
-借方の入力セルである、セルC3を選択、その状態で、
-メニューから データ＞データの入力規則 を選択すると、画面右側に データの入力規則 パネルが開く
-「＋ルールを追加」ボタンを押す
-範囲の指定を「&#039;仕訳帳&#039;!C3:C」とする
-条件から「プルダウン(範囲内)」を選択する。そうすると、その下に範囲選択ボックスが現れる。&amp;image(20251019X02.jpg)


-範囲選択ボックス内の 田 マークを押すと、データ範囲の選択 ダイアログボックスが現れる。&amp;image(20251019X01.jpg)
その状態で、
-科目定義シート に切り替え、セルA3から下方向へ仕訳科目を入れてある範囲全部を含むだけセルを選択する。余分に未入力セルを選択しておいてもかまわない。もしくは直接「&#039;科目定義&#039;!$A$3:$A」とタイプしてもかまわない。念のため絶対参照にしておく。
-「OK」ボタンで範囲指定ダイアログを閉じ、値の範囲が指定できた。
-「完了」ボタンで一つの入力規則の定義を終える。定義したルールが左の入力規則パネルから消えたように見えるが、アクティブなシートを 仕訳帳 に切り替えたらまた現れる。開いているシートの入力規則だけが表示されるため。

***貸方仕訳科目の入力規則の設定
貸方の入力セルである E3:E にも、上記と同じ手順で入力規則を設定していく。
-セルE3を選択、その状態で、画面右側の「データの入力規則」パネルの中の、
-「＋ルールを追加」ボタンを押す。
-範囲の指定を「&#039;仕訳帳&#039;!E3:E」とする
-条件から「プルダウン(範囲内)」を選択する。その下の選択範囲ボックスに
-「&#039;科目定義&#039;!$A$3:$A」とタイプする。
-「完了」ボタンを押す。

データの入力規則パネルは右上隅の×を押せば消える。
*計算書シートの作成
新たにシートを追加し、「計算書」と名前を付け、以下のようなデザインにする。
&amp;image(20251011X02.jpg)
-A列　仕訳科目
-B列　区分　収益、費用、資産、負債、資本のいずれかが入る列。
-C列　前年繰入　資産や負債について、前年度からの繰入額。
-D列　年計　1-12月の合計。
-E-P列　1-12月に対応する月毎集計列。行2のEからPまでそれぞれに1から12の数値を入れる。次にその書式を「表示形式＞数字＞カスタム数値形式」で「0&quot;月&quot;」とする。見た目は「n月」であるが、式から参照すると数値「n」となる。

**計算書シートの計算式の設定
セルA3に以下の計算式を入れる。
 ={&#039;科目定義&#039;!$A$3:$B}
これで、仕訳科目と区分について、科目定義からそのまま持ってこれる。

C列は前年度からの繰入額の欄で、仕訳帳から、集計基準日以前の仕訳を集計することで実現する。セルC3 に以下の式を入れる。
 =if(isblank($A3),&quot;&quot;,
    (
      sumifs(&#039;仕訳帳&#039;!$D$3:$D,  &#039;仕訳帳&#039;!$C$3:$C,$A3,  &#039;仕訳帳&#039;!$H$3:$H,-1)
     -sumifs(&#039;仕訳帳&#039;!$D$3:$D,  &#039;仕訳帳&#039;!$E$3:$E,$A3,  &#039;仕訳帳&#039;!$H$3:$H,-1)
    )
    * if( or($B3=&quot;資産&quot;,$B3=&quot;費用&quot;,$B3=&quot;-資本&quot;), 1, -1)
   )

D列の年計の式: セルD3 に以下の式を入れる。
普通は1月-12月の計だけだが、資産と資本と負債に関しては前年度からの繰入(C列)も加算するようにする。
 =if(isblank($A3),&quot;&quot;, sum($E3:$P3)+if(or($B3=&quot;資産&quot;, $B3=&quot;資本&quot;, $B3=&quot;-資本&quot;, $B3=&quot;負債&quot;), $C3,0))

E-P列の各月の集計列の式: セルE3 に以下の式を入れる。
A列の仕訳科目に対応する金額を、行2の月に関して集計する。
 =if(isblank($A3),&quot;&quot;,
    (
      sumifs(&#039;仕訳帳&#039;!$D$3:$D,  &#039;仕訳帳&#039;!$C$3:$C,$A3,  &#039;仕訳帳&#039;!$H$3:$H,E$2)
     -sumifs(&#039;仕訳帳&#039;!$D$3:$D,  &#039;仕訳帳&#039;!$E$3:$E,$A3,  &#039;仕訳帳&#039;!$H$3:$H,E$2)
    )
    * if( or($B3=&quot;資産&quot;,$B3=&quot;費用&quot;,$B3=&quot;-資本&quot;), 1, -1)
   )

月計の式の展開手順: 
-セルE3を一度クリックし、シフトキーを押しながら、セルP3をクリックする。シフトキーを離す。
-Ctrlキーを押しながらRキーを押す。
以上で、うまく参照を整えながら式が右方向へ展開される。

第3行の式の、下行への展開手順: 
-セルC3を一度クリックし、次に、シフトキーを押しながらセルP30(※P列で、科目定義されている行すべてを含むようなセル)をクリックする。シフトキーを離す。
-Ctrlキーを押しながらDキーを押す。
以上で、うまく参照を整えながら、式が下方向へ展開される。

*仕訳元帳シートの作成
元帳とは、仕訳帳から特定の勘定科目の取引だけを抽出して一覧できるシートです。ここでは、勘定科目以外に、さらには摘要欄や引落月や使用月で絞り込めるようなシートを作成します。

新たにシートを追加し、「仕訳元帳」と名前を付け、以下のようなデザインにする。
&amp;image(20251019X03.jpg)
-セルC1,D1,E1は結合する。これは集計したい勘定科目を入れるセルであり、セルC1として参照できる。センタリングしておくとよい。
-セルC1に入力規則を設定する。条件は「プルダウン(範囲内)」で、範囲は「=&#039;仕訳帳&#039;!$I$3:$I」とする。これで、仕訳帳に入力済みの勘定科目を選択可能になる。
-セルA3に次の式を入れる。
 =ifna(
  filter(&#039;仕訳帳&#039;!$A$3:$H, 
         &#039;仕訳帳&#039;!$B$3:$B&lt;&gt;&quot;&quot;,
          (&#039;仕訳帳&#039;!$C$3:$C=$C$1) + (&#039;仕訳帳&#039;!$E$3:$E=$C$1),
          isblank($F$1) + isnumber(search($F$1, &#039;仕訳帳&#039;!$F$3:$F)),
          isblank($G$1) + (&#039;仕訳帳&#039;!$G$3:$G=$G$1),
          isblank($H$1) + (&#039;仕訳帳&#039;!$H$3:$H=$H$1)
        )
 ,&quot;記帳無し&quot;)
-セルA3のfilter関数の条件節について説明すると、+は直接的にはorを意味するが、この書式では+の左側がfalseであれば+の右側を計算するので、一種のif文として働く計算式となっている。例を挙げると、$F$1がブランクであれば$F列の値は何でも構わない(無条件に一致する)が、$F$1に何か指定されていれば、仕訳帳の$F列から$F$1を含んでいる行だけを抽出する式となる。
-セルI1に次の式を入れる。
 =vlookup($C$1, &#039;科目定義&#039;!$A$3:$B,2,false)
-セルI3に次の式を入れる。
 =if(isblank(B3),&quot;&quot;,
                 D3
                 *if($C$1=C3,1,-1)
                 *if(or($I$1=&quot;資産&quot;, $I$1=&quot;費用&quot;, $I$1=&quot;-資本&quot;), 1, -1)
    )
-セルI3の計算式を、その下のセルすべてへ展開する。

**仕訳元帳の使い方
-セルC1はドロップダウンリストになっていて、リストから選んでも、文字列入力してタブキーで補完してもよい。それで指定の勘定科目の取引が一覧される。
-セルF1は普段は空欄で、摘要で絞り込みたいときキーワードとなる文字列を入れる。
-セルG1はクレジットカード引落月で絞り込みたいときにその月を入れる。
-セルH1は取引月で絞り込みたいときにその月を入れる。
-条件に合う取引が無い場合は「記帳無し」と返る。
*複式簿記の原理
**勘定科目のグループ(区分)
勘定科目は、次の五つのグループのいずれかに属する
-資産　正の財産、現金、預金など
-負債　返済や支払い義務のある負の財産、クレジットカード(での買い物)、借金(借入金)など
-資本　ここでは純資産と同義に扱っていて、会社の場合は資産から負債を差し引いたものに相当するが、個人では年初の元入金や年末の繰越金に相当する
-収益　収入の事で、負債とは異なるもの、返さなくていいもの
-費用　支出の事で、負債の返済ではないもの
これらをまとめて呼ぶ言葉があるのか探してみたが、「貸借対照表の勘定科目」(資産・負債・純資産)と「損益計算書の勘定科目」(収益・費用)という感じの呼び方しか見つからない。ここでは資産、負債、資本、収益、費用をまとめて「勘定科目の区分」または単に「区分」と呼ぶことにする。まだ、複式簿記から青色申告のための財務諸表を作るには、もう少し追加の勘定科目があったほうが計算式が簡単になる。
**仕訳帳と勘定科目の区分
勘定科目は、資産、費用、負債、収益、資本の五つの区分に分けることができる。
例えば、現金や預金は資産である。日常の様々な出費はたいていが費用である。クレジットカードでの買い物は、負債を背負って費用に充てている。銀行からクレジットカードの負債が引き落とされたとき、資産から負債を返済したということになる。給料が銀行に振り込まれたら、収益が資産になったということである。

仕訳帳の借方貸方のそれぞれに勘定科目の区分を振り分けた時、その勘定科目の区分の値が増えるのか減るのかという点に注目すると、以下のように表現できる。
 借方 　貸方
 -----　-----
 資産+　資産-
 費用+　費用-
 負債-　負債+
 収益-　収益+
 資本-　資本+
上の表を資産について説明すると、資産に属するある勘定科目が借方にある仕訳の場合、その勘定科目が「+」つまり増加するよう計算するということである。
計算式に直すと
 その勘定科目の総計 = ( (その勘定科目が借方に現れたときの金額の総計) - (その勘定科目が貸方に現れた時の金額の総計) ) * (if その勘定科目が、資産、費用のいずれか then 1 else -1)
となる。この式を基本として、計算書シートや元帳シートの計算式は作られている。

*ちょっとメモ
**仕訳元帳のセルA3の計算式について
 =ifna(
   filter(  &#039;仕訳帳&#039;!$A$3:$H,
            (&#039;仕訳帳&#039;!$B$3:$B&lt;&gt;&quot;&quot;)
            * ( (&#039;仕訳帳&#039;!$C$3:$C=$C$1) + (&#039;仕訳帳&#039;!$E$3:$E=$C$1) )
            * ( isbalnk($F$1) + isnumber(search($F$1, &#039;仕訳帳&#039;!$F$3:$F)) )
            * ( isblank($G$1) + (&#039;仕訳帳&#039;!$G$3:$G = $G$1) )
            * ( isblank($H$1) + (&#039;仕訳帳&#039;!$H$3:$H = $H$1) )
   )
 ,&quot;記帳無し&quot;)
の式を、filterの条件節を分けて(コンマで区切る)、if関数で書き換えてみた次の式は、機能しなかった。
 =ifna(
  filter(&#039;仕訳帳&#039;!$A$3:$H, 
           &#039;仕訳帳&#039;!$B$3:$B&lt;&gt;&quot;&quot;,
            or(&#039;仕訳帳&#039;!$C$3:$C=$C$1, &#039;仕訳帳&#039;!$E$3:$E=$C$1),
            if( isblank($F$1), true, isnumber(search($F$1, &#039;仕訳帳&#039;!$F$3:$F)) ),
            if( isblank($G$1), true, &#039;仕訳帳&#039;!$G$3:$G=$G$1),
            if( isblank($H$1), true, &#039;仕訳帳&#039;!$H$3:$H=$H$1)
          )
 ,&quot;記帳無し&quot;)
理由は、filterの条件節は、各行の真偽を指定してほしいのだが、or関数やif関数の戻り値が配列ではなく単純な真偽値になることがあるため。if(条件,true)としてしまうとtrueは配列ではないので各行の条件ではなくなる。or関数も戻り値は単純なtrue/falseとなり、各行の条件という形では返さない。
次の形なら大丈夫。
 =ifna(
  filter(&#039;仕訳帳&#039;!$A$3:$H, 
           &#039;仕訳帳&#039;!$B$3:$B&lt;&gt;&quot;&quot;,
            (&#039;仕訳帳&#039;!$C$3:$C=$C$1) + (&#039;仕訳帳&#039;!$E$3:$E=$C$1),
            isblank($F$1) + isnumber(search($F$1, &#039;仕訳帳&#039;!$F$3:$F)),
            isblank($G$1) + (&#039;仕訳帳&#039;!$G$3:$G=$G$1),
            isblank($H$1) + (&#039;仕訳帳&#039;!$H$3:$H=$H$1)
          )
 ,&quot;記帳無し&quot;)

ところで
 isblank($G$1)
という式は単純な真偽値のはずであるが、
 isblank($G$1) + (&#039;仕訳帳&#039;!$G$3:$G=$G$1)
と式にすると左辺は配列になるので、おそらく結果がtrueの配列に変換されているのではないかと思って、
 =isblank($G$1) + (&#039;仕訳帳&#039;!$G$3:$G=$G$1)
という式を別のセルに入れて配列展開されているかどうか調べたが、式を入れたセルに0/1が表示されるだけ。配列展開されていてもそれが見えないだけか、他に勘違いがあるのかがわからない。
あと、(TRUE)=1、(FALSE)=0と、真偽値に()をつけると計算されて数値に変わることに気づいた。    </description>
    <dc:date>2026-01-27T15:14:57+09:00</dc:date>
    <utime>1769494497</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/gen3/pages/15.html">
    <title>MinGW</title>
    <link>https://w.atwiki.jp/gen3/pages/15.html</link>
    <description>
      *MinGW/MSYS
[[LMMS]]のコンパイルを試していて気が付いたりわかったりした、MinGW/MSYS環境で一般的なこと。
*MinGW環境の設定
Windowsの環境変数HOMEが設定されていると、msys(sh.exe)起動時にHOMEディレクトリもソコに設定される。以下のファイルが作成される。
-&amp;tt(){.bash_history}
-&amp;tt(){.inputrc}
環境変数HOMEがない場合は、msysのルートに&amp;tt(){/home/(ユーザー名)}ディレクトリ作成されて、上記ファイルが作成される。
* EOF
久々に Windows10 + MinGW でCプログラミングしてEOFではまった。
標準入力からバイト単位読み込んで和を取ってチェックサム計算するつもりで次のようなコードを書いた。
checksum.c
 #include	&lt;stdio.h&gt;
 void main() {
 	unsigned int sum = 0;
 	int c;
 	while ((c = getchar()) != EOF) {	// 0x1Aを読んでも-1(EOF)を返す(Windows10+MinGW)
 		sum += c;
 	}
 	printf(&quot;%8x\n&quot;, sum);
 }
はじめ、十分大きなファイルなら8桁16進数(4バイト)で結果が返るはずと思っていたが、どうも5桁以上にならない、
 cat file1 file1 file1 | checksum
みたいにしてもsum値が変わらない、何でかと思ったら、ファイル途中にある0x1aで処理が終了していた、という話。
なお、Linux上でなら同じソースコードでも0x1aはキャラクタとして処理される。
EOF=0x1aがDOS系のテキストファイルの約束事でCP/Mが起源ということも含めて完全に忘れていた。
でもgetchar()が0x1aをEOFとして扱うかどうかはどこかで制御できそうに思える。#pragmaかな。ググったら以下のようだ。
 #include	&lt;stdio.h&gt;
 #include	&lt;fcntl.h&gt;
 #include	&lt;io.h&gt;
 
 void main() {
 	unsigned int sum = 0;
 	int c;
 	int mode;
 
 	// 標準入力をバイナリモードへ変更(Visual Studio), fcntl.h, io.h
 	mode = _setmode( _fileno( stdin ), _O_BINARY );
 
 	while ((c = getchar()) != EOF) {
 		sum += c;
 	}
 	printf(&quot;%8x\n&quot;, sum);
 
 	// プログラムが終了するので関係ないが、戻しておく。
 	_setmode( _fileno( stdin ), mode );
 }
DOS環境ではファイルオープンの時にバイナリモードで開けば0x1AがEOFではなくなる。逆に、テキストモードではEOF(0x1a)と改行(0x0d,0x0a)が変換されてしまうようだ。

----    </description>
    <dc:date>2017-06-02T15:15:41+09:00</dc:date>
    <utime>1496384141</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/gen3/pages/34.html">
    <title>HD-LANディレクトリ所有者について</title>
    <link>https://w.atwiki.jp/gen3/pages/34.html</link>
    <description>
      * HD-LANディレクトリ所有者について
** きっかけ
　HD-LANを起動してからしばらくすると、telnetやsmbにアクセスできなくなることがあり、ふとルートを見ると以下のようになっていた。
 root@HD-LAN410:~# ls -l /
 total 20
 drwxrwxr-x    2 500      500          1024 May  9 15:32 bin
 drwxrwxr-x    3 500      500          3072 May  9 15:32 dev
 drwxrwxr-x   18 500      500          2048 May  9 15:32 etc
 drwxr-xr-x    2 root     root         1024 Dec 18  2002 home
 drwxr-xr-x    4 500      500          1024 May  9 15:32 lib
 drwxr-xr-x    2 root     root         1024 Feb 20  2002 lost+found
 drwxr-xr-x    5 root     root         4096 Jun 24  2014 mnt
 drwxr-xr-x    3 500      500          1024 Aug  8  2003 mnt2
 dr-xr-xr-x   30 root     root            0 May  9 15:32 proc
 drws------    2 root     root         1024 May  4  2004 root
 drwxrwxr-x    2 500      500          1024 May  9 15:32 sbin
 drwxrwxrwx    2 root     root         1024 May  9 15:33 tmp
 drwxrwxr-x    7 500      500          1024 May  9 15:32 usr
 drwxrwxr-x   12 500      500          1024 May  9 15:32 var
 drwxr-xr-x    7 500      500          1024 May  9 15:32 www
** 原因調査
　オリジナルのVer2.13aに戻したが、500:500は同様であった。
　FlashROMのシステムにごみが残っているのかと思ったが、現状のflashROMは2014年時点で保存してあった/dev/fl1(システム)の内容が一致したので問題ないはず。
　ネットを検索しても、そもそも所有者に関する情報が(root:rootであるかどうかですら)見当たらない。であればこれでいいのか?
** 結論
　結局いろいろあって、LAN端子をはんだ付けしなおし、クロスストレート切り替えスイッチを分解して接点洗浄したら治ったので、telnetやsmbが落ちるのはスイッチの接触不良であろうということに。でもノイズで落ちたりするかな？要するに500:500で構わないらしい。すごく気になるけど。
** その他メモ
　Windows10からは、接続方法/ファイアウォール/互換性の設定をいろいろ試したが、FWUpdate.exeがLinkStationを見つけられないと出るので、アップデートはWindowsMe等古いOSで行わなくてはならない。    </description>
    <dc:date>2017-05-11T09:32:05+09:00</dc:date>
    <utime>1494462725</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/gen3/pages/35.html">
    <title>HD-LAN AVRコマンド</title>
    <link>https://w.atwiki.jp/gen3/pages/35.html</link>
    <description>
      * HD-LAN Ver2.13aのAVRのコマンド
ハードウェア制御を行うAVRマイクロコントローラーへ、次のように同じキャラクタを四回繰り返す形式でコマンドを送信すると、いくつかのハードウェアの制御ができる。
 echo -n &quot;AAAA&quot; &gt; /dev/ttyS1
 echo -ne &quot;\010\010\010\010&quot; &gt; /dev/ttyS1
echoの-e(エスケープシーケンスオプション)では8進3桁でASCIIキャラクタを表すので、&quot;\30&quot;は間違いで&quot;\030&quot;となる。
制御対象は次の通り。
-POWER LED(緑)
-LINK/ACT LED(緑)
-DISK FULL LED(赤)
-DIAG LED(赤)
-背面排熱ファン
-電源

※\010-\077までは下位3bit(8進最下位桁)が無視されるようだ。
|BGCOLOR(#cccccc):キャラクタ|BGCOLOR(#cccccc):CENTER:送信結果|BGCOLOR(#cccccc):CENTER:マニュアル記述|
|\000|電源OFF||
|\001-\007|DIAG消灯||
|\010|DIAGの一回点滅を繰り返す。||
|\020|DIAGの二回点滅を繰り返す。||
|\030|DIAGの三回点滅を繰り返す。|パーティション異常|
|\040(空白)|電源OFF、DIAGの四回点滅を繰り返す。|ファン異常|
|((\050)|電源OFF、DIAGの五回点滅を繰り返す。|FlashROMデータ異常|
|0(\060)|電源OFF、DIAGの六回点滅を繰り返す。|ハードディスク認識異常|
|8(\070)|電源OFF、DIAGの七回点滅を繰り返す。|RAM/LAN/ハードディスクコントローラ異常|
|A(\101)|何も起こらない?||
|C(\103)|この後shutdown -r nowを実行するとリブートする。CCCCを発行しない場合はリブートせず電源も落ちない。コンセントを抜かなければならない。||
|E(\105)|この後shutdown -h nowを実行すると電源OFFする。EEEEを発行しない場合は電源が落ちない。コンセントを抜かなければならない。||
|F(\106)|||
|J(\112)|||
|K(\113)|||
|Q(\121)|(スクリプトには「スリープタイマー用Uart通信リセット」とコメントあり)||
|R(\122)|SSSSのキャンセル。||
|S(\123)|POWER,LINK/ACT, DISK FULL, DIAG が点滅する。||
|T(\124)|||
|U(\125)|||
|V(\126)|WWWWのDISK FULLを消灯||
|W(\127)|DISK FULL点灯、消すのはVVVV||
|X(\130)|YYYYのDISK FULLを消灯||
|Y(\131)|DISK FULL点滅、消すのはXXXX||
-Y(点滅)-&gt;W(点滅のまま)-&gt;X(点灯に切り替わる)-&gt;V(消灯)
-Y(点滅)-&gt;W(点滅のまま)-&gt;V(点滅のまま)-&gt;X(消灯)
-W(点灯)-&gt;Y(点滅)-&gt;X(消灯)
-W(点灯)-&gt;Y(点滅)-&gt;V(点滅のまま)-&gt;X(消灯)
|BGCOLOR(#cccccc):キャラクタ|BGCOLOR(#cccccc):CENTER:送信結果|BGCOLOR(#cccccc):CENTER:マニュアル記述|
|Z(\132)|[[[[のキャンセル。||
|[(\133)|POWER(緑)が点滅を繰り返す。||
|\(\134)|ファンを低速回転||
|](\135)|ファンを高速回転||
|`(\140)|何も起こらない?||
|a(\141)|何も起こらない?||
|b(\142)|何も起こらない?||
|c(\143)|何も起こらない?||
|d(\144)|何も起こらない?||
|f(\146)|何も起こらない||
|g(\147)|何も起こらない||
|h(\150)|||
|i(\151)|何も起こらない||
|j(\152)|||
|k(\153)|何も起こらない||
|l(\154)|||
|m(\155)|何も起こらない||
|n(\156)|||
|o(\157)|何も起こらない||
|p(\160)|||
|q(\161)|||
|r(\162)|||
|s(\163)|||
|t(\164)|||
|u(\165)|||
|v(\166)|||
|w(\167)|||
|x(\170)|||
|y(\171)|||
|z(\172)|||

次のコマンドで使われている場所を調べた。
 grep -r &#039;/dev/ttyS1&#039; /bin /etc /home /lib /root /sbin /usr/ /www
|BGCOLOR(#cccccc):スクリプト|BGCOLOR(#cccccc):CCCC|BGCOLOR(#cccccc):EEEE|BGCOLOR(#cccccc):QQQQ|BGCOLOR(#cccccc):SSSS|BGCOLOR(#cccccc):VVVV|BGCOLOR(#cccccc):WWWW|BGCOLOR(#cccccc):XXXX|BGCOLOR(#cccccc):YYYY|BGCOLOR(#cccccc):\030\030\030\030|
|/sbin/mkfilesystem.sh|||||||〇|〇||
|/usr/sbin/ppc_uartd||||||||||
|/usr/sbin/ap_servd||||||||||
|/www/script/melsub_shutdown2.sh|〇|〇||||||||
|/www/script/melsub_diskcheck.sh|||||〇|〇|||△|
|/www/script/melsub_init.sh|〇|||〇||||||
|/www/script/melsub_shutdown.sh|〇|〇||||||||
|/www/script/melsub_disk_rebuild.sh|〇||||||〇|〇||
|/www/script/melsub_disk_repair.sh|〇|||||||〇||
|/www/script/melsub_flash.sh|〇|||〇||||||
|/www/script/set_hdd_check.sh||||||||〇||
|/www/script/set_hdd_check_finish.sh|〇||||||〇|||
|/www/script/set_hdd_format.sh|〇||||||〇|〇||
|/www/cgi-bin/hdd-repair.cgi|〇|||||||||
|/www/cgi-bin/setup-time-in.cgi|||〇|||||||    </description>
    <dc:date>2017-05-10T13:24:15+09:00</dc:date>
    <utime>1494390255</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/gen3/pages/33.html">
    <title>LinkStation HD-120LAN</title>
    <link>https://w.atwiki.jp/gen3/pages/33.html</link>
    <description>
      * HDDの構成
 root@HD-LAN410:/# busybox fdisk -l
 Disk /dev/hda: 120.0 GB, 120034123776 bytes
 255 heads, 63 sectors/track, 14593 cylinders
 Units = cylinders of 16065 * 512 = 8225280 bytes
   Device Boot      Start         End      Blocks  Id System
 /dev/hda1               1       14545   116824649+ 83 Linux
 /dev/hda2           14545       14577      257040  82 Linux swap
 /dev/hda3           14577       14593      136551+ 83 Linux
hda1　共有フォルダ領域
hda2　swap
hda3　システムイメージ保管領域
hda3は mount -t ext2 /dev/hda3 ... と型指定が必要。

/dev/hda3の中には次の2ファイルがある。
 hdlan_diffimg.tar.gz
 hdlan_version.txt
hdlan_diffimg.tar.gz は / 以下の更新差分をアーカイブしたもので、起動時はまずflash ROMに入っているシステムイメージをメモリ上のファイルシステムに展開し、/etc/init.d/extract_files.shにより上書きして起動を継続するようになっている。
flash ROMに収めるシステム(Max 3MB)は必要最低限にして、上書き変更可能な分はすべて hdlan_diffimg.tar.gz に入れる戦略だと思われる。flash ROMのシステムの入れ換えは、今は扱わない。
今回、hda3 のサイズを十分大きくとり、ここで / 以下を展開していろいろいじって複数の hdlan_diffimg.tar.gz をテストできるようにしてある。
** メモ
+ 電源を入れしばらくすると samba や telnet がアクセスできなくなるので調べたら、/ 以下のいくつかのディレクトリの所有者が 500:500 になってるのを見つけた。調査や経緯については[[HD-LANディレクトリ所有者について]]でまとめる。結論はLAN端子をはんだ付しなおしたら治った。
+ hdlan_version.txt の中を VERSION=2.13g1 にしたが、Webインタフェースでみると、「2.13g1 a」となっており、バージョンに関してまだ別の管理場所がある。    </description>
    <dc:date>2017-05-09T16:59:30+09:00</dc:date>
    <utime>1494316770</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/gen3/pages/1.html">
    <title>トップページ</title>
    <link>https://w.atwiki.jp/gen3/pages/1.html</link>
    <description>
      *プログラミングに関する私的メモ
わりと個人的な外部記憶。
*各ページ目次
**LMMS
#contents(page=LMMS)
**Qt
#contents(page=Qt)
**Git
#contents(page=Git)
**MinGW
#contents(page=MinGW)
**portaudio
#contents(page=portaudio)
**NetBeans
#contents(page=NetBeans)
**KarmaLib
#contents(page=KarmaLib)
**java
#contents(page=java)
**HSQLDB
#contents(page=HSQLDB)
**タブレット(設定)
#contents(page=ワコムタブレット)
**タブレット(プログラミング)
#contents(page=WacomTablet)
**HDL-GS
#contents(page=LANDISK HDL-GS)
**HD-120LAN
#contents(page=LinkStation HD-120LAN)
----    </description>
    <dc:date>2017-05-05T13:37:56+09:00</dc:date>
    <utime>1493959076</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/gen3/pages/2.html">
    <title>メニュー</title>
    <link>https://w.atwiki.jp/gen3/pages/2.html</link>
    <description>
      *メニュー
-[[トップページ]]
-[[LMMS]]
--[[Qt]]
--[[Git]]
--[[MinGW]]
--[[portaudio]]
-[[NetBeans]]
-[[KarmaLib]]
-[[java]]
-[[HSQLDB]]
-[[タブレット(設定)&gt;ワコムタブレット]]
-[[タブレット(プログラミング)&gt;WacomTablet]]
-[[HDL-GS&gt;LANDISK HDL-GS]]
-[[HD-120LAN&gt;LinkStation HD-120LAN]]
----
-基礎編
--MinGW/MSYS
--autoconf
----
-タグ(名前順)
#tag_cloud(sort=word)
----
**更新
#recent(10)
----
#list_write_only()

----    </description>
    <dc:date>2017-05-05T13:30:16+09:00</dc:date>
    <utime>1493958616</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/gen3/pages/32.html">
    <title>LANDISK HDL-GS</title>
    <link>https://w.atwiki.jp/gen3/pages/32.html</link>
    <description>
      * バグ?
　工場出荷時バージョンのファームウェア1.02から最新版1.15へアップデートすると、「デジカメコピー」と「iobb.net」の機能が増える。後者機能の初期値としてUPnP機能がONになっているのだが、ルーターがUPnPに応答しないとHDL-GSの電源ボタンで電源が切れないことがある。
　電源OFFシーケンス中にUPnPでルーターからグローバルIPアドレスを取得しようとするのだが、ルーターのUPnPは切ってあるのでそこで処理が止まるようだ。Webインタフェースが生きている場合はそちらから電源OFFを選べばいい。
* tar2diskのパーティション割当サイズ
　新品のHDDをHDL-GSシステム用にするスクリプトが /boot/.landisk/tar2disk である。これは512バイト/セクタを前提としているので、4096バイト/物理セクタのHDDではいまいちよろしくない。実際、物理セクタ一つの破損で2パーティションが影響を受けた。
　というわけで、改良版tar2disk
 #!/bin/sh
 #
 # tar2disk: tar ball をディスクに展開、指定によりパーティションを切る
 # # 2017-04-26
 # usage: tar2disk sda [reset|reset_full|none   [ignore_smart]] 
 # sda means:
 #	/dev/sda like that.
 #	if it is hdb then it is internal HDD of normal configuration.
 #	Others is external HDD.
 # OPERATION: (option &#039;none&#039; is default)
 #	(none)	smart_check		(if ignore_smart, result ignore)
 #	(none)	partition
 #			mkswap
 #			swapon			(if internal HDD)
 #			trap swapoff	(if internal HDD)
 #	--partition 1
 #			format
 #			tar
 #	(none)	fw_install
 #	(reset)	set_reset_flag
 #	--partition 2
 #			format
 #			tar
 #	--partition 5
 #	(reset)	bk_factory_log
 #			format
 #			tar
 #	(reset)	restore_factory_log
 #	--partition 6
 #	(reset_full)sanitaize
 #			format
 #			tar
 #	END
 #
 # .landisk/ --- このディレクトリの中から実行しなければならず、以下のファイルとディレクトリを含んでいることが必要
 #    tar2disk, sd1.tgz, sd2.tgz, sd5.tgz, sd6.tgz
 #    mnt/ 
 # 
 # BUG:
 #	$SCRIPT_PATH の定義がない。mkfs.xfsとsmartctlがある場所を指していなければならない。
 # 	ただし/sbin/mkfs.xfs, /usr/sbin/smartctl があるなら$SCRIPT_PATHが参照されることはない。
 # 
 # 2017-05-02
 # /mnt/hda5/factory_logを初期化直後に作成するようにした。
 #
 
 
 START_TIME=`date`
 INTERNAL_HDD=&quot;hdb&quot;
 
 EXIT() {
 	local code=$1
 	echo $2
 	echo &quot;STARTED:  $START_TIME&quot;
 	echo &quot;END    :  `date`&quot;
 	echo --- tar2disk end. code=$code
 	exit $code
 }
 
 
 #
 # パーティションを切る
 #
 partition() {
 	echo &quot;--- partition(): Clear MBR for $disk&quot;
 	dd if=/dev/zero of=/dev/$disk bs=512 count=2 || return 1
 
 	echo &quot;--- partition(): pertitioning for HDL-GS&quot;
 	# Windows等に倣い、MBRを含む先頭1MiB(2048セクタ)を空きブロックとしている。
 	# 大容量ディスクは4KiB物理セクタなので、512Byte論理セクタで指定する場合8セクタごとの境界にすることが必要。
 	# 物理セクタサイズが異なる場合は修正必要。
 	# part1 300MiB(614400) tgzイメージとアップデータの保管場所。現状100MiB使用。追加アップデータに備えて+200MiB
 	# part2 600MiB(1228800) システム領域。現状実使用200MiB程度。
 	# part3 128MiB(262144) swap。実メモリ64MiB*2
 	# part4 拡張領域。EPBRが1論理セクタ分確保されてしまうので、次のpart5は+8の位置にすること
 	# part5 250MiB(512000) samba等サーバーアプリケーション領域。現状実使用50MiB程度。
 	# part6 のこり。ユーザーデータ領域。直前にEPBRが1論理セクタ置かれるので、開始位置はpart5+512000+8とする。
 	sfdisk -uS -f /dev/$disk &lt;&lt;EOF || return 3
 2048,614400,L
 616448,1228800,L
 1845248,262144,S
 2107392,,E
 2107400,512000,L
 2619408,,L
 EOF
 	echo &quot;--- partition(): complete&quot;
 	return 0
 }
 
 #
 # format partition
 #
 format() {
 	local i=$1
 	echo &quot;--- format(): formatting $disk$i&quot;
 	
 	if [ $i -eq 1 ]; then
 		if [ $flag_reset -eq 1 ]; then
 			echo &quot;--- SKIP format for $disk$i because of command line parameter.&quot;
 			return 0
 		fi
 		mke2fs -b 4096 -j -m1 /dev/$disk$i || return 1
 	elif [ $i -eq 2 ]; then
 		mke2fs -j -m1 /dev/$disk$i || return 1
 	elif [ $i -eq 5 ]; then
 		mke2fs -j -b 4096 -N 100000 \
 			-O dir_index,filetype,sparse_super /dev/$disk$i || return 1
 	elif [ $i -eq 6 ]; then
 		[ ! -f /sbin/mkfs.xfs ] &amp;&amp; cp -a ${SCRIPT_PATH}/mkfs.xfs /sbin/
 		mkfs.xfs -f /dev/$disk$i || return 1
 	else
 		echo &quot;--- SKIP format for $disk$i because of not nessesary&quot;
 	fi
 	echo &quot;--- format(): complete&quot;
 	return 0
 }
 
 #
 # fw_install
 #
 fw_install() {
 	echo &quot;--- fw_install(): copying .tgz archives, etc..&quot;
 	
 	touch verify_on_boot
 	cp -a ../sd?.tgz ../tar2disk ./.landisk/
 	mkdir ./.landisk/mnt
 	echo &quot;--- fw_install(): complete&quot;
 }
 
 
 #
 # 初期化後updateの為にflag fileをtouchする
 #
 set_reset_flag() {
 	touch ./.landisk/reset_ok
 }
 
 
 #
 # 指定ディスクを 0 クリアする
 #
 sanitize_disk() {
 	local i=$1
 	echo &quot;--- sanitaize_disk(): zero filling $disk$i&quot;
 	dd if=/dev/zero of=/dev/$disk$i bs=4M || return 1
 	echo &quot;sanitize_disk(): complete&quot;
 }
 
 
 #
 # install_logを 作成する
 #
 set_install_log() {
 	echo &quot;--- recording install log&quot;
 	
 	local end_time
 	local j
 	local mac_addr=`/sbin/ifconfig eth0 | sed -n &#039;s/^.*HWaddr \([0-9A-F:]*\)[ ]*$/\1/p&#039;`
 	local log_dir=&quot;$mnt/factory_log&quot;
 	local install_log=&quot;$log_dir/install.log&quot;
 
 	mount /dev/${disk}5 $mnt || return 1
 	if [ ! -d $log_dir ]; then
 		mkdir $log_dir || return 1
 	fi
 	end_time=`date`
 	echo &quot;Mac Address: $mac_addr&quot; &gt; $install_log
 	echo &quot;Install Start: $START_TIME&quot; &gt;&gt; $install_log
 	echo &quot;Install End: $end_time&quot; &gt;&gt; $install_log
 	for j in 1 2 3 4 5 6 7 8 9 10; do
 		sync
 		umount $mnt &amp;&amp; break || sleep 1
 	done
 }
 
 #
 # partition5 にある factorylog を$topdirへ退避
 #
 bk_factory_log() {
 	echo &quot;--- backup factory log&quot;
 	
 	local factory_tgz=$topdir/factory_log.tar.gz
 	if [ ! -f $factory_tgz ]; then
 		mount /dev/${disk}5 $mnt || return 1
 		tar cpzf $factory_tgz -C $mnt factory_log
 		umount $mnt
 	fi
 }
 
 #
 # $topdirにあるfactorylogをカレントディレクトリへ書き戻して、今の作業をログへ追加
 #
 restore_factory_log() {
 	echo &quot;--- restore factory log&quot;
 	
 	local factory_tgz=$topdir/factory_log.tar.gz
 	if [ -f $factory_tgz ]; then
 		tar xpzf $factory_tgz
 		echo `LANG=C date`: reset_script: &gt;&gt; factory_log/powerlog
 		rm -f $factory_tgz
 	fi
 }
 
 
 #
 # smartチェックを行う
 #
 smart_check() {
 	echo --- smart checking
 	
 	local RESULT_SMARTCTL=0
 	local RESULT_SMARTCTL_BIT0=0
 	local RESULT_SMARTCTL_BIT1=0
 	local RESULT_SMARTCTL_BIT2=0
 	local RESULT_SMARTCTL_BIT3=0
 
 	[ ! -f /usr/sbin/smartctl ] &amp;&amp; cp -a ${SCRIPT_PATH}/smartctl /usr/sbin/
 
 	/usr/sbin/smartctl --smart=on --offlineauto=on --saveauto=on /dev/$disk
 	/usr/sbin/smartctl -a /dev/$disk
 	RESULT_SMARTCTL=$?
 	RESULT_SMARTCTL_BIT0=$((${RESULT_SMARTCTL} &amp; 1))
 	RESULT_SMARTCTL_BIT1=$((${RESULT_SMARTCTL} &amp; 2))
 	RESULT_SMARTCTL_BIT2=$((${RESULT_SMARTCTL} &amp; 4))
 	RESULT_SMARTCTL_BIT3=$((${RESULT_SMARTCTL} &amp; 8))
 
 	if [ ${RESULT_SMARTCTL_BIT0} -ne 0 ]; then
 	    echo &quot;*** FAILED TO ENABLE S.M.A.R.T. DISK=${disk} ***&quot;
 	    echo &quot;*** COMMAND LINE PARSE ERROR ***&quot;
 	    return 1
 	fi
 	if [ ${RESULT_SMARTCTL_BIT1} -ne 0 ]; then
 	    echo &quot;*** FAILED TO ENABLE S.M.A.R.T. DISK=${disk} ***&quot;
 	    echo &quot;*** DEVICE OPEN FAILED ***&quot;
 	    return 1
 	fi
 	if [ ${RESULT_SMARTCTL_BIT2} -ne 0 ]; then
 	    echo &quot;*** FAILED TO ENABLE S.M.A.R.T. DISK=${disk} ***&quot;
 	    echo &quot;*** S.M.A.R.T. COMMAND FAILED ***&quot;
 	    return 1
 	fi
 	if [ ${RESULT_SMARTCTL_BIT3} -ne 0 ]; then
 	    echo &quot;*** S.M.A.R.T ERROR DETECTED DISK=${disk} ***&quot;
 	    echo &quot;*** STATUS: DISK FAILING ***&quot;
 	    return 1
 	fi
 	echo &quot;--- S.M.A.R.T check complete&quot;
 	return 0
 }
 
 
 #
 # メイン
 #
 disk=$1
 mode=$2
 ignoresmart=$3
 topdir=`pwd`
 mnt=./mnt
 PATH=$PATH:/sbin
 
 if [ &quot;x$disk&quot; = &quot;x&quot; ]; then
 	echo &quot;usage: tar2disk sda [reset|reset_full|none   [ignore_smart]] 1&gt;&amp;2&quot;
 	exit -1
 fi
 
 if [ &quot;x$mode&quot; = &quot;xreset&quot; ]; then
 	flag_install=0
 	flag_reset=1
 	flag_reset_full=0
 elif [ &quot;x$mode&quot; = &quot;xreset_full&quot; ]; then
 	flag_install=0
 	flag_reset=1
 	flag_reset_full=1
 else
 	flag_install=1
 	flag_reset=0
 	flag_reset_full=0
 fi
 
 
 for i in 1 2 5 6; do
 	umount /dev/${disk}$i
 done
 
 if [ $flag_install -eq 1 ]; then
 	smart_check
 	if [ $? -ne 0 ] &amp;&amp; [ &quot;x$ignoresmart&quot; != &quot;xignore_smart&quot; ]; then
 		EXIT 1 &quot;SMART CHECK FAILED.&quot;
 	else
 		echo &quot;--- SMART RESULT IGNORED.&quot;
 	fi
 	partition
 fi
 
 mkswap /dev/${disk}3
 if [ $disk = $INTERNAL_HDD ]; then
 	swapon /dev/${disk}3
 	trap &quot;swapoff /dev/${disk}3&quot; 0
 fi
 
 for i in 1 2 5 6; do
 	cd $topdir
     
 	[ $i -eq 6 -a $flag_reset_full -eq 1 ]	&amp;&amp; sanitize_disk $i
 	[ $i -eq 5 -a $flag_reset -eq 1 ]	&amp;&amp; bk_factory_log
 	format $i || EXIT 1 &quot;FORMAT $disk$i FAILED.&quot;
 	mount /dev/${disk}$i $mnt || EXIT 1 &quot;MOUNT $disk$i FAILED.&quot;
 
 	cd $mnt || EXIT 1 &quot;CD $mnt FAILED.&quot;
 	echo --- extract tar to $disk$i
 	tar zxf ../sd$i.tgz || EXIT 1
 	# 2017-05-02 bug fix for factory_log
 	[ $i -eq 5 -a ! -d $mnt/factory_log ] 	&amp;&amp; mkdir $mnt/factory_log
 	[ $i -eq 1 -a $flag_install -eq 1 ] 	&amp;&amp; fw_install
 	[ $i -eq 1 -a $flag_reset -eq 1 ]	&amp;&amp; set_reset_flag
 	[ $i -eq 5 -a $flag_reset -eq 1 ]	&amp;&amp; restore_factory_log
 	cd $topdir || EXIT 1 &quot;cd $topdir FAILED.&quot;
     
 	echo --- unmounting
 	for j in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20; do
 		sync
 		umount $mnt &amp;&amp; break || sleep 1
 	done
 	[ &quot;$?&quot; -ne 0 ] &amp;&amp; EXIT 1 &quot;umount any FAILED.&quot;
 done
 
 [ $flag_install -eq 1 ] &amp;&amp; set_install_log
 
 EXIT 0 &quot;OK.&quot;
　sfdisk -uM を使ってMiB単位での指定がうまく機能すればいいのだが、EPBRのために1MiBの隙間を空けて次のパーティションの開始位置を指定するとsfdiskが「俺はこんな割当気に入らないね！」といって拒否られる。結局、-uS -fでパーティション開始位置を8の倍数セクタに強制することにした。
　あと、/mnt/hda5/factory_logディレクトリがないというバグもここで解決した。

　使い方は、HDL-GSのUSBポートに新品HDDを接続して(/dev/sdaになる)、telnetでHDL-GSの/boot/.landiskに入り、
 ./tar2disk sda none ignore_smart
とする。USB経由のHDDではSMART情報が採れないことがほとんどなのでignore_smartオプションでこれを無視するようにした。    </description>
    <dc:date>2017-05-03T01:31:13+09:00</dc:date>
    <utime>1493742673</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/gen3/pages/31.html">
    <title>メモ</title>
    <link>https://w.atwiki.jp/gen3/pages/31.html</link>
    <description>
      PuppyLinux4.3.1JPに付属のGParted0.4.8で、lubuntu14.04をインストールしたext4のパーティションチェックをすると、last mounted timeを+9時間した値(おそらくJSTで書き込まれた値をGMTとみなしてしまい、ユーザー環境のJSTで表記しようと+9してしまうと思われる)を検出して現在のコンピュータのJSTの値をGMTとしてlast mounted timeを修正してしまう。

lubuntuがJSTで書き込むのが悪い気がするのだが、どこで設定するのか。
本当にlubuntuがJSTで書き込んでいるのだろうか。

----    </description>
    <dc:date>2014-08-04T10:12:54+09:00</dc:date>
    <utime>1407114774</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/gen3/pages/30.html">
    <title>PuppyLinux431JP2012</title>
    <link>https://w.atwiki.jp/gen3/pages/30.html</link>
    <description>
      **PuppyLinux431JP2012をPanasonic CF-M1Vへインストール

PuppyLinuxは別マシンでCDを作成した。
CF-M1Vはヤフオクで中古購入したもの。メモリを256MBモジュールを積んでそのうち128MBが認識され結局192MBの状態。

CDから起動してインストーラーを使ってインストールするとFrugalでは上手く行かないようだ。
CDから必要なファイルをコピーしてgrub4dosでブートローダーを書き込むという手順を踏むように注意書きされている。
実際には、インストーラーでインストールした後でも、個人設定ファイルを使わないモードで立ち上げて一度個人設定ファイルを削除してから、再度画面設定などやり直してやれば良いようだ。
つまりインストーラーで上手くいってない部分は個人設定ファイル上にあるので、これを綺麗さっぱり作りなおせば良いということ。

***CF-M1V特有の設定
タッチパッドの設定は「FlSynclient Configure your Touchpad」では「Alps touchpad found. But you need to restart X-server to control it from synclient」(Xサーバーをリスタートしないと設定変えられないよ)と表示されるがいくらXをリスタートしても同じメッセージが繰り返され設定できない。
/etc/X11/xorg.conf を直接書き換える。
 Section &quot;InputDevice&quot;
     Identifier &quot;Synaptics Mouse&quot;
     ...
     Option &quot;BottomEdge&quot; &quot;630&quot; # original &quot;650&quot;, 下側に横スクロール領域を確保するため減らした
     ...
     Option &quot;HorizScrollDelta&quot; &quot;20&quot; # 水平スクロール領域を追加

サウンドの設定は、「ALSA サウンドウィザード」を使うと他のハードの設定まで壊れてしまい(イーサネットが使えなくなる)上手くないので、/etc/modprobe.confの最後に次の一行を手動で追加。
 options snd-nm256 force_ac97=1

サウンドが鳴るか確認するには
 # aplay /usr/share/audio/2barks.wav
で「わんわん」鳴けば良い。

起動メニューのmenu.lstに、次のようにacpi=forceを追加すると終了時にちゃんと電源が切れるが、BIOSのバージョンによるらしい。自分のは2.00-L12でWindows2000の電源管理の設定が追加されたBIOSである。
     kernel /puppy/vmlinuz  psubdir=puppy pmedia=atahd pfix=fsck acpi=force

今回、12GBのHDDの回転音がうるさかったので、200倍速の4GB CFカードに換装した。体感的にはHDDより少し遅くなり発熱が気持ち増えた感じではあるが、全く無音になったので大変快適に使用できるようになった。それに伴い上記の設定をやり直したのであるが、いろいろ忘れていて苦労したのでメモに残すことにした。

**WACOMタブレット導入
追加のドライバパッケージSFSをインストール。
初期型FAVO(ET-0405-U)を接続。
petをインストール
端末を起動してコマンド
 depmod
 modprobe wacom
これによりwacomのカーネルモジュールを探してきてロードします。この時点でタブレットは一応動作するが、相対座標と絶対座標の中間見たいな動作で勝手が悪い。
 /etc/X11/xorg.conf
を編集してタブレットの設定を追加すると使えるようになる。

**Seamonkey1.xでJavaを使えるようにする。
以前は、puppyのバージョンや個人情報保存ファイルのファイル形式によってJavaのSFSは分かれていたようであるが、現在(2014-06-20)では一本化されているようである。ありがとうございます。
プラグインは/usr以下ではなく、~/.mozilla/plugins/ へシンボリックリンクを作成すること。
プラグインの所有者権限の関係だそうで、これでないと一見モジュールがロードされている様なのに動作しないという感じにハマる。またライブラリをコピーしてしまうとブラウザがクラッシュする場合があるらしいので、必ずシンボリックリンクを作成する方法でインストールすること。
Seamonkeyの編集-設定-詳細に[[java]]を有効にするスイッチがあるが、「詳細の下位項目」ではなく「詳細」そのものであるので注意。これもハマった。

書いてしまえば大したことではないがここまでこぎつけるのに3日かかった。

----    </description>
    <dc:date>2014-06-22T16:19:31+09:00</dc:date>
    <utime>1403421571</utime>
  </item>
  </rdf:RDF>
