SlideShare a Scribd company logo
Functional JavaScript with Lo-Dash.js
Functional JavaScript
with Lo-Dash.js
Frontrend Vol.5
泉水翔吾 / @1000ch
CyberAgent, Inc.
About me
@1000ch
WebDeveloper@CyberAgent
1年前までProgrammer
Output
! http://1000ch.net
" @1000ch
# http://github.com/1000ch
# http://github.com/enja-oss
Agenda
! Object-Oriented & Functional
! Underscore.js & Lo-Dash.js
! Conclusion!
Object-Oriented
AND
Functional
Functional ???
Functional Programming
! 『数学的な関数の評価を行い、状態やデータの変
更を行わないプログラミングパラダイム』

via Wikipedia
! 関数型と言われてもイメージしにくい…。
押し寄せるFunctional
! HaskellとかClojureとか。
! TwitterはScalaを採用。
! JavaScriptもFunctional?
哲学的な話をする気は
ございません!
Functionalなアプローチもしてみてねっていう話
Object-Oriented ???
Object-Oriented
Programming
! 『オブジェクト同士の相互作用として、システム
の振る舞いを捉える考え方』 via Wikipedia
! つまり『プログラムで実現したいモデルを抽象化
したもの』である。
OOPの例えば…
猫をOOPで表現する
var Animal = function(word) {
this.word = word;
};
Animal.prototype.cry = function() {
console.log(this.word);
};
!
var Cat = function() {
Animal.call(this, "Nya-");
};
Cat.prototype = Object.create(Animal.prototype);
Cat.prototype.constructor = Animal;
!
new Cat().cry();
//=>Nya-
jQueryもOOP?
var $headline = $(".headline");
$headline.css({
"font-size": "24px"
});
var $paragraph = $("p");
$paragraph.css({
"background": "#000",
"color": "#fff"
}).addClass("breakAll");
!
var $button = $("button");
$button.on("click", function() {
console.log("button is clicked!");
});
オブジェクト指向の問題点
! オブジェクト同士の関係が密になりがち
! 役割が大きくなりすぎてクラスが複雑になりがち
! 継承されすぎて変更できなくなりがち
OOPが抱えがちな問題
œš‘“›⁸コードの役割分担が複雑で、コードの
役割が密接な関係を持っていると
テストを行うことが難しくなる。’”⁹
- @cssradar

at Frontrend Vol.4
https://speakerdeck.com/studiomohawk/testable-javascript
つまるところ、
保守性を維持しにくい。
jQueryの保守しろって
言われても、できません。
Functionalなアプローチが
解決してくれる!
(かもしれない!)
Funtional Function
! 引数が同じであれば出力も同じである
! 果たす役割が簡潔で分割されていること
Funtional Function
! 引数が同じであれば出力も同じである
! 果たす役割が簡潔で分割されていること
This is bad...
var sortedString = function(array) {
array.sort();

!
return array.join();
};
!
var array1 = [1, 6, 8, 4, 9, 0, 3, 5, 2, 7];

!
console.log(sortedString(array1));

//=>0,1,2,3,4,5,6,7,8,9

!
console.log(array1);

//=>[0,1,2,3,4,5,6,7,8,9]
//引数が変更されてしまっている…。

This is better !!!
var sortedString = function(array) {
var buffer = array.slice();
buffer.sort();
return buffer.join();
};
!
var array1 = [1, 6, 8, 4, 9, 0, 3, 5, 2, 7];
!
console.log(sortedString(array1));

//=>0,1,2,3,4,5,6,7,8,9

!
console.log(array1);

//=>[1,6,8,4,9,0,3,5,2,7]
//OK!

Funtional Function
! 引数が同じであれば出力も同じである
! 果たす役割が簡潔で分割されていること
This is bad...
var setElement = function() {
$(".hoge").addClass("decorationClass").animate({...});
};
var initMainPage = function() {
window.scrollTo(1, 0);
setElement();
};
window.onload = function() {
initMainPage();
};


This is better !!!
var setElement = function(element) {
$(element).addClass("decorationClass").animate({...});
};
var hideAddressBar = function() {
window.scrollTo(1, 0);
};
window.onload = function() {
hideAddressBar();
setElement(document.getElementsByClassName(".hoge"));
};


