Flotr2 -> ローソク足(CandleStick)

Posted by muchag | JavaScript,Library & PlugIn & AddIn |
初回投稿:2015-03-28 (土) 19:00:47 | 最終更新:2015-03-31 (火) 11:56:27

歩み値からチャート推移を再現しようとして
このプラグインに当たった。

【環境】
Flotr2:バージョン不明
導入

Flotr2:Basic Candle
ここからサンプルソースをコピペ。

書式
  1. Flotr.draw(
  2.     target,
  3.     [data],
  4.     [options],
  5. )
target(描画対象)

チャートを描画するエレメントを指定。

  1. var target = document.getElementById( "chart_candlestick" );
  2.  
  3. var target = $( "#chart_candlestick" ); // jQuery 形式だとうまくいかない

jQuery 形式だとうまくいかない。
なぜかしらね~。

data(データ)
書式
  1. var data = [
  2.     [ X軸値, 始値, 高値, 安値, 終値 ],
  3.     [ X軸値, 始値, 高値, 安値, 終値 ],
  4.     ・・・
  5. ];
options(設定)

GitHub:flotr2.js

基本設定

1600行目辺りから基本設定。

  1. Flotr.defaultOptions = {
  2.     colors: ['#00A8F0', '#C0D800', '#CB4B4B', '#4DA74D', '#9440ED'], //=> The default colorscheme. When there are > 5 series, additional colors are generated.
  3.     ieBackgroundColor: '#FFFFFF', // Background color for excanvas clipping
  4.     title: null, // => The graph's title
  5.     subtitle: null, // => The graph's subtitle
  6.     shadowSize: 4, // => size of the 'fake' shadow
  7.     defaultType: null, // => default series type
  8.     HtmlText: true, // => wether to draw the text using HTML or on the canvas
  9.     fontColor: '#545454', // => default font color
  10.     fontSize: 7.5, // => canvas' text font size
  11.     resolution: 1, // => resolution of the graph, to have printer-friendly graphs !
  12.     parseFloat: true, // => whether to preprocess data for floats (ie. if input is string)
  13.     preventDefault: true, // => preventDefault by default for mobile events. Turn off to enable scroll.
  14.     xaxis: {
  15.         ticks: null, // => format: either [1, 3] or [[1, 'a'], 3]
  16.         minorTicks: null, // => format: either [1, 3] or [[1, 'a'], 3]
  17.         showLabels: true, // => setting to true will show the axis ticks labels, hide otherwise
  18.         showMinorLabels: false,// => true to show the axis minor ticks labels, false to hide
  19.         labelsAngle: 0, // => labels' angle, in degrees
  20.         title: null, // => axis title
  21.         titleAngle: 0, // => axis title's angle, in degrees
  22.         noTicks: 5, // => number of ticks for automagically generated ticks
  23.         minorTickFreq: null, // => number of minor ticks between major ticks for autogenerated ticks
  24.         tickFormatter: Flotr.defaultTickFormatter, // => fn: number, Object -> string
  25.         tickDecimals: null, // => no. of decimals, null means auto
  26.         min: null, // => min. value to show, null means set automatically
  27.         max: null, // => max. value to show, null means set automatically
  28.         autoscale: false, // => Turns autoscaling on with true
  29.         autoscaleMargin: 0, // => margin in % to add if auto-setting min/max
  30.         color: null, // => color of the ticks
  31.         mode: 'normal', // => can be 'time' or 'normal'
  32.         timeFormat: null,
  33.         timeMode:'UTC', // => For UTC time ('local' for local time).
  34.         timeUnit:'millisecond',// => Unit for time (millisecond, second, minute, hour, day, month, year)
  35.         scaling: 'linear', // => Scaling, can be 'linear' or 'logarithmic'
  36.         base: Math.E,
  37.         titleAlign: 'center',
  38.         margin: true // => Turn off margins with false
  39.     },
  40.     x2axis: {},
  41.     yaxis: {
  42.         ticks: null, // => format: either [1, 3] or [[1, 'a'], 3]
  43.         minorTicks: null, // => format: either [1, 3] or [[1, 'a'], 3]
  44.         showLabels: true, // => setting to true will show the axis ticks labels, hide otherwise
  45.         showMinorLabels: false,// => true to show the axis minor ticks labels, false to hide
  46.         labelsAngle: 0, // => labels' angle, in degrees
  47.         title: null, // => axis title
  48.         titleAngle: 90, // => axis title's angle, in degrees
  49.         noTicks: 5, // => number of ticks for automagically generated ticks
  50.         minorTickFreq: null, // => number of minor ticks between major ticks for autogenerated ticks
  51.         tickFormatter: Flotr.defaultTickFormatter, // => fn: number, Object -> string
  52.         tickDecimals: null, // => no. of decimals, null means auto
  53.         min: null, // => min. value to show, null means set automatically
  54.         max: null, // => max. value to show, null means set automatically
  55.         autoscale: false, // => Turns autoscaling on with true
  56.         autoscaleMargin: 0, // => margin in % to add if auto-setting min/max
  57.         color: null, // => The color of the ticks
  58.         scaling: 'linear', // => Scaling, can be 'linear' or 'logarithmic'
  59.         base: Math.E,
  60.         titleAlign: 'center',
  61.         margin: true // => Turn off margins with false
  62.     },
  63.     y2axis: {
  64.         titleAngle: 270
  65.     },
  66.     grid: {
  67.         color: '#545454', // => primary color used for outline and labels
  68.         backgroundColor: null, // => null for transparent, else color
  69.         backgroundImage: null, // => background image. String or object with src, left and top
  70.         watermarkAlpha: 0.4, // =>
  71.         tickColor: '#DDDDDD', // => color used for the ticks
  72.         labelMargin: 3, // => margin in pixels
  73.         verticalLines: true, // => whether to show gridlines in vertical direction
  74.         minorVerticalLines: null, // => whether to show gridlines for minor ticks in vertical dir.
  75.         horizontalLines: true, // => whether to show gridlines in horizontal direction
  76.         minorHorizontalLines: null, // => whether to show gridlines for minor ticks in horizontal dir.
  77.         outlineWidth: 1, // => width of the grid outline/border in pixels
  78.         outline : 'nsew', // => walls of the outline to display
  79.         circular: false // => if set to true, the grid will be circular, must be used when radars are drawn
  80.     },
  81.     mouse: {
  82.         track: false, // => true to track the mouse, no tracking otherwise
  83.         trackAll: false,
  84.         position: 'se', // => position of the value box (default south-east). False disables.
  85.         relative: false, // => next to the mouse cursor
  86.         trackFormatter: Flotr.defaultTrackFormatter, // => formats the values in the value box
  87.         margin: 5, // => margin in pixels of the valuebox
  88.         lineColor: '#FF3F19', // => line color of points that are drawn when mouse comes near a value of a series
  89.         trackDecimals: 1, // => decimals for the track values
  90.         sensibility: 2, // => the lower this number, the more precise you have to aim to show a value
  91.         trackY: true, // => whether or not to track the mouse in the y axis
  92.         radius: 3, // => radius of the track point
  93.         fillColor: null, // => color to fill our select bar with only applies to bar and similar graphs (only bars for now)
  94.         fillOpacity: 0.4 // => opacity of the fill color, set to 1 for a solid fill, 0 hides the fill
  95.     }
  96. };
