SharePoint online :: modifying “New item or Edit this list” to “Edit this list”

This is my first “SharePoint Online” related javaScript.(I am still experimenting with nuance of SP online)
This script changes “New item or Edit this list” links to simpler “Edit this list link.


/**
* Created by A2life on 3/24/2016.
* Modify new or edit div to "edit this list" only
* modify "New items or edit" elements on entire page (not just webPart this is attached to)
* */
(function () {

var thisContext = {};
thisContext.OnPostRender = modifynewEdit;
SPClientTemplates.TemplateManager.RegisterTemplateOverrides(thisContext);

})();

function modifynewEdit() {
// jQuery library is required in this sample
// Fallback to loading jQuery from a CDN path if the local is unavailable
(window.jQuery || document.write('<script src="//ajax.aspnetcdn.com/ajax/jquery/jquery-1.11.3.min.js"><\/script>'));

jQuery("td.ms-list-addnew:contains('new')").each(function (index) { //only respond to "New" elements
var edit = $(this).find('a:contains("dit")'); // because I am looking for "[E|e]dit"
edit = edit.text("Edit").add("<span> this list</span>"); // reconstruct link with proper words
$(this).html(edit);
});
}

attach this to list webPart as jsLink parameter. If uploaded to Site Assets folder as “modifyEdit.js” , it should look like “~site/SiteAssets/modifyEdit.js” . “~site” is a token for the site that sharePoint uses to resolve the url reference.

Note on this code.

  • The document.write line dynamically writes a script tag for jQuery. This appears to be more reliable way of loading jQuery rather than referencing to the file within script tag.
  • The code creates a context override for onPostRender SP event for the webPart (of item list view) being attached. This event seems to fire even when other list view on the same view is changed  (and the code invoked will affect other list views on the same page as expected) so the function modifynewEdit is attached to this event.

Python3 の文字列 覚書

Python3ではstring = unicode

string をアレーとして考えてslice するときもマルチバイト文字を気にする必要がない。

>>> s = 'pythonに、どっぷりつかる'
>>> len(s)
15
>>> s[8:]
'どっぷりつかる'
>>> s[:6]
'python'
>>> s[:7]+s[8:12]
'pythonにどっぷり'
>>> 

ただ、よいことばかりではなく、fileなどからのIO処理では読み込まれるのがバイト列になるため変換をしてあげる必要がある。 Python 2.7では必要なかったのでPython2.xのプログラムを移植するときに注意が必要。encode()としてunicodeのバイト列表示、decode()でUnicodeのバイト列をUnicodeの文字列表示

>>> s.encode()
b'python\xe3\x81\xab\xe3\x80\x81\xe3\x81\xa9\xe3\x81\xa3\xe3\x81\xb7\xe3\x82\x8a\xe3\x81\xa4\xe3\x81\x8b\xe3\x82\x8b'
>>> b'python\xe3\x81\xab\xe3\x80\x81\xe3\x81\xa9\xe3\x81\xa3\xe3\x81\xb7\xe3\x82\x8a\xe3\x81\xa4\xe3\x81\x8b\xe3\x82\x8b'.decode()
'pythonに、どっぷりつかる'
>>> 

最初のバイト列がUnicode以外の文字列の場合はencodingを指定

>>> chara = b'\x63\x6c\x69\x63\x68\xe9'
>>> print(chara)
b'clich\xe9'
>>> print(chara.decode('latin-1'))
cliché

IIS のurls rewrite を使ってmodxのfriendly url を有効にする。

たとえIISサーバーを使っていてもHelicon Ape というツールをIISに組み込めば、modxについてくる.htaccess をそのまま使っのfriendly url を活用することはできているわけだが、今回はIISのURL rewrite module (IIS 7 の場合は別途ダウンロードで組み込む)を使って同じことをやってみた。

IISのGUIでルールを作る作業になるが、.htaccess の記述を参考にしてやってみたら動くようになった。

modx に付属する.htfile でfurl に関連するところは 以下の部分と思われる

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

これを解釈すると
条件として、要求されているファイル名がファイルとして存在しない、かつ
フォルダーとしても存在しない場合、それはつまり動的に生成されるHTMLページなので、
以下の書き換えルールを適用する。
書き換えルール: 渡された文字列$1を以下のパターンにして加工する
“index.php?q=$1”
さらに 後ろにクエリーがついている場合はそのまま渡し、 下流の処理を行わない。

IISのGUI上のRuleでは これを Inbound rule として追加するが、その内容は以下のごとくなる。