Functionalなアプローチを
試してみる。
jQueryっぽいサンプル実装
var $ = function(selector) {
return {
list: document.querySelectorAll(selector),
each: function(callback) {
for(var i = 0, l = this.list.length;i < l;i++) {
callback(this.list[i]);
}
return this;
},
addClass: function(className) {
return this.each(function(element) {
element.classList.add(className);
});
}
};
};
使い方イメージ
//$コンストラクタにCSSセレクタを渡し、要素にクラスを追加。
$(".parentClass .childClass").addClass("hoge");
この実装の問題点
! each()もaddClass()もコンストラクタの
querySelectorAllに依存している。
! 再利用出来ない。
! クラスを拡張するたびにテストの見直し。
Functionalに書き直す
var _ = {};
!
_.qsa = function(selector) {
return document.querySelectorAll(selector);
};
!
_.each = function(targetObject, callback) {
for(var i = 0, len = targetObject.length;i < len;i++) {
callback(targetObject[i]);
}
};
!
_.addClass = function(targetElementList, className) {
_.each(targetElementList, function(element) {
element.classList.add(className);
});
};
使い方イメージ
//CSSセレクタを渡し、要素を選択する。
var elementList = _.qsa(".parentClass .childClass");
!
!


//取得した要素にクラスを追加する。
_.addClass(elementList, "hoge");
解決された点
! _.qsa()も、_.addClass()も互いに依存していない
ので、再利用できる。
! テストケースの見直しが発生しにくい。
Functionalなアプローチが
もたらすメリット
Simplicity
メソッド間の依存性が疎になることで、

コードがシンプルになる。
Testablity
関数の役割が簡潔になることで、
テストが書きやすくなる。
Maintainablity
SimplicityとTestablityによって、

保守性の向上が期待できる。
Underscore.js
AND
Lo-Dash.js
Functionalなアプローチの
メリットはわかった!
ユーティリティをつくったり
保守するコストが…。
優秀なライブラリがあります。
使いましょう。
(※もちろん自作でもOKです)
http://lodash.com/
Lo-Dash.js
! Underscore.jsとAPIの互換性のあるライブラリ
! each()やfirst()など、便利なユーティリティを備
えている
あれ?
じゃあUnderscore.jsは?
http://underscorejs.org/
Underscore.jsでもOK
! Lo-Dash.jsよりファイルサイズが軽量
! コードがとても綺麗なのでコードリーディングに
向いてる
なぜ
Lo-Dash.jsを選ぶのか?
- John-David Dalton

