月別アーカイブ 3月 2018

takahashi 著者:takahashi

WindowsのGUI上で簡単にシンボリックリンクを作成できるツール’Link Shell Extension’

シンボリックリンク。Windowsではかなりマイナーな存在なので、馴染みのない方も多いかと思います。
基本的に、ショートカットのようなものであることには変わりがないのですが、役割の面で大きく異なってきます。

通常のショートカットは、ファイルをダブルクリックすることで、あらかじめ設定されていたパスのアプリやフォルダを直接開かなくてもいい、という利点があります。
ただし、アプリから見るとただの”ファイル”であり、ショートカットをどのように扱うかはアプリに依存します。また、ショートカット経由のアクセスでも、実体ファイルの場所は元ファイルがある場所にある、という認識となります。(ショートカットを開くと、元ファイルのパスが開きます。)

一方のシンボリックリンクは、ファイルシステムベースでの”リンク”でアプリ側が特別に対応していなくても認識してくれます。
加えて、シンボリックリンクを開くと元ファイルの場所へジャンプするのではなく、シンボリックリンクのある場所に、元ファイルと同じファイルがあるように扱われ、シンボリックリンクに対して内容の変更を行うと、元ファイルに対しても同じ変更が行われます。

例えば、別々の場所に同じファイルを置き、内容も完全に同期しておきたい、時があります。
こういった時にシンボリックリンクは便利です。

このシンボリックリンクですが、Windowsでは標準でコマンドプロンプトからでしか作成することができません。
ほんのたまに使う分なら問題はないのですが、使いたい頻度が高いと、毎回コマンドプロンプトを開いてコマンドを打つのはちょっと面倒です。

LinuxなどではGUIからシンボリックリンクを作ることができるようになっていることが多いので、Windowsでも同じようなことができないかなーと調べて見つけたのが
‘Link Shell Extension’です。

Link Shell Extension公式サイト
Link Shell Extension – k本的に無料ソフト

インストール後、ファイル/フォルダを右クリックするとコンテキストメニューの中に”リンク元として選択”というメニューが出てきます。

そのあと、何もないところを右クリックすると”リンクの作成”が出現し、ポイントするといろんな種類のリンクが表示されます。
この中から”シンボリックリンク”を選択すると

こんな感じでシンボリックリンクが作成されます(要管理者権限)

なお、右ドラック&ドロップでも同様の操作ができます。

なお、シンボリックリンクは、リンク自体は削除しても元ファイルは消えませんが、シンボリックリンクの中にあるファイルを削除すると、元ファイルも削除されてしまうので注意が必要です。
また、種類によってはリンクを消した時点で元ファイルも消えてしまうものがあるので、こちらも要注意です。

それぞれのリンクの特性を理解して、適材適所に使っていけば、ファイル管理がかなり楽になりますよ。

  • この記事いいね! (0)
村上 著者:村上

【Android】アプリに不要なパーミッションが追加されているときの対処法

今回初めて遭遇しましたが、開発したAndroidアプリに入れた覚えのないパーミッションが追加されているときの対処法です。
なお、追加されていたパーミッションは、android.permission.READ_PHONE_STATE でした。
が、アプリ内ではこの権限は不要のため(そもそも追加した記憶もない)、こちらを削除します。
ですが、そもそも パーミッションを記述してあるはずの AndroidManifest.xml に、READ_PHONE_STATE が記述されていないんですよね…。
本当に、一体いつ追加されたのやら。

参考にさせていただいたサイトはこちら。

対処法: 不必要なPermissionが勝手に追加されてるとき|Android開発・エラー置き場
http://android.tecc0.com/?p=161

で、削除方法ですが、

  1. targetSdkVersion を更新
  2. LibraryのtargetSdkVersion を更新
  3. AndroidManifest.xmlで上書きして削除

上記の3つがあるようです。
私は一番手っ取り早そうな3をチョイスしました。

 

3.の対処法は、AndroidManifest.xml に下記を追加して、特定のパーミッションを無効にします。

// パーミッションを無効に
<uses-permission android:name="android.permission.READ_PHONE_STATE" tools:node="remove" />

