MySQLのNOW()
・NOW()
関数が文字列で使用されているか、または数値コンテキストで使用されているかによって、現在の日付を 'YYYY-MM-DDHH:MM:SS' または YYYYMMDDHHMMSS.uuuuuu フォーマットの値で返します。値は現在の時間帯で表現されています。
mysql> SELECT NOW(); -> '2007-12-15 23:50:26'
mysql> SELECT NOW() + 0; -> 20071215235026.000000
MySQL :: MySQL 5.1 リファレンスマニュアル (オンラインヘルプ) :: 7.6 日付時刻関数
後者をふと目にする機会があったのでメモ。
しかし後者の使い方は、場合によってはトラブルのもとになりそうだし(23時台に+10000すると、24時~分となって不正な日付の値になったり)、素直に日付演算用の関数を使おう。
第2回足立フレンドリーマラソンでハーフ走ってきたー
第2回 足立フレンドリーマラソン にて、ハーフマラソンの部に参加してきました。
せっかくなので感想なりなんなり箇条書きしてみます。
- 走る前
- 走ってる時
- コースは荒川沿いに10km下って、折り返して戻ってくる、というものだった。
- 風が結構強くて、行きは走ってる時でも背中で風を感じれるくらい追い風。
- 折り返してからは、足の疲労とあいまって、超絶つらい向かい風だった。進まないw
- 残り5kmくらいからは、夜に予定してた馬肉を食べる会のことばかり考えていた。とにかく足が痛くなってきてたので意識を外へ。
- 「がんばれー」という声援をうけると走る速度が2秒間ほどUPする。すぐ戻る。
- 道路脇で見ている幼女とハイタッチできた。ハイタッチもスピードが一時的に上がる効果が見込まれる。
- 走り終えて
- タイムは2時間15分。多分行きが1時間切るくらいで、戻りでだいぶペースダウン。練習不足と向かい風。
- コースが川沿いということもあって、幅もままあり走り易かった。
- コース途中に時計の類はないので、自分のように時計持っていないにわかランナーにとっては、時間が全くわからなくて、別に困りはしなかったけどもあるとよいなと思った。せめて折り返しあたりに。
- 練習不足により、足の裏と付け根にまずガタが来た。
- 普段は通勤やおでかけ時に自転車を漕ぐくらいなので、心肺はわりと大丈夫だった。かわりに足の裏がやわいまま。
- 24日現在絶賛筋肉痛。
- 参加時にもらったパンフに銭湯の紹介がのっており、ゼッケンをみせると特別価格とのことだったので帰りに行きたかったが、場所が遠そうだったのであきらめた。
- コースの最寄り駅は北千住で、自分が住んでるところから電車で20分ほどで、とても近かった。
- 千葉や埼玉等の大会は、移動に時間がかかるため早起きがつらい。今回のような近場の大会があったらまた出たい。
サイ本要約 16章「CSSとDHTML」
ブラウザの開発ツールなりで実際にstyleいろいろいじると理解が深まりんぐ。
特に位置指定まわりはやってみると感覚としてわかります。
Chrome使ってる人なら Ctrl+Shift+I をッターン!しましょう!
あとこのへんの基本をさらった上で、jQuery使って楽しましょう。
jQueryのcss操作系メソッドのコード読んだりするのもいいかも。
◆CSSの概要
記述方法
- セレクタ { 属性: 値; 属性: 値;属性: 値;・・・} というおなじみ(?)の記述方法。
//タグ指定 p { font-weight: bold; color: blue; text-decoration: underline; } //クラス指定 .bold { font-weight: bold; } //id指定 #hoge { margin: 3px; } //組み合わせ: errorクラスをもつdiv要素 div.error //スペースをはさむと、子孫要素を指定できる。 //div要素内のp要素 div p { 〜〜〜 }
- どんな属性、値があるかについてはググッてリファレンスみてください。
- 親要素から値を継承できる、"inherit"という値がある。
- よく使われると思われるものにはショートカット属性が存在する。
- font, margin, padding, border など。
要素への適用方法
- 要素の"style"属性で指定。
<div style="letter-spacing: 0px; line-height: 1.4;"> hogehoge </div>
- スタイルシート内に記述。
- htmlの構造と表示を分けるという観点からは、こちらが推奨される。
スタイルシートの記述方法
- 内に直接記述。
<head> . . <style type="text/css"> body { --- } p { --- } </style> </head>
- 外部ファイルから読み込む。
スタイルルールの優先順位
- 基本的な考え方としては、適用範囲が狭いものほど強い。
- 各スタイルシートの優先順位(同じ属性が指定されている場合は左側が優先される)
- 要素 > ページ > ユーザ > ブラウザ
- 例外、ユーザスタイルシートにimportが含まれている場合
- 同じ要素に対して、複数の方法で指定された場合の優先順位
- id > クラス > 入れ子タグ(例: div p {~~} の p) > タグ
◆インラインスタイルの制御
属性値の取得、設定
- 要素を参照するオブジェクトの、styleプロパティから取得、設定できる。
- styleプロパティから取得、設定できるのは、インラインスタイルで指定したもののみ。
- styleプロパティから取得、設定できるのは、インラインスタイルで指定したもののみ。(大事なことなので2回言いました)
- なので、スタイルシートで指定した属性情報は取得できない。
- 取得したい場合はwindow.getComputedStyleを利用する。(後述)
- 取得結果の値は文字列。
- "width", "margin-top" などは、単位も含めて文字列として返されるので注意。
- 設定時も、単位(px等)を含めた文字列で指定すること。
//要素取得 var hoge = document.getElementById("hoge"); //属性値の取得 var width = hoge.style.width; //属性値の設定 hoge.style.backgroundColor = "red"; //幅の取得値は単位を含めた文字列 var width = hoge.style.width; // "150px" など //幅を倍にする場合はparseInt()などを使う var newWidth = parseInt(width) * 2; hoge.style.width = newWidth + "px"; //ダメな例(数値と解釈されない文字列に数値をかけた結果はNaNになる) hoge.style.width = hoge.style.width * 2;
- "margin", "font" などのショートカット属性も取得、設定できる。
- スタイルシート記述時の用に、スペースを挟んで記述する。
//要素取得 var fuga = document.getElementById("fuga"); //属性値の取得 var margin = fuga.style.margin; //インラインで指定されていれば、"10px 5px" などと返ってくる。 //属性値の設定 hoge.style.margin = "5px 10px 15px 20px"; hoge.style.padding = "5px 10px"; //上下5px、左右10pxの指定となるのはスタイルシート記述時と同じ
命名規則に関する注意
- ハイフンを含む属性名の場合は、ハイフン後の最初の文字を大文字にする。
//ダメ element.style.font-size //OK element.style.fontSize element.style["fontSize"] element.style["font-size"] //chromeだといけた。全ブラウザで可能かはわからない。
- "float"はjavascriptの予約語なのでこれもそのままは使えない。
- 代わりに"cssFloat"を使用する。
//ダメ element.style.float //OK element.style.cssFloat
◆CSSによる位置指定
よく使い(そうな)位置指定いろいろ
- position属性で方式を指定し、left,top(right,bottom)で位置を指定する。
- 実際に書いてみて表示の変化を見るとイメージがつかみやすいので、ブラウザから適当なページのCSSいじって遊んでみましょう。
-
- static(デフォルト)
- 特になにも。
- static(デフォルト)
-
- absolute
- 絶対位置指定。
- デフォルトでは、他の位置指定されている要素に入れ子にされている場合はその要素、に対しての相対位置を指定。
- absolute
//<body>要素の左端から10pxの位置にdiv要素の左端がくる。 <div style="position: absolute; left: 10px;"> hoge </div>
-
- relative
- 通常(static)の配置結果に対する相対位置指定。
- static指定時の場合に要素に割り当てられたスペースはそのまま残る。
- relative
//positionを指定しない場合(static)と比べて、右に10px、下に10px移動した位置に表示される。 <div style="position: relative; left: 10px; top: 10px;"> fuga </div>
-
- fixed
- ブラウザウインドウに対する位置指定。
- スクロールに影響を受けずに同じ位置に表示させられるので、メニューバーやらによく使われる。
- fixed
//常に表示ウインドウの上部に表示される。 <div style="position: fixed; left: 0px; top: 0px; width: 100%;"> fuga </div>
◆その他
スタイルシートオブジェクト
- document.styleSheets でCSSStyleSheetオブジェクトの配列が取得できる。
- CSSStyleSheetオブジェクトはCSSRuleオブジェクトの配列をもつ。
- CSSRuleオブジェクトには、selectorText, styleの2つのプロパティがある。
- CSSStyleSheetオブジェクトはCSSRuleオブジェクトの配列をもつ。
- ぶっちゃけ使いどころがあんまりわかってない。
//最初のスタイルシートオブジェクトの、CSSRuleオブジェクトの配列が取得。 var rules = document.styleSheets[0].cssRules for (var i = 0; i < rules.length; i++) { var rule = rules[i]; //@import はスキップ if (!rule.selectorText) continue; //ruleText は、例えば次のような文字列になる //"div{font-size: 10px;width: 100px;}"; var ruleText = rule.selectorText + "{" + rule.style.cssText + "}"; //marginの値を2倍に変えてみる var margin = paseInt(rule.style.margin); if (margin) { rule.style.margin = (margin * 2) + "px"; } }
- スタイルシート内の既存ルールを読みだしたり変更したりするだけでなく、追加、削除までできる。
- insertRule(), deleteRule()
- ※ただしIEは(ry
- IEは addRule(), removeRule()
- 試してみたら、IE9からinsertRule(), deleteRule()も使えた。IE8だとダメだった。まだしばらくはIEは別で書かなきゃならなそう。
- insertRule(), deleteRule()
算出スタイル(computed style)
//最初のp要素取得 var p = document.getElementByTagName("p")[0]; //p要素の算出スタイルを取得 var style; if (p.currentStyle) { //IE用 style = p.currentStyle; } else { style = window.getComputedStyle(p, null); } // -> style.width, style.fontFamily などで適用されているスタイル情報が取得できる。 //windowはグローバルオブジェクトなので、getComputedStyleはそのまま呼べる。 style = getComputedStyle(p, null);
Scala で HTTP POST やろうとしてハマったメモ
はてなグラフのAPIを利用するモジュールをScalaで書いてる時に、HTTP POST 周りでちょっとハマったのでメモ。
HTTPライブラリとしてはこちらを利用しました。
Apache HttpComponents - Apache HttpComponents
さて、どこではまったかというと、POSTパラメータのセット。
Javadocやら見てると、それらしいメソッドがあるのでてっきり次のようにして出来るかと思ったら、パラメータ(以下の例だと"value")がセットされていなかった。
- ダメ
//HttpParams にパラメータセット val params = new BasicHttpParams params.setParameter("value", value) //HttpPost を用意し、パラメータをセット val post = new HttpPost("http://hoge.com/fuga/") post.setParams(params) //実行 val client = new DefaultHttpClient val response = client.execute(post)
あれこれ試行錯誤した結果、次のやり方でよいということになった。
- イケル
//NameValuePair のArrayList を用意して、 //そこに BasicNameValuePair を追加していく val params: java.util.List[NameValuePair] = new ArrayList() params.add(new BasicNameValuePair("value",value)) //HttpPost を用意し、パラメータをセット val post = new HttpPost("http://hoge.com/fuga/") post.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8)) //実行 val client = new DefaultHttpClient val response = client.execute(post)
参考にしたのがJavaのサンプルなので、もっとScalaっぽい書き方ができるのかもしれない。
単純に移植するだけでもJavaに比べて記述がわりと簡潔になるもんだなーという感想。
前者の手法のほうがすっきりするので、なんとかできないかとがんばってはみたものの、結局解決には至らず。
setParameterとはいったい・・・うごごご・・・。
(参考)
HttpClient 4.0-beta2を使う POST編 - Javaと情熱のあいだ
AndroidでPOST通信 | 5ive.blog
delete last line
標準入力から渡されるもののうち、最終行以外を出力するというもの。
readLineで行ごとに受け取るなら、最終行かを判別するために、前行を保持しておいて〜とかする必要がありそうなので、まずはio.Source.stdin使って全体とって最終行をなにかしらで省く方法でいってみます。
とりあえずまず最初に通るものを。
- 53bytes
io.Source.stdin.getLines.toList.init.foreach(println)
io.Source.stdin.getLines で全入力を行単位の Iterator[String] にして、toListして、initで末尾(ここでは最後の行の文字列)を取り除いて、出力。
やってることは素直なので、わかりやすいけど若干長い。
同じような感じでもう1つ。最終行末尾には改行コードが入らないので、改行コードでsplitして最後の要素を省いて出力。
まあ伸びたけどw
- 58bytes
(io.Source.stdin.mkString split"\n").init.foreach(println)
readLine使ったパターンの方が短くなりそうだけど、ちょっと今酔ってるので、寝て起きたら考えます。
even lines
今日はこれ。
anarchy golf - even lines
標準入力から渡されるもののうち、偶数行目だけを出力するというもの。
しばらくは、なんとかline(s)系の軽めなのを続けていこうかと。
継続はなんとやら。
まず何も考えずに書いたのが以下。
- 40bytes
while(0<1){readLine;println(readLine.r)}
1ループ内でreadLineを2回呼んで、2回目のみ出力すればいいよね、というもの。
.r は例によって、例外投げてタイムアウトを予防するためのものです。
while(0<1){〜〜} は def f{〜〜;f};f に書き換えると1bytes減るけど、まだあわてるような時間じゃない。
というか、できることなら{}なしで、while(〜)println(〜) とか書きたい。
今回の場合なら、奇数行を読むreadLineは投げ捨てているので、そこをうまくwhileの条件に指定できないかな〜とPredefのreadHoge を眺めてたら、readBooleanなるものが。
ということで次。
- 38bytes
while(!readBoolean)println(readLine.r)
readBooleanは、REPLで試してみたところ"t" or "true" の場合に true、それ以外は false を返す模様。
なので↑のコードは、"true"なんて行があったりするとそこで止まってしまったりするw
もうちょい条件のところをちゃんとできないかな、と他のread系メソッド見てあれこれ悩んだ末にできたのがこれ。
- 34bytes
while(readChar>0)println(readLine)
readCharは入力の1文字目をCharでとってくる。Char型は数値演算ができる(その文字のAsciiコードの値)ので、不等号と合わせるとBooleanがとれる。
while部分で終了判定ができるので、readLineのあとの.rもいらなくなった。
やったー。