自転車がパンクーー修理1

昨日,夜の散歩の帰宅途中で,自転車のペダルが急に重くなりました。「あれ」と思いましたが,タイヤを見
てみるとパンクでした。押しながら家に戻り,急遽,パンクの修理をしました。
このまま大丈夫かなと思い,翌日も自転車に乗れましたがが,帰ってきて,タイヤを見ると,見事,裂け目が
ありました。多分,煉瓦状の石畳で,がたがたいっているところでのパンクでしたので,がたがたした煉瓦で
挟まれてさけたのかなと推測します。

急遽,〇zonにて,安いタイヤを注文しました。チューブ込みで,3,000円強でした。

明日には届くのので,DIYでタイヤ交換です。この自転車は何年構えに購入しましたが,ちょっと前に,ペ
ダルがだめになり交換しました。そう時期なのでしょうか。
タイヤをよくよく見ると,かなりひびが入っていて劣化しているので,二本セットでの購入でした。

チャタリング防止

PICやarduinoで,タクトスイッチ等の安物を使うと,話題に上るのがチャタリングです。チャタリングのこと
を考えないと思った動作をしなくなります。
通常は,シュミットトリガー回路に代表されるハードを使って取り除く方法や,ソフトで取り除くこと等が必
要のようです。ソフトでは,間をあけて何回か測定して判別する方法等があるようですが,あるHPで,ビット
シフトを使った方法がでていました。

#define MAXPIN 13

int checkbutton(int i){
   static byte val[MAXPIN];
   static byte state[MAXPIN];

   if(digitalRead(PIN[i]) == 1){
      val[i] = val[i]<<1;
      val[i] += digitalRead(PIN[i]);
   }else{
      val[i] = 0;
   }

   if(val[i] == B01111111){
      state[i] = 1 - state[i];
   }

   return state[i];
}

やはり,先達はすごい。い くつか変数を用意しておいて,古いデータと比べるということは考えつきますが,
ビットシフトを使うとは,すごいなと思いました。ただ,このプログラム,IDEでコンパイルすると

 B01111111→→0b01111111

と怒られます。ちょっとした勘違いなんでしょうね。「弘法も筆の誤り」ですね。

追記
 あと,シフトビットのいいところは,オーバーフローを気にしなくていいことでしょうか。シフトで
はみでた部分は,破棄されるようですので。ここを,int等の変数で足し算すると,オーバーフローの処置をいれないとPGが暴走しますので。

併せて,変数のスコープ等について,調べていたら,大きな勘違いをしていることに気がつきました。IDE
では,Loopの中にmainのプログラムを書きますが,一回だけ実施したい処理を次のように書きました。


loop(){
   int flag;
   if(flag==0){
      syori;//動作させたい処理
      flag=1;
   }
}

みたいな記述をしていましたが,思った動作はしませんでした。それもそのはず,loopの中で,
最後の「 }」の前で,変数が初期化されてしまうとのこと。これでは,思った動作をしませんね。
保持するには,

  int flag;→→static int flag;

のように,静的変数の宣言をしないとだめということが分かりました。これ,IDEの癖みたいなものでしょう
か。知らないとこまりますね。今まで,loopのなかの冒頭で,変数の宣言をしていましたが,これ,何回も
宣言することになって,なんだろうと,疑問にも思っていたところなので,この疑問も解決ですね。

インターネット接続不具合

新しいルーターに変更してから,インターネット回線が時々切れたりする症状がではじめました。原因が分か
らずしらみつぶしにしらべました。
最初,前に買い換えたルーターが原因かと思いましたが,取り替える前のルーターと変えても,症状がかわり
ませんでした。念のために,LANケーブルテスターで,ケーブル関係を調べてみましたが,異常なし。

ということで,NTTドコモの修理に連絡をして,あれこれ確認をさせられました。結果,ONUのLANコネク
ターのところに付くはずのLEDの点滅がしていなくて,どうやら,ケーブル関係とやっと原因が分かりまし
た。

我が家は,

  ONU(ルーター)→→光コンセット(納戸)→→LANケーブル→→LANコンセット(居間)→→ルーター

