カット・ペーストを可能にして、ダイナミックな移動を可能に〜1Writerカスタマイズ②〜

Obsidianが日々の相棒となってくれており、iPhoneでは「1Writer」というアプリを使ってObsidianで扱っているファイルと同じファイルを編集できるようにしています。

1Writer – Markdown Text Editor
カテゴリ: 仕事効率化, ユーティリティ

そして、リストアプリのようにテキストを扱えるようにするにはなにが必要かを考え、

  • 行ごとの削除
  • 行ごとの移動

の2つが欠かせないということで、

にて、削除と上下の移動は可能にすることができました。が、もっとダイナミックに移動させたいという願望が出てきました。


リストアプリでは、長押しや「編集」ボタンを押すことで、項目のドラッグ&ドロップが可能になるものが多いと思います。で、これが結構大事でして。
タスクを、実行しようと思っている順に並べているのですが、実際はそれ通りにいくことはあんまりありません。時にはリストの項目を大きく移動させたい時が出てきます。そんな時に重宝するのがドラッグ&ドロップの機能なわけです。
でもこれをテキストエディタに求めるのは、つまり1行ごとにドラッグ&ドロップによる移動ができるようにするのは、なかなかに難しい。
でもやっぱり、大きく移動させる機能は欲しい。

ということで、「カット」と「ペースト」を気軽にできるようにすることで、ドラッグ&ドロップのような動きを可能にしよう、と考えました。

  • カーソル(選択)行をカット
  • クリップボードの内容をペースト

という2つの機能があれば、リストの項目を大きく動かしたい時は、動かしたい項目をカットして動かしてきたかった場所でペーストすることができるので、ドラッグ&ドロップ機能の代わりができるだろう、と。
実際に動きを見てみましょう。

移動させたい行にカーソルを持っていく。あるいは、複数行に渡る場合は範囲選択をしておき、カット。するとその行がカットされる。移動したい先にカーソルを持っていって、ペーストボタンを押せばそこに移動完了です。
この機能で、さらにテキストエディタの内容を1行ごとに操作することが、以前よりやりやすくなりました。

カーソル(選択)行をカット

var text = editor.getText();
var linetexts = text.split('\n');
const range = editor.getSelectedRange();
var s = range[0];
var e = range[1];
var selects;
var selecte;
var linecount = 0;
var selectrange;
for (let i = 0; i < linetexts.length; i++){
    if ( s <
        linecount + linetexts[i].length +1){
        selects = i;
        selectrange = linecount - 1;
        break;
    }else{
        linecount += linetexts[i].length + 1;
    }
}
linecount = 0;
for (let i = 0; i < linetexts.length; i++){
if ( e <
    linecount + linetexts[i].length +1){
        selecte = i;
        break;
    }else{
        linecount += linetexts[i].length + 1;
    }
}

var before = -1;
for(let i=0; i < selects;i++){
    before = before + linetexts[i].length + 1;
}
var after = before;
if(before < 0){
    before = 0;
}
for(let i=selects; i < selecte+1;i++){
    after = after + linetexts[i].length + 1;
}
editor.replaceTextInRange(before, after, "")
var cutlines = [];
for(let i = 0; i < selecte-selects+1; i++){
    cutlines.push(linetexts[selects + i])
}
var cuttext = cutlines.join('\n');
app.setClipboard('\n' + cuttext);

クリップボードの内容をペースト

“`
var text = editor.getText();
var linetexts = text.split('\n');
const range = editor.getSelectedRange();
var s = range[0];
var e = range[1];

var cuttext = app.getClipboard();

editor.replaceTextInRange(s,e,cuttext);
“`

テキストエディタ上のテキストを1行ごとに扱うことができるようになることが、iPhone上ではこんなに快適になるものなんだな、と驚いています。
ついでに、カーソル行をコピーするアクションも作りました。

カーソル(選択)行をコピー

var text = editor.getText();
var linetexts = text.split('\n');
const range = editor.getSelectedRange();
var s = range[0];
var e = range[1];
var selects;
var selecte;
var linecount = 0;
var selectrange;
for (let i = 0; i < linetexts.length; i++){
if ( s <
linecount + linetexts[i].length +1){
selects = i;
selectrange = linecount - 1;
break;
}else{
linecount += linetexts[i].length + 1;
}
}
linecount = 0;
for (let i = 0; i < linetexts.length; i++){
if ( e <
linecount + linetexts[i].length +1){
selecte = i;
break;
}else{
linecount += linetexts[i].length + 1;
}
}
var cutlines = [];
for(let i = 0; i < selecte-selects+1; i++){
cutlines.push(linetexts[selects + i])
}
var cuttext = cutlines.join('\n');
app.setClipboard('\n' + cuttext);

  • カーソル(選択)行を削除
  • カーソル(選択)行を上へ移動
  • カーソル(選択)行を下へ移動
  • カーソル(選択)行をカット
  • カーソル(選択)行をコピー
  • クリップボードの内容をペースト

