FC2ブログ

素直研究所 技術開発部

素直研究所の技術開発部ブログです。

07«1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.»09

Windows10に標準でOpenSSH 


※クリックで拡大

 最近、DellのT100サーバにVirtualBoxって云うソフトをインストールしたんスよね。要はコンピュータの中に仮想のコンピュータを仕立てるソフトなんスよ。
 で、Fedora28って云うLinuxマシンを仮想コンピュータとして起動したのが上の図っすよ。旧態依然としたモノクロのキャラクターベースのログイン画面なんスけど、皆さんが普通にアクセスしてるサイトのウェブサーバも大体こんな感じっスからね。
 で、このサーバにアクセスして操作をするソフトをターミナルソフトって云うんだが、オイラは大体Tera Termと云うのを使ってたんだが、Windows10にも標準でOpenSSHって云うのが付いてくるようになったんで、OpenSSHクライアントソフトを使ってみたんスよ。


※クリックで拡大

 使い方は何のことはない。[スタートメニュー]→[Windows システム ツール]→[コマンドプロンプト]を選択すると上のような画面が出てくる。
 上の図は"C:\Users\user>"ってなってるんだが、PCにログオンしてるユーザー毎に"user"の部分は変わるんで、読み替えてみてね。上の図では何をやってるかと云うと…
  • カレントフォルダ直下に.sshって云うファイルもフォルダがないのを確かめ…
  • sshコマンドで、sunao-laboと云うユーザーでホスト192.168.11.11のPCにログインしようとする
  • 「ホントに接続を続けてもいいの?」って尋ねてくるので"yes"
  • パスワードを入力すると…ログイン出来たっと!
  • exitでログアウトして…
  • カレントフォルダ直下に.sshって云うフォルダが出来て、その中にknown_hostsって云うファイルが出来てた。
  • typeコマンドでknown_hostsの内容を見たらこんな感じだった
って云う感じっすね。


※クリックで拡大

 上の図はsshって云うコマンドだけじゃなく、ssh-keygenって云う公開暗号カギを生成するコマンドも付いてきって云う話ッスね。公開暗号を使ってサーバにログインする方法についてまた今度にしますんで悪しからず。

ソフトウェア開発の素直研究所です。お仕事のご依頼はこちらからどうぞ!
スポンサーサイト



△page top

YoutubeのAPI その1:ユーザーIDからチャンネルIDを取得する 

Web APIとは何ぞや?」ってぇ難しい話は、この語句のリンク先にまかせるとして、YoutubeでもFacebookでも或いは楽天でもこのWeb APIで成り立ってると云っても過言ではないくらい、インターネット技術の中枢的な存在っすね。コイツのおかげでオイラは飯を食わせてもらってるようなもんです。
 オイラが関わってる海外ドラマのサイトは、放送局が持っているFacebookサイトのウォール情報をFacebookのAPIで、放送局のアップしているYoutube動画情報をYoutube APIで取得して、カスタマーにサイトのページで提供したり、別のオリジナルなAPIとして提供してる訳っすよ。

 例えば、YoutubeのNHKオンラインでアップされてる動画情報を取得するのに、ユーザーIDが"NHKonline"と分かってるんだが、ユーザーIDからチャンネルIDを取得しないと動画情報は取得できないんだが、チャンネルIDを取得するAPIってぇのがあって、それが下のURLのような感じ…
https://www.googleapis.com/youtube/v3/channels
?part=contentDetails&forUsername=ユーザーID&key={APIキー}

 APIキーってぇのはこのAPIが誰でも使えちゃうのも差し障りがあるんだか知らんが、Youtube APIを使っていいよって証になるキーですね。すると下のようなJSONという構造体のデータを返してくれるんスよ。

 NHKオンラインのチャンネルIDは"UCip8ve30-AoX2y2OtAAmqFA"だわねってことが分かる訳っすよ。まぁこのあとチャンネルIDを使って動画情報を取得して、そういうデータをうまく加工してカスタマーに提供したりする訳っすね。
 ちなみにオイラのAPIキーがばれるとまずいので、ユーザーIDからチャンネルIDを取得するページを簡単に作ってみました。Google Chromeで拡張機能のJSON Viewをインストールしないと上のようにきれいに表示されないと思うけどご参考まで。次回はもう少し突っ込んだ話を。
http://sunao-labo.main.jp/api/youtube/get_channel_id.php

