SlideShare a Scribd company logo
1 of 21
Swiftでブロックチェーン
を実装する
第2回 ブロックチェーンエンジニア勉強会
2018/04/18 Bitz Co., Ltd. 村上幸雄
• 埼玉県朝霞市でソフトハウスを起業。
• macOSやiOS、Androidのアプリケーション開発を主に請け負う。
• 自社アプリの製作。
• Twitter: @m_yukio
• Facebook: yukio.murakami
• GitHub: murakami
• http://www.bitz.co.jp/weblog/
BUKURO.swift
• macOS/iOS/watchOS/tvOSプログラマーのための勉強会。
初心者大歓迎。
• Cocoa勉強会 関東とMOSAの合同勉強会。
ほぼ毎月、池袋コワーキングスペース OpenOffice FOREST で開催。
• 申し込みは、connpassから。
https://cocoa-kanto.connpass.com/
• プログラマーが楽しくプログラミングできるようにサポートする場を
提供したい
• 勉強会に参加された方全員が学びを得られる様にサポートします!
• 勉強会に参加できない方にも学び得られるよう、勉強会の成果を可
能な限りアウトプットします!
• プログラマの拠り所となる場を目指します!
• PubHack.swiftは、飲み会イベントを通じて、
macOS/iOS/tvOS/watchOS/Androidエンジニアの人たちの交流を目的として
います。
• Cocoa勉強会 関東とMOSAの合同イベント。
• 申し込みは、connpassから。
https://cocoa-kanto.connpass.com/
The Bash in Tokyo
• MOXSSGとCocoa勉強会 関東、MOSAとの合同で開催予
定です。
• WWDCのチケットが買えず、日本残留組となった方々へ
の朗報です。The Bashモドキを東京で開催します。もち
ろん本家と違って、会場も屋内でクールなバンドもきま
せん。飲食も持ち込みとなる予定です。ですが、WWDC
をつまみに語らいましょう。
• 6/15(金)、場所は渋谷の hoops link tokyo です。
Learn Blockchains by Building One
The fastest way to learn how Blockchains work is to build one
https://hackernoon.com/learn-blockchains-by-building-one-117428612f46
https://github.com/dvf/blockchain
【参考】
ブロックチェーンを作ることで学ぶ 〜ブロックチェーンがどのように動いているのか学ぶ最速の方法は作ってみることだ〜
https://qiita.com/hidehiro98/items/841ece65d896aeaa8a2a
Swiftでブロックチェーンを実装してみる
https://qiita.com/shu223/items/ebe59325f36fbf25e3d6
Pythonで実装されたコードを参考サイトの情報を
利用して実装してみました。
サンプルコードを公開しています。
https://github.com/murakami/workbook/tree/master/blockchain
元のPythonコードに合わせているので、
Swiftの命名規則などには合わせていません。
記事のPythonコードをSwiftで先ずは空実装
struct Block {
}
struct Transaction {
}
class Blockchain {
var chain: [Block] = []
var currentTransactions: [Transaction] = []
func newBlock() {
}
func newTransaction() {
}
func hash(block: Block) {
}
func lastBlock() {
}
}
記事の値からSwiftの定義を決める
block = {
'index': 1,
'timestamp': 1506057125.900785,
'transactions': [
{
'sender': "8527147fe1f5426f9dd545de4b27ee00",
'recipient': "a77f5cdfa2934df3954a5c7c7da5df1f",
'amount': 5,
}
],
'proof': 324984774000,
'previous_hash': "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824"
}
struct Block {
let index: Int /* 1, 2, … */
let timestamp: Double
let transactions: [Transaction]
let proof: Int
let previousHash: Data
}
記事のコードからSwiftの定義を決める
self.current_transactions.append({
'sender': sender,
'recipient': recipient,
'amount': amount,
})
struct Transaction {
let sender: String
let recipient: String
let amount: Int
}
送信者のアドレス
受信者のアドレス
量
送信者のアドレス
受信者のアドレス
量
タイムスタンプ
索引
前ブロックのハッシュ
プルーフ
トランザクション
ブロック
トランザクションをブロックに追加する
/*
新しいトランザクションをリストに加えた後、
そのトランザクションが加えられるブロック(次に採掘されるブロック)の索引を返す.
*/
func newTransaction(sender: String, recipient: String, amount: Int) -> Int {
/* 次に採掘されるブロックに加える新しいトランザクションを作る */
let transaction = Transaction(
sender: sender, /* 送信者のアドレス */
recipient: recipient, /* 受信者のアドレス */
amount: amount) /* 量 */
currentTransactions.append(transaction)
/* このトランザクションを含むブロックのアドレス */
return lastBlock().index + 1 /* 次のブロックの索引 */
}
新しいブロックを作る
func newBlock(proof: Int, previousHash: Data? = nil) -> Block {
let prevHash: Data
if let previousHash = previousHash {
/* ジェネシスブロックの場合なのか? */
prevHash = previousHash
} else {
// 前のブロックのハッシュ
prevHash = lastBlock().hash()
}
let block = Block(index: chain.count+1,
timestamp: Date().timeIntervalSince1970,
transactions: currentTransactions, /* 複数のトランザクションがあり得る? */
proof: proof,
previousHash: prevHash)
// 現在のトランザクションリストをリセット
currentTransactions = []
chain.append(block)
return block
}
func lastBlock() -> Block {
guard let last = chain.last else { /* 配列の最後の要素 */
fatalError("The chain should have at least one block as a genesis.")
}
return last
}
ジェネシスブロック
init() {
newBlock(proof: 100, previousHash: "1".data(using: .utf8))
}
ハッシュ
struct Block: Codable {
let index: Int /* 1, 2, ... */
let timestamp: Double /* Date().timeIntervalSince1970 */
let transactions: [Transaction]
let proof: Int
let previousHash: Data
func hash() -> Data {
let encoder = JSONEncoder()
let data = try! encoder.encode(self)
return data.sha256()!
}
}
struct Transaction: Codable {
let sender: String
let recipient: String
let amount: Int
}
extension Data {
// https://stackoverflow.com/questions/25388747/sha256-in-swift
func sha256() -> Data? {
guard let res = NSMutableData(length: Int(CC_SHA256_DIGEST_LENGTH)) else { return nil }
CC_SHA256((self as NSData).bytes, CC_LONG(self.count), res.mutableBytes.assumingMemoryBound(to: UInt8.self))
return res as Data
}
}
プルーフ・オブ・ワークアルゴリズム (PoW)
class func proofOfWork(lastProof: Int) -> Int {
var proof: Int = 0
while validProof(lastProof: lastProof, proof: proof) == false {
proof += 1
}
return proof
}
class func validProof(lastProof: Int, proof: Int) -> Bool {
let proofArray = [lastProof, proof]
let encoder = JSONEncoder()
let guess = try! encoder.encode(proofArray)
let guessHash = guess.sha256()!
return guessHash[0] == 0 && guessHash[1] == 0 && guessHash[2] == 0 && guessHash[3] == 0
}
動かしてみる
class BlockchainManager {
/* ブロックチェーンクラスのインスタンス */
let blockchain = Blockchain()
/* 新規トランザクションを作る */
func newTransactions(sender: String, recipient: String, amount: Int) -> Int {
return blockchain.newTransaction(sender:sender, recipient:recipient, amount:amount)
}
/* 新規ブロックを採掘する */
func mine(recipient: String) -> Block {
// 次のプルーフを見つけるためプルーフ・オブ・ワークアルゴリズムを使用する
let lastBlock = blockchain.lastBlock()
let lastProof = lastBlock.proof
let proof = Blockchain.proofOfWork(lastProof: lastProof)
// プルーフを見つけたことに対する報酬を得る
// 送信者は、採掘者が新しいコインを採掘したことを表すために"0"とする
_ = blockchain.newTransaction(sender: "0", recipient: recipient, amount: 1)
// チェーンに新しいブロックを加えることで、新しいブロックを採掘する
let block = blockchain.newBlock(proof: proof)
return block
}
/* フルブロックチェーンを返す */
func fullChain() -> [Block] {
return blockchain.chain
}
}
let blockchainManager = BlockchainManager()
/* 新しいブロックの採掘 */
var block = blockchainManager.mine(recipient: "demo")
print("採掘したブロックチェーン: (block)")
/* 新しいブロックの採掘 */
block = blockchainManager.mine(recipient: "demo")
print("採掘したブロックチェーン: (block)")
/* 新しいブロックの採掘 */
block = blockchainManager.mine(recipient: "demo")
print("採掘したブロックチェーン: (block)")
/* フルブロックチェーンを */
let fullChain = blockchainManager.fullChain()
for block in fullChain {
print("ブロック: (block)")
}
採掘したブロックチェーン: Block(index: 2, timestamp: 1523800131.2186232, transactions: [blockchain.Transaction(sender: "0", recipient: "demo", amount: 1)], proof: 23735, previousHash: 32 bytes)
採掘したブロックチェーン: Block(index: 3, timestamp: 1523800131.2215281, transactions: [blockchain.Transaction(sender: "0", recipient: "demo", amount: 1)], proof: 28, previousHash: 32 bytes)
採掘したブロックチェーン: Block(index: 4, timestamp: 1523800131.2483349, transactions: [blockchain.Transaction(sender: "0", recipient: "demo", amount: 1)], proof: 1128, previousHash: 32 bytes)
ブロック: Block(index: 1, timestamp: 1523800130.7891741, transactions: [], proof: 100, previousHash: 1 bytes)
ブロック: Block(index: 2, timestamp: 1523800131.2186232, transactions: [blockchain.Transaction(sender: "0", recipient: "demo", amount: 1)], proof: 23735, previousHash: 32 bytes)
ブロック: Block(index: 3, timestamp: 1523800131.2215281, transactions: [blockchain.Transaction(sender: "0", recipient: "demo", amount: 1)], proof: 28, previousHash: 32 bytes)
ブロック: Block(index: 4, timestamp: 1523800131.2483349, transactions: [blockchain.Transaction(sender: "0", recipient: "demo", amount: 1)], proof: 1128, previousHash: 32 bytes)
コンセンサス
• ノードを登録。
• ノード間で違いがある場合、コンフリクトしてる
ということ。
• 最も長いチェーンが信頼できる。
• ブロックのハッシュが正しいことを確認する。
• プルーフ・オブ・ワークが正しいことを確認す
る。
デモ