Matches Pattern, “Regular expression”
“^(.*\.html)$” <= RewriteRule の最初の部分*1 Conditions : "Matches All" {REQUEST_FILENAME} "file does not exist"  {REQUEST_FILENAME} "Directory does not exist" Action type "rewrite" index.php?q={R:1} <= RewriteRule index.php?q=$1 に匹敵 Append ques : yes <= [QSA] に匹敵 Stop Processing: yes <= [L] に匹敵 当たり前ながら、同じ条件を記述しているので、それほど迷わずにできた。 はまりそうになったところはRegular Expression の部分で.htmlを明示している部分。これをやらないとloopしてしまう。 ほかのところの条件付けでもっと綺麗に記述できるかもしれない。 とりあえず、これでOK

HP 15C 復刻版 limited edition 到着

とりあえずそういうことで

玄関に届いたFEDEXのパッケージ

 

 

少しよれているが、中身は大丈夫か? すくなくとも封筒に入ってこなくて良かった!

中身は無事

 

化粧箱(Gift box)のフタをあけたところ

化粧箱(Gift box)のフタをあけたところ

 

Manualは288頁の厚さ。CDにはエミュレータープログラムがついてくる

Manualは288頁の厚さ。CDにはエミュレータープログラムがついてくる

 

裏面には使用方法のアルミパネル

電池蓋を外すと2枚のセルの中間下方に6ピンの接続パッド。HP20B、30Bと同一仕様

結構若いシリアル番号だった

結構若いシリアル番号だった

付属してきたポーチに入れるとこんな感じ。若干きつめ

 

FキーとGキー以外はキーボードもしっかりしている。 けれど、もっとキータッチは固かったような(他のメーカーの計算機に比べればこれでも十分固い)

それでは週末にでも時間を見つけてすこしいじってみましょう。

 

 

MyBook LiveというNASでWEBサイトをホストしてみた。実践編その3

一昔前と違い、WordPressやJoomla!あるいはDrupalとかModXなど Webサイトを作るのに
Content Management System (CMS)を使うのが当たり前のようになっている昨今、 Apacheサーバーにはデータベースサービス(例えばmysql)とこのデータベースとウェッブページをつなぐツール(例えばPHP)が必要だ。 最初から何も実装されていなければ、lamp(linux Apache mysql php)などという便利なパッケージもあるが、すくなくともapacheサーバーは実装されているのでlamplをインストールするわけにもいかない。

Mybook Liveで動いているApache2サーバーはすでにPHPも実装されている。 UIの画面自体、PHPベースのCakeというフレームワークで作成されているようだ。

<?php phpinfo(); ?>
という一行を phpinfo.php というファイル名でWEB folder上に保存し、(前回の例では/stores/Public/WWW) ブラウザでアドレスを mblwebsite/phpinfo.phpと打ち込むと、PHP情報が表示されるはずだ。
これを見るとMysql用のインターフェースも実装されている。 PHP側からmysqlをアクセスする準備は整っているわけだが、 残念ながらMBLはmysqlのサーバーは実装していない。
そこでMysqlサーバーを個人のリスクでインストールすることになる。
Debian上でのインストールはいたって簡単で、
#aptitude update
でパッケージリストを更新したのち、
#aptitude install mysql-server
または
#apt-get install mysql-server
インストールの準備が整うと、本当に実行しますか?と聞いてくるのでYesと応えるときちんと実行される(はず)
途中でパスワードを作るように催促されるのでMysqlのroot 用のパスワードを適当に考えて入れてやる。(覚えておきましょう)
インストールの終わりにはMysqlサーバーを起動してくれるので、 これをアパッチ側にも認識させるために アパッチサーバーを再起動
/etc/init.d/apache2 restart
これでApache +Mysql + PHP の環境が整った。
また、Mysqlの管理用にphpMyAdmin あるいは sqlbuddyなどの管理ツールを用意しておくと楽である。 これらはいずれもパッケージをダウンロードし、Web用のフォルダーにサブフォルダーを作り、解凍しておくだけで、すぐにブラウザーから使えるようになる。 詳細はそれぞれのパッケージのReadme を見てください。

同僚がiPadを買った. 欲しい! かも?

同僚がiPadを買った。しかも64ギガバイトモデルである。699 799ドル、というと高く感じるが、1ドル80円換算だと5万6千円6万4千円。 うーん、やっぱり高いな。(値段100ドル聞き間違えてた(汗) でも5万円以上はやっぱり高いよ)

簡単に日本語化できるのは当然として、驚いたのは日本のiStoreに接続できる、ということで、これはエポックですよ。 日本の eBookやe週刊誌が海外にいながらにして簡単に購読できる、ということだ。

(後記: ポイントは日本のiStoreに口座をつくるときには日本のクレジットカードを使わなければならない、という事だった。アメリカのクレジットカードでは登録できない。)

海外に住んでいて日本の月刊誌や本を購読しようとすると日本から郵送してもらうことになるのだけれど、この郵送費用が馬鹿にならない。 iPad経由で購入すると紙の媒体ではなく、電子コンテンツになるから郵送費がタダだ。 ここの部分のセービングを考えるとハードを購入した費用は結構すぐに元手が取れそうである。