以上のアクションをカスタムキーボードに設定し、毎日使っています。

とても快適になったわけですが、1Writerで、たすくまのように「全ての行動を記録する」となると、行ごとの操作に加え、リピートタスクを設定し、それを簡単に呼び出せる仕組みが必要になってきます。全ての行動を記録する際、毎日やっていることに関しては、。毎日入力するよりもテンプレートで引っ張って来る方が明らかに手間が省けます。ましてや、たすくまのタスク数は大体40程度。それらを毎日入力するのは現実的ではありません。

そこで、1Writerにも、テンプレートを引っ張ってきてエディタ部分に入力し、たくさんのタスク名をいちいち入力しなくて住むようになりました。が、これはまた別の機会に。

テキストを「1行ごとのリスト」ととらえ、削除と移動を可能に〜1Writerカスタマイズ①〜

タスク管理アプリの多くは、長年使っている「たすくま」もそうですが「リスト」の形式をとっています。

1タスク1リスト(1タスク1行)の表示で、タスクがダァーッと並んでいる形式。
確かにこの形式は、タスク管理をする上で扱いやすいなぁと感じます。
リスト形式であれば、

  • 行の削除ができる
  • 行の順番の入れ替えができる

という機能を備えており、それがタスクを扱いやすくしてくれている要因ではないか、ということで、「やったことの記録がすこぶる取りやすいリストアプリ」のように、テキストを扱えるようにしたいな、という思いがわいたわけでした。
「アウトライナー」をタスク管理に利用している方も多くいられると思うのですが、それは、アウトライナーは行の削除と順番の入れ替えが容易であるというのも大いに関係していると感じます。

ぼくは、タスク管理に今はObsidianを使っているのですが、iPhoneでは、「1Writer」というアプリを使っています。

1Writer – Markdown Text Editor
カテゴリ: 仕事効率化, ユーティリティ

1Writerはjavascriptを扱えますので、テキストを加工することができます。そこで、1Writerのjavascript機能を使って、

  • 行の削除ができる
  • 行の順番の入れ替えができる

という機能を実装しようと考えました。
そうして作成したのが、以下の3つのアクション。

  • カーソル(選択)行を削除
  • カーソル(選択)行を上へ移動
  • カーソル(選択)行を下へ移動

カーソル(選択)行を削除

var text = editor.getText();
var linetexts = text.split('\n');
const range = editor.getSelectedRange();
var s = range[0];
var e = range[1];
var selects;
var selecte;
var linecount = 0;
var selectrange;
for (let i = 0; i < linetexts.length; i++){
    if ( s <
        linecount + linetexts[i].length +1){
        selects = i;
        selectrange = linecount - 1;
        break;
    }else{
        linecount += linetexts[i].length + 1;
    }
}
linecount = 0;
for (let i = 0; i < linetexts.length; i++){
    if ( e <
        linecount + linetexts[i].length +1){
        selecte = i;
        break;
    }else{
        linecount += linetexts[i].length + 1;
    }
}

var before = -1;
for(let i=0; i < selects;i++){
    before = before + linetexts[i].length + 1;
}
var after = before;
if(before < 0){
    before = 0;
}
for(let i=selects; i < selecte+1;i++){
    after = after + linetexts[i].length + 1;
}
editor.replaceTextInRange(before, after, "")

カーソル(選択)行を上へ移動

var text = editor.getText();
var linetexts = text.split('\n');
const range = editor.getSelectedRange();
var s = range[0];
var e = range[1];
var selects;
var selecte;
var linecount = 0;
var selectrange;
for (let i = 0; i < linetexts.length; i++){
    if ( s <
        linecount + linetexts[i].length +1){
        selects = i;
        selectrange = linecount - 1;
    break;
    }else{
        linecount += linetexts[i].length + 1;
    }
}
linecount = 0;
for (let i = 0; i < linetexts.length; i++){
    if ( e <
        linecount + linetexts[i].length +1){
        selecte = i;
        break;
    }else{
        linecount += linetexts[i].length + 1;
    }
}

var before = 0;
for(let i=0; i < selects;i++){
    before = before + linetexts[i].length + 1;
}
var after = before;
if(before < 0){
    before = 0;
}
for(let i=selects; i < selecte+1;i++){
    after = after + linetexts[i].length + 1;
}
editor.replaceTextInRange(before, after, "")
var cutlines = [];
for(let i = 0; i < selecte-selects+1; i++){
    cutlines.push(linetexts[selects + i])
}
var cuttext = cutlines.join('\n');