ポイントは最後の方に書かれている tools:node=”remove” です。

こちらを記述したら、あとは通常通り ビルド → 実行します。
スクショを撮り忘れましたが、設定 > アプリ からアプリの詳細を確認したところ、許可された権限の一覧から 不要な権限が削除されていました。

 

以上、アプリの不要なパーミッションを削除する方法でした。
ですが、何故このパーミッションが追加されたのか?という根本的な解決にはなっていないので、対処法 1か2で、解決策を探りたいと思います。

  • この記事いいね! (0)
著者:ym

Google Play Music Manager で Google クラウドに 50,000 曲保存

出来るらしいです。今さら初めて知りました。
しかも無料。

Google Play Music Manager

Google Play Music Manager

自分は iPhone ユーザではないので、スマホのSDカードへ同期ツール [WiFi Tunes Sync Pro] 使って iTunes のライブラリを PC と Android アプリ使って同期させていたのですが、この Google Play Music のストレージがあればクラウド化できますね。

Google Music Manager を常駐箚せとけば、手元PCの iTunes ライブラリと同期を取ってくれて iTunes で取り込んだデータはそのまま Google Music Player で流せる。

Google Play Music Manager

Google Play Music Manager

さらに、この Music ストレージは Google Home でも利用できるらしいので、SONY の LF-S50G に手をだすきっかけに。もちろん Android スマホで再生とかできるようになる。

  • この記事いいね! (1)
村上 著者:村上

【JavaScript】クライアント側にデータを無期限に保存できる「LocalStorage」

クライアント(ブラウザ)側にデータを保存する方法としては、Cookie がよく使われているかと思います。
が、個人的に使い勝手が良いと思っているのが、「Local Storage」です。

Local Storage も Cookie と同じように、ブラウザにデータを保存できます。
データの保存・取得・削除・全クリアなどの操作は、JavaScriptで行います。
Cookie と LocalStorage の違いをまとめた表はこちら。

別ウィンドウでのデータ共有 データの有効期限 データ量の上限 サーバーへのデータ送信
Cookie できる 指定期限まで有効 4KB サーバーへアクセスするたびに毎回自動送信
LocalStrage できる 永続的に有効 5MB 必要時のみスクリプトやフォームなどで送信

なお、こちらの表は、下記のサイトから転載させて頂いております。

Web Storage ‐ HTML5のAPI、および、関連仕様
http://www.htmq.com/webstorage/

 

具体的な使い方は、下記のとおりです。
 

・データの保存、上書き

window.localStorage.setItem('nickname', 'murakami');
localStorage.nickname = 'murakami';

上記のどちらでもOKです。
個人的には、上の書き方の方が好みなので、こちらを使っています。
なお、1つめの記述方法ですが、window は省略可能です。
 

・データの取得

var name;
name = window.localStorage.getItem('nickname');
name = localStorage.nickname;

取得するための記述はこんな感じ。
なお、こちらの書き方についても、window は省略できます。
 

・データの削除

window.localStorage.removeItem('nickname');  // 'nickname'の値を削除
window.localStorage.clear();  // 全削除(初期化)

最後はデータの削除ですが、アイテム名を指定して、その値のみを削除する方法と、全データを削除する方法があります。
無いとは思いますが…書き間違えにご注意ください。
なお、例にもれず、こちらも window を省略可です。

 

個人的には、Cookie よりも直感的に操作出来るし、意図的にデータを消さない限りデータが半永久的に残るので使いやすいです。
Cookieで苦しめられた記憶のある方は、こちらの Local Storage の導入を検討してみてはいかがでしょうか。

  • この記事いいね! (3)
takahashi 著者:takahashi

Gitバンドルのbashを使ってWindowsのcmdをUnixっぽくしてみる

クライアントマシンのOSはもっぱらWindowsを使うことがほとんどなのですが、サーバーはLinux/Unix系OSを使用することが多いです。
現行Windowsでは、OSに必要な操作はほぼGUIで完結するので、CUIで触るのはLinux系OSがほとんどでした。