現在の日本の電子書籍の購入はiStore 以外にどれくらいの選択肢があるかよくはわからないのだが、 アメリカで見てみると
1.各出版社が出しているePub とかMobi、あるいはPDFの書籍、これらは出版社のサイトなどから購入可能。
2.大手の本屋のチェーン : Barnes and Nobles で売っているNookというeReader を使ってB&Nから購入
3.大手の本屋のチェーン: Bordersで売っているSonyやKoboのe-Readerを使い、 Kobo/Borders から購入
4.Amazon.Comの売っているKindleを使い、Amazon.comから購入
5.iPadやMacを使ってApple iStoreから購入

と選択肢がある。1の書籍を買った場合は2~5、その他のデバイスで読むことになるが、Mobi形式でしかダウンロードできなくて、そうすると、Kobo Readerでは読めない、という書式の互換性の問題もある。
またiPadはカラー表示だが、eReaderのほとんどは白黒のeInkという表示機を使っている。

むかし、Etch a Sketchというおもちゃがあって、これはダイヤルを回すと表示ウインドウの中の針が動いて絵がかかれていく。 消すときはガシャガシャっと両手で振ってやると中に入った砂が一様になって消えてしまう。 eInkも同じ仕組みで絵を描くときとガシャガシャやるとき意外は電気を使わない、から TFT液晶にくらべると驚異的に電池のもちが良い。 

 また、表示は紙に書いた文字を見るのと同じですべて反射モード。カラーTFT液晶のような自発光の表示デバイスではなく、またダイナミック駆動もしていない(駆動原理上、電源オフしても表示が残っている)ということで長時間使っても電池の持ちがよく、また目が疲れない ということがあり、白黒表示でもなかなか捨てがたい。書籍を読むだけのデバイスとしてはカラー液晶よりもeInkのほうに軍配が上がる、と個人的には思っている。 またiPadを電子書籍専用に使うよりははるかにコストパーフォマンスが高い。 2GBのモデルが実勢価格150ドルくらいで売っている。

2年ほど前までは倍くらいしたのだけれど、あちこちのメーカーが次々に新製品を出してくれたおかげで値崩れがすごい。 mobileread.comというサイトに行くと、現在手に入るeReaderの一覧が見られるけれど、まさに百花繚乱状態。 でもこれは英語圏での話しだろう。
日本の事情はどうなっていくのだろうか。 どうも書籍リーダーとしてもiPadが思いのほか独走しているようで、各出版社がiPad用のアプリを作って自社の書籍が読めるようになるのは良いことだけれど、eInk使用のデバイスの品揃えが遅れているようで、このままでは日本のマーケットでeReaderが日の目をみないまま終わってしまうのではないかと心配になってくる。

そうすると、日本の書籍を海外で気軽に読むためにはその選択肢はiPadしかありません、ということになるわけで。
同僚には「週刊文春とか,文芸春秋とか婦人公論とかもiStoreで読めることが判ったら教えてね。」と言ってあるのだが、パスワードの設定をしくった、とかで、画面が繋がらない状況がつづいているとか。  高い買い物だ ^^

 “Many persons have an idea that one cannot be in business and lead an upright life, whereas the truth is that no one succeeds in business to any great extent, who misleads or misrepresents”

 John Wanamaker

ModXのテンプレート変数(Template Variable, or TV)のすごさが判ってきた

 

とにかく実際に試してみる、とういのが物事なんでも大事なようで、オンラインのチュートリアルでわかったようなつもりになっていても、 実際に経験してみてその効果が実感できるということがよくわかったのが、このModXのTVの使い方

その1: 新しいページを作成してそこに表示するメニューをまったく別の親からはじめようと思ったのだが、メニュー部分はテンプレートに入っている。 テンプレートに新規のものを指定することももちろん出来るわけだが、今回はメニュー用Snippetのwayfinder のstartidの指定部分を`20`という固定から menurootというTVを作って`*menuroot`という変数指定とし、default値を20とすることで、従来のページには影響を与えず、新規のページについては何もしなければデフォルトのメニューを表示、メニューの表示を違う親から始めたければTVの値を指定できるようにして解決。

その2: その新しいページの固定幅を広くしたい必要が生じた。 CSSには .wrapper { width:750px; .. というクラスで指定してあるのだが、 新しく .wrapperWide{ width:1000x;   というクラスを指定し、 テンプレート上の

<div class=”wrapper”…  という部分を <div class=”wrapper[[*narrowOrWide]]….   として narrowOrWide というTVを追加する。   narrowOrWide のデフォルト値は空白なので、 従来のページはそのまま。 新しいページのnarrowOrWideのTV値を”Wide” とすることで解決。 

システムの仕組み上そうなるのが当たり前なのだが、 ページがうまく表示されたときには感動した。