if ( selects == 0 ){
    editor.replaceTextInRange(0, 0, cuttext + '\n');
    editor.setSelectedRange(cuttext.length,cuttext.length);
}else if( selects == 1 ){
    editor.replaceTextInRange(0, 0, cuttext + '\n');
    editor.setSelectedRange(s - linetexts[0].length-1,e-linetexts[0].length-1);
}else{
    var before = 0;
    for(let i=0; i < selects-1;i++){
        before = before + linetexts[i].length + 1;
    }
    editor.replaceTextInRange(before-1, before-1, '\n'+cuttext)
    editor.setSelectedRange(s - linetexts[selects-1].length-1,e-linetexts[selects-1].length-1);
}

カーソル(選択)行を下へ移動

var text = editor.getText();
var linetexts = text.split('\n');
const range = editor.getSelectedRange();
var s = range[0];
var e = range[1];
var selects;
var selecte;
var linecount = 0;
var selectrange;
for (let i = 0; i < linetexts.length; i++){
    if ( s <
        linecount + linetexts[i].length +1){
        selects = i;
        selectrange = linecount - 1;
        break;
    }else{
        linecount += linetexts[i].length + 1;
    }
}
linecount = 0;
for (let i = 0; i < linetexts.length; i++){
    if ( e <
        linecount + linetexts[i].length +1){
        selecte = i;
        break;
    }else{
        linecount += linetexts[i].length + 1;
    }
}

var before = 0;
for(let i=0; i < selects;i++){
    before = before + linetexts[i].length + 1;
}

if ( selecte == linetexts.length-1 ){

}else{

    var after = before;
    if(before < 0){
        before = 0;
    }
    for(let i=selects; i < selecte+1;i++){
        after = after + linetexts[i].length + 1;
    }
    editor.replaceTextInRange(before, after, "")
    var cutlines = [];
    for(let i = 0; i < selecte-selects+1; i++){
        cutlines.push(linetexts[selects + i])
    }
    var cuttext = cutlines.join('\n');
    var before = 0;
    for(let i=0; i < selecte+1;i++){
        before = before + linetexts[i].length + 1;
    }
    editor.replaceTextInRange(before-1+linetexts[selecte+1].length-cuttext.length, before-1+linetexts[selecte+1].length-cuttext.length, '\n'+cuttext);
    editor.setSelectedRange(s + linetexts[selecte+1].length+1,e+linetexts[selecte+1].length+1);
}

おそらくあんまりキレイなコードではないと思うのですが、、、便利なのでよかったら使ってみてください。

で、これらによって、テキストを行ごとに削除したり移動したりが簡単になったわけです。でも、だいぶと便利になったのに、さらに欲が出てきまして。
もっとダイナミックに移動させたいようになってきました。

つづく

自分で書いた記事・R-styleの記事ではっきり覚えているもの WRM「今週のQ」

倉下忠憲のWRM 「読む・書く・考えるの探求」第546号、ラディカルなRashitaのスタイルの変容の「今週のQ」での問いかけです。


ふと考えてみて、すぐに思いつくのは。「数学からぼくが学んだこと」と題しての連載です。

この4つのエントリで、自分が思う数学の良さや数学との向き合い方をけっこう伝えることができたのではないかと感じるくらいに、かなり力を入れた、じっくりと書き上げた記事となりました。

他には、

もとても思い入れの強い記事です。

は、かなり前に書いたものを、他の人が6年越しにツイートしてくれて、ふと目に飛び込んできて読み返して少しだけ修正を加えて新たにポストしたもの。

自分で書いた記事ではっきり覚えているものはこれらの記事かな、と思います。
どれも、数学に関して書いたもの。
数学についてどんどんブログで書きたい、と思っているものの、なかなかにそれができておらず、でもなんとかしっかりまとめ切れたという感覚があるからこそ、これらの記事はかなりはっきりと覚えているのだろうな、と思います。


R-styleの記事ではっきり覚えているのは、個人の書くブログの楽しさを教えてくれた

から始まる、一連の連載。
R-styleで展開される、Evernoteというツール越しに見る知的生産についての話が、すごく面白く、興味深く、ブログというのは面白いんだなーと思うようになったきっかけの記事となります。
で、そこから自分もブログを書きたい、となって実際に更新を始めるまでさほど時間はかかりませんでした。で、今もまた更新している、とうわけです。

他には、今ふと思い出したのが、

という、4月1日に書かれた記事。もう11年前になるんですね。
なぜこの記事が記憶に残っているかというと、

という本が、後に発売されることとなるからです。
書評 クラウド時代の知的生産の技術(倉下忠憲)が書かれたのは、倉下さんが物書きになる前、『Evernote「超」仕事術』の発売される前だったと思います。まだ本を1冊も世に出していない状況で、自分が本を出した体で記事がかかれているのがこの記事。
やがてコンビニの店長から物書きにジョブチェンジされて、『Evernote「超」仕事術』が発売され、『Evernote「超」知的生産術』がその後に続きます。
そして、『Evernoteとアナログノートによる ハイブリッド発想術』が発売され、その告知エントリが書かれて。
「ついに!!」と感動・興奮した記憶があるので、とても記憶に残っているのだと思います。

他にも、

