自分のブログ名

sheephumanのブログ

ひつじ好きな人間のブログ。

やる気が出ない タバコ関連のtweet

今週のお題「やる気が出ない」

 

毎度の事ですが、部屋の掃除も新しいアプリ開発もさっぱりやる気出ません。

身体が重い。グルタミン酸を飲み始めたんですが、効果あるといいな。味はほとんどないのでビーレジェンドプロテインに混ぜてます。

 

 

 

 

 

あまり意味のない記事は好まないのですが(誰も読まないと思ってる)、リハビリにBlog記事を更新するのもいいかもしれません。

 

 

Twitterのフォロワー数は892です。目標は1000。まあ仮に2~3000集めたとしても高が知れてるでしょう。こんな経歴しかないので。実際、ウジみたいなのが質問箱に湧いたりする。

 

 

けっこう新しいブツも揃えたので、どうにか記事化・動画化を進めたいと考えています。

 

ゴミ拾い活動も飽きたし疲れるし収入がないので土日縛りにしようと考えています。

この活動を始めてから、如何に人々が自然環境に対し無頓着であるかよくわかります。

感染拡大で箍が外れて来てますし、公害とかで深刻化しない限りは大きな動きになる事はないでしょう。環境より経済って感じだよね、今。

 

Twitterがバズるとかあまり関係ないです。ゴシップと変わらんので。

 

 

タバコ捨てるカスが多すぎる。特にジジイ。

ドラマとかアニメとか、タバコを捨てるシーンって意外とあるじゃないですか。それが原風景になってると、なかなか辞めないんですよね。基本的にそういう輩たちというのは正当化しかしないので、言い争いなどは時間の無駄ですね。

 

 

 