More Related Content

What's hot

Casperjsのインストール
CasperjsのインストールCasperjsのインストール
CasperjsのインストールKohei Misu
 
静的サイトどこにする?
静的サイトどこにする?静的サイトどこにする?
静的サイトどこにする?ogawatti
 
主婦は見た!Azureでtensor flow
主婦は見た!Azureでtensor flow主婦は見た!Azureでtensor flow
主婦は見た!Azureでtensor flow美穂 山田
 
Python/Bottle for Kubo Semi 2014
Python/Bottle for Kubo Semi 2014Python/Bottle for Kubo Semi 2014
Python/Bottle for Kubo Semi 2014Toshiki NOGUCHI
 
C#次世代非同期処理概観 - Task vs Reactive Extensions
C#次世代非同期処理概観 - Task vs Reactive ExtensionsC#次世代非同期処理概観 - Task vs Reactive Extensions
C#次世代非同期処理概観 - Task vs Reactive ExtensionsYoshifumi Kawai
 
Deep Dive async/await in Unity with UniTask(UniRx.Async)
Deep Dive async/await in Unity with UniTask(UniRx.Async)Deep Dive async/await in Unity with UniTask(UniRx.Async)
Deep Dive async/await in Unity with UniTask(UniRx.Async)Yoshifumi Kawai
 