ソフトウェア開発の素直研究所です。お仕事のご依頼はこちらからどうぞ!

△page top

AmazonのクラウドサービスEC2でボリュームの拡張 

 昨日の夕方、管理してるサーバの警告メールが届いたんスよね。要するにデータ領域が少なすぎて「別のサーバからデータを転送できねぇぜ」と云うお達し。管理サーバにsshでログインして調べてみたらデータパーティション領域の使用率が99%でした。仕方ないんで危急に必要のないバックアップデータとかを別のサーバに一旦移して使用率を96%にまで下げました。
[root@ip-1X-X-X-XX ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 20G 1.8G 18G 9% /
devtmpfs 993M 60K 993M 1% /dev
tmpfs 1002M 0 1002M 0% /dev/shm
/dev/xvdf 50G 45G 2.2G 96% /mnt/xxxx
 容量を確認。/dev/xvdf は96%になったけどあんまり余裕なし。
 そのうちまたデータが一杯になるのは想像に難くないので、ハードディスクを増設しようと。
 それで、AmazonのクラウドサービスEC2の便利なところがサーバが稼働中にハードディスクのボリュームを増量することができるんスよ。実機でだったら稼働中にUSB接続で外付けハードディスクをアタッチすることは出来るけど、さすがに動いてる内臓ハードディスクの容量を300GBから500GBに増量なんて出来ないっしょ?

 先ずはデータパーティションのデータのバックアップということでスナップショットを撮ります。万が一ボリューム変更時にパーティションを壊してデータをお釈迦にしても大丈夫なように保険っすね。AWSのコンソールからブラウザで操作っすよ。

 で、50GBから70GBへボリュームを変更すると…

 最適化が始まって、10分位すると100%になって使えるようになると…いうわけじゃないんスよ。
 この後、この管理サーバにsshでログインしてパーティション領域を拡張する作業が必要なんスよ。
[root@ip-1X-X-X-XX ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 20G 0 disk
+-xvda1 202:1 0 20G 0 part /
xvdf 202:80 0 70G 0 disk /mnt/xxxx
 ボリューム増量後は70GBになってるね。ここでパーティションを拡張するコマンドを投入。
[root@ip-1X-X-X-XX ~]# growpart /dev/xvdf 1
FAILED: unable to determine partition type
 ありゃ?だわねぇ。じゃあファイルシステムを強制的にチェックしよう。
[root@ip-1X-X-X-XX mnt]# e2fsck -f /dev/xvdf
e2fsck 1.42.12 (29-Aug-2014)
/dev/xvdf is mounted.
e2fsck: Cannot continue, aborting.
 やっぱ、ディスクをマウントしたままじゃダメかぁ。エイやでアンマウントしてみるかぁ。
[root@ip-1X-X-X-XX mnt]# umount /mnt/xxxx
[root@ip-1X-X-X-XX mnt]# e2fsck -f /dev/xvdf
e2fsck 1.42.12 (29-Aug-2014)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/xvdf: 750800/3276800 files (0.2% non-contiguous), 11882540/13107200 blocks
 出来たねぇ。じゃあファイルシステムのリサイズコマンドいいんじゃね?
[root@ip-1X-X-X-XX mnt]# resize2fs /dev/xvdf
resize2fs 1.42.12 (29-Aug-2014)
Resizing the filesystem on /dev/xvdf to 18350080 (4k) blocks.
The filesystem on /dev/xvdf is now 18350080 (4k) blocks long.
 すかさずマウントすると…
[root@ip-1X-X-X-XX mnt]# mount /dev/xvdf /mnt/xxxx
[root@ip-1X-X-X-XX mnt]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 20G 1.8G 18G 9% /
devtmpfs 993M 64K 993M 1% /dev
tmpfs 1002M 0 1002M 0% /dev/shm
/dev/xvdf 69G 45G 21G 69% /mnt/xxxx
 出来ましたねぇ。
ソフトウェア開発の素直研究所です。お仕事のご依頼はこちらからどうぞ!

△page top

PowerShellを使ってアプリの自動実行(その1) 

 仕事で某BS有料放送の番組ページ等が3万ページ弱あるサイトのクロールをして、"Apache Solr"という全文検索システムで、番組キーワードに該当するページの検索結果をサイトのサムネイルとともに表示するシステムを管理してる。
 サムネイルを作成する現行システムはあるにはあるんだが、理由があってリプレイスしたいと考えている。サイトを巡回してサムネイルを作成するアプリケーション
をいろいろ探してるんだが、なかなかいいのがない。たまたま見つけたのが上のCrenaHtml2jpgと云うアプリ。コイツのイイところはGUI(グラフィカルユーザーインターフェース)とCLI(コマンドラインインタフェース)の両方で使えて、例えばサイトを巡回してバッチ処理的にサムネイルを作成するには、CLIを使えばいいのだ。
 だが色々試行錯誤したのだが、自分が管理しているサイトでは、GUIの方じゃないとちゃんとキャプチャーしてくんないということが判明。

 どうしたものかと思ってたらWindowsに標準でついてるPowerShellを使えば、GUIのテキストボックスとかにターゲットのURIを入力したり、実行ボタンを押してくれるスクリプトが書けるらしい。
 但し前準備が必要で、動かしたいアプリケーションのテキストボックスやボタン等の部品(オブジェクト要素)のプロパティを取得したり、書き換えたりするUIAutomation.dllというのをインポートする必要がある。
 先ずは、http://uiautomation.codeplex.com/ に行き、Downloadボタンを押してzipをダウンロード、
Documents\WindowsPowerShell\Modules\UIAutomation
に展開する。
 次にPowerShellを開いて、上記のディレクトリに移動し、下のコマンドを実行。
PS > Import-Module .\UIAutomation.dll

 Get-Moduleして以下のようにでてくればOK。
PS > Get-Module UIA*
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Binary 0.8.7.79 UIAutomation {Add-UiaBannerText...

 そして、こんな感じでスクリプトを書いて、PowerShellに実行させるらしい。
$process = Start-Process -FilePath "C:\Program Files\CrenaHtml2jpg-v1.20\CrenaHtml2jpg.exe" -PassThru
$window = Get-UiaWindow -ProcessId $process.Id
$window | Get-UiaEdit -AutomationId '1010' -Class 'Edit' -Name 'http://www.yahoo.co.jp' | `
Set-UIAControlText -Text "http://www.wowow.co.jp/detail/110495";
$window | Get-UiaButton -Name '実行' | Invoke-UiaButtonClick | Out-Null
$window | Get-UiaButton -Name '終了' | Invoke-UiaButtonClick | Out-Null
 ちなみにこれは、CrenaHtml2jpg.exe のアプリケーションが、
"C:\Program Files\CrenaHtml2jpg-v1.20\"
にインストールされているという前提です。

ソフトウェア開発の素直研究所です。お仕事のご依頼はこちらからどうぞ!

△page top

URLリストに従って、順次Google ChromeでURLを開くバッチプログラム 

表題の通り、URLリストに従って、Google Chromeで順次指定したURLを開くバッチプログラムなんスけど、先ず
  • メモ帳(notepad.exe)で参照したいURLを列記して、url_list.txtという名前で保存。
  • 同じくメモ帳で下のプログラムの通り打ち込んで、test01.batという名前で保存。
  • test01.batダブルクリックして実行。

 すると、10秒毎にURLのページをクロームで開き、閉じるという動作をするだけなんスけど、これに間に画面キャプチャーするコマンドを入れてやると、サイトキャプチャーソフトの出来上がりってぇわけです。


 ちなみにurl_list.txtとtest01.batは同一フォルダに置く必要があるんっすよ。
--- test01.bat
echo off
REM --- url_list.txtから一行ずつ読み込みURLを取得 -----------------
for /f "delims=" %%a in (url_list.txt) do (
   start chrome --app=%%a
   timeout /T 10
  REM --- ここに画面キャプチャコマンド等を挿入

  REM --- タスク削除 -------------------------------------------------
   for /f "usebackq tokens=1,2 delims=," %%a in (`tasklist /FI "imagename eq chrome*" /FI "status eq RUNNING" /FO CSV /NH`) do (
  taskkill /pid %%~b
  )
)


--- url_list.txt
http://www.infoseek.co.jp/
http://www.rakuten.co.jp/
http://news.infoseek.co.jp/topics/itmedia_mobile_20170124030/
http://news.infoseek.co.jp/topics/gendainet_370857/
http://news.infoseek.co.jp/topics/170124jijiX678/

 別にクロームでURLを開いてもなんの意味もないんスけど、オフィス・オートメーションで単純な仕事やるときにこんな手法で事務処理をするっていうのが賢いやり方っすよ。

ソフトウェア開発の素直研究所です。お仕事のご依頼はこちらからどうぞ!

△page top