ところが、開発やサーバー管理などをしているとWindowsを使っていてもCUIに頼らないといけない場面というのがでてきます。
普段使い慣れているLinuxとかなり使い勝手の違うWindowsのシェルは、いざ触ってみると戸惑うことが多いです。
また、Linuxは未だにCUIで使われる機会がおおいためか、CUIベースのツールはかなり充実しています。これらのツールは、さくっとサーバーの状態を確認したいときに非常に便利なのですが、Windowsでは標準で搭載されておらず、インストールもちょっと手間がかかるものも多いです。

かといって、何か操作する度にLinuxが動いているマシンにログインするのはちょっと面倒です。
そこで、Unix/Linux系で使えるポピュラーな機能の一部をWindowsに導入できないかなーと考えていろいろ調べていました。

VMで動かすとファイルのやりとりとかいろいろ不便。
かといってCygwinやWSLみたいにガッツリUnixライクな環境までは必要ない。

という方向けの、Windows上でネイティブに動く、簡単に”UNIXっぽい操作環境”を作る方法を紹介します。

実は、あるツールを入れていると、簡単にWindowsのコマンドプロンプトをUnixっぽくできます。
バージョン管理ツールのGitです。

実はGitをインストールすると、Unix/Linuxで非常によく使われるシェル”bash”のWindows版がついてきます。

今回はこれを利用します。
Gitのインストールが完了していれば

C:\Program Files\Git\bin

あたりのフォルダの中に、
“bash.exe”
というファイル名でインストールされているかと思います。
これをコマンドプロンプト上で開けるように、環境変数内の”Path”に、C:\Program Files\Git\binを追加しておきます。


スタートから”環境変数”と検索して”環境変数を編集”をクリックします。


“ユーザー環境変数”内のPathを選択し、”編集”をクリック


“新規”をクリックして、

C:\Program Files\Git\bin

を追加します。

これで準備完了。
コマンドプロントで

bash

と入力すると、なんとWindows上のcmdでbashが使えてしまいます。(※WSLとコマンド名がかぶってしまったため、別の名前で起動するように書き換えています。)


lsやcat tail grep mv cp などの基本的なコマンドはこのbash.exeを起動するだけで使うことができます。

ちなみに、Windowsにインストールされているコマンドもbash上から実行が可能です。

それ以外の基本的なコマンドは、以前紹介したchocolateryでインストールすれば、そのままbash上でも使えます。
なお、bash起動時のaliasの設定などは、LinuxやUnixと同様に、自分のユーザーフォルダに”.bashrc”ファイルを作成して記述すれば読み込んでくれます。

cmdやPowerShellがちょっと使いづらいなーと感じたときに、bashに切り替えるだけで、操作がかなりしやすくなって便利です。
LinuxerやUnixerなWindowsユーザーの皆さんは是非試してみてはいかがでしょうか?

  • この記事いいね! (0)
著者:ym

SEP から Norton Security by Symantec

Symantec Endpoint Protection (SEP) から「ノートンセキュリティ by Symantec」へ。

スタッフが沢山いる会社では SEP の方が、管理面や統合ポリシー管理・配布など、多くの管理面からよいですが、小さな企業では逆に出費が増えてしまいます。

そのため、社内のウィルス対策ソフトは、今までと同じく「シマンテック」なウィルススキャンエンジンの「ノートンセキュリティ」へ変更することにしました。

ブラウザは Google Chrome や Firefox 側にまかせて、機能については必要最低限に絞っていくかな。

Norton Security by Symantec

Norton Security by Symantec

  • この記事いいね! (0)
takahashi 著者:takahashi

Torの仕組み

よくハッカーが出てくる映画で、「クソッ、複数の海外サーバーを経由されていてアクセス元が特定できない!!!」なんて展開がよく出てくるかと思います。
実際のところ、現実でそんなことが可能なのかと思ってしまいますが、実際に複数のノードを経由することで自分のアクセス元情報を隠して相手サーバーに接続することができる仕組みが存在します。
しかも、それを利用するのに映画に出てくるハッカーのような特別な知識は必要ありません。誰でも利用できます。

この仕組みは”Tor”とよばれています。
名前を聞いたことがある方は多いのではないでしょうか。