Dive into dockerネットワーク
Dive into dockerネットワークDive into dockerネットワーク
Dive into dockerネットワークKazuyuki Mori
 
仮想通貨テストベッドネットワークの構築
仮想通貨テストベッドネットワークの構築仮想通貨テストベッドネットワークの構築
仮想通貨テストベッドネットワークの構築Yuichiro Shibata
 
ラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよnpsg
 
OpenStack Liberty 外部ネットワーク側との通信
OpenStack Liberty 外部ネットワーク側との通信OpenStack Liberty 外部ネットワーク側との通信
OpenStack Liberty 外部ネットワーク側との通信Takashi Umeno
 
日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall
日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall
日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall博文 斉藤
 
WSL2+docker+JupyterとVS Codeリモート環境の構築
WSL2+docker+JupyterとVS Codeリモート環境の構築WSL2+docker+JupyterとVS Codeリモート環境の構築
WSL2+docker+JupyterとVS Codeリモート環境の構築Saito5656
 
東京Node学園#3 Domains & Isolates
東京Node学園#3 Domains & Isolates東京Node学園#3 Domains & Isolates
東京Node学園#3 Domains & Isolateskoichik
 
Apache Auroraの始めかた
Apache Auroraの始めかたApache Auroraの始めかた
Apache Auroraの始めかたMasahito Zembutsu
 