は、よく覚えている記事の一つ。R-styleにて倉下さんの書く記事に触発されて自分も記事を書いたりしますが、やはりそういう触発を生んでくれた記事は覚えているものが多いように感じます。


自分のブログとR-styleの記事の中から覚えているものをあげてみました。
記憶力に自信がないく、基本的に忘れっぽい自分でも覚えている記事たちは、自分の中に色濃く残っているものたち、ということになると思います。
そういう記事をもっと書いていけたらなぁと思わなくもありませんが、ぼちぼちと日々書き続けるのを楽しくやってるので、まずは楽しむことを第一に今後も書き続けたいと思います。

では、お読みいただきありがとうございました。

抽象化の先に待っているものが感じられるTED動画

小学校で学ぶ算数と、中学校以降に学ぶ数学。このふたつには大きな違いがあります。
よく「算数は普段使うから必要やけど、数学を普段使うことはない。やから必要ない」って意見を聞いたりしますが、「必要ない」という部分以外はまさにそのとおりだと思います。「算数は普段使うから必要やけど、数学を普段使うことはない」。だって、扱う対象が違うんですもの。

算数で扱うのは、”具体的”です。具体的な数を扱い、数に関する知識を学びながら、四則演算を習熟していきます。に対して数学で扱う対象は”抽象的”なもの。数学では「文字式」を筆頭に、普段の生活ではなかなか出てこない、抽象化された世界へと踏み込んで行きます。
だから「算数は普段使うから必要やけど、数学を普段使うことはない」んです。ただ、必要ないことは決してないですが。

抽象化してなんなのさ

じゃあ、抽象化していったいなんだというのでしょうか。

中学校に入り、いきなり度肝を抜かれるのが、文字式だと思います。
それまでは500とか1.2とか具体的な数字を用いていたのに、なんだかxとかyとかが登場してきて、それで式を表現したりします。抽象化された世界への第一歩を踏み出すわけです。

算数の有名な問題で「鶴亀算」というのがあります。鶴と亀の数とその足の総数からそれぞれ何匹いるのかを求める問題です。

算数の世界ではあくまでも具体的な数を扱うので、まずは「すべて鶴であるとする」という仮定から始めての、総数を求めて行きます。それはそれで大切な考え方を学ぶことができるのですが、文字式を獲得したあとであれば、”方程式”という強力な武器が使えるようになります。こっちの方は鶴亀算のみならず、いろんな問題に応用可能です。

具体的な世界を離れる、ということは、応用範囲を広めることにつながります。

「ロバートラングが全く新しい時代の折り紙を折る」

抽象化することの恩恵がすごく感じられる動画が、TEDにあります。それが「ロバートラングが全く新しい時代の折り紙を折る」。

とにもかくにも動画を見て欲しいなと思います。「折り紙もすごいとこまできたもんだ」と感心すること請け合いです。

ロバート・ラングが全く新しい時代の折り紙を折る | Video on TED.com

今回注目して欲しいのは、折り方をコンピュータに計算してもらうことができるようになるまでの話の部分です。
そこでは、いろんな折り方のすべてに共通する要素を抜き出してしまうと、たった4つの法則にたどり着くことができる、ということが述べられています。
折り紙には古くから培われてきた、本当に様々な折り方ってのが存在します。これまでは一つ一つ折り方を編み出してきたわけですが、すべての折り方に共通する法則を抜き出すことで、折り紙の世界はとたんに広がります。
簡単な骨組みを考えることで折り方をコンピュータにはじき出してもらうことができるようになったんですから。
具体物の一つ一つをから構成されていた折り紙の世界を、すべての折り方に共通している要素、”4つの法則”を抜き出すことで抽象化し、単純な要素のみで表現することで、しまいにはコンピュータに計算してもらえるようにしちゃったわけです。
コンピュータの技術がどんどん高まっている現在、こんな事例はこれからも出てくるのではないかなと思います。

おわりに

というわけで、TED動画「ロバートラングが全く新しい時代の折り紙を折る」を見ることで、抽象化の恩恵を感じ取れるのではないかなと思います。
抽象化するってのはとてもすごいことなんですけれども、抽象化されたら具体を離れるということで、目に見える対象ではなくなっちゃうんですよね。やっぱり普段の生活で扱うものは具体的なものばかりなんで、対象が抽象的なものである「数学」という学問は「別になくても困らないし、必要ないでしょ」って結論に至っちゃう人がとても多いんでしょう。
でも、だからこそおもしろい面もあるわけで。そんなのをこれからも紹介できればなと思います。

では、お読みいただきありがとうございました。

20130703202511

「やったことの記録がすこぶる取りやすいリストアプリ」のように、テキストを扱えるように