ieBackgroundColor(チャート背景色)

だと思うんだけど、変更しても変わらない。

xaxis(X軸)
mode

‘normal’ か ‘time’。

‘time’ を設定することで、日付や時刻をX軸値に設定できる。
ただし、X軸値はタイムスタンプで設定。
それも、文字列ではなく、数値として設定。
正:[ 1427241960000, 始値, 高値, 安値, 終値 ] 誤:[ ‘1427241960000’, 始値, 高値, 安値, 終値 ]

値自動変換機能がある割には、これは変換してくれない。

noTicks

どうも横幅に対して値が少ない時に、補助の軸線を何分割で引くか
という設定みたい。
1 にすると、どんなに項目間が広くても、補助線なしになる。

tickFormatter

項目値のフォーマット。
関数でも指定できるみたい。
でも、まだ使い方がよくわからない。

  1. tickFormatter: function(x){
  2.     var x = parseInt(x);
  3.     var myDate = new Date(x*1000);
  4.     var string = myDate.getFullYear();
  5.     string = string + "-" + myDate.getMonth() + "-" + myDate.getDate();
  6.     result = string;
  7.     return string;
  8. }

stackoverflow:Putting timestamp onto x axis in Flotr2 line graph

tickDecimals

小数点以下の桁数。
0 で整数表示。

timeFormat

日付のフォーマット。

  1. %h: hours
  2. %H: hours (left-padded with a zero)
  3. %M: minutes (left-padded with a zero)
  4. %S: seconds (left-padded with a zero)
  5. %d: day of month (1-31), use %0d for zero-padding
  6. %m: month (1-12), use %0m for zero-padding
  7. %y: year (four digits)
  8. %b: month name (customizable)
  9. %p: am/pm, additionally switches %h/%H to 12 hour instead of 24
  10. %P: AM/PM (uppercase version of %p)

stackoverflow:Putting timestamp onto x axis in Flotr2 line graph