サーバレスモードRTMFP
サーバレスモードRTMFPサーバレスモードRTMFP
サーバレスモードRTMFPitoz itoz
 

What's hot (20)

Casperjsのインストール
CasperjsのインストールCasperjsのインストール
Casperjsのインストール
 
静的サイトどこにする?
静的サイトどこにする?静的サイトどこにする?
静的サイトどこにする?
 
主婦は見た!Azureでtensor flow
主婦は見た!Azureでtensor flow主婦は見た!Azureでtensor flow
主婦は見た!Azureでtensor flow
 
Python/Bottle for Kubo Semi 2014
Python/Bottle for Kubo Semi 2014Python/Bottle for Kubo Semi 2014
Python/Bottle for Kubo Semi 2014
 
LINQ in Unity
LINQ in UnityLINQ in Unity
LINQ in Unity
 
C#次世代非同期処理概観 - Task vs Reactive Extensions
C#次世代非同期処理概観 - Task vs Reactive ExtensionsC#次世代非同期処理概観 - Task vs Reactive Extensions
C#次世代非同期処理概観 - Task vs Reactive Extensions
 
Docker やってみた
Docker やってみたDocker やってみた
Docker やってみた
 
Deep Dive async/await in Unity with UniTask(UniRx.Async)
Deep Dive async/await in Unity with UniTask(UniRx.Async)Deep Dive async/await in Unity with UniTask(UniRx.Async)
Deep Dive async/await in Unity with UniTask(UniRx.Async)
 
Dive into dockerネットワーク
Dive into dockerネットワークDive into dockerネットワーク
Dive into dockerネットワーク
 
仮想通貨テストベッドネットワークの構築
仮想通貨テストベッドネットワークの構築仮想通貨テストベッドネットワークの構築
仮想通貨テストベッドネットワークの構築
 
Nko
NkoNko
Nko
 
ラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよ
 
Bitcoin testnet
Bitcoin testnetBitcoin testnet
Bitcoin testnet
 
OpenStack Liberty 外部ネットワーク側との通信
OpenStack Liberty 外部ネットワーク側との通信OpenStack Liberty 外部ネットワーク側との通信
OpenStack Liberty 外部ネットワーク側との通信
 
ICHIGEKI-MT 2015/03/14
ICHIGEKI-MT 2015/03/14ICHIGEKI-MT 2015/03/14
ICHIGEKI-MT 2015/03/14
 
日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall
日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall
日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall
 
WSL2+docker+JupyterとVS Codeリモート環境の構築
WSL2+docker+JupyterとVS Codeリモート環境の構築WSL2+docker+JupyterとVS Codeリモート環境の構築
WSL2+docker+JupyterとVS Codeリモート環境の構築
 
東京Node学園#3 Domains & Isolates
東京Node学園#3 Domains & Isolates東京Node学園#3 Domains & Isolates
東京Node学園#3 Domains & Isolates
 
Apache Auroraの始めかた
Apache Auroraの始めかたApache Auroraの始めかた
Apache Auroraの始めかた
 
サーバレスモードRTMFP
サーバレスモードRTMFPサーバレスモードRTMFP
サーバレスモードRTMFP
 

Similar to Swiftでブロックチェーンを実装する

WebRTC UserMedia Catalog: いろんなユーザメディア(MediaStream)を使ってみよう
WebRTC UserMedia Catalog: いろんなユーザメディア(MediaStream)を使ってみようWebRTC UserMedia Catalog: いろんなユーザメディア(MediaStream)を使ってみよう
WebRTC UserMedia Catalog: いろんなユーザメディア(MediaStream)を使ってみようmganeko
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するYoshifumi Kawai
 