と接続してあります。LANケーブルは,屋根裏を通してあります。屋根裏のLANケーブルの断線が一番やっか
いだと思ったのですが,我が家にネズミはいないので,あとは,コンセットのLANケーブルの接続かなと思い
ましたが,今問題なく使えてたので,それは考えにくかったのです。まだ,原因は特定できてないのですが,
多分LANケーブルのコネクター,の結線か,ONUのLANコネクターの接触不良,あたりが原因と推測されます。

ONUを見てもらおうかとも思ったのですが,修理にだいしている間,ネットに接続できなくなるので,様子を
見ることに。いままで,ONUの一番上のポートに接続していましたが,接続場所を3番目にすると,無事,
LAN接続のLEDも点滅するようになりました。

無事,ネットにつながりました。不安はありますが。このまま様子を見たいと思います。

エクセル VBA 画像の貼り付け

ネットで,いろいろあさっていると,VBAで,エクセルに写真を貼り付けるものがめにはいりました。

のようにセルに画像を貼り付けるVBAです。
C列にある名前をもとに,ホルダーに「名前.jpg」のファイルを検索して,A列に貼り付けるものです。
世の中には,本当にすごい方がいるもんだとつくづく思います。

Sub temp()
Dim c As Range, i As Long, img As String

'画像フォルダーのパス
Const imgFolderPath = "C:\Users\mabo-2021\Desktop\ブログー移行\tesut\"

For i = 2 To Cells(Rows.Count, 3).End(xlUp).Row
    Set c = Cells(i, 1)
    img = imgFolderPath & c.Offset(, 2).Text & ".jpg"
    
    MsgBox img
    MsgBox Dir(img)

    If Dir(img) <> "" Then
        With ActiveSheet.Shapes.AddPicture(img, msoFalse, msoTrue, c.Left, c.Top, -1, -1) '//-1→元のサイズ
        'expression. AddPicture(Filename ,LinkToFile,SaveWithDocument,Left,Top,Width,Height)
            .LockAspectRatio = True
            .Placement = xlMove
            .Height = c.Height
            If .Width > c.Width Then
                .Width = c.Width
                .Top = c.Top + (c.Height - .Height) / 2
            End If
        End With
    Else
        c.Value = "No Image"
    End If
Next i
End Sub

柿の接ぎ木

我が家には,家内のおじいさんが植えてくれた柿の木がありました。毎年,甘い実をつけて,おいしく食べて
いましたが,2018年に葉っぱの色が悪くり,かれてしまいました。

枯れた木をそのままにしておきましたが,台木から,ひこばえの芽がでて,葉っぱをつけるようになりまし
た。
台木は,多分渋柿なので,実が付いても食べられないので,接ぎ木をしててみることにしました。
実家の甘柿の枝ををとってきました。

ひこばえの枝を切りました。

切れ目をいれ,実家からとってきたえだを差し込みました。

周りをラップとガムテープで養生しました。

うまくいくのかどうか,わかりませんが,楽しみにまちます。

焼きそばmabo (mabo流柔らか野菜焼きそば)

このところ,お昼に焼きそばを私が作って,夫婦で食べています。近所にあるスーパーにある3食で100円
ちょっとの焼きそばを使って激安のお昼です。

材料(年寄り二人分)
 焼きそば・・・・・3食で(100円強)
 もやし・・・・・・250g(30円強)
 カットキャベツ・・・100g(100円弱)
 シャウエッセン・・・3本(?円)
 卵・・・・・・・・・1個(?円)
 昆布ツユ・・・・・・50cc(?円)

材料費は,二人分で,300円程度かと思います。量的には年寄りにはちょうどいいくらいですが,私には
ちょっと足りないので,チンのご飯を150g程度一緒に食べてます。

作り方

市販のカットキャベツですが,そのままでは,大きいので最初は包丁で小さくカットしてましたが,最近は,
フライパンに空けてしまって,手でちぎって適当な大きさにそろえています。

キャベツの上に,もやし200gいれます。

水100ccをいれ,ふたをして蒸します。炒めないで蒸すのは,柔らかい野菜が好みだからです。