timeformat “%y/<br>%m” 日時ラベルの書式。htmlタグ使える。

k16’s note:時系列データのグラフをjQueryとFlotで描く

timeMode

‘UTC’ か ‘local’。

固有設定

4200行目辺りからローソク足グラフ専用設定。

  1. options: {
  2.     show: false, // => setting to true will show candle sticks, false will hide
  3.     lineWidth: 1, // => in pixels
  4.     wickLineWidth: 1, // => in pixels
  5.     candleWidth: 0.6, // => in units of the x axis
  6.     fill: true, // => true to fill the area from the line to the x axis, false for (transparent) no fill
  7.     upFillColor: '#00A8F0',// => up sticks fill color
  8.     downFillColor: '#CB4B4B',// => down sticks fill color
  9.     fillOpacity: 0.5, // => opacity of the fill color, set to 1 for a solid fill, 0 hides the fill
  10.     barcharts: false // => draw as barcharts (not standard bars but financial barcharts)
  11. },
candles
wickLineWidth

ひげの線の太さ。

candleWidth

塗りグラフ部分の太さ。
どうもひげの線からどのくらい太くする? という設定みたい。

fillOpacity

塗りグラフの中をどの程度塗るか。
透明度のイメージ。
0(塗らない)→ 1(ベタ塗り)まで。

Posted by muchag | JavaScript,Library & PlugIn & AddIn |
初回投稿:2015-03-28 (土) 19:00:47 | 最終更新:2015-03-31 (火) 11:56:27

Flotr2

Posted by muchag | JavaScript,Library & PlugIn & AddIn |
初回投稿:2015-03-28 (土) 18:58:13 | 最終更新:2015-03-31 (火) 11:55:45

歩み値からチャート推移を再現しようとして
このプラグインに当たった。

【環境】
Flotr2:バージョン不明

別に Flot というグラフプラグインも存在するので
Flotr2 は、Flot revision 2 なのかしらね。

Flotr2
GitHub:HumbleSoftware/Flotr2

インストール

GItHub:flotr2.min.js
からコピペ。

グラフの種類

いっぱいw
ローソク足(CandleStick)

Flotr2 参照。

基本設定

GitHub:flotr2.js

1600行目辺りから基本設定。

  1. Flotr.defaultOptions = {
  2.     colors: ['#00A8F0', '#C0D800', '#CB4B4B', '#4DA74D', '#9440ED'], //=> The default colorscheme. When there are > 5 series, additional colors are generated.
  3.     ieBackgroundColor: '#FFFFFF', // Background color for excanvas clipping
  4.     title: null, // => The graph's title
  5.     subtitle: null, // => The graph's subtitle
  6.     shadowSize: 4, // => size of the 'fake' shadow
  7.     defaultType: null, // => default series type
  8.     HtmlText: true, // => wether to draw the text using HTML or on the canvas
  9.     fontColor: '#545454', // => default font color
  10.     fontSize: 7.5, // => canvas' text font size
  11.     resolution: 1, // => resolution of the graph, to have printer-friendly graphs !
  12.     parseFloat: true, // => whether to preprocess data for floats (ie. if input is string)
  13.     preventDefault: true, // => preventDefault by default for mobile events. Turn off to enable scroll.
  14.     xaxis: {
  15.         ticks: null, // => format: either [1, 3] or [[1, 'a'], 3]
  16.         minorTicks: null, // => format: either [1, 3] or [[1, 'a'], 3]
  17.         showLabels: true, // => setting to true will show the axis ticks labels, hide otherwise
  18.         showMinorLabels: false,// => true to show the axis minor ticks labels, false to hide
  19.         labelsAngle: 0, // => labels' angle, in degrees
  20.         title: null, // => axis title
  21.         titleAngle: 0, // => axis title's angle, in degrees
  22.         noTicks: 5, // => number of ticks for automagically generated ticks
  23.         minorTickFreq: null, // => number of minor ticks between major ticks for autogenerated ticks
  24.         tickFormatter: Flotr.defaultTickFormatter, // => fn: number, Object -> string
  25.         tickDecimals: null, // => no. of decimals, null means auto
  26.         min: null, // => min. value to show, null means set automatically
  27.         max: null, // => max. value to show, null means set automatically
  28.         autoscale: false, // => Turns autoscaling on with true
  29.         autoscaleMargin: 0, // => margin in % to add if auto-setting min/max
  30.         color: null, // => color of the ticks
  31.         mode: 'normal', // => can be 'time' or 'normal'
  32.         timeFormat: null,
  33.         timeMode:'UTC', // => For UTC time ('local' for local time).
  34.         timeUnit:'millisecond',// => Unit for time (millisecond, second, minute, hour, day, month, year)
  35.         scaling: 'linear', // => Scaling, can be 'linear' or 'logarithmic'
  36.         base: Math.E,
  37.         titleAlign: 'center',
  38.         margin: true // => Turn off margins with false
  39.     },
  40.     x2axis: {},
  41.     yaxis: {
  42.         ticks: null, // => format: either [1, 3] or [[1, 'a'], 3]
  43.         minorTicks: null, // => format: either [1, 3] or [[1, 'a'], 3]
  44.         showLabels: true, // => setting to true will show the axis ticks labels, hide otherwise
  45.         showMinorLabels: false,// => true to show the axis minor ticks labels, false to hide
  46.         labelsAngle: 0, // => labels' angle, in degrees
  47.         title: null, // => axis title
  48.         titleAngle: 90, // => axis title's angle, in degrees
  49.         noTicks: 5, // => number of ticks for automagically generated ticks
  50.         minorTickFreq: null, // => number of minor ticks between major ticks for autogenerated ticks
  51.         tickFormatter: Flotr.defaultTickFormatter, // => fn: number, Object -> string
  52.         tickDecimals: null, // => no. of decimals, null means auto
  53.         min: null, // => min. value to show, null means set automatically
  54.         max: null, // => max. value to show, null means set automatically
  55.         autoscale: false, // => Turns autoscaling on with true
  56.         autoscaleMargin: 0, // => margin in % to add if auto-setting min/max
  57.         color: null, // => The color of the ticks
  58.         scaling: 'linear', // => Scaling, can be 'linear' or 'logarithmic'
  59.         base: Math.E,
  60.         titleAlign: 'center',
  61.         margin: true // => Turn off margins with false
  62.     },
  63.     y2axis: {
  64.         titleAngle: 270
  65.     },
  66.     grid: {
  67.         color: '#545454', // => primary color used for outline and labels
  68.         backgroundColor: null, // => null for transparent, else color
  69.         backgroundImage: null, // => background image. String or object with src, left and top
  70.         watermarkAlpha: 0.4, // =>
  71.         tickColor: '#DDDDDD', // => color used for the ticks
  72.         labelMargin: 3, // => margin in pixels
  73.         verticalLines: true, // => whether to show gridlines in vertical direction
  74.         minorVerticalLines: null, // => whether to show gridlines for minor ticks in vertical dir.
  75.         horizontalLines: true, // => whether to show gridlines in horizontal direction
  76.         minorHorizontalLines: null, // => whether to show gridlines for minor ticks in horizontal dir.
  77.         outlineWidth: 1, // => width of the grid outline/border in pixels
  78.         outline : 'nsew', // => walls of the outline to display
  79.         circular: false // => if set to true, the grid will be circular, must be used when radars are drawn
  80.     },
  81.     mouse: {
  82.         track: false, // => true to track the mouse, no tracking otherwise
  83.         trackAll: false,
  84.         position: 'se', // => position of the value box (default south-east). False disables.
  85.         relative: false, // => next to the mouse cursor
  86.         trackFormatter: Flotr.defaultTrackFormatter, // => formats the values in the value box
  87.         margin: 5, // => margin in pixels of the valuebox
  88.         lineColor: '#FF3F19', // => line color of points that are drawn when mouse comes near a value of a series
  89.         trackDecimals: 1, // => decimals for the track values
  90.         sensibility: 2, // => the lower this number, the more precise you have to aim to show a value
  91.         trackY: true, // => whether or not to track the mouse in the y axis
  92.         radius: 3, // => radius of the track point
  93.         fillColor: null, // => color to fill our select bar with only applies to bar and similar graphs (only bars for now)
  94.         fillOpacity: 0.4 // => opacity of the fill color, set to 1 for a solid fill, 0 hides the fill
  95.     }
  96. };
ieBackgroundColor(チャート背景色)

だと思うんだけど、変更しても変わらない。

xaxis(X軸)
mode

‘normal’ か ‘time’。

‘time’ を設定することで、日付や時刻をX軸値に設定できる。
ただし、X軸値はタイムスタンプで設定。
それも、文字列ではなく、数値として設定。
正:[ 1427241960000, 始値, 高値, 安値, 終値 ] 誤:[ ‘1427241960000’, 始値, 高値, 安値, 終値 ]

値自動変換機能がある割には、これは変換してくれない。

noTicks

どうも横幅に対して値が少ない時に、補助の軸線を何分割で引くか
という設定みたい。
1 にすると、どんなに項目間が広くても、補助線なしになる。

tickFormatter