at StackOverflow
œš‘“›⁸better overall performance and
optimizations for large arrays/object
iteration, and more flexibility with
custom builds and template pre-
compilation utilities.’”⁹
http://stackoverflow.com/questions/13789618/differences-between-
lodash-and-underscore
『大きな配列やオブジェクトの列挙に最適化されてお
り、全体的にパフォーマンスが改善されている。また、
カスタムビルドやテンプレートのプリコンパイルなど、
より柔軟な作りになっている。』
! 実行パフォーマンスが良い
! 問題が色々解決されています
! カスタムビルドできます
! Underscore.jsに互換性あります
Performance of Lo-Dash.js
Compare Performance(1)
Underscore#forEach
Native#forEach
Lo-Dash#forEach with bind
Lo-Dash#forEach
Native#for
0 1250000 2500000 3750000 5000000
うーん、やっぱり
for文が1番高速…。
それでもLo-Dash.jsを
使う価値がある。
_.each()
via Underscore.js
_.each = _.forEach = function(obj, iterator, context) {
if (obj == null) return;
if (nativeForEach && obj.forEach === nativeForEach) {
obj.forEach(iterator, context);
} else if (obj.length === +obj.length) {
for (var i = 0, l = obj.length; i < l; i++) {
if (iterator.call(context, obj[i], i, obj) ===
breaker) return;
}
} else {
for (var key in obj) {
if (_.has(obj, key)) {
if (iterator.call(context, obj[key], key,
obj) === breaker) return;
}
}
}
};
_.each = _.forEach = function(obj, iterator, context) {
if (obj == null) return;
if (nativeForEach && obj.forEach === nativeForEach) {
obj.forEach(iterator, context);
} else if (obj.length === +obj.length) {
for (var i = 0, l = obj.length; i < l; i++) {
if (iterator.call(context, obj[i], i, obj) ===
breaker) return;
}
} else {
for (var key in obj) {
if (_.has(obj, key)) {
if (iterator.call(context, obj[key], key,
obj) === breaker) return;
}
}
}
};
_.each = _.forEach = function(obj, iterator, context) {
if (obj == null) return;
if (nativeForEach && obj.forEach === nativeForEach) {
obj.forEach(iterator, context);
} else if (obj.length === +obj.length) {
for (var i = 0, l = obj.length; i < l; i++) {
if (iterator.call(context, obj[i], i, obj) ===
breaker) return;
}
} else {
for (var key in obj) {
if (_.has(obj, key)) {
if (iterator.call(context, obj[key], key,
obj) === breaker) return;
}
}
}
};
ネイティブのforEachが使える場
合はそれを実行している
_.each()
via Lo-Dash.js
function forEach(collection, callback, thisArg) {
var index = -1,
length = collection ? collection.length : 0;
callback = callback && typeof thisArg == 'undefined' ?
callback : lodash.createCallback(callback, thisArg);
if (typeof length == 'number') {
while (++index < length) {
if (callback(collection[index], index,
collection) === false) {
break;
}
}
} else {
forOwn(collection, callback);
}
return collection;
}
function forEach(collection, callback, thisArg) {
var index = -1,
length = collection ? collection.length : 0;
callback = callback && typeof thisArg == 'undefined' ?
callback : lodash.createCallback(callback, thisArg);
if (typeof length == 'number') {
while (++index < length) {
if (callback(collection[index], index,
collection) === false) {
break;
}
}
} else {
forOwn(collection, callback);
}
return collection;
}
function forEach(collection, callback, thisArg) {
var index = -1,
length = collection ? collection.length : 0;
callback = callback && typeof thisArg == 'undefined' ?
callback : lodash.createCallback(callback, thisArg);
if (typeof length == 'number') {
while (++index < length) {
if (callback(collection[index], index,
collection) === false) {
break;
}
}
} else {
forOwn(collection, callback);
}
return collection;
}
基本的にwhile文を使っている
Compare Performance(2)
Underscore#forEach Array
Underscore#forEach Object
Lo-Dash#forEach Object
Lo-Dash#forEach Array
0 550000 1100000 1650000 2200000
Compare Performance(2)
Underscore#forEach Array
Underscore#forEach Object
Lo-Dash#forEach Object
Lo-Dash#forEach Array
0 550000 1100000 1650000 2200000
for文とArray.forEachの

差が出てる
Compare Performance(2)
Underscore#forEach Array
Underscore#forEach Object
Lo-Dash#forEach Object
Lo-Dash#forEach Array
0 550000 1100000 1650000 2200000
while文なのでほとんど

差が出ていない
カスタムビルドと
Underscore.js互換
Modern build モダンブラウザ向けのビルド。
Legacy build レガシーブラウザ対応がなされている。
Mobile build 関数のコンパイルがされていない
Strict build
読み取り専用プロパティを上書きしよう
としたときにエラーを投げる。
Underscore build Underscore.jsにAPIを合わせてある。
Backbone build Backbone.jsに必要なAPIのみ備える。
Modern build モダンブラウザ向けのビルド。
Legacy build レガシーブラウザ対応がなされている。
Mobile build 関数のコンパイルがされていない
Strict build
読み取り専用プロパティを上書きしよう
としたときにエラーを投げる。
Underscore build Underscore.jsにAPIを合わせてある。
Backbone build Backbone.jsに必要なAPIのみ備える。
Compare File Size
lodash.min.js
lodash.underscore.min.js
underscore.min.js
0 5500 11000 16500 22000
compressed gzipped
Compare File Size
lodash.min.js
lodash.underscore.min.js
underscore.min.js
0 5500 11000 16500 22000
compressed gzipped
gzipすればさほど変わらな
い!(7,701bytes)
色々考慮すると現時点では
Lo-Dash.jsが良さそう…。
しかしUnderscore.jsの
美しい実装は
非常に参考になる。
_.pluck()
via Underscore.js
var stooges = [

{name : 'moe', age : 40}, 

{name : 'larry', age : 50}, 

{name : 'curly', age : 60}

];