日本人の原風景(次元大介

 

 

 

 

これまでの🚬

 

 

 

 

 

 

 

 

 

再見。

 

インスタント家計簿 1.3.0 公開

 

 

実はバグだらけなせいもあって誰も使ってないと思う家計簿アプリの公開。

時代遅れなWinForm製。言語はC#

 

 

 

f:id:sheephuman:20210510180702p:plain

 

 

縦モード。

f:id:sheephuman:20210519205103p:plain

 

 

簡単な使い方

 テキストボックスに数字を入れてエンターキーを押す。ただそれだけ。

グラフは連動して更新される仕掛けです。データバインドではないゴリゴリ実装。

 

 

ダウンロード 

www.vector.co.jp

 ソースファイル同梱なのでビルド出来ます。.resxが自動生成されるとビルドに失敗するので削除してください。一つでもあるとダメです。

各フォームをWクリックすると自動生成されてしまいます。

 

Google Drive

Instant Expense 1.3.0.zip

drive.google.com

 

 

主な更新内容(多すぎて半分忘れた)

・一部をDDD(ドメイン駆動設計)っぽくしてみた 

 ┗めんどくさいけどもう少し進めたいかな。現状はDDDっぽい何かです。自分でも意味分からん事を何となくやってる感。

 

・保存時のパス名を統一。保存時のバグはほぼ無くなりました。

 

・ついでに自動バックアップ機能を実装。INI(設定ファイル)もようやく実装しました。

 ┗読み込み中のファイルを指定フォルダパスに一定時間ごとに保存します。デフォルトは1分毎。多分問題ないと思う。

 ┗次辺りで設定を全部INIに置き換えるかも知れない

 ┗3-5分毎ぐらいが適切かと思います。

 

・一部変数名の見直し

 

・終了時のダイアログにキャンセルボタンを実装。

┗ちょっとだけ特徴的な実装になってます。Newしてるだけなんだけど。

f:id:sheephuman:20210510182232p:plain

 

・項目名に色を付けてみた

 ┗ちょっとお気に入りの実装になりました

 ┗項目の色はグラフ色と共通です。

 

・Setting(設定ダイアログ)の実装。

f:id:sheephuman:20210510181914p:plain

 

・ファイル保存時にデバッグ用にメッセージが出る仕様になってますが、省けるようにしました。不安な人はチェックを入れといてね@-ᴥ-@

 

・リストボックス(項目名選択)に「新規項目」を追加。編集がしやすくなりました。

 

・入力用のコンボボックスの履歴削除コードを改善。小細工してより洗練された挙動にしました。かなり面倒でしたが。

 ┗Deleteキーで各履歴を削除できます。見かけだけは何とかブラウザ並み。

 

 

 

あとがき

まだまだ多少の粗はありますが、追々手直しを進めていきます。操作が分かりにくいと思うんで、ヘルプファイルにGIF埋め込んどこうと思う。

 

慣れてはいますが割と時間掛かってるので。

なんかアイデアとか、ここが糞だとか思うとこがあったら教えてください。っていうかLine家計簿でも使ってください。

 

次回で収入とかも入れられるようにするかも。

 

そのうちWPFに手を出します。気が向いたら。

ここ3カ月間のゴミ拾い活動の記録

 

 無職で将来に希望の持てない人間はゴミ拾いでもやりたくなるものなのかもしれません。僕は専ら、河川や公園の周囲を重点的に掃除するボランティア活動をしています。

 

.....独りで勝手にやっていると何かとめんどうくさいので、ボランティア団体に登録しようといろいろ探しているところです。

 

 

今回はTwitter上で出してる記録をまとめてみます。

 

 

 

 

ポーズを取る完全羊型AIロボット。

f:id:sheephuman:20210509220853p:plain

 

 

 

通算20回に渡るゴミ拾いツーリングの記録(抜粋)

 

 

 

 

 

 

このころから既に地雷臭。完全に虚無ってます@-ᴥ-@。

 

 

 

記録上の初回。

 

 

 

 

 

 

 

 

 

 

 

 

 ↑自棄になっている。

 

 

 

↑既に参っている。

 

 

 

 

もう終わりにしたい......

 

 

 

 

↑ちょっと気分を変えてみる

 

 

 

↑絶望的

 

 

 

 

↑まさに悪夢だった。

 

 

 

↑もう勘弁してくれ。

 

 

 

↑いつもの嫌味。

 

 

 

↑視点を変えてみた

 

 

 

 

 

 

 

↑VHSがある辺り、多分40代後半、もしくはジジイ。

 

 

 

↑そろそろ辞めようかと考え出してる

 

 

↑ それでも気になる。無職でヒマだし。

 

 

 

牧羊犬とひつじ 

 

 

 

常連客との会話

 僕「ちわっす✊」

 釣り客「ボランティアですか」

 僕「そーです(-ω-)/」

 客「大変ですね」 

 僕「そーですね。バイクが沈んでたんですが」

 客「向こうの方、バイクが沈んでますよ。5台ぐらい。」

 僕「ご,5台も・・・・(茫然)」

 客「何か知らないけどすててくんですね。バイク乗りが年一回ぐらい掃除していく」

 僕「年一回でもやらないよりはいいですよね!(乾いた笑顔)」

 客「Ahahahaha」

 

ときどきこんな会話をすることもあります。

 

 

 

あとがき

考えた末、土日限定で活動することにした。どうにも気になってしまうんですよね。忘れてしまえばいいんですが。ちなみにマナーとかは割とどうでもいい感じです。

 

いつも執拗に言ってる”All Wemen are sheeps”はそろそろ棄てた方がいいかも。 棄てられたらだけど。

 

 

Honda Dunk 50cc 原付にYupiteruカーナビ YPB740を取り付けてみた件

 

 

ご無沙汰しております。勝海舟です。

そろそろ溜まってきたネタをどうにか消化しようと考えております。ついでに少しはカネになるといいななどと。

 

 

 

 

ユピテルYupiteru)のカーナビ YPB740を取り付けました。

 

 

Twitterではよく注目を惹いてくれました。あまり見てくれは良くない。

 

強力両面 テープはダイソーで扱っているもので十分でした。屋外用やプラスチック、金属の接着をサポートしているものが良いかと。雨に濡れると色々ダメなんじゃないかな・・・防水処理は目途が立ったら追記します。防水テープかなんか使うか。

 YPB740も屋外仕様ではありませんので、雨に濡れると壊れるかも知れません。

 

 

こいつ、意外と性能いいです。特に距離計が重宝している。中古でいくつか出回ってるので、ねらい目なんじゃないかな。

 

 

 

 

 

 相場

相場は大体4500~6000といったところです。

例によってメルカリで購入。流石に新品未開封はあってもオススメしませんが。新品で話題の品を紹介する方がまだカネになる気がします....

 

 

↓以下で購入

https://www.mercari.com/jp/items/m93131360217/

 

 

中古で買うと、吸盤が弱っていたりします。最初はクルマに着けてたんですが、すぐに取れてしまいました。

 

 

 

 

 

バッテリーもヘタってるので、シガーソケットじゃないと電源すら入りません。届いても電源が点かなかったんで、これは掴まされたかなと焦った(;'∀') 

 

ワンセグなど使ったことないですね。埼玉だと映りもしないんで。率直に言ってなんでワンセグを未だに推すのか分からん。ゴミ。

 

 

 

GPSデータ更新を行う方法

 

 

 

 これは上記のごとく、オービスデータ速度違反取り締まりデータの更新を行うというもので、PC上での手動操作となりますが、非常にカンタンにアップデートが行えます。なんとこの2014年生のYPB740もサポート対象となっておりましたので、試しに購入。

 

 

 

僕は原付が好きなんだけど、今のところ50ccしか持ってないんで意味があるのかは不明。警察の取り締まりスケジュールの方が頼りになります(敵の情報だけど!)。

 

ですが、安価な価格で35日間の更新をサポートする訳で、とりあえず敵に備える事は出来ます。その場所に行くと、身が引き締まる心地がします。

 

 

f:id:sheephuman:20210427181722p:plain

 

 

本日(2021/4/27)も更新されており、関東圏が大量に更新されておりました。

 

f:id:sheephuman:20210427181759p:plain

 

関東圏以外があまりカバーされていないようで、どこまで有効なのかは疑問も感じます。当然ですが100%を保証するものでもないでしょう。どこまでサービス継続するかも不透明で、古い機種から順次打ち切りになると思われます。

 

 

如何わしいスマホアプリにもオービスのデータ無料を謳っているものが多くありますが、それよりは信ぴょう性があります。計196と、常時200前後を登録している模様。

 

中身はテキスト形式のバイナリファイルのようです。

 

これをSDカードリーダーを使用してPCで読み込み → SDカード内に配置という流れです(SDカードは最初から入ってた2GBのものを使った)。

 

f:id:sheephuman:20210427183414p:plain

 

 

取説も読みましたが、この機種、単純にルートパスにファイルを置いとけば勝手に読み込むようです(※1)。ただし、複数のファイルがあると更新されないと書いてありました。

 

 

※1 いくら読んでも漠然とした表現しか見当たらないので迷った

 

 

これには注意が必要でしょう。単に最初に読み込んだ指定の形式のファイルを、本体のデータのものと比較するアルゴリズム(仕組み)ではないかと考えています。

 

 

最近も更新

 

 

デフナビというものもある

mc-web.jp

 

オシャレな外観でOSも良いのが付いてと良い印象ですね。自分としてはやはり2カメラが欲しいと思ったので見合わせました。まだちょっと高めな印象はある。

バイクとクルマ兼用で使いたい方はオススメです。

 

↓こんなの

www.youtube.com

 

 

YPB740を取り付けたガンツバイク号(横向き)

f:id:sheephuman:20210430085544p:plain

 

 

 

あとがき

この状態で走るとかなり目立つようですね、何人かに笑われました....

内部的に古いデータなので、住所の選択とかも難儀することがありますが、やはり快適です。優秀なスマホアプリもありますから、そこは使い分けが出来るし。

 

警察に如何に捕まらずに50ccを走らせるか、いつも苦心してます。

 

Dunkはそこそこ速くて燃費がいいので気に入っている。ハイスピードプーリー入れて、もう少し最高速を上げたいなと考えてます。そんな高くないっぽいし。

 ↑燃費が下がると聞いて取りやめ。

 

 

 

続きの記事

 

sheephuman.hatenablog.com

PythonでZIPファイルを扱ってみる記録


しきりにプログラミングをしたいという知人が居て、仕方が無いので骨折り作業をしている。僕もスキルは欲しいし。
プログラミングそのものを仕事にするのは生涯ムリだろうと思います。
VsCodeのセットアップが出来なかったんでPyCharm使ってます。

ZIPを扱うアプリの制作です。
目標としてはEXE化して、ドラッグ&ドロップでZIPを生成するとこまでやりたい。


まず試してみたコード 

qiita.com

初心者がC#やったりすると実行方法が分からなくて苦労するんだけど、Pythonは楽でいいですね。コピペで終わるから。



Tkinderの動画でGUIの基礎を学ぶ

www.youtube.com
動画って意外と疲れるんですよね。ちょっとでも打ち間違えると動かんし。
Tkinderは比較的コードがシンプルで楽ですね。



Python(tkinter)にてテキストボックスの高さや幅(大きさ)、色、複数行で作成する方法【ラベルも併せて解説】 | ウルトラフリーダム


【Python】テキストボックス(Tkinter.Entry)の作成・クリア・取得・セット | 鎖プログラム



qiita.com


f:id:sheephuman:20210408203529p:plain

デモプレイ動画

音楽流して作業してるんで図らずも入ってしまう('ω';)

www.youtube.com




ソースコード全文

コピペで動くはずです。

デモ手順:

  1. ファイル選択画面でzipファイルを指定してください
    2. 「新しいフォルダ」を作成し、保存場所を指定してください
    今回はTest.zip(個人的お宝がぞうを入れたもの)を使用しています(動画参照)
from tkinter import *
from tkinter import messagebox as mb
import os, tkinter, tkinter.filedialog, tkinter.messagebox
import zipfile



win = Tk()
mylabel = Label(win, text="ZipFileのパス")
mylabel.pack(fill = 'x', padx=20, side = 'left')
mylabel.pack()

text = Entry(win,width=100)
text.pack(fill='x', padx=5, side = 'right')
SourceFile = Entry(win)



text.pack()
#SourceFile.pack()
text.insert(END, " ")
SourceFile.insert(END, " ")


def ok_click():
    # ファイル選択ダイアログの表示
    root = tkinter.Tk()
    root.withdraw()
    fTyp = [("", "*")]
    iDir = os.path.abspath(os.path.dirname(__file__))
    file = tkinter.filedialog.askopenfilename(filetypes=fTyp, initialdir=iDir)
    a = file
    text.insert(END,a)

    # ファイルの展開
    with zipfile.ZipFile(a) as myzip:
        extractFolder = tkinter.filedialog.askdirectory()
        myzip.extractall(extractFolder)  # zipファイルに含まれているファイルを全て取り出す
        tkinter.messagebox.showinfo('ひつじプログラム', '処理が完了しました!')

okButton = Button(win, text="OK", command=ok_click)
okButton.pack()

win = mainloop()

あとがき


意外とあっさり終わりました。PySinpleGUIは何やらごちゃごちゃして分かりづらかったんだよね。 ドラッグ&ドロップは気が向いたらやります。

C#でファイルリネームアプリを開発してみた記録

 

 最初Pythonでやろうとしたんだけど、いきなりPythonで開発するのは敷居が高いと思われたため、開発が楽なC#(WinForm)でたたき台を作ってみる事にした。

 特にGUIはCodingしなければならないため、Visual Studioみたいに直感的にマウスで並べるという訳にはいかない。

 



参考にしたソフトウェア

f:id:sheephuman:20210328133916p:plain

 

 

とりあえず似たような機能を適当に実装してみる。

 

 

f:id:sheephuman:20210329181909p:plain

 

 

