SlideShare uma empresa Scribd logo
1 de 94
Baixar para ler offline
Automating Your Work flowAutomating Your Work flow
with gulp.jswith gulp.js
Bo-Yi Wu
2014@COSCUP
2
Software Engineer @ Realtek
https://github.com/appleboy
http://blog.wu-boy.com
https://www.facebook.com/appleboy46
3
Work FlowWork Flow
https://www.flickr.com/photos/shanecasey51/14627365291
4
Work FlowWork Flow
for web developerfor web developer
5
Work Flow
Setup
Download
Server Setup
PHP
Ruby
6
Setup
Download
Server Setup
PHP
Ruby
Develop
Watch
Live Reload
Lint
Coffee
Sass/Less
Work Flow
7
Setup
Download
Server Setup
PHP
Ruby
Develop
Watch
Live Reload
Lint
Coffee
Sass/Less
Build
Testing
Compile
Concat
Rename
Minify
Image-min
Deployment
Work Flow
8
Automation
http://www.exacttarget.com/blog/marketing-automation-infographic/
9
TasksTasks
Html / Jade
JavaScript / CoffeeScript / LiveScript
– JSHint
CSS / Sass / Compass / Stylus
Testing
– Mocha
Deploy
– Minify
– Rename
– Replace
10
We needWe need
JavaScript Task RunnerJavaScript Task Runner
11
2013 @ JSDC Conference
你不可不知的前端開發工具
http://bit.ly/jsdc-grunt
12
build system for Grunt.js
13
Gulp.js
Another streaming build system
14
Who Use Gult.js?Who Use Gult.js?
15
https://github.com/gulpjs/gulp/issues/540
16
17
VS.VS.
Gulp.jsGrunt.js
18
VS.VS.
Gulp.js
File Based Stream Based
Grunt.js
19
VS.VS.
Gulp.js
File Based Stream Based
Configuration over code code over Configuration
Grunt.js
20
File Based vs. Stream Based
21
Typical grunt taskTypical grunt task
File
System
Read
Files
Modify Write
Files
Temp
Read
Files
Modify Write
Files
Temp
File
System
22
GulpGulp uses streams
File
System
Read
Files
Modify Modify Write
Files
Modify Modify
File
System
23
Why use gulp.js
Easy to use
Efficient
High Quality
Easy to Learn
24
Easy to useEasy to use
By preferring code over configuration, gulp
keeps simple things simple and makes complex
tasks manageable.
25
Easy to useEasy to use
var gulp = require('gulp‘),
coffee = require(‘gulp-coffee’);
26
Easy to useEasy to use
var gulp = require('gulp‘),
coffee = require(‘gulp-coffee’);
gulp.task('coffee', function() {
//ready to go
});
27
Easy to useEasy to use
var gulp = require('gulp‘),
coffee = require(‘gulp-coffee’);
gulp.task('coffee', function() {
gulp.src(‘assets/coffee/**/*.coffee’)
.pipe(coffee())
.pipe(gulp.dest(‘assets/js/’));
});
28
https://www.flickr.com/photos/53382811@N07/4984100421
29
Run commandRun command
$ gulp coffee
30
EfficientEfficient
By harnessing the power of node's
streams you get fast builds that
don't write intermediary files to
disk.
31
Gulp uses streams
File
System
Read
Files
coffee uglify Write
Files
rename
File
System
32
Efficient
var gulp = require('gulp‘),
coffee = require(‘gulp-coffee’);
gulp.task('coffee', function() {
gulp.src(‘assets/coffee/main.coffee’)
.pipe(coffee())
.pipe(uglify())
.pipe(rename(‘assets/js/main.min.js’))
.pipe(gulp.dest(‘dist/assets/js/’));
});
Read file
33
Efficient
var gulp = require('gulp‘),
coffee = require(‘gulp-coffee’);
gulp.task('coffee', function() {
gulp.src(‘assets/coffee/main.coffee’)
.pipe(coffee())
.pipe(uglify())
.pipe(rename(‘assets/js/main.min.js’))
.pipe(gulp.dest(‘dist/assets/js/’));
});
Process in Memory
Process in Memory
Process in Memory
34
Efficient
var gulp = require('gulp‘),
coffee = require(‘gulp-coffee’);
gulp.task('coffee', function() {
gulp.src(‘assets/coffee/main.coffee’)
.pipe(coffee())
.pipe(uglify())
.pipe(rename(‘assets/js/main.min.js’))
.pipe(gulp.dest(‘dist/assets/js/’));
});
Write file
35
stream-handbookstream-handbook ByBy @@ substacksubstack
https://github.com/substack/stream-handbook
36
High QualityHigh Quality
gulp's strict plugin guidelines assure
plugins stay simple and work the way
you expect.
37
Gulp pluginsGulp plugins
more than 600+ pluginsmore than 600+ plugins
http://gulpjs.com/plugins/http://gulpjs.com/plugins/
38
Gulp plugin
gulp-coffee / gulp-livescript
gulp-ruby-sass / gulp-compass
gulp-imagemin
gulp-rename
gulp-minify-css
gulp-htmlmin
gulp-mocha
gulp-replace
gulp-livereload
39
gulp black list
gulp-browserify
gulp-requirejs
gulp-shell
gulp-connect
gulp-twitter
gulp-if-else
https://github.com/gulpjs/plugins/blob/master/src/blackList.json
40
Easy to LearnEasy to Learn
With a minimal API surface, you
can pick up gulp in no time. Your
build works just like you envision it:
a series of streaming pipes.
41
Only 4 functions you need to learnOnly 4 functions you need to learn
42
Really?
https://www.flickr.com/photos/kplawver/8238939/
43
4 functions
gulp.task
gulp.watch
gulp.src
gulp.src
44
gulp.task(name[, deps], fn)gulp.task(name[, deps], fn)
gulp.task(‘hello', function() {
console.log('Hello world!');
});
gulp.task('css', ['greet'], function () {
// Deal with CSS here
});
gulp.task('build', ['css', 'js', 'imgs']);
gulp.task('default', function () {
// Your default task
});
45
gulp.watch(glob[, opts], tasks)
gulp.watch('js/**/*.js', ['Task']);
46
gulp.src(globs[, options])
gulp.src('./*.jade')
gulp.src('*.+(js|css)')
gulp.src('*.{jpg,jpeg,png,gif}')
gulp.src(['js/**/*.js', '!js/**/*.min.js'])
47
gulp.dest(path)
gulp.src('./client/templates/*.jade')
.pipe(jade())
.pipe(gulp.dest('./app'))
.pipe(minify())
.pipe(gulp.dest('./dist'));
48
Write your first Gulp TaskWrite your first Gulp Task
gulpfile.[js|coffee|ls]
Support CoffeeScript or LiveScript from Gulp > 3.7.0
Thanks @tkellen
https://github.com/tkellen/node-liftoff
49
var gulp = require('gulp'),
jshint = require('gulp-jshint'),
uglify = require('gulp-uglify'),
concat = require('gulp-concat');
gulp.task('js', function () {
return gulp.src('js/*.js')
.pipe(jshint())
.pipe(jshint.reporter('default'))
.pipe(uglify())
.pipe(concat('app.js'))
.pipe(gulp.dest('build'));
});
50
package.json
{
"devDependencies": {
"gulp-concat": "^2.3.3",
"gulp-uglify": "^0.3.1",
"gulp-jshint": "^1.7.1",
"gulp": "^3.8.6"
}
}
51
How many pluginsHow many plugins
you need?you need?
52
gutil = require 'gulp-util'
coffee = require 'gulp-coffee'
coffeelint = require 'gulp-coffeelint'
compass = require 'gulp-compass'
w3cjs = require 'gulp-w3cjs'
imagemin = require 'gulp-imagemin'
cache = require 'gulp-cache'
changed = require 'gulp-changed'
connect = require 'gulp-connect'
size = require 'gulp-size'
gulpif = require 'gulp-if'
rename = require 'gulp-rename'
uglify = require 'gulp-uglify'
minifyCSS = require 'gulp-minify-css'
htmlmin = require 'gulp-htmlmin'
replace = require 'gulp-replace'
mocha = require 'gulp-mocha'
53
You need
gulp-load-plugins
Automatically load in gulp plugins
https://github.com/jackfranklin/gulp-load-plugins
54
var gulp = require('gulp'),
$ = require('gulp-load-plugins')();
gulp.task('js', function () {
return gulp.src('js/*.js')
.pipe($.jshint())
.pipe($.jshint.reporter('default'))
.pipe($.uglify())
.pipe($.concat('app.js'))
.pipe(gulp.dest('build'));
});
55
Only pass through changed files
By using gulp-changed only changed
files will be passed through.
56
gulp.task('coffee', function() {
gulp.src('app/coffee/**/*.coffee')
.pipe(coffeelint())
.pipe(coffeelint.reporter())
.pipe(coffee())
.pipe(gulp.dest(paths.script));
});
57
Using gulp-changedUsing gulp-changed
58
gulp.task('coffee', function() {
gulp.src('app/coffee/**/*.coffee')
.pipe(changed(paths.script, {extension: '.js'}))
.pipe(coffeelint())
.pipe(coffeelint.reporter())
.pipe(coffee())
.pipe(gulp.dest(paths.script));
});
59
Running tasks in seriesRunning tasks in series
60
var gulp = require('gulp');
gulp.task('one', function(cb) {
// do stuff -- async or otherwise
cb(err);
});
gulp.task('two', ['one'], function() {
// task 'one' is done now
});
gulp.task('default', ['one', 'two']);
61
Using run-sequenceUsing run-sequence
Run a series of dependent gulp tasks in order
https://github.com/OverZealous/run-sequence
62
var runs = require('run-sequence‘);
gulp.task('release', function(cb) {
return runs(‘clean’, ['build', 'rjs'], cb);
});
63
Reloading Changes In The BrowserReloading Changes In The Browser
gulp-livereload
https://github.com/vohof/gulp-livereload
64
var gulp = require('gulp'),
sass = require('gulp-sass'),
livereload = require('gulp-livereload'),
watch = require('gulp-watch');
gulp.task(‘sass', function() {
gulp.src(‘sass/*.scss')
.pipe(watch())
.pipe(sass())
.pipe(gulp.dest('css'))
.pipe(livereload());
});
65
gulp-webservergulp-webserver
Streaming gulp plugin to run a local webserver with
LiveReload
https://github.com/schickling/gulp-webserver
66
var gulp = require('gulp');
webserver = require('gulp-webserver');
gulp.task('webserver', function() {
gulp.src('app')
.pipe(webserver({
livereload: true
}));
});
67
BrowserSyncBrowserSync
Time-saving synchronised browser testing.
http://www.browsersync.io/
68
var browserSync = require('browser-sync'),
reload = browserSync.reload;
// Watch Files For Changes & Reload
gulp.task('serve', function () {
browserSync({
server: {
baseDir: 'app'
}
});
gulp.watch(['*.html'], reload);
});
69
Sharing StreamsSharing Streams
with Stream Factorieswith Stream Factories
70
var gulp = require('gulp'),
$ = require('gulp-load-plugins')();
gulp.task('bootstrap', function() {
return gulp.src('bootstrap/js/*.js')
.pipe($.jshint())
.pipe($.jshint.reporter(stylish))
.pipe($.uglify())
.pipe(gulp.dest('public/bootstrap'));
});
gulp.task('coffee', function() {
return gulp.src('lib/js/*.coffee')
.pipe($.coffee())
.pipe($.jshint())
.pipe($.jshint.reporter(stylish))
.pipe($.uglify())
.pipe(gulp.dest('public/js'));
});
71
uses lazypipe to get the job done
https://github.com/OverZealous/lazypipe
72
var gulp = require('gulp'),
$ = require('gulp-load-plugins')(),
lazypipe = require('lazypipe');
// give lazypipe
var jsTransform = lazypipe()
.pipe($.jshint)
.pipe($.jshint.reporter, stylish)
.pipe($.uglify);
gulp.task('bootstrap', function() {
return gulp.src('bootstrap/js/*.js')
.pipe(jsTransform())
.pipe(gulp.dest('public/bootstrap'));
});
gulp.task('coffee', function() {
return gulp.src('lib/js/*.coffee')
.pipe($.coffee())
.pipe(jsTransform())
.pipe(gulp.dest('public/js'));
});
73
Deploy ProcessDeploy Process
74
Deploy ProcessDeploy Process
CoffeeScript / LiveScript
Compass / Sass
Jade
Image-min
RequireJS
Rename
Replace
Copy
75
Need more task runnerNeed more task runner
Development
Staging
Production
76
Why not use Makefile?Why not use Makefile?
Using Gulp.js tool only for development
77
Gulp.js generatorGulp.js generator
78
A gulp.js generator for modern webapps
https://github.com/yeoman/generator-gulp-webapp
79
Web Starter Kit
https://developers.google.com/web/starter-kit/
80
81
Slush
The streaming scaffolding system
Gulp as a replacement for Yeoman
http://slushjs.github.io
82
slush-html5-template
html5 template engine generator
https://github.com/appleboy/slush-html5-template
83
FeaturesFeatures
●
The latest html5boilerplate.com source code.
●
Includes Normalize.scss v3.0.x and v1.1.x.
●
The latest jQuery and Modernizr via Bower
package manager.
●
Support CoffeeScript, RequireJS, Sass or
Compass, html minification (via
htmlcompressor).
●
Support JavaScript test framework Mocha.
●
Support streaming build system Gulp.
●
Support Minify PNG and JPEG images with
image-min.
●
Support browser-sync Keep multiple browsers
& devices in sync when building websites.
84
How to install?How to install?
$ npm install -g slush
$ npm install -g slush-html5-template
85
Scaffold your first projectScaffold your first project
$ mkdir app
$ cd app && slush html5-template
$ npm start
86
87
Gulp TechnologyGulp Technology
88
OrchestratorOrchestrator
A module for sequencing and executing tasks
and dependencies in maximum concurrency
https://github.com/orchestrator/orchestrator
89
vinyl-fsvinyl-fs
Vinyl adapter for the file system
https://github.com/wearefractal/vinyl-fs
90
gulp-cheatsheetgulp-cheatsheet
A cheatsheet for gulp.js
https://github.com/osscafe/gulp-cheatsheet
91
92
93
Any Question?
94
謝謝在場聽眾及
全體 COSCUP 工作人員

Mais conteúdo relacionado

Mais procurados

Improving your workflow with gulp
Improving your workflow with gulpImproving your workflow with gulp
Improving your workflow with gulp
frontendne
 
How to integrate front end tool via gruntjs
How to integrate front end tool via gruntjsHow to integrate front end tool via gruntjs
How to integrate front end tool via gruntjs
Bo-Yi Wu
 
Angular workflow with gulp.js
Angular workflow with gulp.jsAngular workflow with gulp.js
Angular workflow with gulp.js
Cihad Horuzoğlu
 

Mais procurados (20)

JavaScript Task Runners - Gulp & Grunt
JavaScript Task Runners - Gulp & GruntJavaScript Task Runners - Gulp & Grunt
JavaScript Task Runners - Gulp & Grunt
 
Improving your workflow with gulp
Improving your workflow with gulpImproving your workflow with gulp
Improving your workflow with gulp
 
How to integrate front end tool via gruntjs
How to integrate front end tool via gruntjsHow to integrate front end tool via gruntjs
How to integrate front end tool via gruntjs
 
Angular workflow with gulp.js
Angular workflow with gulp.jsAngular workflow with gulp.js
Angular workflow with gulp.js
 
Devenez le plus heureux des Front-end avec Gulp.js
Devenez le plus heureux des Front-end avec Gulp.jsDevenez le plus heureux des Front-end avec Gulp.js
Devenez le plus heureux des Front-end avec Gulp.js
 
60分鐘完送百萬edm,背後雲端ci/cd實戰大公開
60分鐘完送百萬edm,背後雲端ci/cd實戰大公開60分鐘完送百萬edm,背後雲端ci/cd實戰大公開
60分鐘完送百萬edm,背後雲端ci/cd實戰大公開
 
TDC2016SP - Esqueça Grunt ou Gulp. Webpack and NPM rule them all!
TDC2016SP -  Esqueça Grunt ou Gulp. Webpack and NPM rule them all!TDC2016SP -  Esqueça Grunt ou Gulp. Webpack and NPM rule them all!
TDC2016SP - Esqueça Grunt ou Gulp. Webpack and NPM rule them all!
 
Chef training Day4
Chef training Day4Chef training Day4
Chef training Day4
 
Gulp - the streaming build system
Gulp - the streaming build systemGulp - the streaming build system
Gulp - the streaming build system
 
Chef training Day5
Chef training Day5Chef training Day5
Chef training Day5
 
Live deployment, ci, drupal
Live deployment, ci, drupalLive deployment, ci, drupal
Live deployment, ci, drupal
 
Continuous Integration & Continuous Delivery with GCP
Continuous Integration & Continuous Delivery with GCPContinuous Integration & Continuous Delivery with GCP
Continuous Integration & Continuous Delivery with GCP
 
Chef training - Day3
Chef training - Day3Chef training - Day3
Chef training - Day3
 
Drupal contrib module maintaining
Drupal contrib module maintainingDrupal contrib module maintaining
Drupal contrib module maintaining
 
Develop - Project Scaffolding
Develop - Project ScaffoldingDevelop - Project Scaffolding
Develop - Project Scaffolding
 
Screenshot as a service
Screenshot as a serviceScreenshot as a service
Screenshot as a service
 
CIbox - OpenSource solution for making your #devops better
CIbox - OpenSource solution for making your #devops betterCIbox - OpenSource solution for making your #devops better
CIbox - OpenSource solution for making your #devops better
 
Gulp and bower Implementation
Gulp and bower Implementation Gulp and bower Implementation
Gulp and bower Implementation
 
DrupalCon Los Angeles - Continuous Integration Toolbox
DrupalCon Los Angeles - Continuous Integration ToolboxDrupalCon Los Angeles - Continuous Integration Toolbox
DrupalCon Los Angeles - Continuous Integration Toolbox
 
GulpJs - An Introduction
GulpJs - An IntroductionGulpJs - An Introduction
GulpJs - An Introduction
 

Destaque

You must know about CodeIgniter Popular Library
You must know about CodeIgniter Popular LibraryYou must know about CodeIgniter Popular Library
You must know about CodeIgniter Popular Library
Bo-Yi Wu
 

Destaque (20)

Gulp.js 自動化前端任務流程
Gulp.js 自動化前端任務流程Gulp.js 自動化前端任務流程
Gulp.js 自動化前端任務流程
 
CP 值很高的 Gulp
CP 值很高的 GulpCP 值很高的 Gulp
CP 值很高的 Gulp
 
Introduction to Grunt.js on Taiwan JavaScript Conference
Introduction to Grunt.js on Taiwan JavaScript ConferenceIntroduction to Grunt.js on Taiwan JavaScript Conference
Introduction to Grunt.js on Taiwan JavaScript Conference
 
You must know about CodeIgniter Popular Library
You must know about CodeIgniter Popular LibraryYou must know about CodeIgniter Popular Library
You must know about CodeIgniter Popular Library
 
Write microservice in golang
Write microservice in golangWrite microservice in golang
Write microservice in golang
 
Introduction to MVC of CodeIgniter 2.1.x
Introduction to MVC of CodeIgniter 2.1.xIntroduction to MVC of CodeIgniter 2.1.x
Introduction to MVC of CodeIgniter 2.1.x
 
PHP & JavaScript & CSS Coding style
PHP & JavaScript & CSS Coding stylePHP & JavaScript & CSS Coding style
PHP & JavaScript & CSS Coding style
 
advanced introduction to codeigniter
advanced introduction to codeigniteradvanced introduction to codeigniter
advanced introduction to codeigniter
 
2014 OSDC Talk: Introduction to Percona XtraDB Cluster and HAProxy
2014 OSDC Talk: Introduction to Percona XtraDB Cluster and HAProxy2014 OSDC Talk: Introduction to Percona XtraDB Cluster and HAProxy
2014 OSDC Talk: Introduction to Percona XtraDB Cluster and HAProxy
 
Git Flow and JavaScript Coding Style
Git Flow and JavaScript Coding StyleGit Flow and JavaScript Coding Style
Git Flow and JavaScript Coding Style
 
Gearman work queue in php
Gearman work queue in phpGearman work queue in php
Gearman work queue in php
 
Phpconf 2011 introduction_to_codeigniter
Phpconf 2011 introduction_to_codeigniterPhpconf 2011 introduction_to_codeigniter
Phpconf 2011 introduction_to_codeigniter
 
Introduction to git
Introduction to gitIntroduction to git
Introduction to git
 
Git flow 與團隊合作
Git flow 與團隊合作Git flow 與團隊合作
Git flow 與團隊合作
 
Why to choose laravel framework
Why to choose laravel frameworkWhy to choose laravel framework
Why to choose laravel framework
 
How to choose web framework
How to choose web frameworkHow to choose web framework
How to choose web framework
 
Frameworks
FrameworksFrameworks
Frameworks
 
The World of Social Objects
The World of Social ObjectsThe World of Social Objects
The World of Social Objects
 
The jQuery Divide
The jQuery DivideThe jQuery Divide
The jQuery Divide
 
Progressive Downloads and Rendering
Progressive Downloads and RenderingProgressive Downloads and Rendering
Progressive Downloads and Rendering
 

Semelhante a Automating your workflow with Gulp.js

Quest for the Perfect Workflow for McrFRED
Quest for the Perfect Workflow for McrFREDQuest for the Perfect Workflow for McrFRED
Quest for the Perfect Workflow for McrFRED
Andi Smith
 
Socket applications
Socket applicationsSocket applications
Socket applications
João Moura
 
Preparing Cappuccino in 30 minutes
Preparing Cappuccino in 30 minutesPreparing Cappuccino in 30 minutes
Preparing Cappuccino in 30 minutes
Lukáš Hurych
 
Preparing Cappuccino in 30 minutes
Preparing Cappuccino in 30 minutesPreparing Cappuccino in 30 minutes
Preparing Cappuccino in 30 minutes
LukasHurych
 

Semelhante a Automating your workflow with Gulp.js (20)

gulp
gulpgulp
gulp
 
Plumbin Pipelines - A Gulp.js workshop
Plumbin Pipelines - A Gulp.js workshopPlumbin Pipelines - A Gulp.js workshop
Plumbin Pipelines - A Gulp.js workshop
 
Web development tools { starter pack }
Web development tools { starter pack }Web development tools { starter pack }
Web development tools { starter pack }
 
Deploying Symfony | symfony.cat
Deploying Symfony | symfony.catDeploying Symfony | symfony.cat
Deploying Symfony | symfony.cat
 
Automating WordPress Plugin Development with Gulp
Automating WordPress Plugin Development with GulpAutomating WordPress Plugin Development with Gulp
Automating WordPress Plugin Development with Gulp
 
Getting started with gulpjs
Getting started with gulpjsGetting started with gulpjs
Getting started with gulpjs
 
Quest for the Perfect Workflow for McrFRED
Quest for the Perfect Workflow for McrFREDQuest for the Perfect Workflow for McrFRED
Quest for the Perfect Workflow for McrFRED
 
Forget Grunt and Gulp! Webpack and NPM rule them all!
Forget Grunt and Gulp! Webpack and NPM rule them all!Forget Grunt and Gulp! Webpack and NPM rule them all!
Forget Grunt and Gulp! Webpack and NPM rule them all!
 
Replacing Rails asset pipeline with Gulp
Replacing Rails asset pipeline with GulpReplacing Rails asset pipeline with Gulp
Replacing Rails asset pipeline with Gulp
 
Instrumentación de entrega continua con Gitlab
Instrumentación de entrega continua con GitlabInstrumentación de entrega continua con Gitlab
Instrumentación de entrega continua con Gitlab
 
Building JavaScript
Building JavaScriptBuilding JavaScript
Building JavaScript
 
Advanced Topics in Continuous Deployment
Advanced Topics in Continuous DeploymentAdvanced Topics in Continuous Deployment
Advanced Topics in Continuous Deployment
 
Vue 淺談前端建置工具
Vue 淺談前端建置工具Vue 淺談前端建置工具
Vue 淺談前端建置工具
 
Play Framework on Google App Engine
Play Framework on Google App EnginePlay Framework on Google App Engine
Play Framework on Google App Engine
 
Workflow automation for Front-end web applications
Workflow automation for Front-end web applicationsWorkflow automation for Front-end web applications
Workflow automation for Front-end web applications
 
Cooking with Chef
Cooking with ChefCooking with Chef
Cooking with Chef
 
Socket applications
Socket applicationsSocket applications
Socket applications
 
JLPDevs - Optimization Tooling for Modern Web App Development
JLPDevs - Optimization Tooling for Modern Web App DevelopmentJLPDevs - Optimization Tooling for Modern Web App Development
JLPDevs - Optimization Tooling for Modern Web App Development
 
Preparing Cappuccino in 30 minutes
Preparing Cappuccino in 30 minutesPreparing Cappuccino in 30 minutes
Preparing Cappuccino in 30 minutes
 
Preparing Cappuccino in 30 minutes
Preparing Cappuccino in 30 minutesPreparing Cappuccino in 30 minutes
Preparing Cappuccino in 30 minutes
 

Mais de Bo-Yi Wu

Mais de Bo-Yi Wu (20)

Drone CI/CD 自動化測試及部署
Drone CI/CD 自動化測試及部署Drone CI/CD 自動化測試及部署
Drone CI/CD 自動化測試及部署
 
用 Go 語言打造多台機器 Scale 架構
用 Go 語言打造多台機器 Scale 架構用 Go 語言打造多台機器 Scale 架構
用 Go 語言打造多台機器 Scale 架構
 
Job Queue in Golang
Job Queue in GolangJob Queue in Golang
Job Queue in Golang
 
Golang Project Layout and Practice
Golang Project Layout and PracticeGolang Project Layout and Practice
Golang Project Layout and Practice
 
Introduction to GitHub Actions
Introduction to GitHub ActionsIntroduction to GitHub Actions
Introduction to GitHub Actions
 
Drone 1.0 Feature
Drone 1.0 FeatureDrone 1.0 Feature
Drone 1.0 Feature
 
Drone CI/CD Platform
Drone CI/CD PlatformDrone CI/CD Platform
Drone CI/CD Platform
 
GraphQL IN Golang
GraphQL IN GolangGraphQL IN Golang
GraphQL IN Golang
 
Go 語言基礎簡介
Go 語言基礎簡介Go 語言基礎簡介
Go 語言基礎簡介
 
drone continuous Integration
drone continuous Integrationdrone continuous Integration
drone continuous Integration
 
Gorush: A push notification server written in Go
Gorush: A push notification server written in GoGorush: A push notification server written in Go
Gorush: A push notification server written in Go
 
用 Drone 打造 輕量級容器持續交付平台
用 Drone 打造輕量級容器持續交付平台用 Drone 打造輕量級容器持續交付平台
用 Drone 打造 輕量級容器持續交付平台
 
用 Go 語言 打造微服務架構
用 Go 語言打造微服務架構用 Go 語言打造微服務架構
用 Go 語言 打造微服務架構
 
Introduction to Gitea with Drone
Introduction to Gitea with DroneIntroduction to Gitea with Drone
Introduction to Gitea with Drone
 
運用 Docker 整合 Laravel 提升團隊開發效率
運用 Docker 整合 Laravel 提升團隊開發效率運用 Docker 整合 Laravel 提升團隊開發效率
運用 Docker 整合 Laravel 提升團隊開發效率
 
用 Go 語言實戰 Push Notification 服務
用 Go 語言實戰 Push Notification 服務用 Go 語言實戰 Push Notification 服務
用 Go 語言實戰 Push Notification 服務
 
用 Go 語言打造 DevOps Bot
用 Go 語言打造 DevOps Bot用 Go 語言打造 DevOps Bot
用 Go 語言打造 DevOps Bot
 
A painless self-hosted Git service: Gitea
A painless self-hosted Git service: GiteaA painless self-hosted Git service: Gitea
A painless self-hosted Git service: Gitea
 
用 Docker 改善團隊合作模式
用 Docker 改善團隊合作模式用 Docker 改善團隊合作模式
用 Docker 改善團隊合作模式
 
Docker 基礎介紹與實戰
Docker 基礎介紹與實戰Docker 基礎介紹與實戰
Docker 基礎介紹與實戰
 

Último

Último (20)

2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 

Automating your workflow with Gulp.js