!
_.pluck(stooges, 'name');
//=> ["moe", "larry", "curly"]
_.pluck = function(obj, key) {
return _.map(obj, function(value){

return value[key];

});
};
…美しい。
_.compose = function(/*, funs */) {
var functions = arguments;
return function() {
var args = arguments;
for (var i = functions.length - 1; i >= 0; i--) {
args = [functions[i].apply(this, args)];
}
return args[0];
};
};
var plusFive = function(num) {
return num + 5;
};
var multiplyThree = function(num) {
return num * 3;
};
var plus5_multiply3 = _.compose(multiplyThree, plusFive);
plus5_multiply3(4);
//=>27
よりFunctionalに書くために
プラグインがあります。
https://github.com/documentcloud/underscore-contrib
_.pipeline = function(/*, funs */){


var functions = arguments;

!
return function(seed) {
return _.reduce(functions, function(l, r) {
return r(l);
}, seed);
};
};
var plusFive = function(num) {
return num + 5;
};
var multiplyThree = function(num) {
return num * 3;
};
var multiply3_plus5 = _.pipeline(multiplyThree, plusFive);
multiply3_plus5(4);
//=>17
http://dtao.github.io/lazy.js/
function square(x) {

return x * x;

}
function inc(x) {

return x + 1;

}
function isEven(x) {

return x % 2 === 0;

}
!
var result = _.chain(array)

.map(square).map(inc)

.filter(isEven).take(5).value();

!
var result = Lazy(array)

.map(square).map(inc)

.filter(isEven).take(5);
http://functionaljs.org/
http://moutjs.com/
どれもDOMを操作する実装は
含んでいない。
※あくまで、JavaScriptのUtilityであるため。
DOM操作のAPIを
提供する拡張を作ってみた。
※参考程度にどうぞ。
https://github.com/1000ch/_.domextend
特徴
! 要素選択API
! イベントのバインドAPI
! CSSクラスの付け外しAPI
! 軽い(minifiedで3KBくらい)
Conclusion !
OBJECT-ORIENTED
TO
FUNCTIONAL
OBJECT-ORIENTED
TO
FUNCTIONAL
OBJECT-ORIENTED
WITH
FUNCTIONAL
物事の抽象化はオブジェクト
指向でしかできない。
USE LO-DASH.jS
WATCH UNDERSCORE.JS
Underscore.jsとかMOUTあた
りが綺麗なので参考に!
Thank you !
by@1000ch
http://www.flickr.com/photos/vicpowles/7229138156/
http://www.flickr.com/photos/49875617@N06/8770578796/
http://www.flickr.com/photos/vicpowles/7229138156/
http://www.flickr.com/photos/scalamax/8764370935/
http://www.flickr.com/photos/jody_art/8758073909/
http://www.flickr.com/photos/liza-photography/6272074016/
http://www.flickr.com/photos/51710089@N08/8758089618/
Photo Credits
http://fontawesome.io/
http://font.ubuntu.com/
https://github.com/adobe/Source-Code-Pro
http://www.fontsquirrel.com/fonts/bebas-neue
Font Credits

More Related Content

What's hot (20)

PDF
15分でざっくり分かるScala入門
SatoYu1ro
 
PDF
あなたのScalaを爆速にする7つの方法(日本語版)
x1 ichi
 
PDF
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
y_taka_23
 
PDF
javascript を Xcode でテスト
Yoichiro Sakurai
 
KEY
BDD勉強会 第6回
zakihaya
 
PDF
はてなブックマーク in Scala
Lintaro Ina
 
PDF
なぜリアクティブは重要か #ScalaMatsuri
Yuta Okamoto
 
KEY
第3回BDD勉強会
zakihaya
 
KEY
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
Hiromi Ishii
 
PDF
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
なおき きしだ
 
PDF
JavaScript/CSS 2015 Autumn
Koji Ishimoto
 
PDF
ソーシャルアプリ勉強会(第一回資料)配布用
Yatabe Terumasa
 
PDF
実務者のためのかんたんScalaz
Tomoharu ASAMI
 
PDF
Spectron
ogawatti
 
PDF
「エクストリームエンジニアへの道(Swift編)」
tech-arts
 
PDF
ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和
schoowebcampus
 
PDF
Phantom Type in Scala
Yasuyuki Maeda
 
PDF
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
Hiroaki KOBAYASHI
 
PDF
サーバーサイドでの非同期処理で色々やったよ
koji lin
 
PDF
速くなければスマフォじゃない - インターンバージョン-
Kazunari Hara
 
15分でざっくり分かるScala入門
SatoYu1ro
 
あなたのScalaを爆速にする7つの方法(日本語版)
x1 ichi
 
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
y_taka_23
 