実行結果画像

f:id:sheephuman:20210329182245p:plain



f:id:sheephuman:20210329185713p:plain 

 

前提条件として、

C:¥test フォルダを作成しておき、そこにテスト用ファイルをコピーしておいた。

 

 

プロジェクトファイル

drive.google.com

ソースコード全文



面倒なので一応注釈はつけるが、個別には分けない事にしている。 ちなみにエクスプローラー風のUIはBlogページのソースコードを流用している。一応感謝の意を。



www.doraxdora.com

独自の実装は実行ボタンを押したときの挙動ぐらいである。


using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Windows.Forms;

namespace WinFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            // ドライブ一覧を走査してツリーに追加
            foreach (String drive in Environment.GetLogicalDrives())
            {
                // 新規ノード作成
                // プラスボタンを表示するため空のノードを追加しておく
                TreeNode node = new TreeNode(drive);
                node.Nodes.Add(new TreeNode());
                treeView1.Nodes.Add(node);
            }
            // 初期選択ドライブの内容を表示
            setListItem(Environment.GetLogicalDrives().First());
        }
        DirectoryInfo di;

        private void Form1_Load(object sender, EventArgs e)
        {
            
            // 初期選択ドライブの内容を表示
            setListItem(Environment.GetLogicalDrives().First());
        }

        private void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e)
        {
            TreeNode tn = e.Node, tn2;
            string d = tn.FullPath;//展開するノードのフルパスを取得
            tn.Nodes.Clear();
            di = new DirectoryInfo(d);//ディレクトリ一覧を取得
            try
            {
                foreach (DirectoryInfo d2 in di.GetDirectories())
                {
                    tn2 = new TreeNode(d2.Name, 1, 2);
                    tn.Nodes.Add(tn2);
                    tn2.Nodes.Add("...");
                }
                foreach (FileInfo fi in di.GetFiles())
                {
                    tn2 = new TreeNode(fi.Name, 3, 3);
                    tn.Nodes.Add(tn2);
                }
            }
            catch { }
        }


        /// リストビューの項目を設定します.
        /// </summary>
        private void setListItem(string filePath)
        {
            // リストビューのヘッダーを設定
            listView1.View = View.Details;
            listView1.Clear();
            listView1.Columns.Add("名前");
            //listView1.Columns.Add("更新日時");
            //listView1.Columns.Add("サイズ");

            try
            {
                // フォルダ一覧
                DirectoryInfo dirList = new DirectoryInfo(filePath);
                foreach (DirectoryInfo di in dirList.GetDirectories())
                {
                    ListViewItem item = new ListViewItem(di.Name);
                    item.SubItems.Add(String.Format("{0:yyyy/MM/dd HH:mm:ss}", di.LastAccessTime));
                    item.SubItems.Add("");
                    listView1.Items.Add(item);
                }

                // ファイル一覧
                List<String> files = Directory.GetFiles(filePath).ToList<String>();
                foreach (String file in files)
                {
                    FileInfo info = new FileInfo(file);
                    ListViewItem item = new ListViewItem(info.Name);
                    //item.SubItems.Add(String.Format("{0:yyyy/MM/dd HH:mm:ss}", info.LastAccessTime));
                    //item.SubItems.Add(getFileSize(info.Length));
                    listView1.Items.Add(item);
                }
            }
            catch (IOException ie)
            {
                MessageBox.Show(ie.Message, "選択エラー");
            }

            // 列幅を自動調整
            listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
        }


        /// <summary>
        /// ファイルサイズを単位付きに変換して返します.
        /// </summary>
        /// <param name="fileSize"></param>
        /// <returns></returns>
        private String getFileSize(long fileSize)
        {
            String ret = fileSize + " バイト";
            if (fileSize > (1024f * 1024f * 1024f))
            {
                ret = Math.Round((fileSize / 1024f / 1024f / 1024f), 2).ToString() + " GB";
            }
            else if(fileSize > (1024f * 1024f))
                {
                ret = Math.Round((fileSize / 1024f / 1024f), 2).ToString() + " MB";
            }
            else if(fileSize > 1024f)
                {
                ret = Math.Round((fileSize / 1024f)).ToString() + " KB";
            }

            return ret;
        }


        /// ツリービュー項目選択時(前)のイベントハンドラ.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
        {
          
           
                setListItem(e.Node.FullPath);
            
        }

        private void treeView1_BeforeExpand_1(object sender, TreeViewCancelEventArgs e)
        {
            TreeNode node = e.Node;
            String path = node.FullPath;
            node.Nodes.Clear();

            try
            {
                DirectoryInfo dirList = new DirectoryInfo(path);
                foreach (DirectoryInfo di in dirList.GetDirectories())
                {
                    TreeNode child = new TreeNode(di.Name);
                    child.Nodes.Add(new TreeNode());
                    node.Nodes.Add(child);
                }
            }
            catch (IOException ie)
            {
                MessageBox.Show(ie.Message, "選択エラー");
            }
        }

        private void Excutebutton_Click(object sender, EventArgs e)
        {


   //Nodeのフルパス取得
            string SelectedPath = treeView1.SelectedNode.FullPath;

            //List<string> files = listView1.Items.;

            var files = new List<string>();
            int count = 0;
   

   //Nullチェック
            if (textBox2.Text != "")
            { count = int.Parse(textBox2.Text); }


  //items[0].Subitems では一行分しか取得できないため、For文を回す必要があった
            for (int i = 0; i < listView1.Items.Count; i++)
            {
                foreach (ListViewItem.ListViewSubItem item in listView1.Items[i].SubItems)
                {
      //予め宣言しておいたFilesにAddする。
                    files.Add(SelectedPath + "\\" + item.Text);
                }
            }

            foreach (string file in files)
            {
                count++;
    //Path.GetExtension(file); 拡張子取得
                string Unitestring = Path.GetDirectoryName(file) + "\\" + textBox1.Text + count + Path.GetExtension(file);

                File.Move(file, Unitestring);
    
    //Rename結果を表示する。
                listView3.Items.Add(Unitestring);
            }
        }


    }
}



