大量データ作成SQL
環境
- MacBook Pro
- Docker Version 18.03.1-ce-mac65
- Oracle 12c
1000万レコードをテーブルにinsertする。
- 参考URL
- http://kagamihoge.hatenablog.com/entry/20130521/1369137719
- https://qiita.com/gitya107/items/f9b977838d2649078043
create table ITEM_INFO (NO varchar(10), YM varchar(6), ID varchar(8), PRDCT varchar(30), PRICE varchar(32), OTHER1 varchar(30), OTHER2 varchar(30), OTHER3 varchar(30), OTHER4 varchar(30), OTHER5 varchar(30), OTHER6 varchar(30), OTHER7 varchar(30), OTHER8 varchar(30), OTHER9 varchar(30), OTHER10 varchar(30), OTHER11 varchar(30), OTHER12 varchar(30), OTHER13 varchar(30), OTHER14 varchar(30), OTHER15 varchar(30), OTHER16 varchar(30), OTHER17 varchar(30), OTHER18 varchar(30), OTHER19 varchar(30), OTHER20 varchar(30), OTHER21 varchar(30), OTHER22 varchar(30), OTHER23 varchar(30), OTHER24 varchar(30), OTHER25 varchar(30), OTHER26 varchar(30), OTHER27 varchar(30), OTHER28 varchar(30), OTHER29 varchar(30), OTHER30 varchar(30), OTHER31 varchar(30), OTHER32 varchar(30), OTHER33 varchar(30), OTHER34 varchar(30), OTHER35 varchar(30), OTHER36 varchar(30), OTHER37 varchar(30), OTHER38 varchar(30), OTHER39 varchar(30), OTHER40 varchar(30), OTHER41 varchar(30), OTHER42 varchar(30), OTHER43 varchar(30), OTHER44 varchar(30), OTHER45 varchar(30), OTHER46 varchar(30), OTHER47 varchar(30), OTHER48 varchar(30), OTHER49 varchar(30) ); --実行時間計測 set timing on --1000万件登録 insert into ITEM_INFO --最初のselectにはinsertしたい項目を羅列する select --1000万までの連番 i + j --ランダム日付 ,to_char( -- 2016/01から2018/09のランダム月を取得(YYYYMM形式) TO_DATE('20160101','YYYYMMDD') + MOD(ABS(DBMS_RANDOM.RANDOM()), TO_DATE('20181001', 'YYYYMMDD') - TO_DATE('20160101', 'YYYYMMDD')) , 'YYYYMM') --連番を8桁で右X埋め ,rpad(to_char(i + j),8,'X') --以降は固定値を入れている ,'りんご' ,'138' ,'OTHER1' ,'OTHER2' ,'OTHER3' ,'OTHER4' ,'OTHER5' ,'OTHER6' ,'OTHER7' ,'OTHER8' ,'OTHER9' ,'OTHER10' ,'OTHER11' ,'OTHER12' ,'OTHER13' ,'OTHER14' ,'OTHER15' ,'OTHER16' ,'OTHER17' ,'OTHER18' ,'OTHER19' ,'OTHER20' ,'OTHER21' ,'OTHER22' ,'OTHER23' ,'OTHER24' ,'OTHER25' ,'OTHER26' ,'OTHER27' ,'OTHER28' ,'OTHER29' ,'OTHER30' ,'OTHER31' ,'OTHER32' ,'OTHER33' ,'OTHER34' ,'OTHER35' ,'OTHER36' ,'OTHER37' ,'OTHER38' ,'OTHER39' ,'OTHER40' ,'OTHER41' ,'OTHER42' ,'OTHER43' ,'OTHER44' ,'OTHER45' ,'OTHER46' ,'OTHER47' ,'OTHER48' ,'OTHER49' from ( with data2(j) as ( select 0 from dual union all select j+10000 from data2 where j < 9990000 ) select j from data2 ), ( with data1(i) as ( select 1 from dual union all select i+1 from data1 where i < 10000 ) select i from data1 ); commit;
結果
10,000,000 rows inserted. Elapsed: 00:03:27.323
3分程。
ボットを作る(hubot + slack + heroku)
開発環境
vmware上のubuntu
macからemacsでファイルを編集する。
- vmwareのubuntuを起動しておく
- macのコンソールからの接続:
~ $ ssh ユーザー名@サーバー名
- macのemacsからの接続:
C-x C-f /ssh:ユーザー名@サーバー名:/home/ubuntu/workspace/
node.jsのインストール
- まずはnode.jsのバージョン管理ツールnodebrew を導入する
ubuntuに接続しコンソールから
curl -L git.io/nodebrew | perl - setup
- パスを通す
echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.profile
- .profileを読み込む
source ~/.profile
- 確認
nodebrew
- バージョンや使い方が表示されること。
- nodebrewでnode.jsをインストールする
nodebrew install-binary v6.11.1 nodebrew use v6.11.1
- コンソールからnpmをアップデート
npm update -g npm
必要なモジュールのグローバルインストールとボットの作成
- モジュールのインストール
npm install -g yo@1.8.5 --ひな形作成ツール (ジェネレーター) npm install -g generator-hubot --Yeoman を利用した Hubot のジェネレーター。Hubotはボットを作成するためのフレームワーク npm install -g coffee-script@1.12.4
- ボットを作成するコマンドを実行する
cd ~/workspace mkdir myownhubot cd myownhubot yo hubot
基本的にYでOK。アダプターだけslackにしてEnter。
? Bot adapter (campfire) slack
ボットでの処理をJavascriptで書くためにコンソールからファイル作成
touch scripts/hello.js
- hello.jsを書く
'use strict'; //robotという引数を持つ無名関数をモジュールとしている。 module.exports = (robot) => { //HubotのAPIの利用方法が以下。 ///hello>/iは正規表現。マッチしたら次に渡す無名関数を実行するという形式。 //msgオブジェクトからユーザーの名前を受け取り、「hello,ユーザー名」と発言する。 robot.hear(/hello>/i, (msg) => { const username = msg.message.user.name; msg.send('hello, ' + username); }); };
- 書いたらボットをslackのアダプターなしで動かしてみる
コンソールから
cd ../ chmod a+x bin/hubot bin/hubot
とりあえず以下のような感じになる。ユーザーがShellになっている。
npm WARN hubot-help@0.2.2 requires a peer of coffee-script@^1.12.6 but none was installed. npm WARN hubot-slack@4.5.3 requires a peer of hubot@^2.0.0 but none was installed. body-parser deprecated undefined extended: provide extended option node_modules/hubot/src/robot.js:445:21 No history available myownhubot> [Mon Aug 06 2018 13:31:24 GMT+0900 (JST)] INFO /home/ubuntu/workspace/myownhubot/scripts/hello.js is using deprecated documentation syntax [Mon Aug 06 2018 13:31:24 GMT+0900 (JST)] WARNING Loading scripts from hubot-scripts.json is deprecated and will be removed in 3.0 (https://github.com/github/hubot-scripts/issues/1113) in favor of packages for each script. Your hubot-scripts.json is empty, so you just need to remove it. [Mon Aug 06 2018 13:31:24 GMT+0900 (JST)] ERROR hubot-heroku-keepalive included, but missing HUBOT_HEROKU_KEEPALIVE_URL. `heroku config:set HUBOT_HEROKU_KEEPALIVE_URL=$(heroku apps:info -s | grep web.url | cut -d= -f2)` [Mon Aug 06 2018 13:31:24 GMT+0900 (JST)] INFO hubot-redis-brain: Using default redis on localhost:6379 hello> myownhubot> hello, Shell
- 次にslack でhubotを動かす
- slackで開発用のworkspaceを作成する
- https://slack.com/からメールアドレスを入力しGetStarted、新しいworkspaceを作成する
- 諸々入力する
- メールが来たらslackにログインする
- チャンネルの横のマーククリックしてチャンネルを作成する
slackの設定を行う
https://slack.com/services/new
- 上記から検索欄にhubotと入力する。出てきたhubotをクリックすると設定ページが表示されるのでinstallをクリックする。
- ユーザー名を適当に入力。
- APIトークンを控えておく(パスワードみたいなものなので公開しないように注意)
HUBOT_SLACK_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- インテグレーションの保存をクリックする。
- 次にこのボットを反応させたいチャンネルに参加させる。
- 先程のチャンネルに参加させる。作成したslackのチャンネルに入る。歯車ボタンから「新しいユーザーを招待する。」を選択。
先ほど作成したボットの名前を入力しinvite.設定は以上。
ボットを起動する
コンソールから
env HUBOT_SLACK_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx bin/hubot --adapter slack
これで起動した状態になる。
slackのbotチャンネルでhello>と入力して動作確認。
ボットを常時起動させておくことができるようにHerokuを使う
https://www.heroku.com/
- アカウントを作成する。
- コンソールからHeroku CLIをインストールする(herokuコマンドが使えるようになる)
wget -O- https://cli-assets.heroku.com/install-ubuntu.sh | sh
- 確認
heroku --version heroku-cli/6.15.13-3dce47c (linux-x64) node-v9.3.0
- Heroku CLI から Heroku にログインする。
- コンソールから
heroku login
- 下記のように表示されればログイン完了
Logged in as メールアドレス
githubに新しくリポジトリを作成する。
https://github.com/new
必要な項目を入力して「Create repository」ボタンをクリック
…or create a new repository on the command lineをコンソールにコピペして実行
- 他のファイルもpushする
- herokuで動かすための設定ファイルProcfileを作成する。
- Procfile
web: bin/hubot --adapter slack
- ProcfileはHeroku がアプリケーションを動作させる際に「どのようなコマンドを実行するか」を認識するための設定ファイル。
- サーバーの用意をする。これをやるのは一回だけ。
$ heroku create
デプロイ
git push heroku master
- トークンはherokuのコマンドで登録する。ダブルクォートで囲う。
heroku config:set HUBOT_SLACK_TOKEN="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
- 確認
heroku config:get HUBOT_SLACK_TOKEN
動作確認
slackのチャンネルからhello>と発言してみる
- なにか変更したらgit push heroku masterする
- herokuの再起動はコンソールからheroku restart アプリ名
SeleniumとPhantomJSの環境構築
Docker上にUbuntuの構築
$ docker pull ubuntu:16.04
$ docker run -it ubuntu:16.04
Python3とSeleniumのインストール
apt-get update
apt-get install -y python3 python3-pip
pip3 install selenium
pip3 install beautifulsoup4
PhantomJSのインストール
apt-get install -y wget libfontconfig mkdir -p /home/root/src && cd $_ wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2 tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2 cd phantomjs-2.1.1-linux-x86_64/bin/ cp phantomjs /usr/local/bin/
日本語フォントが表示されるようにする
apt-get install -y fonts-migmix cat <<EOF > /etc/fonts/local.conf <?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <fontconfig> <match target="pattern"> <test qual="any" name="family"> <string>serif</string> </test> <edit name="family" mode="assign" binding="strong"> <string>MigMix 2P</string> </edit> </match> </fontconfig> EOF
Dockerをコミットしておく
exit docker ps -a docker commit (コンテナID) ubuntu-phantomjs
コンテナ起動
$ docker run -it -v $HOME(ホストのパス):$HOME(コンテナのパス) \ > -e LANG=ja_JP.UTF-8 \ > -e PYTHONIOENCODING=utf_8 \ > ubuntu-phantomjs /bin/bash
動作確認
seleniumu-capture.py
from selenium import webdriver url = "http://www.aozora.gr.jp/cards/000081/files/46268_23911.html" #PhantomJSのドライバを得る browser = webdriver.PhantomJS() #暗黙的な待機を最大3秒行う browser.implicitly_wait(3) #URLを読み込む browser.get(url) #画面をキャプチャしてファイルに保存 browser.save_screenshot("Website.png") #ブラウザを終了 browser.quit()
cd $HOME(コンテナのパス) python3 selenium-capture.py
実行結果
Website.pngが出来上がる
pythonとかdocker
作業の覚書
python
- emacsでpythonが自動補完できるように設定
$ sudo easy_install pip $ sudo pip install virtualenv
-
- init.el追記
(require 'python-mode) (setq auto-mode-alist (cons '("\\.py\\'" . python-mode) auto-mode-alist)) (require 'jedi) (add-hook 'python-mode-hook 'jedi:setup) (setq jedi:complete-on-dot t)
- macにdockerをインストール
- dockerにPython3とanacondaの環境を整備
$ docker pull continuumio/miniconda3 $ docker run -i -t continuumio/miniconda3 /bin/bash $ docker ps -a $ docker commit ef08836ef1b2 mlearn:init $ docker images $ docker run -i -t mlearn:init /bin/bash $ docker run -i -t -v {ホストOSのカレントディレクトリ}:/home mlearn:init /bin/bash
サーバーサイド(node.js)
- Expressのhelmetモジュールの動作確認
Expressのセキュリティ設定
helmetモジュールでHTTPに於ける脆弱性となるヘッダを取り除く
対応前の確認
- プロジェクトの生成とExpressに必要なnpmパッケージのインストール
$ express express-helmet
$ cd express-helmet/
$ npm install
- サーバーの起動
$ DEBUG=express-hlmet:* PORT=8000 npm start
デベロッパーツール→Network→再読込み→localhost選択→Headersタブを見ると、
X-Powered-By:Expressと書かれており、このWebサービスがExpressで開発されていることが分かってしまう。
もしExpressに脆弱性があるとわかったときに攻撃対象にされる危険性がある。
このためX-Powered-Byというヘッダは送信しないほうが安全。
helmetのインストール
$ npm install helmet --save
app.jsの修正
- モジュールの読み込みとappオブジェクトのuse関数でhelmetを使うようにする
var express = require('express'); var path = require('path'); var favicon = require('serve-favicon'); var logger = require('morgan'); var cookieParser = require('cookie-parser'); var bodyParser = require('body-parser'); +var helmet = require('helmet'); var index = require('./routes/index'); +var users = require('./routes/users');
対応後の確認
- サーバー起動
$ DEBUG=express-hlmet:* PORT=8000 npm start
デベロッパーツール→Network→再読込み→localhost選択→Headersタブ
X-Powered-By:Expressが消える
まとめ
フレームワークによって自分で実装しなくて済む
node.jsのフレームワークを導入する
ジェネレーターのインストール&必要なファイルの作成
$ npm install -g express-generator /home/ubuntu/.nodebrew/node/v4.7.0/bin/express -> /home/ubuntu/.nodebrew/node/v4.7.0/lib/node_modules/express-generator/bin/express-cli.js + express-generator@4.15.5 added 6 packages in 0.99s $ cd workspace/$ express express-study warning: the default view engine will not be jade in future releases warning: use `--view=jade' or `--help' for additional options create : express-study create : express-study/package.json create : express-study/app.js create : express-study/public create : express-study/routes create : express-study/routes/index.js create : express-study/routes/users.js create : express-study/views create : express-study/views/index.jade create : express-study/views/layout.jade create : express-study/views/error.jade create : express-study/bin create : express-study/bin/www create : express-study/public/javascripts create : express-study/public/images create : express-study/public/stylesheets create : express-study/public/stylesheets/style.css install dependencies: $ cd express-study && npm install run the app: $ DEBUG=express-study:* npm start
npmモジュールのインストール
cd express-study
npm install
起動
$ DEBUG=express-study:* PORT=8000 npm start > express-study@0.0.0 start /home/ubuntu/workspace/express-study > node ./bin/www express-study:server Listening on port 8000 +0ms
- 「npm スクリプト名」 というコマンドでpackage.jsonで設定されたコマンドが実行される。package.jsonにはこんな箇所がある。
"scripts": { "start": "node ./bin/www" },
試しにExpressのdebugモジュールの機能を使ってみる
- app.jsの先頭に追加する
'use strict'; const debug = require('debug');//debugモジュールを読み込む const debugInfo = debug('app:info');//module:infoという設定のロガーdebugInfoを用意 setInterval(() => {//1000msごとに関数を実行する debugInfo('some information'); }, 1000); const debugError = debug('app:error');//別の設定のロガーdebugErrorを用意 setInterval(() => { debugError('error!'); }, 2000);
- 実行(複数ログ出力するにはカンマで繋げてコマンドを実行する)
$ DEBUG=express-study:*,app:* PORT=8000 npm start > express-study@0.0.0 start /home/ubuntu/workspace/express-study > node ./bin/www express-study:server Listening on port 8000 +0ms app:info some information +907ms app:error error! +997ms app:info some information +9ms app:info some information +1s app:error error! +990ms app:info some information +13ms app:info some information +1s app:error error! +987ms app:info some information +14ms app:info some information +1s app:error error! +985ms app:info some information +17ms app:info some information +1s app:error error! +982ms app:info some information +23ms app:info some information +1s app:error error! +978ms app:info some information +25ms
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で必要なため、変更または削除できません。」とメッセージが表示される。
このため、ターミナルから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本格入門 ~モダンスタイルによる基礎から現場での応用まで
- 作者: 山田祥寛
- 出版社/メーカー: 技術評論社
- 発売日: 2016/09/30
- メディア: 大型本
- この商品を含むブログを見る
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本格入門 ~モダンスタイルによる基礎から現場での応用まで
- 作者: 山田祥寛
- 出版社/メーカー: 技術評論社
- 発売日: 2016/09/30
- メディア: 大型本
- この商品を含むブログを見る
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本格入門 ~モダンスタイルによる基礎から現場での応用まで
- 作者: 山田祥寛
- 出版社/メーカー: 技術評論社
- 発売日: 2016/09/30
- メディア: 大型本
- この商品を含むブログを見る
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本格入門 ~モダンスタイルによる基礎から現場での応用まで
- 作者: 山田祥寛
- 出版社/メーカー: 技術評論社
- 発売日: 2016/09/30
- メディア: 大型本
- この商品を含むブログを見る