項目値のフォーマット。
関数でも指定できるみたい。
でも、まだ使い方がよくわからない。

  1. tickFormatter: function(x){
  2.     var x = parseInt(x);
  3.     var myDate = new Date(x*1000);
  4.     var string = myDate.getFullYear();
  5.     string = string + "-" + myDate.getMonth() + "-" + myDate.getDate();
  6.     result = string;
  7.     return string;
  8. }

stackoverflow:Putting timestamp onto x axis in Flotr2 line graph

tickDecimals

小数点以下の桁数。
0 で整数表示。

timeFormat

日付のフォーマット。

  1. %h: hours
  2. %H: hours (left-padded with a zero)
  3. %M: minutes (left-padded with a zero)
  4. %S: seconds (left-padded with a zero)
  5. %d: day of month (1-31), use %0d for zero-padding
  6. %m: month (1-12), use %0m for zero-padding
  7. %y: year (four digits)
  8. %b: month name (customizable)
  9. %p: am/pm, additionally switches %h/%H to 12 hour instead of 24
  10. %P: AM/PM (uppercase version of %p)

stackoverflow:Putting timestamp onto x axis in Flotr2 line graph

timeformat “%y/<br>%m” 日時ラベルの書式。htmlタグ使える。

k16’s note:時系列データのグラフをjQueryとFlotで描く

timeMode

‘UTC’ か ‘local’。

Posted by muchag | JavaScript,Library & PlugIn & AddIn |
初回投稿:2015-03-28 (土) 18:58:13 | 最終更新:2015-03-31 (火) 11:55:45

Moment の isValid() が機能しない

Posted by muchag | JavaScript,Library & PlugIn & AddIn,困ったTT |
初回投稿:2015-03-28 (土) 18:29:11 | 最終更新:2015-03-28 (土) 18:30:02

【環境】
moment:2.9.0

Moment.js
Moment.js Documentation

現象

公式ドキュメント:Moment.js Documentation

  1. moment("2010 13",           "YYYY MM").isValid();     // false (not a real month)

こう書いてあるけど、月を3ケタにすると通っちゃう。

しかも挙動がマチマチ。

  1. // 根本的にフォーマットが違っているパターン
  2. moment( '2010 12', 'YYYY-MM' ).isValid() // true
  3. var date = moment( $( '#month' ).val() );
  4. var datem = date.format( 'YYYY-MM' ).toString(); // datem -> Invalid Date
  5.  
  6. moment( '2010 99', 'YYYY-MM' ).isValid() // false
  7.  
  8. moment( '2010 100', 'YYYY-MM' ).isValid() // true
  9. var date = moment( $( '#month' ).val() );
  10. var datem = date.format( 'YYYY-MM' ).toString(); // datem -> Invalid Date
  11.  
  12. moment( '2010 129', 'YYYY-MM' ).isValid() // true
  13. var date = moment( $( '#month' ).val() );
  14. var datem = date.format( 'YYYY-MM' ).toString(); // datem -> Invalid Date
  15.  
  16. moment( '2010 130', 'YYYY-MM' ).isValid() // false
  17.  
  18. // フォーマットは正しいパターン
  19. moment( '2010-100', 'YYYY-MM' ).isValid() // true
  20. var date = moment( $( '#month' ).val() );
  21. var datem = date.format( 'YYYY-MM' ).toString(); // datem -> 2010-04
  22. var datem = date.format( 'YYYY-MM-DD' ).toString(); // datem -> 2010-04-10
  23.  
  24. moment( '2010-101', 'YYYY-MM' ).isValid() // true
  25. var date = moment( $( '#month' ).val() );
  26. var datem = date.format( 'YYYY-MM' ).toString(); // datem -> 2010-04
  27. var datem = date.format( 'YYYY-MM-DD' ).toString(); // datem -> 2010-04-11
  28.  
  29. moment( '2010-129', 'YYYY-MM' ).isValid() // true
  30. var date = moment( $( '#month' ).val() );
  31. var datem = date.format( 'YYYY-MM' ).toString(); // datem -> 2010-05
  32. var datem = date.format( 'YYYY-MM-DD' ).toString(); // datem -> 2010-05-09
  33.  
  34. moment( '2010-130', 'YYYY-MM' ).isValid() // false

上記実験結果をまとめると

  • 2ケタ月は 13~99 について false
  • 3ケタ月は 100~129 について true、130~ false
  • フォーマットが異なっているときは、moment オブジェクトとしては認めても、Invalid Date
  • フォーマットが合っているときは、YYYY-DDD として、元日からの総合日数で年月日を算出している模様
    ただし、130日以降は NG

面白くていくつか実験してみたけど、解決策があるので、この辺で。
 

解決策

