Hiding SharePoint list column from list view

This article is about a javascript snippet that hides a specific column from a SharePoint list view. If I google this subject, most of the articles found on the Internet is about hiding a specific column from new, display or edit form. Although javascript can do this, you can do the same thing without use of javascript by enabling list content-type as well. See here. Not many articles talks about hiding columns from the list view though. (This one is an exception) The link above shows the solution for toggling the particular columns. I only needed to hide a column from the list. But why do I even want to […]

Android 4.2以降(Nexus 7,Samsung Galaxy etc.,)のUSB Debugモードを有効にする方法

ようするにFirst Generation Nexus 7のUSB Debuggingを有効にするにはどうしたらよいのか、という問題。 従来のAndroid Devciceはセッティングに行ってDevelopper Optionsを選び、その中のUSB DebuggingをOnにすれば事足りるのだが、なんとNexus7ではこのDevelopper Options自体が存在しない。 そんな馬鹿な、とググってみたところ、StackOverflowに以下の記述があった。 SettingのAboutを選択し、Build Numberの欄を7回タップする。 Voodooじみているが、これで Developper OptionがSetting Menuに出現する。 4.2のデバイスってみんなそうかしらん。 と思って手持ちのGalaxy S3(firmware 4.4.2)を眺めてみれば、 おんなじじゃん。 知らなかったのは私ばかりなり。 Easter Egg のノリだね。

Sprint: your account can not be validated [Solved]

I got this recorded message when I swapped my cell phone from Samsung Victory to Galaxy S3 and tried to call somebody. The S3 used to belong to my son, but he upgraded it to HTC One. which left the S3 unused. The phone is more capable than Samsung Victory that I was using, so I decided to swap the phone. The process couldn’t be easier. After hard resetting and wiping my son’s setup including gazillion of text chat history, It can be done online by logging into sprint.com and select “upgrade my phone” menu selection from my device page. Sprint.com site is clever enough to recognize that I have […]

SSDに換装したWindows7 AHCI モードでクラッシュ

一世代前のノートブックパソコン、まだまだ使えるのだが、動作がやや緩慢、そこで最近ぐっと購入しやすい値段になってきたSSDに換装してみた。 使ったのは250GBのSamsung840EVo。 Windows用のマイグレーションソフトウエアが付属してくるのでUSBを通してSATAに接続できるケースさえ手元にあればディスクイメージのコピーは問題なくできる。 あとはパソコンの裏ケースをはずし、HDDを取り出して、SSDを組み付けるだけ。ただし、Dual Bootで入れておいたMint Linuxはきれいに無視されるので、バックアップとリストアをしっかりおこなっておいて、再導入する必要があった。またWindowsのリカバリーパティションも複製されないようなので、リカバリーディスクを作成しておく必要がありそうだ。 Windows7の起動とアプリケーションの起動が圧倒的に早くなった。 めでたしめでたし、と思ったが、付属のSamsung Magicianという管理ツールを使ってみると、AHCIモードが無効になっているので、最適状態ではない、というようなメッセージが出ている。 AHCIというのはディスクの管理モードのようで、BIOS画面を見るとHDDのアクセス方法の選択肢の一つになっていた。 このパソコンの規定値はIDEアクセスモードになっており、これをAHCIに変えてやればよいと思ったのだが、設定を切り替えて作動させてみるとWindowsが起動途中でクラッシュする。いわゆるBSOD(Blue Screen of Death=青いエラー画面)が出てその内容を読む暇もなくリセットがかかる。 しょうがないので、Bios設定を元にもどし、再起動。 Google検索で”BSOD Windows 7 AHCI SSD”のキーワードで検索したら、 以下の記事を発見。なんと4ねんん以上も前に書かれている。こういうEarly Adapterがいてくれるおかげで後からついていく我々はネット検索するだけで問題解決ができてしまう。 HKEY_LOCAL_MACHINE / SYSTEM / CurrentControlset / Services /msahci このレジストリの値を0に変更(自分の場合は3になっていた)してWindowsを終了し起動の途中でF2キー(Deleteキーの場合もある)を押してBios画面を呼び出して AHCIに設定しWindows7を起動すると今度はクラッシュすることなく必要なドライバーを導入した後、再起動を促されるのでもう一度リブートして解決。