javascript を Xcode でテスト
Yoichiro Sakurai
 
BDD勉強会 第6回
zakihaya
 
はてなブックマーク in Scala
Lintaro Ina
 
なぜリアクティブは重要か #ScalaMatsuri
Yuta Okamoto
 
第3回BDD勉強会
zakihaya
 
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
Hiromi Ishii
 
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
なおき きしだ
 
JavaScript/CSS 2015 Autumn
Koji Ishimoto
 
ソーシャルアプリ勉強会(第一回資料)配布用
Yatabe Terumasa
 
実務者のためのかんたんScalaz
Tomoharu ASAMI
 
Spectron
ogawatti
 
「エクストリームエンジニアへの道(Swift編)」
tech-arts
 
ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和
schoowebcampus
 
Phantom Type in Scala
Yasuyuki Maeda
 
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
Hiroaki KOBAYASHI
 
サーバーサイドでの非同期処理で色々やったよ
koji lin
 
速くなければスマフォじゃない - インターンバージョン-
Kazunari Hara
 

Similar to Functional JavaScript with Lo-Dash.js (20)

PDF
Kanazawa.js.Next
dynamis
 
PDF
JavaScript.Next
dynamis
 
PPTX
Nds meetup8 lt
ushiboy
 
PDF
ECMAScript 6 Features(PDF 版)
taskie
 
ODP
Javascriptで学ぶ Functional Programming
todorokit
 
PDF
traceur-compilerで ECMAScript6を体験
Toshio Ehara
 
PDF
エンジニア勉強会_DECIDE
エンジニア勉強会 エスキュービズム
 
PPTX
前期講座09
Takenori Nakagawa
 
PDF
JavaScript入門
Ryo Maruyama
 
PDF
JavaScript.Next Returns
dynamis
 
PDF
JavaScript 実践講座 Framework, Tool, Performance
クラスメソッド株式会社
 
PDF
Miyazaki.js vol.1 スコープの話
Nobuhiro Nakashima
 
PDF
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
YOSHIKAWA Ryota
 
PDF
ちょっと詳しくJavaScript 第2回【関数と引数】
株式会社ランチェスター
 
PDF
Effective JavaScript Ch.1
Teppei Sato
 
PDF
JavaScript (ECMAScript) 2013
dynamis
 
PDF
Chrome Developer Toolsを使いこなそう!
yoshikawa_t
 
PDF
そしてjsの基礎へ戻る#4
Shingo Inoue
 
PDF
わかるコードを書くために For writing clean code
Eyes, JAPAN
 
PDF
Ecmascript2015とその周辺について
豊明 尾古
 
Kanazawa.js.Next
dynamis
 
JavaScript.Next
dynamis
 
Nds meetup8 lt
ushiboy
 
ECMAScript 6 Features(PDF 版)
taskie
 
Javascriptで学ぶ Functional Programming
todorokit
 
traceur-compilerで ECMAScript6を体験
Toshio Ehara
 
エンジニア勉強会_DECIDE
エンジニア勉強会 エスキュービズム
 
前期講座09
Takenori Nakagawa
 
JavaScript入門
Ryo Maruyama
 
JavaScript.Next Returns
dynamis
 
JavaScript 実践講座 Framework, Tool, Performance
クラスメソッド株式会社
 
Miyazaki.js vol.1 スコープの話
Nobuhiro Nakashima
 
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
YOSHIKAWA Ryota
 
ちょっと詳しくJavaScript 第2回【関数と引数】
株式会社ランチェスター
 
Effective JavaScript Ch.1
Teppei Sato
 
JavaScript (ECMAScript) 2013
dynamis
 
Chrome Developer Toolsを使いこなそう!
yoshikawa_t
 
そしてjsの基礎へ戻る#4
Shingo Inoue
 
わかるコードを書くために For writing clean code
Eyes, JAPAN
 
Ecmascript2015とその周辺について
豊明 尾古
 
Ad

More from Shogo Sensui (17)

PDF
Web Standards Interop 2022
Shogo Sensui
 
PDF
Introduction to Performance APIs
Shogo Sensui
 
PDF
Web Standards 2018
Shogo Sensui
 
PDF
The State of Web Components
Shogo Sensui
 
PDF
Component of Web Frontend
Shogo Sensui
 
PDF
Web フロントエンドの変遷とこれから
Shogo Sensui
 
PDF
Introduction to Resource Hints
Shogo Sensui
 