というか正しい書式。

  1. moment('It is 2012-05-25', 'YYYY-MM-DD').isValid();       // true
  2. moment('It is 2012-05-25', 'YYYY-MM-DD', true).isValid(); // false
  3. moment('2012-05-25',       'YYYY-MM-DD', true).isValid(); // true

第3引数に true を入れると「真面目に」チェックしてくれるみたい。 😎
今のところは正常にバリデーションしてくれてます。

と思ったら嘘だった

と、思ったら、次の日、鯖に上げてみたら true が機能しない。
そして、あれ?っと思ってローカルで再び試したら機能していない。
???
むぅ。。。

困った
Posted by muchag | JavaScript,Library & PlugIn & AddIn,困ったTT |
初回投稿:2015-03-28 (土) 18:29:11 | 最終更新:2015-03-28 (土) 18:30:02

時間間隔での繰り返し処理

Posted by muchag | JavaScript |
初回投稿:2015-03-28 (土) 10:58:18 | 最終更新:2015-03-28 (土) 10:58:18

描画に時間が掛かるグラフを連続処理をするにあたって
待ち時間を入れることにしたんだけど
どうもうまくいかないので、Google 先生に聞いてみた。

が、時間がないので、参考サイトのみ。

参考サイト

MAYONAKA:JavaScriptでの繰り返し処理とその停止のやり方

Posted by muchag | JavaScript |
初回投稿:2015-03-28 (土) 10:58:18 | 最終更新:2015-03-28 (土) 10:58:18

即時関数

Posted by muchag | JavaScript |
初回投稿:2015-03-28 (土) 9:35:19 | 最終更新:2015-03-28 (土) 9:38:50

なんか変な記述を見つけて、びっくりして調べた。
即時関数 というそうだ。

【環境】
Firefox:36.0.4
書式
  1. // 基本形
  2. (function(){
  3.     処理
  4. })()
  5.  
  6. // 関数名はあってもなくてもよい
  7. (function hoge(){
  8.     処理
  9. })()
  10.  
  11. // 引数値の指定は、尻尾の()で行う
  12. (function( arg ){
  13.     処理
  14. })( '引数' )
  15.  
  16. // 引数指定用の()の位置は下記でもよい
  17. (function(){
  18.     処理
  19. }())
比較
  1. // 一般
  2. function hoge() {
  3.   alert( 'test' );
  4. }
  5. hoge(); // test
  6.  
  7. // 即時関数
  8. (function hoge() {
  9.   alert( 'test' );
  10. })();
意義

「グローバル変数の使用を抑える」ことができる。

JavaScript の場合、変数も関数もグローバル変数となる。

  1. var hoge;
  2.  
  3. function hoge() {}

これらは共にグローバルオブジェクトのプロパティとして定義される。

ブラウザの場合は、Window オブジェクトがグローバルオブジェクトなので

  1. window.hoge

でアクセス可能。

即時関数の場合は、その場使い捨てなので、
グローバルオブジェクトに登録されない。
=「グローバル変数の使用を抑える」

付加効能

関数定義と呼び出しを一括で行える
=スクリプトを1行削ることができる 🙄

注意事項
記述場所

読み込み時にその場で実行してしまうので
処理対象に DOM 要素を設定している場合は
DOM 出力後に記述しないと、エラーとなってしまう。

つまり、<head> で直接記述したり、外部ファイルを読み込んではダメ。
</body> 直前に記述したり、外部ファイルを読み込んでやること。

参考サイト

三等兵:知ってて当然?初級者のためのJavaScriptで使う即時関数(function(){…})()の全て

Posted by muchag | JavaScript |
初回投稿:2015-03-28 (土) 9:35:19 | 最終更新:2015-03-28 (土) 9:38:50

最初の要素と最後の要素判別

Posted by muchag | PHP |
初回投稿:2015-03-26 (木) 16:47:38 | 最終更新:2015-03-26 (木) 16:47:38

foreach で、最初と最後の処理に面倒なことをしていた。
参考サイトを見つけて狂喜!

【環境】
PHP:5.4.7
最初
  1. reset( $array )
最後
  1. end( $array )
  1. foreach ( $array as $val ) {
  2.     if ( $val === reset( $array ) ) echo 'first';
  3.     elseif ( $val === end( $array ) ) echo 'last';
  4.     else echo 'general';
  5. }
参考サイト

FOOTMARK:PHPのforeachで最初と最後を取得する方法

Posted by muchag | PHP |
初回投稿:2015-03-26 (木) 16:47:38 | 最終更新:2015-03-26 (木) 16:47:38

tree コマンド

Posted by muchag | Windows,コマンドプロンプト |
初回投稿:2015-03-18 (水) 23:51:59 | 最終更新:2018-12-05 (水) 16:35:04

