Python 3.8がリリース

https://www.python.org

新機能も含めて、3.7系から何が変わったのか、これから情報を集める段階である。

3.5や3.6をチマチマと触ったけど、本腰入れて勉強したのは3.7でした。と言っても、今年に入り基本部分と興味を持ったモジュールの使い方程度ですが。本当は時間をかけてしっかり取り組みたいけど、おっさん社会人にはちと辛いです。

ここ3か月ぐらいほとんどPython触っていないので、時間をうまく活用するようなライフハックについて実践したいと思う今日この頃。

VBAから.NET Frameworkを使用する際のメモ

実験的にVBAから.NET FrameworkのSystem.Collections.ArrayListを使ってみるテストコードを書いてみたのだが、ノートPCでは動作するが、デスクトップPCでは動作しない症状(オートメーションエラー)に直面した。

クラスモジュール:Point
標準モジュール:Module1

デスクトップおよびノートパソコンの環境は下記の通り統一されている。

  • Windows 10 Pro 64bit
  • Office 365

原因を探ると、.NET Framework 3.5(3.0/2.0)有効化の有無で動作しなかったようだ。つまり何らかの操作にてノートパソコン環境は有効化されていたが、最近セットアップしたデスクトップパソコンではWindows10標準では無効化されているため動作しなかったという結論に至る。逆に.NET Framework4.0以降はVBAからアクセス許可されないということ。すなわち最新の機能は利用できない。だが、もともとVBAから.NET Frameworkの操作には制限があるとのことなので、利用場面は限定される。ArrayListそこそこ便利でした。

.NET Framework自体は今後もWindowsに残るけど、このようなバージョンによる制限は、将来的に.NET Coreへ移行する布石だろう。

新しい技術が出てくるたびに、勉強しなければならないプログラマーさんは大変ッス。これじゃあ、いくら時間があっても足りないわけですよ。

urllib.requestモジュールのurlopen関数ってローカルファイルもいけるんじゃね?

PythonによるWebスクレイピング学習初期に必ず一度は使うことになると思われるurllibライブラリ。そのrequestモジュールに含むurlopen関数。ネットの情報もしくは書籍に目を通しても、必ず何処かのウェブサイトからページ取得を試みている。

初心者が学習する内は、単発程度のリクエストなので、サーバ負荷なんて微々たるものだと思うけど、何度も繰り返すような処理は、いろいろと問題があると思われる。

じゃあ、自前でローカルサーバ立ち上げて試すという方法も思ったけど、ちょっと方向が違うように感じた。

理想は、ローカル環境のカレントディレクトリ内にhtmlファイルを置いて、Pythonコードから操作して取得するという方法。

Python Code

urlopen関数の引数部分をこのように絶対パスで記述することで試したいHTMLを取得できるようになります。なお、相対パスは試していない。なんとなく動かないような気がしたから。

VBAには型宣言記号による型宣言方法が存在する

型宣言記号?

カルチャーショックという程でもないけど、VBAには古いVBの名残り?として「型宣言記号」というものが存在した。VBAを勉強して数年は経っているにも関わらず知らなかった。軽く後頭部を叩かれたような気分になったので、メモることにした。

Option Explicit