かれこれ10年近く、タスクシュートを実践しています。

  • 「これからやる仕事のリスト」と「ここまでやった仕事のリスト」を一元管理する
  • 「1分以上かかること」はすべて管理する
  • すべての仕事の「見積もり時間」を出しておく
  • 「本日1日分の仕事」がすべて終わったら何時になるのかの予測を自動算出することで、常に仕事の終わる時間(または就寝時間)をリアルタイムに把握する

『なぜ、仕事が予定どおりに終わらないのか?~「時間ない病」の特効薬!タスクシュート時間術』(佐々木 正悟(著)大橋 悦夫(監修))

最近はそこまでこだわることなく、日々のルーチンはたすくま(タスクシュートをiPhoneで実践できるアプリ)に全て登録しておき、朝の仕事場に出発するまでの時間と、帰ってきてから寝るまでの時間をたすくまに帆走してもらいながら過ごしています。
やったことを記録しつつ、起きてから寝るまで過ごす。見積もり時間や終了予定時刻もあいまいな感じで算出していますし、たすくま上に並んでいるタスクをまるっと消してしまうこともあったりします。
やったことは記録してはいますが、記録を見返すことはほとんどなくなりました。
ほぼ、日々のルーチンを確認し、やったことを記録するためだけにたすくまを使っている感じです。

そこで感じるようになったのは、「これは『たすくま』を使う必要はあるのか?」という疑問。
タスクシュートを実践するために作られたものなので、確かにタスクシュートは実践しやすい。たすくまは、タスクシュートを実践する上では間違いなく便利なんです。
ただ、仕事中はObsidianに書き出したタスクリストをもとに何をするか定めていっているので、たすくまを使っていませんし、Obsidianにて作成したデータはiPhoneでも確認・編集できるところが魅力的でして。
じゃあ、たすくまをずっと使い続けている理由、どこが便利なのか?を考えてみると、

  • やったことの記録がすこぶる取りやすいから
  • リストアプリだから

という結論に行きつきました。

  • やったことの記録がすこぶる取りやすいから
    • やったことの記録を取るためにはやったことを入力しなければいけないが、あらかじめ「やること」が記入されているので、やるときにいちいち入力しなくて済む
      • 記入されている「やること」の中から、今から取り掛かるものを選択するだけでいい
    • 完了のチェックができ、開始・終了を自動的に、もしくは素早く入力できる
  • リストアプリだから
    • 行の削除ができる
    • 行の順番の入れ替えができる

以上が使い続ける理由なわけで、これらが満たされていれば他のアプリを利用しても、それこそObsidianや1Writer上でも現状たすくまでやっているようなことが実現できるのではないか、と考えました。

仕事中はたすくまではなく、Obsidianのデイリーページ上にタスクを書き出し、順番を入れ替えたりしながら実行していってます。
それぞれのタスクに見積もりを設定してはいませんし、なので終了予定時刻も算出されません。
一つ、守っていることは、やったことは全て書き残していくことと、終了時刻を入れること。
それでも、仕事に支障をきたすことはなくなってきたので、見積もりや終了予定時刻にはこだわらず、とにかくやったことと時間を記録していくことに集中してみよう、と。

そこでまず着手したのが、1テキストをリストのように扱えるように、Writerをカスタマイズすること。
行の削除、行の移動、行のコピー・ペーストの実装です。
1Writerはjavascriptが使えるので、テキストを色々といじるアクションを作成することができ、なおかつそのアクションをカスタムキーボードに設定することができます。
なのでせっせとjavascriptを組み、上記機能を実装することができました。

残りの課題は、どうやってやったことの記録をすこぶる取りやすくするか。
テンプレートを使う前提になっていきそうですが、極力手間なく記録を取っていけるような環境を作ることができればな、と考えています。

長い付き合いのたすくまは一度休憩して、他のツールで模索してみようかな、という試みをはじめてみたいと思います。

では、お読みいただきありがとうございました。

情報カードと、本と思考のカードボックス

「情報カード」をご存知でしょうか。

情報カードは、簡単に言うと「ちょっとコシのある、一定の大きさの紙」のこと。
大きさは名刺サイズの小さいものから、B6サイズのものまで色々あり、大きさによって使い分けることになります。

『知的生産の技術 (岩波新書)』(梅棹忠夫)を読んでから興味をもち、A6サイズのものをけっこう長い間使ってみたり、5×3サイズをガッツリ使ったり、はたまた名刺サイズをメモを捉える用として常備したりと、色々と試してみました。
今はもう情報カードを使ってはいないのですが、何かしら書かれたA6サイズ・5×3サイズの情報カードは結構な枚数が机上に鎮座していたり、ほんの一言を書きつけた名刺サイズの情報カードが箱に収まっていたり、情報カードを使った形跡が今も机上には残っています。

今は基本的にはObsidianを使っており、情報カードのようなアナログなツールは使っていないのですが、でもやはり情報カードには魅力があります。
情報カードの「操作のしやすさ」は、最強じゃないかと思うんです。
何かしら書きつけたカードを机の上に並べ、近しいものは束ねたり、そういう操作を通してわかったことをデジタルに書き換えたり。

