Emacsでタグジャンプできるようにする

インストールなど

  • GLOBALというのが必要
  • GLOBALの対応言語を増やすのにPygmentsというのが必要
  • macなら以下で済む
$ brew install global --with-exuberant-ctags --with-pygments
$ export GTAGSLABEL=pygments

任意の場所でgtag実行

/usr/local/var/www/htdocs $ gtags

確認

  • 例えばcreateDatの定義箇所
/usr/local/var/www/htdocs $ global -ax -t createDat
createDat	/usr/local/var/www/htdocs/typing.js	43
  • 例えばcreateDatを使っている箇所
/usr/local/var/www/htdocs $ global -ax -r createDat
createDat         104 /usr/local/var/www/htdocs/typing.js     createDat();

できてるようだ

Emacs側

  • helm-gtagsパッケージ のインストール
  • init.elに追記
;;Emacsからgtagsを使えるようにする
;; customize
(custom-set-variables
 '(helm-gtags-path-style 'relative)
 '(helm-gtags-ignore-case t)
 '(helm-gtags-auto-update t))
;; key bindings
(eval-after-load "helm-gtags"
  '(progn
     (define-key helm-gtags-mode-map (kbd "M-t") 'helm-gtags-find-tag)
     (define-key helm-gtags-mode-map (kbd "M-r") 'helm-gtags-find-rtag)
     (define-key helm-gtags-mode-map (kbd "M-s") 'helm-gtags-find-symbol)
     (define-key helm-gtags-mode-map (kbd "C-c <") 'helm-gtags-previous-history)
     (define-key helm-gtags-mode-map (kbd "C-c >") 'helm-gtags-next-history)
     (define-key helm-gtags-mode-map (kbd "M-,") 'helm-gtags-pop-stack)))

使う時

  • ファイルを開く
  • M-x helm-gtags-modeする
  • 関数などにカーソルを合わせる
  • M-tやM-rで
Find Reference: (default "なんとかかんとか")

と聞かれるのでEnterするとジャンプする

iTuenes 12.7にアップグレードしたら起動しなくなったのでiTunes12.6にダウングレードして起動できるようにする

環境

  • MacBook Pro(13-inch, 2017)
  • iTunesライブラリはNAS(I-O DATA HDL2-AAシリーズ)で管理

現象

アップデートの表示が出ていたのでアップデートしたところ、iTunesがフリーズして一向に起動しない。
iTunes再起動やOS再起動しても解決しないのでiTunes12.6にダウングレードする。

iTunes12.6にダウングレードする方法

現在のiTunes(12.7)を一旦削除してiTunes12.6をインストールしたいところだが、iTunesはゴミ箱に入れようとしても「“iTunes.app”はmacOSで必要なため、変更または削除できません。」とメッセージが表示される。
f:id:sattamassagana:20170923113100p:plain
このため、ターミナルからiTunesを削除する必要がある。

  • ターミナルを起動する。
  • Aplicationsフォルダに移動するため、ターミナルに次のように入力し、return
cd /Applications/
  • 次のコマンドを入力し、iTunesを削除する。
sudo rm -rf iTunes.app/


残りはFinderからの作業になる。

  • Finderから ~/Music/iTunes/ フォルダに移動し、“iTunes Library.itl”というファイルをデスクトップか、わかり易い場所にコピーしておく(バックアップのため)。
  • “Previous iTunes Libraries”フォルダの中から最も最近の日付が書かれたiTunesライブラリファイルを見つける。iTunesを12.7にアップグレードする前なので例えば“iTunes Library 2017-09-12.itl”などという名前になっているはず。
  • 見つけた“iTunes Library 2017-09-12.itl”を~/Music/iTunes/ フォルダにコピーする。
  • 次に“iTunes Library 2017-09-12.itl”を“iTunes Library.itl”に「名前を変更」する。
  • アップルサポートにアクセスし、“iTunes 12.6.2”をダウンロード、インストールする。

アップル - サポート - ダウンロード

  • これでiTunes12.6にダウングレードし起動できるようになった。

windows10 + emacs + oracleでの文字化け

環境

emacsインストール済み
windows10インストール済み
oracle12cインストール済み

問題

emacsからM-x sql-oracleしてsql-plusをバッファに表示させると文字化けしている

対策

oracleのキャラクタセットを確認
sql-plusから
select * from NLS_DATABASE_PARAMETERS;
NLS_CHARACTERSET を確認するとJA16SJISTILDEとなっていた。これはoracleのインストール時に決めるもので後から変えられないらしい。
この場合は環境変数NLS_LANGにJAPANESE_JAPAN.JA16SJISTILDEを設定する必要がある。
システム環境変数の編集→詳細設定タブ→環境変数→システム環境変数で新規→変数名にNLS_LANG、変数値にJAPANESE_JAPAN.JA16SJISTILDE
を設定しOK→OK→OK→windows再起動

結果

emacsからM-x sql-oracle、文字化けしていない。しかし、今度はコマンドプロンプトの方が文字化けしている。

断念

・コマンドプロンプトからsqlplus使わない

JVMのソースコードを読むための準備

JDK/JRE/JVM

JVMとは

Javaバイトコードとして定義された命令セットを実行するスタック型の仮想マシン(Java Virtual Machine) 。JRE(Java Runtime Environment)に入っている。

JREとは

Java実行環境。JVMやAPIが入っている。

JDKとは

Java開発キット(Java Development Kit)。JREが入っている。

具体的に何が入っているのか確かめる

ソースコードを取得する

OpenJDKはMercurialというソースコード管理システムで管理されている。Mercurialをインストールする(ubuntu)

パッケージのダウンロード

sudo apt-get install mercurial

ソースコードを取得するにはターミナルから下記を実行(jdk8)

hg clone http://hg.openjdk.java.net/jdk8/jdk8

するとjdk8というフォルダがhome以下にできる

この時点でフォルダの中を見てみると、makefileや.cファイルの存在を確認できる。まだ.javaファイルはない。
ターミナルからjdk8の中に入り、get_source.shを実行するとソースコードを全て取得できる。

Linux+eclipse+JavaFX

Linux(Ubuntu)にeclipseをインストールしたが、JavaFXが使えない→下記インストールする必要がある。
Eclipse→ヘルプ→新規ソフトウェアのインストール→
http://download.eclipse.org/releases/mars→一般用ツール→e(fx)clipse - IDE

JavaScript スタイルシートを操作する②

<link rel="stylesheet" type="text/css" href="style.css"/>
<script type="text/javascript">
 //className.html
 //外部スタイルシートで定義されたスタイル(スタイルクラス)にアクセスするには
 //classNameプロバティを使用する。
 function changeStyle(elem, clazz){
     //指定要素に対して、スタイルクラスclazzを適用する
     elem.className = clazz;
 }
</script>

<div onmouseover="changeStyle(this, 'highlight')"
     onmouseout="changeStyle(this, 'normal')">
    マウスを乗せると色が変わります。</div>
/*style.css*/
.Highlight{
    Background-color: Pink;
}
.normal{
    Background-color: White;
}

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで

JavaScript スタイルシートの操作①

<script type="text/javascript">
 //JavaScriptからスタイルシートを操作①
 
 //インラインスタイルにアクセスする。<div>タグにマウスポインタを載せたタイミングで背景色をピンクに、外したタイミングで下の白色に切り替える。
 function changeStyle(elem, color){
     elem.style.backgroundColor = color;
 }
</script>

<div onmouseover="changeStyle(this, 'Pink')"
     onmouseout="changeStyle(this, 'White')">
    マウスを乗せると色が変わります。</div>

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで

JavaScript 新規にノードを追加する

<script type="text/javascript">
 //新規にノードを追加する
 
 //フォームに入力した内容を下にページ下部に対応するリンクを追加する
 //追加ボタンをクリックしたタイミングで実行されるadd関数
 function add(f){
     //<a>タグを生成
     var anchor = document.createElement('a');
     //<a>タグのhref属性を設定
     anchor.href = f.url.value;
     //テキストノードを生成し、<a>タグの直下に追加
     var name = document.createTextNode(f.name.value);
     anchor.appendChild(name);
     //<br>タグを生成
     var br = document.createElement('br');
     //<div id="list">を取得
     var list = document.getElementById('list');
     //<div>タグ直下に<a>,<br>タグの順番で追加
     list.appendChild(anchor);
     list.appendChild(br);
 }
</script>

<form>
    <label>サイト名:<br />
        <input type="text" name="name" size="30"/></label><br />
        <label>URL:<br />
            <input type="text" name="url" size="50"/></label><br />
            <input type="button" value="追加" onclick="add(this.form)"/>
</form>
<div id="list"></div>

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで

JavaScript ウィンドウサイズやスクロール位置を操作する

<html>
    <head>
        <body>
<!-- moveByメソッド、resizeByメソッドはChromeでは未対応 -->
 <input type="button" value="scrollTo" onclick="window.scrollTo(0,200)"/>
 <input type="button" value="moveBy" onclick="moveBy(100,100)"/>
 <input type="button" value="resizeBy" onclick="window.resizeBy(50,50)"/>
 1<br>
 1<br>
 1<br>
 1<br>
 1<br>
 1<br>
 1<br>
 1 <br>
 1<br>
 1<br>
 
        </body>
    </head>
</html>

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで

JavaScript タイマー機能の実装

<script>
 //タイマー機能の実装
 //タイマーIDを格納するためのグローバル変数
 var timer;
 //ページロード時にタイマー処理を登録
 window.onload = function(){
     timer = window.setInterval(
         //現在の時刻を<div id='result'>タグに表示(1000ミリ秒ごとに更新)
         function(){
             var dat = new Date();
             document.getElementById('result').innerHTML = dat.toLocaleTimeString();
         },1000
     );
 };
</script>

<!-- ボタンクリック時にタイマー処理を中止 -->
<input type="button" value="タイマー停止" onclick="clearInterval(timer)"/>
<div id="result"></div>

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで

JavaScript サブウィンドウを生成する

<script type="text/javascript">
 //サブウインドウを表すWindowオブジェクトを格納する変数
 var subwin;
 //サブウィンドウを開くボタンクリック時に実行
 function win_open(){
     subwin = window.open('http://www.wings.msn.to/', 'Sample',
     'width=600,height=300,scrollbars=yes,location=yes');
 }
 //サブウィンドウを閉じるボタンクリック時に実行
 function win_close(){
     //変数subwinが空でなく、サブウィンドウが閉じられていない時にのみクローズ
     if(subwin && !subwin.closed){
         subwin.close();
     }
 }
</script>

<input type="button" value="サブウィンドウを開く" onclick="win_open()"/>
<input type="button" value="サブウィンドウを閉じる" onclick="win_close()"/>

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで

JavaScript ハンドラー3

<script type="text/javascript">
    //ページロード時に実行されるイベントハンドラを登録
    window.onload = function(){
    //ボタンクリック時に実行されるイベントハンドラを登録
    document.getElementById('btn').onclick = function(){
    window.alert('ボタンがクリックされました');
    };
    };
</script>
<input id="btn" type="button" value="ダイアログ表示"/>

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで

JavaScript ハンドラー1

<script type="text/JavaScript">

 function btn_onclick(){
     window.alert('ボタンがクリックされました');
 };
 //-->
</script>

<input type="button" value="ダイアログ表示" onclick="btn_onclick()" />

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで

JavaScript 継承

<script>
//クラスベースなオブジェクト指向によく似た継承を実現する方法
 //予め用意したMemberクラスを継承してSpecialMemberクラスを定義する
 function initializeBase(derive, base, baseArgs){
     base.apply(derive, baseArgs);
     for(prop in base.prototype){
         var proto = derive.constructor.prototype;
         if(!proto[prop]){
             proto[prop] = base.prototype[prop];
         }
     }
 }

 //Memberクラスを定義
 var Member = function(firstName, lastName){
     this.firstName = firstName;
     this.lastName = lastName;
 };

 Member.prototype.getName = function(){
     return this.lastName + ' ' + this.firstName;
 };

 //Memberクラスを継承したSpecialMemberクラスを定義
 var SpecialMember = function(firstName, lastName, role){
     initializeBase(this, Member, [firstName, lastName]);
     this.role = role;
 }

 SpecialMember.prototype.isAdministrator = function(){
     return (this.role == 'Administrator');
 };

 var mem = new SpecialMember('Jhon', 'Paul', 'Administrator');
 document.writeln('名前:' + mem.getName());
 document.writeln('管理者:' + mem.isAdministrator());
</script>

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで

JavaScript コンストラクタ

<script>
 var Member = function(firstName, lastName){
//thisはコンストラクタによって生成されるインスタンスを表す。
     this.firstName = firstName;
     this.lastName = lastName;
     this.getName = function(){
         return this.lastName + ' ' + this.firstName;
     }
 };

 var mem = new Member(' Jhon', 'Paul');
 document.writeln(mem.getName());
</script>

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで