Selectではなく、Withを使う。[VBA]
Sheets("Sheet1").Activate Range("4:4").Select Range(Selection, Selection.End(xlDown)).ClearContents
上のコードは、以下のようにWithを使うとSelectを使わず書ける。
With Sheets("Sheet1") .Range(.Rows("4:4"), .Rows("4:4").End(xlDown)).ClearContents End With
Selectを使わない方が処理が早い。
VBAと100時間向き合って気づいたこと
VBAは、「Visual Basic for Applications」の略で、MicrosoftがMS Officeの拡張機能として提供しているプログラミング言語。
VBAでのツール作成に費やした100時間で、学んだことや思ったことについて書く。
- Option Explicitを使うと、変数を必ず宣言しないといけなくなる
- 処理の前に
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
処理の後に
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
を書けば処理が早くなることが多い - 処理を早くしたければselectを使わない
(例)
Range("A1").Copy Range("B1")
A1をB1にコピー Withを使うことによってコードを簡略化できる
フィルターの絞り込みを複数条件でやりたい場合は配列を使う
- 文字の結合は「&」ではなくjoinを使ったほうが圧倒的に処理が早い
- 他人のコードが読めない場合はデバッグで1行ずつ見てみる
- 1から作ることができない場合は、「マクロの記録」でやりたいことをやってみて、生成されたコードをリファクタリングする
結論
調べれば、作れる。
調べればだいたいのものがそこそこのクオリティで作れるという自信がついた。
0.5秒かかっている処理を0.1秒に縮める(そこそこではなく、極限まで処理を早くする)、みたいなことは難しいと思った。
動画のツイート情報の取得(Twitter gem)[m3u8&ts]
Twitter 6.2.0を使って、m3u8とtsの情報を取得する方法の備忘録。
#(例) client.user_timeline(params[:name],{count: 3}).each do |timeline| client.status(timeline.id).media[0].video_info.variants end
(取得される情報)
[#<Twitter::Variant:0x00007f9a9298b488 @attrs={:bitrate=>432000, :content_type=>"video/mp4", :url=>"https://video.twimg.com/ext_tw_video/1093540366576275456/pu/vid/320x320/6Njwsfm5UWqO0oU-.mp4?tag=6"}>, #<Twitter::Variant:0x00007f9a9298b438 @attrs={:bitrate=>1280000, :content_type=>"video/mp4", :url=>"https://video.twimg.com/ext_tw_video/1093540366576275456/pu/vid/720x720/8XtxUTxm1tUG4ac_.mp4?tag=6"}>, #<Twitter::Variant:0x00007f9a9298b398 @attrs={:content_type=>"application/x-mpegURL", :url=>"https://video.twimg.com/ext_tw_video/1093540366576275456/pu/pl/QiuW1-iWLaygvK25.m3u8?tag=6"}>, #<Twitter::Variant:0x00007f9a9298b1b8 @attrs={:bitrate=>832000, :content_type=>"video/mp4", :url=>"https://video.twimg.com/ext_tw_video/1093540366576275456/pu/vid/480x480/pcsPrvRLvMExgib5.mp4?tag=6"}>]
ドキュメントには書かれていないが、#bitrateや#content_typeと同じように#urlでURLを取得できる。
#(例) client.user_timeline(params[:name],{count: 3}).each do |timeline| client.status(timeline.id).media[0].video_info.variants[0].url end
(取得される情報)
https://video.twimg.com/ext_tw_video/1093540366576275456/pu/vid/320x320/6Njwsfm5UWqO0oU-.mp4?tag=6
content_typeがapplication/x-mpegURLのURLを使えばm3u8をダウンロードできる。
(m3u8の中身)
#EXTM3U #EXT-X-INDEPENDENT-SEGMENTS #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=432000,RESOLUTION=320x320,CODECS="mp4a.40.2,avc1.4d001e" /ext_tw_video/1093540366576275456/pu/pl/320x320/tfV38oY4Vgf57IDU.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=832000,RESOLUTION=480x480,CODECS="mp4a.40.2,avc1.4d001f" /ext_tw_video/1093540366576275456/pu/pl/480x480/cP4EMl50LdmPmbDe.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1280000,RESOLUTION=720x720,CODECS="mp4a.40.2,avc1.640020" /ext_tw_video/1093540366576275456/pu/pl/720x720/X3HUpbxApZP_9kO9.m3u8
末尾のURLを使って再度m3u8をダウンロード。
(m3u8の中身)
#EXTM3U #EXT-X-VERSION:6 #EXT-X-MEDIA-SEQUENCE:0 #EXT-X-TARGETDURATION:3 #EXT-X-PLAYLIST-TYPE:VOD #EXT-X-ALLOW-CACHE:YES #EXTINF:3.000, /ext_tw_video/1093540366576275456/pu/vid/0/3000/720x720/fOF3nKjZy6cFCfG0.ts #EXTINF:3.000, /ext_tw_video/1093540366576275456/pu/vid/3000/6000/720x720/p_XXWwSLqZadr473.ts #EXTINF:2.976, /ext_tw_video/1093540366576275456/pu/vid/6000/8976/720x720/wFfB8JO78KQDVYTr.ts #EXT-X-ENDLIST
tsファイルの情報を取得できる。
Ruby入門 やってみた
Ruby入門をやってみたので、コードを残しておきます〜
Debian + Nginx + Virtual Host
Virtual Host
- Virtual Hostとは、1つのサーバで複数のドメインを運用する技術のことで、Webサーバ、メールサーバなどで利用される。
- IPベースバーチャルホストは、利用するドメイン名ごとにIPアドレスを用意し、1つのサーバコンピュータに複数のIPアドレスを割り当てる。
- 名前ベースバーチャルホストは、利用するドメイン名すべてに同じIPアドレスを使用し、1つのサーバコンピュータに必要なIPアドレスが1つで済む。
Debian + NginxでVirtual Host
- Freenomで独自ドメイン取得
- DNS設定 (参考: Freenomで独自ドメイン取得後のDNS設定 )
- nginxの設定ファイル作成(参考: https://blog.goo.ne.jp/moonycat/e/b09ff732b80e098dea9c627bc0b64eda)
- /etc/nginx/nginx.confに以下のコードを追加
include /etc/nginx/sites-enabled/*;
HTTPとtelnetについて
HTTP
- HTTP=ハイパーテキスト・トランスファー・プロトコル
- サーバとクライアントの間で、HTMLなどのコンテンツの送受信に用いられる通信プロトコル
- 基本的にはテキストメッセージを交換することにより実現されている
- ブラウザで Webページを開く際、ブラウザはサーバに要求メッセージを送信する。それに対してサーバは応答メッセージを返す。
メッセージ構文
1行目にリクエスト行またはレスポンス行があり、次にヘッダが数行あり、次に空行が1行あり、次にボディがある。
リクエスト行
メソッド パス名 HTTP/バージョン
レスポンス行
HTTP/バージョン ステータス番号 補足メッセージ
ヘッダ
追加情報を記載
ボディ
必要な時のみ記載
GETの例
telnet
- ネットワークを経由して他のコンピュータ(主にサーバ)に接続するときに使う
SSHではパスワード情報を含めて全てのデータが暗号化されて送信されるが、telnetの場合はパスワード情報を含め全てのデータが暗号化されずに送信される。
使用方法
$ telnet (IPアドレスorドメイン名) (ポート番号)
- 終了方法
Ctrl + ] telnet> q
- ポートはhttpは80番でhttpsは443番
- telnetでポート443に接続はできるが、通信はできない
- POSTする時はヘッダにContent-Typeの情報が必要(参考)
- ChromeでPOSTされたパラメータの中身を確認する方法
Linux コマンド
1. パーミッション(権限)について
●パーミッションの確認
$ ls -l
●パーミッションの読み方
1番左が「d」の場合 = ディレクトリ 1番左が「-」の場合 = ファイル
左(rwx) = そのファイルを所有している人の権限 真ん中(r-x) = そのファイルを所有しているグループの権限 右(r--) = その他の人の権限
r =ファイルを見る権利 w =ファイルに書き込む権利 x =ファイルを実行する権利
左側のusernameがそのファイルの所有者名 右側のusernameがそのファイルの所有グループ名
●パーミッションの変更
$ chmod u+x ファイル名[またはディレクトリ名](そのファイルを『所有ユーザー』が実行できるようにする)
所有ユーザーをu、所有グループをg、その他をoで表現する。 例えば、+rwや-rwxなどで一度に権限を変更することも出来る。 ファイルの権限を変えることが出来るのはそのファイルの所有者とrootユーザーのみ。
2. exprコマンド
シェル画面上で計算をするためのコマンド
$ expr 1 + 2 3
3. diffコマンド
2つのファイルを比べて、そのファイルに違いがあれば、違っている箇所を表示
$ diff ファイル1 ファイル2
4. lwp-requestコマンド
ウェブサーバーにリクエスト
$ lwp-request 要求先のアドレス
(libwww-perl パッケージをインストールした)
4. リダイレクト(『>』)
あるコマンドの出力結果を別のファイルに書き込む
5. nslookupコマンド
DNSサーバーに問い合わせてドメイン名からIPアドレス、または逆にIPアドレスからドメイン名を検索
$ nslookup IPアドレスまたはドメイン名
(dnsutilsをインストールした)
6. whoisコマンド
whoisコマンドはドメイン名、またはIPアドレスからドメインの情報を取得
$ whois ドメイン名またはIPアドレス
(whoisをインストールした)
7. fileコマンド
ファイル形式を確認
$ file ファイル名
8. locateコマンド
ファイル検索
# updatedb $ locate 検索キーワード
データベースからの検索なので、一般ユーザーからの使用で一般ユーザーが覗けない箇所のファイルも検索可能 (locateをインストールした)