SlideShare a Scribd company logo
1 of 60
Download to read offline
@stillinbeta ; #bangbangconwest
Postgres!
Plays!
!
@stillinbeta ; #bangbangconwest
Hello There!
Welcome to the world of Pokemon!
@stillinbeta ; #bangbangconwest
Me?
@stillinbeta ; #bangbangconwest
I am a queer
@stillinbeta ; #bangbangconwest
trans...
@stillinbeta ; #bangbangconwest
polyamorous
@stillinbeta ; #bangbangconwest
Programmer
@stillinbeta ; #bangbangconwest
(and sometimes pony)
@stillinbeta ; #bangbangconwest
At Recurse!
@stillinbeta ; #bangbangconwest
Pokemon Red
@stillinbeta ; #bangbangconwest
● Released in Japan in 1996
● Greyscale
● Fits into 1 mb of space
Pokemon 101
@stillinbeta ; #bangbangconwest
The Game Boy
@stillinbeta ; #bangbangconwest
● Released in 1989
Original Gameboy
@stillinbeta ; #bangbangconwest
● Released in 1989
● Modified Z80, 4.91 Mhz
Original Gameboy
@stillinbeta ; #bangbangconwest
● Released in 1989
● Modified Z80, 4.91 Mhz
● 8 kiB internal S-RAM
Original Gameboy
@stillinbeta ; #bangbangconwest
● Released in 1989
● Modified Z80, 4.91 Mhz
● 8 kiB internal S-RAM
● 160 × 144 pixels
Original Gameboy
@stillinbeta ; #bangbangconwest
@stillinbeta ; #bangbangconwest
● Use MissingNo Glitch
How does it work!?
@stillinbeta ; #bangbangconwest
● Use MissingNo Glitch
● Get Code Execution
How does it work!?
@stillinbeta ; #bangbangconwest
● Use MissingNo Glitch
● Get Code Execution
● Live-Patch Assembly Code
How does it work!?
@stillinbeta ; #bangbangconwest
● Use MissingNo Glitch
● Get Code Execution
● Live-Patch Assembly Code
● Listen on Link Port
How does it work!?
@stillinbeta ; #bangbangconwest
● Use MissingNo Glitch
● Get Code Execution
● Live-Patch Assembly Code
● Listen on Link Port
● Modify Memory
How does it work!?
@stillinbeta ; #bangbangconwest
● Use MissingNo Glitch
● Get Code Execution
● Live-Patch Assembly Code
● Listen on Link Port
● Modify Memory!
How does it work!?
● getMemoryValue(address)
● setMemoryValue(address, value)
@stillinbeta ; #bangbangconwest
Architecture
@stillinbeta ; #bangbangconwest
I made this!
@stillinbeta ; #bangbangconwest
Architecture
@stillinbeta ; #bangbangconwest
PyBoy
@stillinbeta ; #bangbangconwest
PyBoy
@stillinbeta ; #bangbangconwest
PyBoy
● Python 2.7
● Actually PyPy
● 180MB Memory
● SDL2 (Segfaults!)
● Doesn’t work on my
Chromebook
@stillinbeta ; #bangbangconwest
service PokemonRed {
rpc GetPokemon (GetPokemonRequest) returns (Party) {}
rpc UpdatePokemon (UpdatePokemonRequest) returns (UpdatePokemonResponse) {}
rpc GetInventory(GetInventoryRequest) returns (GetInventoryResponse) {}
rpc UpdateInventory(UpdateInventoryRequest) returns (UpdateInventoryResponse) {}
rpc AddItem(AddItemRequest) returns (AddItemResponse) {}
rpc GetEvents(GetEventsRequest) returns (GetEventsResponse) {}
rpc SetEvent(SetEventRequest) returns (SetEventResponse) {}
rpc SetMemory (MemoryUpdate) returns (MemoryResponse) {}
}
@stillinbeta ; #bangbangconwest
service PokemonRed {
rpc GetPokemon (GetPokemonRequest) returns (Party) {}
rpc UpdatePokemon (UpdatePokemonRequest) returns (UpdatePokemonResponse) {}
rpc GetInventory(GetInventoryRequest) returns (GetInventoryResponse) {}
rpc UpdateInventory(UpdateInventoryRequest) returns (UpdateInventoryResponse) {}
rpc AddItem(AddItemRequest) returns (AddItemResponse) {}
rpc GetEvents(GetEventsRequest) returns (GetEventsResponse) {}
rpc SetEvent(SetEventRequest) returns (SetEventResponse) {}
rpc SetMemory (MemoryUpdate) returns (MemoryResponse) {}
}
@stillinbeta ; #bangbangconwest
Why Pokemon?
Why Red?!
@stillinbeta ; #bangbangconwest
We have the map!
@stillinbeta ; #bangbangconwest
0x00 Index # of the Species 1 byte
0x01 Current HP 2 bytes
0x03 Level 1 byte
0x04 Status condition 1 byte
0x05 Type 1 1 byte
0x06 Type 2 1 byte
0x07 Catch rate/Held item 1 byte
0x08 Index number of move 1 1 byte
0x09 Index number of move 2 1 byte
0x0A Index number of move 3 1 byte
0x0B Index number of move 4 1 byte
0x0C Original Trainer ID number 2 bytes
0x0E Experience points 3 bytes
0x11 HP EV data 2 bytes
0x13 Attack EV data 2 bytes
0x15 Defense EV data 2 bytes
0x17 Speed EV data 2 bytes
0x19 Special EV data 2 bytes
0x1B IV data 2 bytes
0x1D Move 1's PP values 1 byte
0x1E Move 2's PP values 1 byte
0x1F Move 3's PP values 1 byte
0x20 Move 4's PP values 1 byte
0x21 Level 1 byte
0x22 Maximum HP 2 bytes
0x24 Attack 2 bytes
0x26 Defense 2 bytes
0x28 Speed 2 bytes
0x2A Special 2 bytes
@stillinbeta ; #bangbangconwest
0x00 Index # of the Species 1 byte
0x01 Current HP 2 bytes
0x03 Level 1 byte
0x04 Status condition 1 byte
0x05 Type 1 1 byte
0x06 Type 2 1 byte
0x07 Catch rate/Held item 1 byte
0x08 Index number of move 1 1 byte
0x09 Index number of move 2 1 byte
0x0A Index number of move 3 1 byte
0x0B Index number of move 4 1 byte
0x0C Original Trainer ID number 2 bytes
0x0E Experience points 3 bytes
0x11 HP EV data 2 bytes
0x13 Attack EV data 2 bytes
0x15 Defense EV data 2 bytes
0x17 Speed EV data 2 bytes
0x19 Special EV data 2 bytes
0x1B IV data 2 bytes
0x1D Move 1's PP values 1 byte
0x1E Move 2's PP values 1 byte
0x1F Move 3's PP values 1 byte
0x20 Move 4's PP values 1 byte
0x21 Level 1 byte
0x22 Maximum HP 2 bytes
0x24 Attack 2 bytes
0x26 Defense 2 bytes
0x28 Speed 2 bytes
0x2A Special 2 bytes
@stillinbeta ; #bangbangconwest
message GetPokemonRequest {} message Pokemon {
uint32 id = 1;
uint32 hp = 2;
uint32 level = 3;
uint32 max_hp = 4;
uint32 attack = 5;
uint32 defense = 6;
uint32 speed = 7;
uint32 special = 8;
uint32 position = 99;
}
message Party {
repeated Pokemon party = 1;
}
@stillinbeta ; #bangbangconwest
D163 - # Pokémon In Party
D164 - Pokémon ID 1
D165 - Pokémon ID 2
D166 - Pokémon ID 3
D167 - Pokémon ID 4
D168 - Pokémon ID 5
D169 - Pokémon ID 6
D16A - End of list
D16B - Pokémon 1
D197 - Pokémon 2
D1C3 - Pokémon 3
D1EF - Pokémon 4
D21B - Pokémon 5
D247 - Pokémon
@stillinbeta ; #bangbangconwest
pokemon = self.get_pokemon(
POKEMON_PARTY_START
+ POKEMON_STRUCT_SIZE * i)
@stillinbeta ; #bangbangconwest
def get_pokemon(self, offset):
return pb.Pokemon(
id=self._pyboy.getMemoryValue(offset),
hp=_get_two_bytes(self._pyboy, offset + 0x1),
level=self._pyboy.getMemoryValue(offset + 0x3),
max_hp=_get_two_bytes(self._pyboy, offset + 0x22),
attack=_get_two_bytes(self._pyboy, offset + 0x24),
defense=_get_two_bytes(self._pyboy, offset + 0x26),
speed=_get_two_bytes(self._pyboy, offset + 0x28),
special=_get_two_bytes(self._pyboy, offset + 0x2A),
)
@stillinbeta ; #bangbangconwest
# Values are big-endian
def _get_two_bytes(pyboy, address):
return (pyboy.getMemoryValue(address) << 8) +
pyboy.getMemoryValue(address + 0x1))
@stillinbeta ; #bangbangconwest
What about
Postgres?!
@stillinbeta ; #bangbangconwest
Architecture
@stillinbeta ; #bangbangconwest
Postgres
extensions!
@stillinbeta ; #bangbangconwest
#include "postgres.h"
#include "executor/executor.h" /* for GetAttributeByName() */
#ifdef PG_MODULE_MAGIC
PG_MODULE_MAGIC;
#endif
PG_FUNCTION_INFO_V1(c_overpaid);
Datum
c_overpaid(PG_FUNCTION_ARGS)
{
HeapTupleHeader t = PG_GETARG_HEAPTUPLEHEADER(0);
int32 limit = PG_GETARG_INT32(1);
bool isnull;
Datum salary;
salary = GetAttributeByName(t, "salary", &isnull);
if (isnull)
PG_RETURN_BOOL(false);
PG_RETURN_BOOL(DatumGetInt32(salary) > limit);
}
@stillinbeta ; #bangbangconwest
CREATE FUNCTION c_overpaid(emp, integer) RETURNS boolean
AS 'DIRECTORY/funcs', 'c_overpaid'
LANGUAGE C STRICT;
@stillinbeta ; #bangbangconwest
CREATE FUNCTION c_overpaid(emp, integer) RETURNS boolean
AS 'DIRECTORY/funcs', 'c_overpaid'
LANGUAGE C STRICT;
@stillinbeta ; #bangbangconwest
“C” is more of
a... suggestion
@stillinbeta ; #bangbangconwest
github.com/bluejekyll/pg-extend-rs
@stillinbeta ; #bangbangconwest
/// This tells Postgres this library is a Postgres extension
pg_magic!(version: pg_sys::PG_VERSION_NUM);
/// The pg_extern attribute wraps the function in the proper
functions syntax for C extensions
#[pg_extern]
fn add_one(value: i32) -> i32 {
(value + 1)
}
@stillinbeta ; #bangbangconwest
Foreign Data
Wrappers
@stillinbeta ; #bangbangconwest
Foreign Function:Values
Foreign Data Wrapper:Tables
@stillinbeta ; #bangbangconwest
void
BeginForeignScan(
ForeignScanState *node,
int eflags);
TupleTableSlot *
IterateForeignScan(
ForeignScanState *node);
@stillinbeta ; #bangbangconwest
fn begin(_sopts: OptionMap, _topts: OptionMap, _table_name: String) -> Self {
DefaultFDW {i: 0}
}
fn next(&mut self) -> Option<Self::Item> {
self.i += 1;
if self.i > 5 {
None
} else {
Some(Box::new(MyRow{i: self.i}))
}
}
}
@stillinbeta ; #bangbangconwest
Back to Pallet town...
@stillinbeta ; #bangbangconwest
.addNewItem ; add an item not yet in the inventory
pop hl
ld a, d
and a ; is there room for a new item slot?
jr z, .done
; if there is room
inc [hl] ; increment the number of items in the inventory
ld a, [hl] ; the number of items will be the index of the new item
add a
dec a
ld c, a
ld b, 0
add hl, bc ; hl = address to store the item
ld a, [wcf91]
ld [hli], a ; store item ID
ld a, [wItemQuantity]
ld [hli], a ; store item quantity
ld [hl], $ff ; store terminator
jp .success
@stillinbeta ; #bangbangconwest
.addNewItem ; add an item not yet in the inventory
pop hl ; pop stack into accumulator
ld a, d ; move a from d
and a ; is there room for a new item slot?
jr z, .done
; if there is room
inc [hl] ; increment the number of items in the inventory
ld a, [hl] ; the number of items will be the index of the new item
add a ; double accumulator
dec a ; subtract one
ld c, a ; move accumulator to 0
ld b, 0 ; put 0
add hl, bc ; # of items * 2 - 1 + location of index
ld a, [wcf91] ; move item ID to a
ld [hli], a ; store item ID
ld a, [wItemQuantity] ; move item quantity to a
ld [hli], a ; store item quantity
ld [hl], $ff ; store terminator in next slot
jp .success
@stillinbeta ; #bangbangconwest
.addNewItem ; add an item not yet in the inventory
pop hl ; pop stack into accumulator
ld a, d ; move a from d
and a ; is there room for a new item slot?
jr z, .done
; if there is room
inc [hl] ; increment the number of items in the inventory
ld a, [hl] ; the number of items will be the index of the new item
add a ; double accumulator
dec a ; subtract one
ld c, a ; move accumulator to 0
ld b, 0 ; put 0
add hl, bc ; # of items * 2 - 1 + location of index
ld a, [wcf91] ; move item ID to a
ld [hli], a ; store item ID
ld a, [wItemQuantity] ; move item quantity to a
ld [hli], a ; store item quantity
ld [hl], $ff ; store terminator in next slot
jp .success
@stillinbeta ; #bangbangconwest
ld [hl], $ff ; store terminator in next
slot
jp .success
@stillinbeta ; #bangbangconwest
Special Thanks
Benjamin Fry (pg-extend-rs)
Mads Ynddal (PyBoy)
Natalie Wolek (knowing everything about Pokemon)
@stillinbeta ; #bangbangconwest
@stillinbeta
gayhorse.club/@beta
github.com/stillinbeta/PostgresPlaysPokemon