History & Practices for UniRx UniRxの歴史、或いは開発(中)タイトルの用例と落とし穴の回避法
History & Practices for UniRx UniRxの歴史、或いは開発(中)タイトルの用例と落とし穴の回避法History & Practices for UniRx UniRxの歴史、或いは開発(中)タイトルの用例と落とし穴の回避法
History & Practices for UniRx UniRxの歴史、或いは開発(中)タイトルの用例と落とし穴の回避法Yoshifumi Kawai
 
OpenStack Study#9 JOSUG
OpenStack Study#9 JOSUGOpenStack Study#9 JOSUG
OpenStack Study#9 JOSUGHideki Saito
 
OpenWhisk introduction public
OpenWhisk introduction publicOpenWhisk introduction public
OpenWhisk introduction publicTakehiko Amano
 
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」yoshiaki iwanaga
 
KituraとサーバーサイドSwift
KituraとサーバーサイドSwiftKituraとサーバーサイドSwift
KituraとサーバーサイドSwiftYUSUKE MORIZUMI
 
おまえらこのライブラリ使ってないの? m9 (2013-07)
おまえらこのライブラリ使ってないの? m9	(2013-07)おまえらこのライブラリ使ってないの? m9	(2013-07)
おまえらこのライブラリ使ってないの? m9 (2013-07)Toru Furukawa
 
How to apt-get from the internal network: remote sshd with kneesocks
How to apt-get from the internal network: remote sshd with kneesocksHow to apt-get from the internal network: remote sshd with kneesocks
How to apt-get from the internal network: remote sshd with kneesocksinaz2
 
[DockerConハイライト] OpenPubKeyによるイメージの署名と検証.pdf
[DockerConハイライト] OpenPubKeyによるイメージの署名と検証.pdf[DockerConハイライト] OpenPubKeyによるイメージの署名と検証.pdf
[DockerConハイライト] OpenPubKeyによるイメージの署名と検証.pdfAkihiro Suda
 
SDN Lab環境でのRobotFramework実践活用
SDN Lab環境でのRobotFramework実践活用SDN Lab環境でのRobotFramework実践活用
SDN Lab環境でのRobotFramework実践活用Toshiki Tsuboi
 
あの日実行したコンテナの名前を僕達はまだ知らない。
あの日実行したコンテナの名前を僕達はまだ知らない。あの日実行したコンテナの名前を僕達はまだ知らない。
あの日実行したコンテナの名前を僕達はまだ知らない。Masahito Zembutsu
 
MacPort_&_FTP_ver1.0
MacPort_&_FTP_ver1.0MacPort_&_FTP_ver1.0
MacPort_&_FTP_ver1.0Satoshi Kume
 
Netty & Apache Camel
Netty & Apache CamelNetty & Apache Camel
Netty & Apache Camelssogabe
 
Elasticsearchプラグインの作り方
Elasticsearchプラグインの作り方Elasticsearchプラグインの作り方
Elasticsearchプラグインの作り方Shinsuke Sugaya
 
iOSビヘイビア駆動開発
iOSビヘイビア駆動開発iOSビヘイビア駆動開発
iOSビヘイビア駆動開発Brian Gesiak
 
Ruby&Active Support for expert 3
Ruby&Active Support for expert 3Ruby&Active Support for expert 3
Ruby&Active Support for expert 3xibbar
 

Similar to Swiftでブロックチェーンを実装する (20)

WebRTC UserMedia Catalog: いろんなユーザメディア(MediaStream)を使ってみよう
WebRTC UserMedia Catalog: いろんなユーザメディア(MediaStream)を使ってみようWebRTC UserMedia Catalog: いろんなユーザメディア(MediaStream)を使ってみよう
WebRTC UserMedia Catalog: いろんなユーザメディア(MediaStream)を使ってみよう
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
 
History & Practices for UniRx UniRxの歴史、或いは開発(中)タイトルの用例と落とし穴の回避法
History & Practices for UniRx UniRxの歴史、或いは開発(中)タイトルの用例と落とし穴の回避法History & Practices for UniRx UniRxの歴史、或いは開発(中)タイトルの用例と落とし穴の回避法
History & Practices for UniRx UniRxの歴史、或いは開発(中)タイトルの用例と落とし穴の回避法
 
OpenStack Study#9 JOSUG
OpenStack Study#9 JOSUGOpenStack Study#9 JOSUG
OpenStack Study#9 JOSUG
 