Torの仕組みはちょっと面白いです。
まず、Torを使ったネットワークでは、デフォルトで必ず3つのノードを経由するようになっています。

匿名通信「Tor」はどういう仕組みなのか分かりやすく解説 – Gigazine

◆リレーのタイプ
デフォルトではTorは3つのリレーを経由することになっています。この3つのリレーはそれぞれ特定の役割を担っています。

・ガードリレー(Guard Relay)
Torネットワークの入り口部分にあるリレーが「エントリー/ガード リレー」です。安定して高帯域を持つと示されたリレーがガードリレーに選ばれます。

・中間リレー(Middle Relay)
「中間リレー」はガードリレーから出口リレーへトラフィックを中継するリレーです。このリレーを配置することで、ガードリレーと出口リレーがお互いの情報を得られないようにしています。

・出口リレー(Exit Relay)
「出口リレー」はTorネットワークの終端にあるもので、その名の通り通信の出口となる部分です。出口リレーが最終的な目的地にトラフィックを送ることになります。

以下の図はTorネットワークでの経路を簡単に示したもの。ユーザー(Client)はTorネットワークの入り口となるガードリレーから中間リレーを経由し出口リレーに到着し、最終的な目的地となるウェブサイトなどに到着するというわけ。もちろんこの経路は複数あるリレーの組合わせなので、一定時間ごとに変更されるようになっています。

ただ、これだけではまだ完全に安全とは言えません。
各ノードに、どのIPのユーザーのデータがどこへルーティングされたかが各ノードに記録される可能性があるためです。

そこで、TorはTorネットワークへ情報を送信する前にデータを暗号化し、さらにノードを経由するごとに多重に暗号化をかけていくことで、どのネットワークからアクセスされたのかを、最終的に把握できないようにしています。
これにより、Torネットワークでは、提供される各中継ノードが信頼できなくてもセキュア性を保てる設計になっています。


Gigazineより引用
一見するとただのアンダーグランドなツールに見えてしまいますが、なぜこんな仕組みが存在しているのでしょうか。
そこには社会的な理由があります。

それは、インターネット上の自由な表現を政治的な検閲や弾圧から守る必要があるからです。
日本に住んでいるとピンとこないですが、国によっては、インターネット上での情報取得や、発言を検閲し、意図的に制限、場合によっては懲罰を行う国があります。
しかし、インターネットは本来的に自由な空間です。誰でも自分の好きな意見を発信し、好きなように表現をすることができます。
そのインターネットに対して、言論の統制を目的とした介入を行う国が、残念ながら出てきてしまいました。

自由な表現を保護するため。自由な発言しても迫害を受けないように保護するため。
Torは自由な思想が認められない国々にいる人々の人権保護に、一役買っているというわけです。

どんな技術も、使い方次第では薬にもなるし、毒にもなります。そしてそれは強力であればあるほど影響力も大きくなります。
Torが強力なのは必然でした。”権力”という、強力な圧力に勝てるだけの物が必要だったからです。

願わくば、Torのような仕組みに頼らなくてもインターネットを安心して自由に楽しめるような世の中になってほしいものですが、現状を見るとその日が来るのはまだまだ先のことなのかもしれません。

  • この記事いいね! (0)
村上 著者:村上

【コマンド】フォルダ構造をファイル名まで含めてツリー階層で表示する方法

使用頻度が少ないとすぐに忘れてしまうので、覚え書きとしてまとめ。
今回は、フォルダ構造をツリー階層で表示してくれるコマンドプロンプトのコマンド「tree」についてです。

 

コマンドプロンプト上で「tree」コマンドを実行すると、下の画像のように、現在のディレクトリ以下のフォルダをツリー階層で表示します。

※なお、一部のディレクトリ名等は、念のため伏せさせていただきました。
が、これだけだと、ディレクトリ名までしか表示されません。

で、ディレクトリ内にあるフォルダの名前まで表示するためには、コマンドのオプションを使用します。
使うのは「/F」というオプションで、tree コマンドの後ろに付けて実行します。
実行結果は下記のとおりです。

ちゃんとファイル名まで表示されました。

オプションはこれ以外にも、「/A」という ASCII文字で表示するものもあります。
こちらを指定すると、下のように表示されます。