More Related Content

What's hot

Using Python3 to Build a Cloud Computing Service for my Superboard II
Using Python3 to Build a Cloud Computing Service for my Superboard IIUsing Python3 to Build a Cloud Computing Service for my Superboard II
Using Python3 to Build a Cloud Computing Service for my Superboard IIDavid Beazley (Dabeaz LLC)
 
PyCon 2013 : Scripting to PyPi to GitHub and More
PyCon 2013 : Scripting to PyPi to GitHub and MorePyCon 2013 : Scripting to PyPi to GitHub and More
PyCon 2013 : Scripting to PyPi to GitHub and MoreMatt Harrison
 
Introduction to Python and TensorFlow
Introduction to Python and TensorFlowIntroduction to Python and TensorFlow
Introduction to Python and TensorFlowBayu Aldi Yansyah
 
Python于Web 2.0网站的应用 - QCon Beijing 2010
Python于Web 2.0网站的应用 - QCon Beijing 2010Python于Web 2.0网站的应用 - QCon Beijing 2010
Python于Web 2.0网站的应用 - QCon Beijing 2010Qiangning Hong
 
Artificial Neural Network in a Tic Tac Toe Symfony Console Application - Symf...
Artificial Neural Network in a Tic Tac Toe Symfony Console Application - Symf...Artificial Neural Network in a Tic Tac Toe Symfony Console Application - Symf...
Artificial Neural Network in a Tic Tac Toe Symfony Console Application - Symf...aferrandini
 
Python and sysadmin I
Python and sysadmin IPython and sysadmin I
Python and sysadmin IGuixing Bai
 
Euro python2011 High Performance Python
Euro python2011 High Performance PythonEuro python2011 High Performance Python
Euro python2011 High Performance PythonIan Ozsvald
 
Why Python (for Statisticians)
Why Python (for Statisticians)Why Python (for Statisticians)
Why Python (for Statisticians)Matt Harrison
 
SPL to the Rescue - Tek 09
SPL to the Rescue - Tek 09SPL to the Rescue - Tek 09
SPL to the Rescue - Tek 09Elizabeth Smith
 
Introduction to advanced python
Introduction to advanced pythonIntroduction to advanced python
Introduction to advanced pythonCharles-Axel Dein
 
F# delight
F# delightF# delight
F# delightpriort
 
Functional Programming & Event Sourcing - a pair made in heaven
Functional Programming & Event Sourcing - a pair made in heavenFunctional Programming & Event Sourcing - a pair made in heaven
Functional Programming & Event Sourcing - a pair made in heavenPawel Szulc
 
Geeks Anonymes - Le langage Go
Geeks Anonymes - Le langage GoGeeks Anonymes - Le langage Go
Geeks Anonymes - Le langage GoGeeks Anonymes
 