Python、comprehension を使った一括処理

Pythonには” … for … in”という構文を使った、一括でメンバー要素を処理する機能がある。Comprehensionと呼ばれ、リスト、セット、辞書に使える。 リストの使用例 >>> a_list =list(range(10)) >>> a_list [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> a_list = [x**2 for x in a_list]  –List comprehension >>> a_list [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] If を使い、要素のFilteringをしてから処理することもできる。下はリスト中、偶数だけを処理して新しいリストを作成した例。  >>> a_list = list(range(10)) >>> a_list = [x**2 for x in a_list if (x%2 ==0)] >>> a_list [0, 4, 16, 36, 64] Python Dictionary の キーと値をスワップして新しい辞書を作る。 >>> week_dict={‘Mon’:’月’,’Tue’:’火’,’Wed’:’水’,’Thu’:’木’,’Fri’:’金’,’Sat’:’土’,’Sun’:’日’} >>> youbi_dict={value:key for key,value in week_dict.items()} >>> youbi_dict {‘木’: ‘Thu’, ‘土’: ‘Sat’, ‘月’: ‘Mon’, ‘火’: ‘Tue’, ‘水’: ‘Wed’, ‘日’: ‘Sun’, ‘金’: ‘Fri’} >>> week_dict {‘Mon’: ‘月’, ‘Fri’: ‘金’, ‘Tue’: ‘火’, ‘Sat’: ‘土’, ‘Sun’: ‘日’, ‘Wed’: ‘水’, ‘Thu’: ‘木’} >>> […]

Raspberry Pi でパソコン電源をInternet上から操作

家の外部からタブレットなりノートパソコンなりを使って自宅のパソコンにリモートアクセスするためのアプリというのは色々ある。Internet経由でアクセスする、というもので、Linuxでは当たり前のように実装されているし、 WindowsでもRemote Desktopというアプリケーションが同梱されているし、ファイアウオールでRemote Desktopが使えない環境でもWebベースのTeamViewer とかlogmeinというサードパーティの製品を使えばセキュアな接続がいとも簡単にできてしまう。 Chromeをブラウザとして使用しているのならChrome remote desktopというアプリが今の旬である。  なぜそんなことが必要か、という疑問が湧くかもしれないが自分の場合、外部からお気に入りの開発環境にログインし、コード開発を一つのマシン上で行う、という使い方がメインになっている。 もちろん将来的にすべての作業がブラウザ上でできる、という環境が構築されればそんな必要はなくなるわけだが、 問題はパソコンにアクセスするには当然のことながら当該パソコンの電源が入っていなくてはならない、という事。  エコの観点からみると年がら年中つけっぱなしになっているパソコン、というのはエネルギーの浪費に見える。 WEBサーバーを自宅のパソコンを使って構成していた時には電源をつけっぱなしにするしかなかったのだが、アイドル状態でも常に80Wくらいの消費電力が発生していた。  現在はCubieboardという、手のひらに収まるサイズのArmcortexの開発ボードをサーバーとして使って賄っており、消費電力は3W以下だ。 で、パソコンの電源を使うときだけ遠隔操作でオンする方法がないか調べてみた。  InstructableにElectric Impというモジュールを使って電源のオンオフをする方法が紹介されている。 このモジュール、SDカードと同じform factorだが、内部にWifiモジュールとArm Coretex M3を内臓したれっきとした開発ボードであって、クラウドサービスに接続してパソコンやタブレット上から専用のコントロールパネルアプリを使って接続されたデバイスのリモートコントロールができるようになっている。 InstructableではこのElectric Impに簡単なトランジスタを追加して、PCのPower switch lineを瞬間的にショート状態にする。(つまりパソコンのスイッチを押したのと同じ状態にする)ことによってPCを起動する方法が述べられている。 Electric Impの値段は25ドル程度だが、サポート用の部品(Imp用のブレークアウトなど)を買い足すと40ドルくらいの出費になりそうだ。 自宅でcubieboardのWEBサーバーを随時動かしているのであえてアカウントを作ってクラウドを使ってコントロールする必要はないわけで、 そうすると似たようなことはArduinoでもできるはずと思うわけだが、これまたArduino本体にWifi、あるいはEthernetシールドを追加すると40ドルくらいの出費になる。 CubieBoardのGPIOをパソコンのスイッチに接続して操作することも可能だろうが、部屋が2階と地下室に分かれているし、メインサーバーになっているカードのGPIOで他のデバイスをハードウエアコントロールというのは安全性の面から心理的抵抗がある。 そこで遊び終わって引出しに眠っていたRaspberry Piを使うことにした。Desktop用のLinuxが走るほどのグラフィック性能を持つボードをただの電源スイッチとして使う、というといかにももったいない感じがするのではあるが Piの値段も含めて40ドルくらいで済んでしまうのでコストパーフォマンスの面から考えると他の方法に比べても高くはない、というか他の手間を考えるとこちらのほうが安上がりの感じ。 調べてみるとデバイス制御をPythonベースのhttp サーバーから実行できるWEBIOPIというPi用のライブラリーを発見した。 これをインストールするとGETとかPOSTのHTTP用のプロトコルを使ったRESTという手法でハードウエアのコントロールができるようになる。 つまりWEBサーバー上にページを作り、そのページ上にボタンを描画して、WEBIOPIで提供されているRESTコールを紐つけるという方法でPiのGPIOピンの遠隔操作ができるようになる。 このRESTという手法、非常に単純で、urlのパスに模してパラメーターをサーバーに送ってあげるというもの。GETはアドレスをブラウザで指定するだけで実行できるのでたとえば APIですべてのGPIOの状況を取得するAPIを使うには webiopiをバックグラウンドで走らせている状態で、 https://example.com/GPIO/* とアドレスをブラウザに打ち込むだけで、Jason書式でGPIOの各ピンの状況が返ってくる。 ただし、これではページの表示自体がJasonのレスポンスになるので実用的ではなく、実際にはJavaScriptでコードを書くことになるが、webiopiにはうwebiopi.jsというヘルパーファイルが同梱されているので、使う難易度は低くなっている。 GPIOの使い方だが、 出力用に設定したGPIOピンをトランジスタを介してパソコンの電源スイッチとパラレルに接続し、パルス上の信号を出力してやるとパワースイッチを押したのと同様のことになり電源が立ち上がる。(電源が入っているときには逆に電源が落ちる)。電源スイッチへ接続されるピンはパソコンのマザーボード上のフロントパネルコネクター部分(パソコンケースのケーブル類を接続するコネクタ部分)に接続ピンがあるのでワイヤーをスプライスしてつなげてやればよい。。 また信号を出す前にパソコンの電源が入っているかどうかをわかっている必要があるのだが、フロントパネルコネクターには電源表示用のLEDへ接続されるピンも存在している。 そこでこのピンをGPIOでモニターすることによってパソコンに電源が入っているかどうかの判定をすることにした。 実際に組んだ回路。使ったGPIOピンは25をパワースイッチ用の出力に、24をLED電圧モニター用の入力にそれぞれ使用。 IntelのPC Interface 仕様(下に抜粋を載せます)を読む限り、パワースイッチ端子はトランジスタに直接接続(PWR+をコレクタ側に、PWR-をEmitter側に)しても大丈夫と思うが、5Vの小型リレーがたまたま手元にあったので使ってみた。NPNトランジスタのかわりに2N7000のようなFETを使えば、R1は必要ない。入力ピンのほうはLEDのVfでクランプされる電圧になるので規定の3.3V以下。万が一LEDがオープンとなっ場合5Vかかってしまうが、GPIOには保護用のクランプダイオードくらいはいっているのだろうと勝手に思い込んでいるので,保険は電流制限のR2のみ。 Table 5. Switch/LED Front Panel Electrical Connection Pin Signal Description 2 FP PWR/SLP MSG LED pull-up (330 ohm) to +5 V 6 PWR_SW_P Power Switch high reference pull-up (10000 ohm) to +5 V 8 PWR_SW_N Power Switch Low reference pull-down (100 ohm) to GND html pageの記述 <!DOCTYPE html> <html lang=”en”> <head> <base href=”https://example.com/” /> <title>PC power </title> <!–[if IE]><script src=”//html5shiv.googlecode.com/svn/trunk/html5.js”></script><![endif]–> </head> <body> <h2>Turn On Basement PC</h2> パソコンの電源操作ボタンでやんす。! <form class=”buttonBar”></form> <script type=”text/javascript” src=”//code.jquery.com/jquery-latest.min.js”></script> <script type=”text/javascript” src=”poweronbutton.js”></script> </body> </html> […]

困ったときはログファイル

Cubieboard2 (Arm7 Cortex Dual core 1GHz, 1GByte Ram, 4GByte Flash, OS=armhf debian 7) という、約60ドルで中国から購入したデベロッパーボードを使って運営しているホームサーバーの管理にISPConfig3という管理ソフトを導入して使用している。 Mailサーバー、Webサーバー、DNSそしてnginxプロキシなどをWEBブラウザから一括管理できるので重宝している。 このツール、HowtoForgeというサイトでサポートされていて、”Perfect Server” というシリーズで多様な組み合わせのサーバー設定のチュートリアルが掲載されている。 たとえばこの記事はOSはDebian,サーバープロキシにnginx, mailにはDoveCot、DNSにはBindを使ったサーバー構築の手順が述べられており、実は自分のサーバーはこれを参考にして立ち上げた。(DNSとNGINX、PHP、MySQLの部分はともかく、メールサーバーとメールフィルターの設定は自分ひとりの能力では手も足も出なかった。きちんと設定できたのは上の記事のおかげである)  最近バージョンのアップデートをしようと思い立ち、コントロールパネルに指示されているiSPsonfig-update.shというコマンドを実行してみた。  アップデート自体はまったく問題なく行えたのだが、 コントロールパネルにログインしようとしてみたところいつもログイン画面が出るはずのurlが空っぽのページになっている。  他のサービス(メール、Webサイト、DNS、SSHなど)は普通に動いているので、IPSConfigのダッシュボードへのログインが表示できないという限定された不具合だ。 幸いなことにISPConfigのUpdateツールがまず実行するのは旧バージョンのバックアップなので最悪の場合はリストアを行えばよいが、ページのヘッダー情報を見てみると、エラー番号が500、Internal Server Errorとなっているので、これはPHPの実行時、ページレンダリングの途中でおかしくなっている、とあたりをつけた。 NginxのErrorLogを眺めてみると大当たり、Fatal Errorが記録されていた。 11:54:25 [error] 3452#0: *528 FastCGI sent in stderr: “PHP message: PHP Warning: require_once(/usr/local/ispconfig/interface/lib/config.inc.php): failed to open stream: Permission denied in /usr/local/ispconfig/interface/web/index.php on line 31 PHP message: PHP Fatal error: require_once(): Failed opening required ‘../lib/config.inc.php’ (include_path=’.:/usr/share/php:/usr/share/pear’) in /usr/local/ispconfig/interface/web/index.php on line 31” while reading response header from upstream,云々 上のエラーメッセージはindex.phpの31行目config.inc.phpを読み込もうとしたところ、拒否されました。と言っている。 ../libr/config.inc.phpのアクセスレベルがきつすぎるようだ、。 そこでこのファイルを調べてみるとOwner,GroupともISPCONFIGとなっているのは良いとして、Ownerのみに読み書き権限があたえられており、Groupレベルで読み書き禁止となっている。  それではと、Groupレベルでの読み出しも許可に書き換えてみたところ、あっさりと復活した。 # chmod g+r config.inc.php これが普通とは思わない。何らかの理由でサーバーのワーカープロセスとファイルのオーナー情報が背反しているためにファイルアクセスできなくなっていると考える。 少し思い当たることがあって、同じサーバー内部でModxを使ったサイトを運営しているのだが、アップデートするたびにSetupフォルダーをマニュアルで削除しなくてはならない、という作業が発生している。 Setupフォルダーの削除はインストール画面でチェックをいれてやれば自動的に行ってくれるはずなのだが、このサーバーではそれができてない。 というわけで、本日わかったこと。 1. Linuxのアクセスレベル管理がいまいち理解できてないなあ。 2. Linux 不具合解析はまずError Logを読む事。

Python でテクストファイルを読み書きする。

With と For iterater を使うとファイルを明示的にクローズしないでもよいそうだ。 例題でやっているのはTest.txtというファイルから一行ずつ読み込んでリストを作成し、それをリストオブジェクトのSortedメソドで並び替えをしたのち、test2.txtというファイルに書き戻す、という作業。 なんか簡単にできるし(簡単だけど)、コメントを入れなくても読み解きやすい感じ。このあたりがPythonの強みか。 a_list=[] with open(“test.txt”, mode=”r”,encoding=’utf-8′) as a_file: for a_line in a_file: a_list.append(a_line.rstrip()) a_list = sorted(a_list) with open(“test2.txt”, mode=”w”, encoding=’utf-8′) as a_file: for a_line in a_list: a_file.write(a_line+’\n’)

PIC マイコンライターを入手したので….

30年ほど遅れたがPICマイコンのことを調べてみようと思った。 入門用に使ってみようと思うPICマイコン、資料を見ると16F84というのが盛んに議論されているが、Microchipのホームページをみてもこのマイコンはリストアップされていない。型番が古いためのようで、Gooligum Electronicsのサイトによれば、最近のPICマイコンのラインアップでさらに性能が向上し、かつ安価で入手性が良いのは以下のようなものになるらしい。 性能によって 4つのファミリーに分けられる。 BaseLine :12ビット命令系 割り込みがないなど制限があるが単純で使いやすいとのこと。 10F200(6端子)12F509(8端子)、16F506(14端子) など Mid-Range: 14ビット命令系 BaseLineの拡張版で割り込み制御、メモリーの増設PWM、モーターコントロール、I2C,SPI I/F やLCDコントロールなどの周辺回路の追加、、 12F629(8端子) 16F690(20端子) 16F887(40端子)など. このシリーズが16F84の系統らしい。 Enhanced Mid-range:14ビット命令系 Mid-rangeの拡張版でさらなるメモリーの追加、命令群の増設、Cコンパイラ用に最適化したメモリーアクセス手順、改善された実行速度など 12F1501(8端子)、 16F8124(14端子)、16F1946(64端子)など High End : 16ビット命令系 いわゆる18Fシリーズ 周辺回路にUSB,Ethernet、CANとの接続性が追加され、メモリーもプログラムは128Kまで、データも4Kまで対応 18F1220(18端子)、18F2455(28端子)、18F8520(80端子) など ややこしいのは、これらのマイコン、インストラクションは12~16ビットの幅があるが扱うデータが8ビットなのですべて8ビットマイコンだということ。 Mouser.comで値段をみると 12F509-I/P $0.85、12F629-I/P $1.10 、12F1501-I/P $0.92 (すべて8端子)ということで、 BaselineとEnhanced Mid-rangeとでは値段に差がない。 それならよりパワフルらしい12F1501をベースに勉強してみようかと思ったのだが、 データシートの最初の数ページを読んで挫折した、というか 勉強するのをやめた。 何故か。 PICマイコンはプログラム領域とデータ領域が別に取ってある。 プログラム領域は連続しているのだが、データ領域は128本の8ビットデータレジスタ(ファイルレジスタ)を一つのバンクとして、最大32のバンクを切り替えて使うようになっているらしい。 ただし同じデータをどのバンクでもアクセスできるようにいくつかのレジスタは同一レジスタへのアクセスなのだ。(たとえばバンク切り替え指定のレジスタなど) AVRに比べると煩雑な感じである。 それなりの理由があってこうなっているのだろうが、 これはもういけません。 自分の頭脳がこの先を読むのを拒否しております。 というわけでPICマイコンの勉強はしばらくおあずけ。

Arduino でAVR マイコンのプログラム

前回、手持ちのArduino MicroでAVRマイコンのライターを作成したので、それを使ってAVRマイコンをプログラムしてみる。 用意したのはAtmega168Aという28ピンのチップ。 買った状態では内部発振の1Mhzで動くようになっている。内部発振では1Mhzと8Mhzを選択できる。ちなみにArduino Unoは同系列の328P まずは手始めにArduinoのIDEを使ってArduinoのスケッチを書き、コンパイルさせてAVRチップにアップロードしてみる。手順さえ間違わなければ これでちゃんと動作してしまうんである。 168AVRのチップのピン配列(PortB,PortC,PortD etc.,) と Arduino式の(D0~D13,A0~A5) ピン配列の関係についてはここにマッピング情報がある。 LEDのBlinkスケッチを使う場合、LEDを接続するD13に該当する出力ピンはPB5である、ということがわかる。 蛇足ながら、PB6とPB7はArduinoボードではクリスタルに接続されているために入出力ピンとしては使えないが168を内部発振で使う場合には使用可能、ただしDigitalPinの定義がないので、Cに落とした記述が必要。 IDEのメニューからTarget Board を選ばなければならいないが、当然のことながらAtmega168などという選択肢はない。ので、Arduino Pro Mini(with 8Mhz Atmega168)というのを代わりに選ぶ。 ただし、AtMega168は工場出荷時の内部クロックは1Mhzに既定値設定されている(内部発振8Mhzを8分割) 上記のBoard 選択では8Mhz 用にコンパイラがタイミングループを調整するので1秒の点滅を指定すると8秒の点滅になる。 これが嫌ならAVRDUDEを使ってAtmegaのFuseを書き換え内部クロックを8Mhzに設定するか、または Arduino/hardware/arduino/boards.txt にならって1Mhz のAtmega168をバリエーションとして追加してあげる必要がある。 8Mhzに設定するにはAVRDUDEを使ってフューズ設定を書き換えることになる。 C:\Program Files (x86)\Arduino\hardware\tools\avr\bin\avrdude.exe-c arduino -p atmega168 -P com5 -U lfuse:w:0xe2:m Boards.txtへのアイテムの追加はこの記事が参考になる。 Arduino IDEではShiftキーを押しながらアップロードボタンをクリックするとUSBに接続されているライターを使ってターゲットBoard(Arduinoまたはマイコンチップ)にコードをアップロードしてくれる仕組みになっているが、このためにはToolメニューの中からプログラマを指定する必要がある。Arduino Unoをライターとして使う場合は”Arduino as ISP” という項目を選べばよいのだが、自分が使っているArduino Micro はこれでは動作してくれない。(Leonardでも同様) この設定はArduino/hardware/arduino/programmers.txtというファイルにあるが、Unoに指定の Arduinoisp.protocol=stk500v1 ではうまくリセットがかからないようだ。以下のようにこのprogrammers.txt にMicro/leonard 専用の選択肢を追加してIDEを再起動し解決 arduinoisp.name=Arduino Micro or Leo as ISP arduinoisp.communication=serial arduinoisp.protocol=arduino arduinoisp.speed=19200 これで、Atmega168のPB5にLEDを接続し、BlinkスケッチをダウンロードするとLEDが点滅を始める。 Arduinoを使うと豊富なライブラリーが使えるという利点があり、ATtinyをArduino IDEでプログラムしようというプロジェクトもあって資料も豊富だ。 欠点としては 1.ターゲット用にBoards.txt項目を追加する必要がある。 ただし、一度の作業。 2.Arduino IDEの使い心地。 これは個人的な嗜好の問題だがAVR用にC/C++をコーディングするのならArduino IDEよりも強力な無料のIDE (Eclipse with AVR  plugin [Linux, Windows],   AtmelStudio [Windows])が存在する。