そこまで大きく変化はしていませんが…線の表現の仕方で何となく見やすい気がしますね。
今回はあまり変化がよく分かりませんでした。

 

以上、フォルダ構造をツリー階層で表示する方法でした。
linux でもコマンドがインストールしてあれば使えるので、Windows・Macの両方で使えます。
資料作成の時に便利そうなので、機会があったらどんどん活用してきたいと思います。

  • この記事いいね! (0)
著者:ym

Adaptec RAID maxView Storage Manager でファームウェアバージョンアップ

 
遠隔 IMPI 経由で、Adaptec RAID コントローラのファームウェアバージョンアップをする為、試行錯誤しました。
 
 
 
まずは Adaptec RAID maxView Storage Manager の USB ブートイメージファイルを Adaptec サイトからダウンロードしてきます。ISOイメージをマウントさせ、起動。
 
 
しかし、そのUSBブートイメージには新ファームウェアは無いのでWindowsでVHDイメージをFAT32で作成してWindowsへマウント、ファームウェアを格納して、Windowsから切り離しておきます。
更に、拡張子 vhd を img へ変更して IPMI のイメージマウント機能でアタッチ。
アタッチすると、USBブートして起動している Storage Manager 側で検出され、maxView のファームウェア選択が出来るようになります。
 
 

遠隔でBIOS更新とか、ファームウェア更新というのは大変。

無事バージョンアップが完了しまいた。

FreeBSD で arcconf getconfig 1 をすると、kill -KILL も出来ないプロセスとなってしまう症状があるのでバージョンアップをしたのですが、これで解決できるとよいが。

  • この記事いいね! (0)
村上 著者:村上

【JavaScript】クリックイベント等で取得したオブジェクトの中身

JavaScrip の クリックイベント等で、よく下記のようなコードを書くかと思います。

$("#button").on("click",function(event){
    // クリック時に実行したい処理
});

で、この時に取得できるオブジェクトから取得できる値の中で、使用頻度の高そうなものをまとめてみました。
今までは、イベントをキャンセルする event.preventDefault(); くらいしか使ったことがなかったんですよね。

 

・DOM要素の取得

var dom = event.target;

クリックしたDOM要素を取得できます。
が、これはこのまま使うよりも、後述する、ID・class名の取得と一緒に使う事の方が多そうですね。
 

・クリックした座標の取得

// x座標
var x = event.x;
// y座標
var y = event.y;

こちらはクリックした位置を取得できます。
click イベント以外にも、mousemove イベントや touchmove イベントでももちろん使えます。
 

・ID、class名の取得

// ID名取得
var id = event.target.id;
// class名取得
var class = event.target.className;

先述した、DOM要素の取得で取得できた要素の ID名、class名を取得できます。
 

・要素の幅と高さ

var width = event.target.offsetWidth;
var height = event.target.offsetHeight;

target で取得できた要素の幅と高さを取得する方法です。
単に width、height と記述しただけでは取得できないので、そこは要注意ですね
 

・要素のスタイル

var eventType = event.target.style;

要素のスタイルを取得できます。
これは .css() メソッドと一緒に使うことが多そうかな?
 

・イベントタイプの取得

var eventType = event.type;

イベントの種類を取得する方法です。
これも便利そうですね。

個人的には、要素名を取得するメソッドがあるとよかったのですが、無さそうだったので…今回はclass名の取得で対処しました。
まあ、でもclass名でも問題はなかったです。
…良く思うのですが、一度アルゴリズムでハマって考え込んでしまうと、「このやり方でなければいけない」と思い込んでしまうので、柔軟な発想って重要だなとつくづく思います。

 

以上、クリックイベント等で取得したオブジェクトから取得できる値の一覧でした。
他にも、要素の親要素・子要素を取得する方法もありましたが、今回は割愛します。
詳しくは、今回参考にさせていただいた下記のサイトをご覧ください。

【JavaScript】クリックイベントで取得したオブジェクトの使い方 まとめ|Web制作会社スタイル
http://www.hp-stylelink.com/news/2014/04/20140422.php

  • この記事いいね! (0)