カードの書き方の基本は、1枚1テーマでまとめていくこと、というか、大きさの制約上、1枚にいくつものことを盛り込むことができないので、自然と1枚1テーマになる感じです。

情報カードを大量に使うようになると、書いたカードをしまっておくためのボックスが必要になってきます。
情報カードに何か書いたら、それをカードボックスにしまう。
カードの大きさにもよりますが、ふとしたメモやちょっと考えたことをまとめた物などを書き残していくと、どんどん情報カードボックスは増えていき、手に負えない感がありました。
とはいえ、書いたカードはボックスにしまうという基本方針が、カードを使っていく際に重要ではないかな、と感じます。


基本的に情報はObsidianに書くようになってから、読書メモや読んだ本の感想、ふと思いついたことをまとめた物などは、1日の色々を書きつけていくデイリーページから切り出して、個別に1ページを与え、個々に置いておくようになりました。
ページごとに分割されていてリンクで繋げることができるアプリは、1ページ1テーマを保持しやすいので、Obsidianも1ページ1テーマに保ちやすい。なので、書く時の作法として、1ページ1テーマを心がけて内容をまとめていっています。

そして、先に述べたように、情報カードも1枚1テーマで書きつけていくことを基本とします。
Obsidianの1ページ1ページは、情報カードの1枚1枚と似たところがある、というか、情報カードの利用法を真似てObsidianを使っています。

よって、Obsidianは情報カードボックスである、と言えそうです。


日常的に、かなりヘビーにObsidianを使うようになり、ObsidianPublishの機能を使って一部のページを公開するようにしました。Obsidianには、好きなページをブログのように公開する機能があるんです。
Obsidianにはいろいろなことを書いているのですが、その中でも、本を読んだ感想を書いたページや、考えたことを1ページ1テーマでまとめているものをPublishする、という方針で公開しています。
つまり、情報カードの利用法を真似ているものに関して公開していることになります。
また、先にObsidianは情報カードボックスである、と言え流ことを確認しました。

以上より、本や考えたことを書いたページ、情報カードのように運用しているページを公開しているので、Publishしているサイト名を

とすることにしました。
今はまだいろいろとどういう形がいいか模索している段階ですが、是非是非訪れてみていただければと思います。

では、お読みいただきありがとうございました。

ボトルネックは「別のページを開く」

ぼくは、手帳が好きだ。
毎年手帳の季節になると、店頭に並ぶ手帳を見てまわる。今は手帳として世に売られているものに関しては使っていないので、買うつもりはあまりないのに、どんな手帳があるのかな、と見てまわる。
以前は色々と手帳を試したりしていた。でも使ううちに、自分独自の手帳が欲しくなり、分厚いノートを購入して手帳として使うことが多くなった。で、今はほぼデジタルで管理している。Obsidianにて連用手帳を実践して。


手帳がすごい好きな割に、ちゃんと使えてない感がいっつもあった。
ノートを使うにしろ手帳を買うにしろ、基本はデイリーのものを利用していた。1日1ページ手帳。
1日1ページのようなデイリーの手帳であれ、必ずマンスリーページは存在する。ノートを手帳がわりに使う時も、必ずマンスリーページを作成していた。
でも、それをろくに使えない。
デイリーページはそれなりに書くことがあり、日々使う。けど、マンスリーがうまく使えない。

Obsidianに手帳の役割を持たせるようになり、なぜマンスリーページをうまく使えていなかったのかに、ようやく気づいた。

自由に好きなページを画面に並べることができるのは、Obsidianの大きな利点で、画面構成を自分の望むようなものにできる。
そこでぼくは、基本的に中央には今日の日付のデイリーページを表示し、サイドにマンスリーページを配置することにした。
それからというもの、タスクもスケジュールもいい感じにこなすことができている。デイリーページに加え、マンスリーページもうまく使うことができている。

マンスリーをうまく使えてなかった時と何が一番違うかというと、「常に表示されているか否か」という点。
紙の手帳では、基本的にデイリーページを使っているのであれば、マンスリーページはわざわざ自分から開きにいかなければならない。
別に難しいことでもなんでもない、マンスリーページを開くという動作。それがぼくにとっては大きなボトルネックとなっていた模様。
自分から見にいかないといけない、となると、見にいかない。なぜか見にいかない。どうしても見にいかない。
常に表示されていて、勝手に目に入るような、見にいく動作すら必要としない状態であると、マンスリーページを活用することができる。
何か書き込むのも気軽にできるし、今後の予定も視線を移すだけでさっと確認できる。見にいかなくても確認できる。わざわざ開かなくても書き込める。
このことが、自分にとってはかなり大きいことであるというのが、ようやくわかった。