ちょー便利なコマンドを発見!

【環境】
Windows:7 Home Premium 64bit SP1
状況

今まで、Wordpress へディレクトリ構成を投稿する度に
下記のような書き方をしていた。

(openpne)\plugins\opMyPlugin
◇┣ apps ← アプリケーション格納用
◇┣ lib ← プラグイン独自クラス格納用
◇┣ test
◇┃◇┣ bootstrap
◇┃◇┃◇┣ database.php
◇┃◇┃◇┣ functional.php
◇┃◇┃◇┗ unit.php
◇┃◇┣ fixtures
◇┃◇┃◇┗ test_data.yml
◇┃◇┣ functional
◇┃◇┃◇┣ mobile_frontend
◇┃◇┃◇┃◇┗ skeletonActionsTest.php
◇┃◇┃◇┗ pc_frontend
◇┃◇┃◇◇◇┗ skeletonActionsTest.php
◇┃◇┗ unit
◇┃◇┃◇┗ model
◇┃◇◇◇◇◇┗ SkeletonTest.php
◇┗ dependencies.yml.sample

非常に面倒くさい。。。
 

出力結果

あまりにも面倒なので、何かないか Google 先生へ質問したところ
tree コマンドなるものを見つけた♪

結果はこんな感じ。


├─config
│      filters.yml
│      routing.yml
│
└─modules
   └─like
       ├─actions
       │      actions.class.php
       │
       └─templates
               deleteSuccess.php
               listSuccess.php
               postSuccess.php
               searchSuccess.php

なんと便利な・・・。

ただ、Wordpress の場合は、スペースを抜かれてしまうので
iG:Syntax Hiliter に一役買ってもらって表示。
 

書式
当該ディレクトリ

取得したいディレクトリまで移動すれば、とてもシンプル。


tree

これでコマンドプロンプト上に表示される。
 

ディレクトリ指定

ディレクトリを指定したい場合は、下記の通り。


tree [path to directory]
ファイルも取得

ファイル名も取得したい場合は、オプションを付ける。


tree /f
テキスト保存

テキストファイルに落としたい場合は、下記のように。


tree > result.txt
保存場所を指定

テキストファイルの保存場所を指定したければ、フルパスで記述。


tree > [path to textfile]

tree C:\Users\[username]\Downloads /f > C:\Users\[username]\Documents\result.txt

これで、ダウンロードディレクトリの中身(ディレクトリとファイル)のツリーを
マイドキュメントに result.txt というファイル名で保存。
 

参考サイト

インストラクターのネタ帳
フォルダの階層構造をツリー状に−TREEコマンド
フォルダ構造・ファイル一覧をツリー状に−TREEコマンド

Posted by muchag | Windows,コマンドプロンプト |
初回投稿:2015-03-18 (水) 23:51:59 | 最終更新:2018-12-05 (水) 16:35:04

クラス -> Utilities -> Utilities -> formatDate(日付フォーマット)

Posted by muchag | Google Apps Script |
初回投稿:2015-03-05 (木) 18:19:43 | 最終更新:2015-03-05 (木) 18:19:43

日付フォーマットメソッド。

書式

formatDate(date, timeZone, format)

formatDate(date, timeZone, format)

引数1:Date オブジェクト
引数2:タイムゾーン。日本の場合は ‘Asia/Tokyo’
引数3:フォーマット
返り値:指定フォーマット文字列
 