Introduction to python
Introduction to pythonIntroduction to python
Introduction to pythonAhmed Salama
 

What's hot (20)

Strings
StringsStrings
Strings
 
Using Python3 to Build a Cloud Computing Service for my Superboard II
Using Python3 to Build a Cloud Computing Service for my Superboard IIUsing Python3 to Build a Cloud Computing Service for my Superboard II
Using Python3 to Build a Cloud Computing Service for my Superboard II
 
PyCon 2013 : Scripting to PyPi to GitHub and More
PyCon 2013 : Scripting to PyPi to GitHub and MorePyCon 2013 : Scripting to PyPi to GitHub and More
PyCon 2013 : Scripting to PyPi to GitHub and More
 
Introduction to Python and TensorFlow
Introduction to Python and TensorFlowIntroduction to Python and TensorFlow
Introduction to Python and TensorFlow
 
Python于Web 2.0网站的应用 - QCon Beijing 2010
Python于Web 2.0网站的应用 - QCon Beijing 2010Python于Web 2.0网站的应用 - QCon Beijing 2010
Python于Web 2.0网站的应用 - QCon Beijing 2010
 
Functions
FunctionsFunctions
Functions
 
Artificial Neural Network in a Tic Tac Toe Symfony Console Application - Symf...
Artificial Neural Network in a Tic Tac Toe Symfony Console Application - Symf...Artificial Neural Network in a Tic Tac Toe Symfony Console Application - Symf...
Artificial Neural Network in a Tic Tac Toe Symfony Console Application - Symf...
 