OpenWhisk introduction public
OpenWhisk introduction publicOpenWhisk introduction public
OpenWhisk introduction public
 
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」
 
KituraとサーバーサイドSwift
KituraとサーバーサイドSwiftKituraとサーバーサイドSwift
KituraとサーバーサイドSwift
 
おまえらこのライブラリ使ってないの? m9 (2013-07)
おまえらこのライブラリ使ってないの? m9	(2013-07)おまえらこのライブラリ使ってないの? m9	(2013-07)
おまえらこのライブラリ使ってないの? m9 (2013-07)
 
How to apt-get from the internal network: remote sshd with kneesocks
How to apt-get from the internal network: remote sshd with kneesocksHow to apt-get from the internal network: remote sshd with kneesocks
How to apt-get from the internal network: remote sshd with kneesocks
 
[DockerConハイライト] OpenPubKeyによるイメージの署名と検証.pdf
[DockerConハイライト] OpenPubKeyによるイメージの署名と検証.pdf[DockerConハイライト] OpenPubKeyによるイメージの署名と検証.pdf
[DockerConハイライト] OpenPubKeyによるイメージの署名と検証.pdf
 
SDN Lab環境でのRobotFramework実践活用
SDN Lab環境でのRobotFramework実践活用SDN Lab環境でのRobotFramework実践活用
SDN Lab環境でのRobotFramework実践活用
 
あの日実行したコンテナの名前を僕達はまだ知らない。
あの日実行したコンテナの名前を僕達はまだ知らない。あの日実行したコンテナの名前を僕達はまだ知らない。
あの日実行したコンテナの名前を僕達はまだ知らない。
 
NanoStrand
NanoStrandNanoStrand
NanoStrand
 
NanoStrand
NanoStrandNanoStrand
NanoStrand
 
MacPort_&_FTP_ver1.0
MacPort_&_FTP_ver1.0MacPort_&_FTP_ver1.0
MacPort_&_FTP_ver1.0
 
Netty & Apache Camel
Netty & Apache CamelNetty & Apache Camel
Netty & Apache Camel
 
Openassets ruby
Openassets rubyOpenassets ruby
Openassets ruby
 
Elasticsearchプラグインの作り方
Elasticsearchプラグインの作り方Elasticsearchプラグインの作り方
Elasticsearchプラグインの作り方
 
iOSビヘイビア駆動開発
iOSビヘイビア駆動開発iOSビヘイビア駆動開発
iOSビヘイビア駆動開発
 
Ruby&Active Support for expert 3
Ruby&Active Support for expert 3Ruby&Active Support for expert 3
Ruby&Active Support for expert 3
 

More from 幸雄 村上

アプリケーション識別子.pdf
アプリケーション識別子.pdfアプリケーション識別子.pdf
アプリケーション識別子.pdf幸雄 村上
 
圧縮ネイティブ・ライブラリについて.pdf
圧縮ネイティブ・ライブラリについて.pdf圧縮ネイティブ・ライブラリについて.pdf
圧縮ネイティブ・ライブラリについて.pdf幸雄 村上
 
分散環境におけるジャストインタイム設定の試み
分散環境におけるジャストインタイム設定の試み分散環境におけるジャストインタイム設定の試み
分散環境におけるジャストインタイム設定の試み幸雄 村上
 
SwiftのOptionalを理解する
SwiftのOptionalを理解するSwiftのOptionalを理解する
SwiftのOptionalを理解する幸雄 村上
 
え!それって参照渡し?
え!それって参照渡し?え!それって参照渡し?
え!それって参照渡し?幸雄 村上
 
プライバシーとセキュリティ(リモート通知のデバイストークンの扱いなど)
プライバシーとセキュリティ(リモート通知のデバイストークンの扱いなど)プライバシーとセキュリティ(リモート通知のデバイストークンの扱いなど)
プライバシーとセキュリティ(リモート通知のデバイストークンの扱いなど)幸雄 村上
 
AppleScriptとは何ぞや
AppleScriptとは何ぞやAppleScriptとは何ぞや
AppleScriptとは何ぞや幸雄 村上
 
Web API 通信の符号化について
Web API 通信の符号化についてWeb API 通信の符号化について
Web API 通信の符号化について幸雄 村上
 