[gas language=”js” firstline=”” highlight=””] var formattedDate = Utilities.formatDate(new Date(), “GMT”, “yyyy-MM-dd’T’HH:mm:ss’Z'”);
Logger.log(formattedDate);
[/gas]  

参考サイト

Qiita:GASの怖い話と対策となんか

Posted by muchag | Google Apps Script |
初回投稿:2015-03-05 (木) 18:19:43 | 最終更新:2015-03-05 (木) 18:19:43

クラス -> 内部関数

Posted by muchag | JavaScript |
初回投稿:2015-02-28 (土) 0:27:09 | 最終更新:2015-02-28 (土) 0:38:35

内部関数は、ちょっと特殊みたい。

内部関数とは

クラス内に設置したローカルメソッド。
外部からは呼べない。

  1. var hoge = ( function() {
  2.  
  3.   // constructor
  4.   var hoge = function() {
  5.     this.x = 5;
  6.   };
  7.  
  8.   // 内部関数(クラス内メソッド)
  9.   function moge() {} ← これ
  10.  
  11.   var p = hoge.prototype;
  12.  
  13.   p.f1 = function() {
  14.     return true;
  15.   };
  16.  
  17.   return hoge;
  18. })();

 

呼び出し

コンストラクタからでも、公開メソッドからでも関数名(メソッド名)で呼び出せた。

  1. p.f2 = function() {
  2.     moge();
  3. };

 

特殊なところ
this

内部関数内では、this を使えない。
解決策は後述。
 

引数

引数があると、通常通りでは呼び出せなかった。

  1. function moge( arg ) {}
  2.  
  3. p.f2 = function() {
  4.     moge( arg );
  5. };

これでは、syntax error にはならないけど、値が渡らない。
 

解決策

上記2点を一度に解決。
(解決法はわかったけど、まだあまりよく理解できていない)

apply メソッド、または call メソッドを利用する。

つまり、下記のように呼び出す。

  1. function moge( arg ) {}
  2.  
  3. p.f2 = function() {
  4.     moge.apply( this, arg );
  5.     moge.call( this, arg );
  6. };

 

誰それ

参考サイトを見ると

callはFunction.prototypeの中にあります。

あと味:applyとcallの使い方を丁寧に説明してみる

と書いてあるので、プロパティ・オブジェクト からの呼び出しだから、というなのかもしれないけど、今はまだよくわかっていない。
 

this はどこへいった・・・

引数に指定した this。
でも、内部関数側は受け取っていない。

どうも、自動的に(強制的に?暗示的に?)受け取るらしく
これで、内部関数内で this を利用できる。

また、何も this を渡さなければいけないわけではなく
要は内部関数内で this と記述して利用したいオブジェクトを指定すればよいらしい。
 

両者の違いは?

apply

  1. var args = [ 1, 2, 3 ];
  2. moge.apply( this, args );

apply は、this 以外の引数を、配列にまとめて渡す。
本当に配列を渡すときとか、引数が多い時、または変更が頻繁にあるときなどには便利。
 
call

  1. moge.call( this, 1, 2, 3 );

call は、this 以外の引数を列挙して渡す。
 

参考サイト

あと味:applyとcallの使い方を丁寧に説明してみる

Posted by muchag | JavaScript |
初回投稿:2015-02-28 (土) 0:27:09 | 最終更新:2015-02-28 (土) 0:38:35

クラス -> グレートなつくりかた

Posted by muchag | JavaScript |
初回投稿:2015-02-27 (金) 21:27:25 | 最終更新:2015-02-28 (土) 0:03:11

JavaScript は滅多に使わないので、今までクラスとは無縁できたけど、これからは是非クラスを利用していきたい。

以前、つかみ という JavaScript クラスの基本について書いたけど、今回は グレートなつくりかた という記事を見つけたので、改めて基本記事を作成。

グレートなつくりかた
  1. var hoge = (function() {
  2.  
  3.   var FOOFOO = 777; // クラス内定数
  4.  
  5.   // constructor
  6.   var hoge = function(arg) {
  7.     this.x = 5;
  8.     this.y = 10;
  9.     this.z = arg;
  10.   };
  11.  
  12.   var p = hoge.prototype;
  13.  
  14.   p.f1 = function() {
  15.     return true;
  16.   };
  17.  
  18.   p.f2 = function() {
  19.     return false;
  20.   };
  21.  
  22.   return hoge;
  23. })();
  24.  
  25. var instance = new hoge(1);
  26. // hoge {x: 5, y: 10, z: 1, f1: function, f2: function}

Qiita:【javascript】やさしいクラスの作り方
より引用。
 
この書き方だと、1クラス1ブロックになって、見やすい。 😎
 
せっかくなので、覚書用に改変。

  1. var hoge = ( function() {
  2.  
  3.   var FOOFOO = 777; // クラス内定数
  4.   var foo = 777;    // クラス内変数
  5.  
  6.   // constructor
  7.   var hoge = function( arg ) {
  8.     this.x = 5;
  9.     this.y = 10;
  10.     this.z = arg;
  11.   };
  12.  
  13.   // 内部関数(クラス内メソッド)
  14.   function moge() {}
  15.  
  16.   var p = hoge.prototype;
  17.  
  18.   p.f1 = function() {
  19.     return true;
  20.   };
  21.  
  22.   p.f2 = function() {
  23.     return false;
  24.   };
  25.  
  26.   return hoge;
  27. })();
  28.  
  29. var instance = new hoge(1);
  30. // hoge {x: 5, y: 10, z: 1, f1: function, f2: function}

 

参考サイト

Qiita:【javascript】やさしいクラスの作り方
Qiita:[JavaScript]クラス、関数、オブジェクト クラス

Posted by muchag | JavaScript |
初回投稿:2015-02-27 (金) 21:27:25 | 最終更新:2015-02-28 (土) 0:03:11
« 前ページへ次ページへ »