デイリーとマンスリーを使っていると、転記が必要になる。
基本的にはデイリーを開いているので、何かあればデイリーページに書き込む。それがスケジュールであれば、マンスリーページの該当の日付の欄に転記する。
デイリーには書かず、直接マンスリーに書けばいい、と思うけれども、それもなかなかできなかった。
マンスリーを開いて、書き込むという動作が。
なので、自分でも不思議に思うくらい、マンスリーページをちゃんと使えた試しがない。
マンスリーページがデイリーページの横に表示されていると、スケジュールや日付の決まっているタスクは、直接マンスリーに書くことができる。
今までなかなかできていなかった、マンスリーに書き込むという動作が、いとも簡単にできる。
直接書き込めるので、転記も必要ない。

総じて、デイリーページとマンスリーページが常に開かれている、目に入る、書き込める状態は、ぼくにとって驚くほど快適で、自由に画面を並べることができるObsidianは、ぼくにとても合っているツールだと感じる。

では、お読みいただきありがとうございました。

教え手は”今の自分”を基準にしてはいけない

どんな職業・立場であれ、「これはこうするんだよ」であったり、「こういうことだよ」と伝えたり教えたりすることってあると思います。で、そんなときに「言うたのになんでわからへんねん」「さっきのん全然伝わってなかったんかいな」って感じたことってありませんか?
この状況の原因は、一概には教え手/学び手、あるいは伝え手/受け手のどちらが悪いとは言い切れません。教え手は、ちゃんと説明したのにわかってくれないと、学び手を責めがちになったりしますが、ちょっと立ち止まって考えてみて欲しいと思うんです。

”今の自分”を基準に物を言っていないか?

ぼくは、基本的には数学の教え手です。数学については、今までいっぱい学んできましたし、これからもたくさん学んでいくことでしょう。学ぶことは、自分お知識や経験が増えていくため、良いことではありますが、その反面、学べば学ぶほど”学び始め”からは遠ざかってしまいます。
教え手であるぼくが数学を教えるのは、”学び始め”である学び手のみんな。
この時点では、教え手と学び手の知識や理解、経験が違うので、言わば距離が離れた状態。もしぼくが今の自分を基準にうんじゃかんじゃ話したとしても、学び始めの学び手にはほとんど伝わらないという、不測の事態に陥ってしまうでしょう。
当たり前のことですが、当たり前すぎて忘れ去られていることでもあります。人は、当たり前なことほど意識外に放り出してしまうものなので。

距離を縮めることを、常に意識する

教え手と学び手の距離を縮めようとする意識は、常に持っておきたいものです。もちろん教え手が。学び手に「教え手に合わせて話をしなさい。教え手と同じレベルで理解をしなさい」と言っても、到底無理なので。
学び手には、知識の量・理解の度合いには限界があり、教え手との距離を縮めたくても現状どうすることもできません。教え手が学び手に歩み寄り、距離を縮める。そのためには、学び手側の今の知識量・理解の度合いをイメージする必要があります。そのイメージの元となるのは、過去の学び始めの頃の自分であったり、他の違う学び手に教えた時の経験であったりします。
また、質問の内容は、丁寧に確認することも求められます。教え手と学び手は知識や理解に差があるわけですから、学びてからの質問の内容を教え手が間違って把握する、なんてことはよくあること。それでは距離は縮まりようがない。
距離を縮めるために、学び手の今の状況をできるだけつかみ、イメージする。そういったことが大切であるように感じます。

おわりに

「なんだか伝わらないなぁ」と感じたら、学び手との距離が離れていないか?に目をむけるのもいいのではないでしょうか。伝わらない原因は1つではないにしろ、距離が離れてしまっているというのは大きな原因の1つになり得ます。

今回書かせてもらったことは、職業柄、教え手になることがほとんどの自分が意識したいことです。教え手という立場ばかりにいてしまうと、忘れてしまいがちなことなので。人は、当たり前なことほど意識外に放り出してしまうものです。この当たり前のことを意識外に放り出してしまわないためにも、こうして思い返し、考えることは有効かなとおもいます。

理解しちゃっていても、まだ理解に至らずうんうんと頭を悩ませる状態をイメージすることはできるはず。

では、お読みいただきありがとうございました。

20120619202244

過去の自分と今の自分の共同執筆

前回の記事、「概念の拡張と日常への適用」は、実は6年ほど前に書いた記事をリライトしたもの。
たまたまTwitterで自分の過去ブログの記事をツイートしてくれているものを発見し、どんな内容か気になって読み返したのが発端。

読み返しての感想は、「昔の自分、めっちゃいいもん書いてるやん」。
単なる自画自賛に過ぎないけど、読むことができて良かったーと感じる出来栄えだった。
と同時に、こういう記事が過去のブログにはけっこうたくさん埋もれてしまっているのかも、ということも感じた。
ぼくは、「はてなダイアリー」でブログ「 iPhoneと本と数学となんやかんやと」を開設し、6年ほどそこで書き続けた。で、4年前からWordpressに移行し、今に至っている。
Wordpressに移行するときに、過去記事を全て移すということをしなかった。
記憶の中にあった、印象深い数記事を移すだけに留めた。
今回の「概念の拡張と日常への適用」は、その印象深い数記事には含まれていなかった。だからWordpressのブログに移したいという思いが湧き、リライトして載せることにした。
こういう、印象には残っていなかったけど読み返してみると「えぇなぁ」と感じる記事は、放置されてそのままになっている。