Python and sysadmin I
Python and sysadmin IPython and sysadmin I
Python and sysadmin I
 
Euro python2011 High Performance Python
Euro python2011 High Performance PythonEuro python2011 High Performance Python
Euro python2011 High Performance Python
 
Java Full Throttle
Java Full ThrottleJava Full Throttle
Java Full Throttle
 
Why Python (for Statisticians)
Why Python (for Statisticians)Why Python (for Statisticians)
Why Python (for Statisticians)
 
SPL to the Rescue - Tek 09
SPL to the Rescue - Tek 09SPL to the Rescue - Tek 09
SPL to the Rescue - Tek 09
 
Introduction to advanced python
Introduction to advanced pythonIntroduction to advanced python
Introduction to advanced python
 
Intro to Python
Intro to PythonIntro to Python
Intro to Python
 
F# delight
F# delightF# delight
F# delight
 
Functional Programming & Event Sourcing - a pair made in heaven
Functional Programming & Event Sourcing - a pair made in heavenFunctional Programming & Event Sourcing - a pair made in heaven
Functional Programming & Event Sourcing - a pair made in heaven
 
Lists
ListsLists
Lists
 
Geeks Anonymes - Le langage Go
Geeks Anonymes - Le langage GoGeeks Anonymes - Le langage Go
Geeks Anonymes - Le langage Go
 
Interpreter, Compiler, JIT from scratch
Interpreter, Compiler, JIT from scratchInterpreter, Compiler, JIT from scratch
Interpreter, Compiler, JIT from scratch
 
Introduction to python
Introduction to pythonIntroduction to python
Introduction to python
 

Similar to Postgres plays pokemon

Programming simple games with a raspberry pi and
Programming simple games with a raspberry pi andProgramming simple games with a raspberry pi and
Programming simple games with a raspberry pi andKellyn Pot'Vin-Gorman
 
Software to the slaughter
Software to the slaughterSoftware to the slaughter
Software to the slaughterQuinn Wilton
 
ScotRuby - Dark side of ruby
ScotRuby - Dark side of rubyScotRuby - Dark side of ruby
ScotRuby - Dark side of rubyGautam Rege
 
F# in the real world (NDC)
F# in the real world (NDC)F# in the real world (NDC)
F# in the real world (NDC)Yan Cui
 