PDF
Web Components 2016 & Polymer v2
Shogo Sensui
 
PDF
これからのJavaScriptの話
Shogo Sensui
 
PDF
初心者のためのWeb標準技術
Shogo Sensui
 
PDF
Introduction to Service Worker
Shogo Sensui
 
PDF
We should optimize images
Shogo Sensui
 
PDF
Web Components changes Web Development
Shogo Sensui
 
PDF
Re-think about Web Performance
Shogo Sensui
 
PDF
Browser Computing Structure
Shogo Sensui
 
PDF
Brush up your Coding! 2013 winter
Shogo Sensui
 
PDF
Brush up your Coding!
Shogo Sensui
 
Web Standards Interop 2022
Shogo Sensui
 
Introduction to Performance APIs
Shogo Sensui
 
Web Standards 2018
Shogo Sensui
 
The State of Web Components
Shogo Sensui
 
Component of Web Frontend
Shogo Sensui
 
Web フロントエンドの変遷とこれから
Shogo Sensui
 
Introduction to Resource Hints
Shogo Sensui
 
Web Components 2016 & Polymer v2
Shogo Sensui
 
これからのJavaScriptの話
Shogo Sensui
 
初心者のためのWeb標準技術
Shogo Sensui
 
Introduction to Service Worker
Shogo Sensui
 
We should optimize images
Shogo Sensui
 
Web Components changes Web Development
Shogo Sensui
 
Re-think about Web Performance
Shogo Sensui
 
Browser Computing Structure
Shogo Sensui
 
Brush up your Coding! 2013 winter
Shogo Sensui
 
Brush up your Coding!
Shogo Sensui
 
Ad

Recently uploaded (9)

PDF
Forguncy 10 製品概要資料 - ノーコードWebアプリ開発プラットフォーム
フォーガンシー
 
PDF
安尾 萌, 松下 光範. 環境馴致を計量可能にするための試み,人工知能学会第4回仕掛学研究会, 2018.
Matsushita Laboratory
 
PPTX
勉強会_ターミナルコマンド入力迅速化_20250620. pptx. .
iPride Co., Ltd.
 
PDF
安尾 萌, 北村 茂生, 松下 光範. 災害発生時における被害状況把握を目的とした情報共有システムの基礎検討, 電子情報通信学会HCGシンポジウム2018...
Matsushita Laboratory
 
PPTX
Vibe Codingを始めよう 〜Cursorを例に、ノーコードでのプログラミング体験〜
iPride Co., Ltd.
 
PDF
安尾 萌, 藤代 裕之, 松下 光範. 協調的情報トリアージにおけるコミュニケーションの影響についての検討, 第11回データ工学と情報マネジメントに関する...
Matsushita Laboratory
 
PPTX
色について.pptx .
iPride Co., Ltd.
 
PDF
論文紹介:AutoPrompt: Eliciting Knowledge from Language Models with Automatically ...
Toru Tamaki
 
PDF
論文紹介:Unbiasing through Textual Descriptions: Mitigating Representation Bias i...
Toru Tamaki
 
Forguncy 10 製品概要資料 - ノーコードWebアプリ開発プラットフォーム
フォーガンシー
 
安尾 萌, 松下 光範. 環境馴致を計量可能にするための試み,人工知能学会第4回仕掛学研究会, 2018.
Matsushita Laboratory
 
勉強会_ターミナルコマンド入力迅速化_20250620. pptx. .
iPride Co., Ltd.
 
安尾 萌, 北村 茂生, 松下 光範. 災害発生時における被害状況把握を目的とした情報共有システムの基礎検討, 電子情報通信学会HCGシンポジウム2018...
Matsushita Laboratory
 
Vibe Codingを始めよう 〜Cursorを例に、ノーコードでのプログラミング体験〜
iPride Co., Ltd.
 
安尾 萌, 藤代 裕之, 松下 光範. 協調的情報トリアージにおけるコミュニケーションの影響についての検討, 第11回データ工学と情報マネジメントに関する...
Matsushita Laboratory
 
色について.pptx .
iPride Co., Ltd.
 
論文紹介:AutoPrompt: Eliciting Knowledge from Language Models with Automatically ...
Toru Tamaki
 
論文紹介:Unbiasing through Textual Descriptions: Mitigating Representation Bias i...
Toru Tamaki
 

Functional JavaScript with Lo-Dash.js