自分のブログを読み返して感じることは、「けっこうえぇこと書いてるやん。書いたことぜんっぜん覚えてないけど」といったもの。
ほんとにきれいさっぱり忘れている。
今回のように、自分の過去記事に、大切なこと(大切に思っていたけど忘れていたこと)を教えてもらうことも多い。
その一方で、書き換えたくなる部分もある。修正すればより良くなるのでは、と。

旧ブログから今のブログに移行したのは4年前。
旧ブログは、約6年間分の過去記事が、そのままになっている。
旧ブログから学ぶことがある。
旧ブログの内容を多少良くできるのでは、と感じる部分もある。

ということで、これはもっと過去記事を読み返して、多少の修正を加えて改めて新規エントリとして更新するのも、なかなかにありではないか、と思えてきた。
過去に書いたものを読んで感じるのが、「大切に思っていたけど忘れていたことがある」ということ。けっこうあるな、と感じること。
今回のように、過去記事のリライト記事を、ちょっとずつでもいいから更新していければな、と思う。

概念の拡張と日常への適用

数学では、新しく世界を広げるために、「概念を拡張する」ことがある。

拡張するとは、適用範囲を拡げること

例えば、「数」。ぼくたちが一番初めに学ぶのが、1、2、3、4などの「自然数」とよばれるもの。この自然数に対し、「+」「−」「×」「÷」の計算ー「四則演算」ーが定義されていくこととなる。
すると、「1÷3」や「2-5」など、計算の結果が自然数ではなくなるものが出てくる。出てきた数を認め、はじめは自然数に対して定めた「+」「−」「×」「÷」を、新たに出てきた自然数ではない数に当てはめてもいいかを確かめる。
そうして、これらの演算を、小数や負の数などの自然数以外へと、拡張していく。さらには、有理数、無理数、虚数へと進んでいき、どんどん演算の及ぶ範囲を拡げていく。

こんな風に、概念を拡張していくことで、考え得る世界を拡げていくのが、数学の大きな目的の一つと言える。

”知識”自体が大切なのではない

こんなことをよく聞く。「日常で出てくるのは、たすひくかけるわるくらい。それさえできればいいので、必要なのは算数まで」。

確かに、数学で学ぶような、「三角関数」であったり「微分・積分」であったりは、日常ではまず出てこない。はっきり言って必要ない。でもそれはあくまでも、「知識としては」という前提がつく。

「知識としては必要ない」のであって、「学ぶ必要がない」わけではない。ここを取り違えてはいけない。

数学を学ぶのは、数学的知識を蓄えることが目的ではなく、数学で培うことのできるものの見方・考え方を、日常へと拡張することが目的と言える。

拡張して、適用範囲を拡げることが目的

数学では、論理的に考えることや、記号を使ってシンプルにとらえること、グラフや図を用いて、視覚的にとらえること、問題を解決する際のアプローチの方法、、、などなどを学ぶことができる。
これらは「知識」ではなく、「見方や考え方」であり、覚えておくものではなく、身につけるもの。
この身につけたことを、日常へと適用範囲を拡げること。数学のいないところにも、概念を拡張すること。それこそが、数学を学ぶ目的と言える。

拡張の経験が日常にも活かされる

数学では、新しく世界を広げるために、「概念を拡張する」ことがある。頻繁にある。
ということは、数学に触れることで、概念の拡張を数多く経験できる、ということになる。この経験が、数学の身につけたものを日常生活へと拡張することにも、役立っている、と思う。

意識的かどうかは別として。
数学で培った力が拡張されていることを、自分自身意識できているのかは別として。

気づかない間にでも、数学のものの見方、考え方が、日常へと拡張されているのであれば、やっぱり数学を「学ぶ必要がない」わけはない。

おわりに

将来的に使わないから、というのは、学ばなくていい理由にはならない。教科によって差こそあれ、何かを「学ぶ」ということは、知識を蓄えることのみならず、その教科で養える力を習得するためにあることだから。

ぼくは、歴史や漢文が大嫌いだった。「覚えるだけ」の教科だと勝手に決めつけ、覚えても将来役立たないではないか、と、自分に言い訳をして、なるべく避けようとしていた。でも、今では思う。歴史や漢文も、覚えるだけが目的ではないと。「学ぶ必要がない」わけはないと。もう少し真面目に取り組むべきだったな、という、少しの後悔だけがのこっている。

数学に対して、そんな後悔がのこる人が、一人でも少なくなればいいな、と思う。

では、お読みいただきありがとうございました。