F# in social gaming by Yan Cui at Codemotion Dubai
F# in social gaming by Yan Cui at Codemotion DubaiF# in social gaming by Yan Cui at Codemotion Dubai
F# in social gaming by Yan Cui at Codemotion DubaiCodemotion Dubai
 
F# in the real world (CodeMotion Dubai)
F# in the real world (CodeMotion Dubai)F# in the real world (CodeMotion Dubai)
F# in the real world (CodeMotion Dubai)Yan Cui
 
#Julialang and Computer Shogi (Japanese Chess)
#Julialang and Computer Shogi (Japanese Chess)#Julialang and Computer Shogi (Japanese Chess)
#Julialang and Computer Shogi (Japanese Chess)Takeshi Kimura
 
iOS 개발자의 Flutter 체험기
iOS 개발자의 Flutter 체험기iOS 개발자의 Flutter 체험기
iOS 개발자의 Flutter 체험기Wanbok Choi
 
The Challenge of Bringing FEZ to PlayStation Platforms
The Challenge of Bringing FEZ to PlayStation PlatformsThe Challenge of Bringing FEZ to PlayStation Platforms
The Challenge of Bringing FEZ to PlayStation PlatformsMiguel Angel Horna
 
Decorators in Python
Decorators in PythonDecorators in Python
Decorators in PythonBen James
 
Max Koretskyi "Why are Angular and React so fast?"
Max Koretskyi "Why are Angular and React so fast?"Max Koretskyi "Why are Angular and React so fast?"
Max Koretskyi "Why are Angular and React so fast?"Fwdays
 
Agile Iphone Development
Agile Iphone DevelopmentAgile Iphone Development
Agile Iphone DevelopmentGiordano Scalzo
 
F# in the Real World (DDD EA)
F# in the Real World (DDD EA)F# in the Real World (DDD EA)
F# in the Real World (DDD EA)Yan Cui
 
LLVM Register Allocation (2nd Version)
LLVM Register Allocation (2nd Version)LLVM Register Allocation (2nd Version)
LLVM Register Allocation (2nd Version)Wang Hsiangkai
 
COG Back to the Future, Part II
COG Back to the Future, Part IICOG Back to the Future, Part II
COG Back to the Future, Part IIESUG
 
Refactor legacy code through pure functions
Refactor legacy code through pure functionsRefactor legacy code through pure functions
Refactor legacy code through pure functionsAlexandru Bolboaca
 
Zn task - defcon russia 20
Zn task  - defcon russia 20Zn task  - defcon russia 20
Zn task - defcon russia 20DefconRussia
 
F# at GameSys
F# at GameSysF# at GameSys
F# at GameSysYan Cui
 

Similar to Postgres plays pokemon (20)

Programming simple games with a raspberry pi and
Programming simple games with a raspberry pi andProgramming simple games with a raspberry pi and
Programming simple games with a raspberry pi and
 
Software to the slaughter
Software to the slaughterSoftware to the slaughter
Software to the slaughter
 
ScotRuby - Dark side of ruby
ScotRuby - Dark side of rubyScotRuby - Dark side of ruby
ScotRuby - Dark side of ruby
 
F# in the real world (NDC)
F# in the real world (NDC)F# in the real world (NDC)
F# in the real world (NDC)
 
F# in social gaming by Yan Cui at Codemotion Dubai
F# in social gaming by Yan Cui at Codemotion DubaiF# in social gaming by Yan Cui at Codemotion Dubai
F# in social gaming by Yan Cui at Codemotion Dubai
 
F# in the real world (CodeMotion Dubai)
F# in the real world (CodeMotion Dubai)F# in the real world (CodeMotion Dubai)
F# in the real world (CodeMotion Dubai)
 
#Julialang and Computer Shogi (Japanese Chess)
#Julialang and Computer Shogi (Japanese Chess)#Julialang and Computer Shogi (Japanese Chess)
#Julialang and Computer Shogi (Japanese Chess)
 
iOS 개발자의 Flutter 체험기
iOS 개발자의 Flutter 체험기iOS 개발자의 Flutter 체험기
iOS 개발자의 Flutter 체험기
 