最低限の実装しかしてないけど、流石にいくらかは簡単だった。特にサンプルコードは助かった。 Pythonでやるとこの3倍ぐらい時間掛かりそうなんですよね・・・・
出来ることなら無理にGUI化したくないなあという感触。

Amazonで買ったバイク用300Dカバーをレビューする記事

 

前回の記事

 

sheephuman.hatenablog.com

 

 

 

購入したバイクカバー

 なんか放っておいたら在庫切れになっていた。残念。

あとでレビューは入れておく。

 

 

 

 

 

 

 

¥ 1,504で購入。

 

綺麗に折りたたまれた状態で送られてきた。

 今回こそアフィリエイト報酬が来てほしいと願っている。

 

こっちでもほぼ同じだと思うので貼っておく。購入して支援してください

 ¥2000

 

150Dもあるが、300Dの方が長持ちするだろう。

¥ 1800

 

 

”D”とは。

f:id:sheephuman:20210315120302p:plain



shikosakugo.info

糸の太さを表している

『1デニール=9000メートルの糸の質量が1g』のようです。要するに、300D=9000mあたり300g

 

 それだけ耐久性が高いってこと。

 

 

 

評判(300Dのほう)

  • 250㏄向けでもすっぽりと過不足なく入ります。
  • GSR250 にぴったりです。
  • 生地が厚くてシッカリしてる!
  • 総括してみると、この値段ならアリだと思う。
  • 同じ価格帯の物で比べると厚さや質感等1番いいと思いました。

 

 

  

 

300Dとはいえそんなに長期間は持たない(3年ぐらい?)らしいので、主に旅先で使う事にしました。

あんまり安い買い物でもないので、自宅保管ならゴミ袋で作れば十分じゃないのかと。

 

あんまり見かけが立派だと盗難に遭いやすいらしいし。それについては何とも言えません。