Master-Detail App を実装する
Master-Detail App を実装するMaster-Detail App を実装する
Master-Detail App を実装する幸雄 村上
 
SwiftのOptionalを理解する
SwiftのOptionalを理解するSwiftのOptionalを理解する
SwiftのOptionalを理解する幸雄 村上
 
Getting a packet trace
Getting a packet traceGetting a packet trace
Getting a packet trace幸雄 村上
 
The Bash in Tokyo : AppKitとUIKit
The Bash in Tokyo : AppKitとUIKitThe Bash in Tokyo : AppKitとUIKit
The Bash in Tokyo : AppKitとUIKit幸雄 村上
 
ゲームの企画書づくりに挑戦
ゲームの企画書づくりに挑戦ゲームの企画書づくりに挑戦
ゲームの企画書づくりに挑戦幸雄 村上
 
IBM Watson Services for Core ML
IBM Watson Services for Core MLIBM Watson Services for Core ML
IBM Watson Services for Core ML幸雄 村上
 
独自Documentクラス
独自Documentクラス独自Documentクラス
独自Documentクラス幸雄 村上
 
独自Documentクラス
独自Documentクラス独自Documentクラス
独自Documentクラス幸雄 村上
 

More from 幸雄 村上 (20)

アプリケーション識別子.pdf
アプリケーション識別子.pdfアプリケーション識別子.pdf
アプリケーション識別子.pdf
 
圧縮ネイティブ・ライブラリについて.pdf
圧縮ネイティブ・ライブラリについて.pdf圧縮ネイティブ・ライブラリについて.pdf
圧縮ネイティブ・ライブラリについて.pdf
 
分散環境におけるジャストインタイム設定の試み
分散環境におけるジャストインタイム設定の試み分散環境におけるジャストインタイム設定の試み
分散環境におけるジャストインタイム設定の試み
 
SwiftのOptionalを理解する
SwiftのOptionalを理解するSwiftのOptionalを理解する
SwiftのOptionalを理解する
 
え!それって参照渡し?
え!それって参照渡し?え!それって参照渡し?
え!それって参照渡し?
 
プライバシーとセキュリティ(リモート通知のデバイストークンの扱いなど)
プライバシーとセキュリティ(リモート通知のデバイストークンの扱いなど)プライバシーとセキュリティ(リモート通知のデバイストークンの扱いなど)
プライバシーとセキュリティ(リモート通知のデバイストークンの扱いなど)
 
AppleScriptなど
AppleScriptなどAppleScriptなど
AppleScriptなど
 
MojaveのDark Mode
MojaveのDark ModeMojaveのDark Mode
MojaveのDark Mode
 
AppleScriptとは何ぞや
AppleScriptとは何ぞやAppleScriptとは何ぞや
AppleScriptとは何ぞや
 
Web API 通信の符号化について
Web API 通信の符号化についてWeb API 通信の符号化について
Web API 通信の符号化について
 
Master-Detail App を実装する
Master-Detail App を実装するMaster-Detail App を実装する
Master-Detail App を実装する
 
SwiftのOptionalを理解する
SwiftのOptionalを理解するSwiftのOptionalを理解する
SwiftのOptionalを理解する
 
Getting a packet trace
Getting a packet traceGetting a packet trace
Getting a packet trace
 
The Bash in Tokyo : AppKitとUIKit
The Bash in Tokyo : AppKitとUIKitThe Bash in Tokyo : AppKitとUIKit
The Bash in Tokyo : AppKitとUIKit
 
RUDP
RUDPRUDP
RUDP
 
ゲームの企画書づくりに挑戦
ゲームの企画書づくりに挑戦ゲームの企画書づくりに挑戦
ゲームの企画書づくりに挑戦
 
IBM Watson Services for Core ML
IBM Watson Services for Core MLIBM Watson Services for Core ML
IBM Watson Services for Core ML
 
独自Documentクラス
独自Documentクラス独自Documentクラス
独自Documentクラス
 
独自Documentクラス
独自Documentクラス独自Documentクラス
独自Documentクラス
 
Bukuro.makers
Bukuro.makersBukuro.makers
Bukuro.makers
 

Recently uploaded

モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成Hiroshi Tomioka
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 

Recently uploaded (9)

モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 

Swiftでブロックチェーンを実装する