The Challenge of Bringing FEZ to PlayStation Platforms
The Challenge of Bringing FEZ to PlayStation PlatformsThe Challenge of Bringing FEZ to PlayStation Platforms
The Challenge of Bringing FEZ to PlayStation Platforms
 
Decorators in Python
Decorators in PythonDecorators in Python
Decorators in Python
 
Max Koretskyi "Why are Angular and React so fast?"
Max Koretskyi "Why are Angular and React so fast?"Max Koretskyi "Why are Angular and React so fast?"
Max Koretskyi "Why are Angular and React so fast?"
 
Agile Iphone Development
Agile Iphone DevelopmentAgile Iphone Development
Agile Iphone Development
 
runtimestack
runtimestackruntimestack
runtimestack
 
F# in the Real World (DDD EA)
F# in the Real World (DDD EA)F# in the Real World (DDD EA)
F# in the Real World (DDD EA)
 
LLVM Register Allocation (2nd Version)
LLVM Register Allocation (2nd Version)LLVM Register Allocation (2nd Version)
LLVM Register Allocation (2nd Version)
 
COG Back to the Future, Part II
COG Back to the Future, Part IICOG Back to the Future, Part II
COG Back to the Future, Part II
 
Refactor legacy code through pure functions
Refactor legacy code through pure functionsRefactor legacy code through pure functions
Refactor legacy code through pure functions
 
Zn task - defcon russia 20
Zn task  - defcon russia 20Zn task  - defcon russia 20
Zn task - defcon russia 20
 
F# at GameSys
F# at GameSysF# at GameSys
F# at GameSys
 
Python Puzzlers
Python PuzzlersPython Puzzlers
Python Puzzlers
 

More from Liz Frost

EZRust: Z80 for the Web
EZRust: Z80 for the WebEZRust: Z80 for the Web
EZRust: Z80 for the WebLiz Frost
 
Kubernetes from a Box Mix
Kubernetes from a Box MixKubernetes from a Box Mix
Kubernetes from a Box MixLiz Frost
 
You got database in my cloud!
You got database  in my cloud!You got database  in my cloud!
You got database in my cloud!Liz Frost
 
CGo for fun and profit
CGo for fun and profitCGo for fun and profit
CGo for fun and profitLiz Frost
 
Kubeadm Deep Dive (Kubecon Seattle 2018)
Kubeadm Deep Dive (Kubecon Seattle 2018)Kubeadm Deep Dive (Kubecon Seattle 2018)
Kubeadm Deep Dive (Kubecon Seattle 2018)Liz Frost
 
You got database in my cloud (short version)
You got database  in my cloud (short version)You got database  in my cloud (short version)
You got database in my cloud (short version)Liz Frost
 

More from Liz Frost (6)

EZRust: Z80 for the Web
EZRust: Z80 for the WebEZRust: Z80 for the Web
EZRust: Z80 for the Web
 
Kubernetes from a Box Mix
Kubernetes from a Box MixKubernetes from a Box Mix
Kubernetes from a Box Mix
 
You got database in my cloud!
You got database  in my cloud!You got database  in my cloud!
You got database in my cloud!
 
CGo for fun and profit
CGo for fun and profitCGo for fun and profit
CGo for fun and profit
 
Kubeadm Deep Dive (Kubecon Seattle 2018)
Kubeadm Deep Dive (Kubecon Seattle 2018)Kubeadm Deep Dive (Kubecon Seattle 2018)
Kubeadm Deep Dive (Kubecon Seattle 2018)
 
You got database in my cloud (short version)
You got database  in my cloud (short version)You got database  in my cloud (short version)
You got database in my cloud (short version)
 

Recently uploaded

Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)OPEN KNOWLEDGE GmbH
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfkalichargn70th171
 
Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...aditisharan08
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...ICS
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...stazi3110
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfjoe51371421
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantAxelRicardoTrocheRiq
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationkaushalgiri8080
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackVICTOR MAESTRE RAMIREZ
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...gurkirankumar98700
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptkotipi9215
 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...Christina Lin
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...OnePlan Solutions
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...MyIntelliSource, Inc.
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio, Inc.
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providermohitmore19
 

Recently uploaded (20)

Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
 
Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdf
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service Consultant
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanation
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStack
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.ppt
 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
 
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 

Postgres plays pokemon