蒸している間に,シャウエッセンを細かくきり,焼きそばは,絡みやすくするのに,袋のまま4つに切って
おきます。

水滴がフライパンのふたについてきますので,適宜揺すって,蒸します。麺の入れ時が難しいのですが,
フライパンから,水が蒸発する泡がなくなってきたころが頃合いです。早くいれると,麺が,水っぽくな
ります。

泡がほとんど出なく鳴る頃合いで,麺をいれます。

ふたをして,麺がだいたいほぐれるまで,揺すりながら,蒸します。麺がほぐれたら,中華どんぶりに移して
ふたをしておきます。次の作業をしている間に,麺は,余熱でちょうど良く蒸されます。

麺を移したフライパンに油をしき,シャウエッセンを痛めます。

途中で卵を入れ,炒めます。

炒り卵ぐらいになったら,中華どんぶりで余熱で蒸していた麺と野菜を戻します。

水分を飛ばすようによくかき回しながら,炒めます。途中,昆布つゆを入れます。

よく混ぜながら,焼きそば備え付けの粉ソースをいれて,さらに炒めます。

しばらくいためたら,器に盛りつけます。

以上でできあがりですが,蒸すことで,野菜が柔らかくなりますが,食感がのこった方が好みの場合は,蒸さないでいためてもいいかもですね。

エクセル(関数 文字列の分割 空白区切り)

手伝いでやっている仕事関連で,エクセルをいじっています。疑問点があったので,「教えてGoo」の記事を
みていました。
すると,空白区切りの文字列を分割するには,どうすればいいのか,という,投稿
がありました。

写真のように,一つのセルに入っているデータを空白を区切りに,セルごとに分割したいとのことでした。
VBAを使って,

  〇空白の数を数える。
  〇空白が先頭から何番目にあるか調べる。
  〇先頭から,最初の空白の前までの文字を切り出す。
  〇2番目と3番目の空白の間にある文字を切り出す。
  〇3番目を4番目の空白の間にある文字を切り出す。
  〇4番目と5番目の空白の間にある文字を切り出す。
  〇5番目の空白以降の文字をきりだす。

というようなことをやればできそうに思えましたが,なんと,この作業を1行の関数でおこなってる諸兄がい
ました。

  =TRIM(MID(SUBSTITUTE($B2, ” “, REPT(” “,LEN($B2))),(COLUMN(A1)-1)*LEN($B2)+1, LEN($B2)))

この1行の関数をC2のセルにいれて,Hのセルまでドラグしてコピーすると分割ができてしまうのです。

何をやっているのか,関数をしげしげと並べて,自分なりに解釈してみました。

 REPT(“ ”,LEN($B2))

で,元々文字列分の空白を作ります。
その後,一文字の空白と,文字列長分の空白を入れ替えます。

SUBSTITUTE($B2, ” “, REPT(” “,LEN($B2)))

この入れ替えた,文字列の先頭から,文字をきりだします。

MID(SUBSTITUTE($B2, ” “, REPT(” “,LEN($B2))),(COLUMN(A1)-1)*LEN($B2)+1, LEN($B2))

切り出す際に,

(COLUMN(A1)-1)*LEN($B2)+1

で,どこから切り出すかを決めています。うまい具合に,COLUMN(A1)のA1の部分は,コピーするたびに,

A1→B2→C2→D3→E5

のように,エクセルの方で,相対的に移動してくれます。結果,切り出し開始位置が,文字長分だけずれてくれます。
結果

COLUMN(A1)→1
COLUMN(B1)→2
COLUMN(C1)→3
COLUMN(D1)→4

のようにCOLUMNの値が増えていきますので,切り出し開始位置が文字長だけずれていきますので,一番目,2番目
と切り出すことができるようです。

最後に

TRIM( )

で,余分な空白を削除すれば,完成です。

写真は,空白を「*」に置き換えて表示しています。

しかし,頭の良い方は,考え方がちがうのですね。余分な空白をいれて,一気に切り出して,余分なものを取
り除くことで目的をはたしているのですごいと思いました。