''型宣言記号の確認コード
Sub TypeSymbol()

    ''文字列型
    Dim ss As String
    Dim ss_$ 'ドルマーク
    
    ''整数型
    Dim n As Integer
    Dim n_% 'パーセント
    
    ''長整数型
    Dim l As Long
    Dim l_& 'アンパサンド
    
    ''単精度浮動小数点型
    Dim f As Single
    Dim f_! 'エクスクラメーション
    
    ''倍精度浮動小数点型
    Dim d As Double
    Dim d_# 'シャープ
    
    ''通貨型
    Dim m As Currency
    Dim m_@ 'アットマーク
    
    ''バリアント型
    Dim v As Variant
    Dim v_ '型宣言記号をつけない
    
    ''型確認
    Debug.Print TypeName(ss) ' String
    Debug.Print TypeName(ss_$) ' String
    
    Debug.Print TypeName(n) ' Integer
    Debug.Print TypeName(n_%) ' Integer
    
    Debug.Print TypeName(l) ' Long
    Debug.Print TypeName(l_&) ' Long
    
    Debug.Print TypeName(f) ' Single
    Debug.Print TypeName(f_!) ' Single
    
    Debug.Print TypeName(d) ' Double
    Debug.Print TypeName(d_#) ' Double
    
    Debug.Print TypeName(m) ' Currency
    Debug.Print TypeName(m_@) ' Currency
    
    Debug.Print TypeName(v) ' Empty
    Debug.Print TypeName(v_) ' Empty

End Sub

上記コードでは各種型別に、通常の方法と型宣言記号による方法の2パターンの変数を記述した。型宣言記号は宣言した変数に続き付加する。例で用いた宣言方法の場合、変数名と型宣言記号の間にアンダーバーが含む。これは違いを区別するために使用しているだけである。本来つける必要はない。つまり文字列型の場合、ss$と記述して良い。

後半は、宣言した変数の型確認をおこなっている。見事に同じ型名が返ってくる。それ以上の発見は無かったが、まだまだ知らないことがたくさんあることを実感した。

ところかわり・・・

さて、型宣言記号の存在を知らなかったわけだが、知ったところでコードに優位性が生まれる気がまったくしなかった。もちろん記号による省略でコード記述量が減るため、負担軽減と時間短縮には貢献するのだろう。しかしこの記述方法は使用することによりコードの可読性を低下させる可能性がある。結果として負担が増えるのでは?と疑問を感じた。

これは今よりもコンピュータに積むメモリが少なかったことに起因しているように思う。VBAの登場は1994年前後。その頃は2~8MBぐらいが主流。メモリリソースがシビアだったころの面影かな?

ひとりでコードを書くならば、ちょっと特殊なコードを書いて「オレ、かっこいい!」みたいな中二病的自意識過剰自己満足全開でもよいだろう。しかし2020年代はプログラミング人口が増え始めると想定される。誰もがプログラムを書く時代になろうとしている。そして、いつ誰が自分のコードを参考にするか分からない。その時、合理的で読みやすい整った平均的なコードであれば、それを真似てより良いコードを書く人が増えるのではないだろうか。

何はともあれ、嫌われプログラミング言語No.1の汚名を持つVBA(VB)を題材にこんなことを書いている時点で、説得力はあまり感じてもらえないだろう。Officeのデファクトスタンダード言語かもしれないけど、将来はモダンな言語へ移行をお願いしたいところです。

Homebrewのアンインストール方法

そろそろmacOS Mojaveに移行しようと思いながら、いまだにHigh Sierraを使い続けています。

さて、過去にインストールしたHomebrewを削除して、再インストールしたいと思ったので、そのメモを残しておこう。

Homebrewのアンインストール方法

Homebrew macOS用パッケージマネージャー
Homebrew Documentation FAQ

$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"

上記のスクリプトをターミナルで実行する。途中パスワードを聞かれたり、「本当に消すよ?」と確認されたりするけど、気にしない。

おまけ:Homebrewのインストール方法

せっかくなのでインストール方法を再掲しておこう。

まずは、Apple StoreよりXcodeをインストールする。
Homebrewをインストールするには、XcodeのCommand Line Toolsが必要なので、ターミナルより下記コマンドを実行しインストールする。

$ xcode-select --install

Homebrewのウェブサイトより、下記のスクリプトをターミナルにて実行する。

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

正常にインストールされたことを下記コマンドで確認するとよいだろう。

$ brew doctor

Visual Studio Code拡張機能「Live HTML Previewer」

趣味でコードを書く場合、いつもお世話になっている「Visual Studio Code」。

HTML編集時、リアルタイムプレビュー表示してくれる拡張機能「Live HTML Previewer」が便利なので使用しています。

Live HTML Previewer

インストール方法

  1. 拡張機能([Ctrl+Shift+X])より、「Live HTML Previewer」を検索する。
  2. 表示された項目からインストールする。

使用方法

  1. [F1]もしくは[Ctrl+Q]より、コマンドリストを表示する。
  2. サイド表示する場合「Show side preview」フル表示する場合「Show full preview」を実行する。

確認の度にブラウザを立ち上げることもなく、コード編集しながらリアルタイムに確認することができるようになります。

ゾウリムシがクラス設計について復習していたら、いつの間にかエラー処理について復習していた件

VBAによるクラス設計にどれだけ需要があるのか。(単細胞理論)

VBAのクラスはいろいろと制限があり、必ずしもオブジェクト指向(隠蔽とか、多態性とか、継承とか、まぁいろいろね!)していない。
考え方は多少勉強になるんだろうけど、他の言語に比較すると役に立たない・・・と見たり聞いたり。
それでも再復習を行うことで、実戦投入しようと考えている。それはなぜか?

世の中の日々コードを生産している凄腕プログラマーさまからすれば、弱小底辺野郎が書いたクソコードなんてゾウリムシには失礼だが、それぐらいの価値しかない。
しかし、クソコードをクソのままにしておくのはやっぱりダメと思ったのだ。

今まで書いたクソコードをせめてコードと呼ばれるために、整理整頓のための手段として半日総復習を実施。
さすがにVBAによるクラスやらインターフェイスやら説明している書籍は日本では見たことないので基本ネットから情報収集+応用ですね。
久しぶりに目を通したけど、案外忘れてないものだ。

忘れていないのなら、最初から活用してクソコードなんて呼ばれないコードを書けばよいのだろうけど、それはパワーとリソースとオッサン化の宿命ではないだろうか?まぁ職業プログラマーでもないので。

コーヒーブレイク後、ふとエラー処理について脳裏にフラッシュした。と同時にエラー処理コードってあまり書いたことないな、と思った。

VBAによるエラー処理っていうと、まずOn Error GoToやOn Error Resume Next、そしてErrオブジェクトを思い浮かぶんだけど、そうじゃなくて独自のエラー処理のこと。ユーザー定義によるエラーハンドリングってほとんど経験なかったんです。しかもクラス設計と親密にかかわってくる部分でもあると思ってしまった。

で、急に不安ようなものに苛まれてしまい、その後はクラス設計等そっちのけでエラー処理について復習と新規学習をしましたって流れのようだ。(自己分析)

オブジェクト指向の要素って多岐に渡るから、ちょっと勉強して使えたぐらいで安心せず、日々継続・鍛錬・修練・活用・情報収集だよね、と単細胞なりの中身のない考えで今日は締めくくった。

学んでみたいプログラミング言語

今までプログラミング言語で触ったことがあるものを学んだ順に挙げてみると・・・

  • html/css/javascript(これはどちらかと言えば、構造記述言語、スタイル記述言語、スクリプト言語か。)
  • c
  • java
  • php
  • VisualBasic(VBA(excel))

もう13年以上前になります。プログラミング基礎を勉強しようと思い立ってから、ずっとパソコンと睨めっこしてました。
実際にそれらを勉強した成果物はいくつかありましたが、ハードディスクが死んで今は何も残っていません。
バックアップは大事です。
で、最近はちょっとVBAかじる程度にしか触ってないけどね。

当時と今とでは、状況も環境もかなり変化しています。
すっかりジジィに成り下がったわけですが、これからも昔変わらずコンピュータと付き合っていきたいものです。

最近、昔のような情熱が湧き上がっていまして、これから始めるなら何が良いかな?とリストアップした結果、次が挙がりました。

  • c++
  • kotlin
  • C#
  • Python
  • VBA(Access)
  • (電子工作)

正直これらの言語自体を学ぶことが目的ではなく、実現したい目的のための通過点としていろいろ情報収集しています。
ええ、頭で考えるだけじゃ前に進まないので、写経の如く手も動かしています。

時間が足りない・・・と思いつつ、焦らず気ままにことを進めよう。そんなこんなで今日は勤労感謝の日。タイヤ交換しなくっちゃ!

コマンドラインによるC#コンパイル設定方法

コマンドラインによるC#コンパイル

C#でプログラムしたソースコードをコンパイルする場合、手段としてMicrosoftが用意している統合開発環境(IDE)であるVisualStudioを利用しようと思います。
しかし、いちいちIDEを立ち上げてプロジェクトを作成してプログラミングしてコンパイルするという作業は、回数を重ねるごとに煩わしく感じることがありませんか?
IDEはプログラミングする上で支援してくれたり、ミスをリアルタイムで指摘してくれたり、メリットは当然あります。
だけど、小さいプログラムを書いたり、実験用として書いたコードをコンパイルする場合、デメリットになりうることもあります。

Windowsでコマンドプロンプトからソースコードをコンパイルする方法について簡単にまとめてみようと思う。

.NET Frameworkのバージョン違い

まず、Windows 7以降ならば、.NET Frameworkは以下のディレクトリに標準でインストールされている。
C:\Windows\Microsoft.NET\Framework

なお、.NET Frameworkはバージョンによって複数インストールされている。
v1.0.3705
v1.1.4322
v2.0.50727
v3.0
v3.5
v4.0.30319(v4.0/v4.5/v4.6)

バージョンによって以下のようにグループ分けができる。
v1.0
—– —– —–
v.1.1
—– —– —–
v2.0 = v3.0 = v3.5
—– —– —–
v4.0 -> v4.5 -> v4.6
このようにグループ分けする理由は、上位下位で互換性が完全に保たれていないため。一応、コンパイルできるけど、動作保証はされていない。だから、各バージョンの.NET Frameworkがインストールされている。ちなみにv4系列はバージョンごとの共存はされない。v4.5からv4.6へアップデートされた場合、そのまま置き換えられてしまう。ただし、これは上位互換性が保たれているという意味なので、動作上特に問題にならない。

コマンドラインによるコンパイル設定方法

ここでは、最新版の.NET Frameworkでコンパイルできるよう設定する。

  1. 「コントロールパネル」から「システム」を選択する。
  2. サイドバー「システムの詳細設定」を選択する。
    ximg20161105setting0
  3. 「詳細設定」タブの「環境変数」ボタンを選択する。
    ximg20161105setting1
  4. 「ユーザー環境変数」グループのリスト内の「Path」変数を選択後、「編集」ボタンを選択する。
    ximg20161105setting2
  5. 「変数値」の値の最後に「;C:\Windows\Microsoft.NET\Framework\v4.0.30319」を追加し、「OK」ボタンを選択する。
    ximg20161105setting3
  6. これで、コマンドラインからC#ファイルのコンパイルが可能になる。

動作確認

  1. 任意の場所に作業用フォルダを作成します。(例:C#)
  2. 作成したフォルダをShiftキーを押しながら右クリックし、「コマンドウィンドウをここで開く」を選択する。
  3. コマンド「csc」と入力し実行。下記のように表示されればコンパイル可能を確認。
    ximg20161105setting4
  4. テキストエディタで動作確認用ソースファイルを作成、保存する。(例:VisualStudioCodeでソースコードを作成)
    ximg20161105setting5

    using System;
    
    public class test{
    
        public static void Main(string[] args){
            Console.WriteLine("hello world. C# programing!!");
        }
    
    }
    

    なお、VisualStudioCode最新版ではC#を利用するには拡張機能を利用する必要がある。

  5. コマンドプロンプトで下記の手順でコマンド操作を行う。
    ximg20161105setting6
    1.「dir」コマンドで作業フォルダ内に作成したファイルが含むことを確認する。
    2.「csc test.cs」と入力し実行する。
    3.再び作業フォルダ内を確認し、コンパイル生成されたtest.exeが含むことを確認する。
    4.「test」と入力し実行する。

さぁ!プログラミングライフを楽しもう!!