PowerShellのヘルプを調べたりする
コマンドを探す。
Get-Command <文字列;ワイルドカード可能>
コマンドレットのヘルプや使用方法を調べる。
# コマンドレットのヘルプを表示 Get-Help コマンドレット名 #別の方法 コマンドレット名 -? # コマンドレットの完全なヘルプを表示 Get-Help コマンドレット名 -Full # コマンドレットの詳細ヘルプ(パラメータの説明含む)を表示 Get-Help コマンドレット名 -Detailed # コマンドレットの実行例を表示 Get-Help コマンドレット名 -Examples # コマンドレットのパラメータを表示 Get-Help コマンドレット名 -Parameter <パラメータ;ワイルドカード可能>
他に、Get-Memberでメソッドおよびプロパティが表示できる。
"HOGE" | Get-Member TypeName: System.String Name MemberType Definition ---- ---------- ---------- Clone Method System.Object Clone() CompareTo Method int CompareTo(System.Object value) 以下略
なおオンラインで上記のようなドキュメント一覧を探そうと思ったら、ISEのヘルプがそもそも充実してた。これでことたりそう。他には
あたりにいろいろ書いてあるかも。
PowerShellでGoogle Chromeのキャッシュの置き場を変更する
ざっとネットで調べてみたら、mklinkでリンクを作ればいいようなので試してみることにする。
直し直し下のPowerShellでできたっぽいけど、参考用に書き直したりもしているのでそのまま動かないかも。
参照される方は自身の責任において実行してください。
なお、CドライブがSSD、DドライブがHDD(SATA)、RドライブがRAMDiskです。RAMDiskは4GBで作ってるので、全データがRに行かないように、Dドライブを使う想定を残してます。
Set-PSDebug -strict $username = $env:username ################################ #ここから変数定義 #■新しいGoogleディレクトリ置き場のパス $new_google_user_dir = Join-Path ( Join-Path "D:\" $username ) "Google" #■新しいChromeディレクトリ置き場のパス $new_chrome_user_dir = Join-Path ( Join-Path "R:\Browser" $username ) "Chrome" ################################ # 通常のGoogleアプリケーションのユーザディレクトリのパス $google_user_dir = Join-Path ( Join-Path "C:\Users" $username ) "AppData\Local\Google" Write-Host "ユーザのGoogleディレクトリ:" $google_user_dir # symbolic linkを張る関数を作成 function New-Symlink { cmd /c mklink /d $args } # ユーザディレクトリ自体を移行する if ( $new_google_user_dir -ne ""){ #新しいGoogle Dirへの移行を実施する。 Write-Host $new_google_user_dir "への移行を実施。" move $google_user_dir $google_user_dir".bak" md $new_google_user_dir robocopy /MIR $google_user_dir".bak" $new_google_user_dir New-Symlink $google_user_dir $new_google_user_dir $google_user_dir = $new_google_user_dir }else{ Write-Host "Googleアプリのユーザディレクトリの変更は行わない。" } # Google Chromeのキャッシュディレクトリのパス $chrome_user_dir = Join-Path $google_user_dir "Chrome\User Data\Default\Cache" Write-Host "ユーザのGoogle Chromeキャッシュ: " $chrome_user_dir Write-Host "移行先のキャッシュディレクトリ: " $new_chrome_user_dir move $chrome_user_dir $chrome_user_dir".bak" md $new_chrome_user_dir # robocopy /MIR $goole_user_dir".bak" $new_chrome_user_dir New-Symlink $chrome_user_dir $new_chrome_user_dir Write-Host "だん"
PowerShellでインストール済みプログラムの一覧を表示する
仕事でWindows触る機会が増えそうなのでPowerShellを触ってみる。
インストーラ経由でインストールされたプログラムの一覧を表示するスクリプト。
PS> Get-WmiObject -Class Win32_Product | Select Name,Version | Format-List
なお、ファイルにCSVで書き出す場合は次の様にすればよい。これでデスクトップ上にinstallded.csvが出来るはず(vista以降)。
PS> $userprofile = $env:userprofile PS> Get-WmiObject -Class Win32_Product | Select Name,Version | Export-Csv $userprofile\Desktop\installed.csv -encoding Default
%USERPROFILE%\Desktop以外のフォルダをデスクトップにしている場合はデスクトップに生成されないので要注意。
参考URL
apache-solr-3.5.0をGlassfish3.0.1に組み込んでみる
Solrは検索エンジンにLuceneを利用した、Java環境で動作する検索エンジンサーバです。デモを動かしてみて得た感触は以下の通り。(なお、僕は検索エンジンもSolrのこともあまり詳しくないんで表現が適切でないものが多いかもしれません、ご容赦ください。)
- 環境を適切に設定すればわりとさくっと動かせる
- 日本語のドキュメントが少ない(というか、全文検索エンジンの仕組み、たとえばIndexとかが体系的に難しくて、触ったことある人はいても文章を公開してないだけかも)
- 多言語に対応してない=日本語のインデックス作るにはプラグインが必要(一般的にも、日本語の処理には形態素解析用のエンジンと辞書が必要ですね)
- インストールしたら、付属してるサンプルデータをインデックス化してお試し可能
- XML形式やJSON形式で検索・結果応答の取得ができる(別に検索Webアプリとか立てて、JSONでリクエストを投げて応答を加工して表示する、っていうような処理になるのかしら)
- GlassfishとかTomcatみたいなアプリケーションサーバにdeployしなくてもスタンドアロンでサービス起動できる(マイクロサーバが付属してる)
- インデックスを作成するのに、別途クローラ(データを収集してスキームに変換してSolrに投げるやつ)が必要かもしれない、調査不足
- JSONとかXMLでやりとりできるから、専用アプリみたいなものが作りやすい
- 触ってみてないけど、レプリケーションとかスケールアウトとかみたいな大規模サービス向けに使うのに必要な機能ももっていそう
それで、SolrをGlassfish配下のアプリケーションサーバとして動かしてみようと思います。手元のGlassfishが3.0.1なのでこれで試しますがご容赦ください。なお、この後取り組もうと思っているlucene-gosenは、トップページに"Lucene/Solr 3.5 or 4.0"に対応してる、と書かれてるので、その都合でSolrのversionは3.5.0としてます。
参考文献
手順は大きく以下の通りです。
とりあえず、/opt配下にSolrを展開します。
bounoki@phorni:~> cd /opt bounoki@phorni:/opt> sudo curl -O http://www.meisei-u.ac.jp/mirror/apache/dist//lucene/solr/3.5.0/apache-solr-3.5.0.tgz % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 75.0M 100 75.0M 0 0 2266k 0 0:00:33 0:00:33 --:--:-- 5802k bounoki@phorni:/opt> sudo tar -xzf apache-solr-3.5.0.tgz bounoki@phorni:/opt> cd /opt/apache-solr-3.5.0/example/solr/ bounoki@phorni:/opt/apache-solr-3.5.0/example/solr> pwd /opt/apache-solr-3.5.0/example/solr
上記、example配下のsolrディレクトリがsolr.solr.homeになります。
次に、index等のデータ用ディレクトリを作成します。
bounoki@phorni:/opt> sudo mkdir /var/solrdata bounoki@phorni:/opt> cd /var/solrdata bounoki@phorni:/var/solrdata> pwd /var/solrdata
このディレクトリがsolr.data.dirになります。
Glassfishに渡すプロパティは以下の通り。
プロパティ名 | 値 |
---|---|
solr.solr.home | /opt/apache-solr-3.5.0/example/solr |
solr.data.dir | /var/solrdata |
そしたら、Glassfishの管理画面(http://
- 『ツリー』から『Enterprise Server』を選択。
- 『システム設定』タブをクリック。
- 『追加プロパティ』の欄に先ほど整理したプロパティを設定。
- 右上の『保存』をクリック。
- プロパティを反映するため、Glassfish Instanceを再起動。コマンドでもよいし、GUIからでもよい。
次に、Glassfishのautodeploy配下にwarファイルをぶち込みます。ぶち込むdomainは各自の環境に合わせてお選びを。
bounoki@phorni:/opt> sudo cp /opt/apache-solr-3.5.0/example/webapps/solr.war \ > /srv/glassfishv3/glassfish/domains/domain1/autodeploy bounoki@phorni:/opt> ls /srv/glassfishv3/glassfish/domains/domain1/applications/ solr/
そしたら、以下の通りsolrを指定してGlassfishにアクセスすれば"Welcome to Solr!"が表示されるはず。
http://
以上、GlassfishへのSolrの組み込み手順でした。
alfrescoを使い倒そうとしてみている
alfrescoを使い倒そう(させよう)としていろいろとあがいてみている。
とりあえずオフィシャルのCommunityのwikiくらいのことができれば
それなりに取っつきやすいんじゃないか、誰しも多少は見たことのあるMediaWiki Likeだし、
などと思っていたが、実際にMediaWikiだった。
騙された気分だぜ…
http://wiki.alfresco.com/wiki/Alfresco_MediaWiki_Installation_Instructions
に連携方法が書いてある。
tcpdumpの結果をterminalから取得する
ヘッダの解析をしたいとのことで、環境に手を加えずにパケットダンプを取得する方法を考えています。本職のネットワーク機器での対応(L2SWでmonitor)は設定変更とセンターへの入館を伴うので避ける。
とりあえず思いついたのがtcpdumpの結果を標準出力に出してログとして取得する方法。できればpcap形式で取得してあとからWiresharkで解析したいので、バイナリで取得したい。。。
とりあえず下記方法で可能らしい。
bounoki@phorni:~> sudo tcpdump -n tcp port 80 -s 1518 -w - | base64
こいつで、base64で結果が出力される。tcpdumpの結果がフラッシュされるタイミングに間隔があるので、取得が終わったら別コンソールからkillコマンドで頃す。
bounoki@phorni:~> sudo killall tcpdump
そしたら、
31 packets captured
31 packets received by filter
0 packets dropped by kernel
のようなゴミデータが残ってると思うのでこれらを取り除く。ログを取得する際にうまく改行されるように(改行などの制御コードも正しく出すように)してやると取り除きやすいと思います。
取り除いたら、改行コードをLFにしてテスト用Linuxサーバ等に移し、以下のコマンドでpcapにデコード。
bounoki@phorni:~> base64 -d
> .pcap
Python3でとあるURLに日本語パラメータでアクセスするときの文字コードについて
HTTPの主たるメソッドであるGET/POSTについて。Pythonで書いたコードからサイボウズの設定を更新したいので、POSTを対象にして実験してます。普段UTF-8しか使わない僕は想定通りShift_JISで書かれたサイボウズに泣かされるのであります。
python2系から3系になったことで、Unicodeや文字列に対する考え方が変わっていて、今までInの時とOutの時に「外に合わせれば動く」という考えだけでよかったのがうまくいかなくなった。たとえば"スパム!".encode("utf-8")がbytes型になる、とかにより。
ログインからさきのセッション管理はhttp.cookiejarを使えば簡単なのでそれはよしとして、POSTするときのクエリの文字コードがメインテーマとなります。
検索クエリをURLエンコードする際、日本語の文字列を正しくエンコードしするためにurllib.parse.quote_plus()を使う。ここではそれをprintで表示する*1。
import urllib.request import urllib.parse opener = urllib.request.build_opener() r = opener.open("http://search.yahoo.co.jp/search?ei=shift_jis&p=" \ + urllib.parse.quote_plus("天使ちゃんマジ天使",encoding="sjis")) print(r.readall().decode("utf-8"))
日本語が出てこないなら(UALエンコード不要な文字なら)、"?"と"&"でjoinするようなカッコ悪い実装をしなくても、
params = urllib.parse.urlencode({"ei" : "Shift_JIS" , "p" : "tenshi maji"}) r = opener.open("http://search.yahoo.co.jp/search", data=params) print(r.readall().decode("utf-8"))
ってな具合にすればいける。
POSTについてもyahooでは2010/07/29時点では試すことができて、下記の通り。
r = opener.open("http://search.yahoo.co.jp/search" , data = "ei=Shift_JIS&p=" \ + urllib.parse.quote_plus("天使ちゃんマジ天使",encoding="sjis")) print(r.readall().decode("utf-8"))
urllib.parse.urlencode()で辞書使ってかつ日本語解釈ってできないのかしら。
動くようになったし、まぁいっか。