SlideShare uma empresa Scribd logo
1 de 151
Globalcode – Open4education
Trilha – Ruby
Guilherme Baptista
Globalcode – Open4education
10 anos deixando linhas de
código por aí em lugares como:
Globalcode – Open4education
Stack Level too Deep
Tail Call Optimization
É uma boa ideia fazer recursão em Ruby?
Familiar
?
file.rb:10:in `call':
stack level too deep
(SystemStackError)
from file.rb:10:in `<main>'
Qual o
significado?file.rb:10:in `call':
stack level too deep
(SystemStackError)
from file.rb:10:in `<main>'
Qual o
significado?file.rb:10:in `call':
stack level too deep
(SystemStackError)
from file.rb:10:in `<main>'
stack
overflow?
file.rb:10:in `call':
stack level too deep
(SystemStackError)
from file.rb:10:in `<main>'
stack
overflow?
?
file.rb:10:in `call':
stack level too deep
(SystemStackError)
from file.rb:10:in `<main>'
O que
é?
É uma “proteção”
contra loops
infinitos?
É uma “proteção”
contra loops
infinitos?
É uma “proteção”
contra loops
infinitos?
É uma “proteção”
contra loops
infinitos?
É uma “proteção”
contra loops
infinitos?
É um erro causado
por uso de
memória em
excesso?
É um erro causado por
uso de memória em
excesso?
É um erro causado por
uso de memória em
excesso?
É um erro causado por
uso de memória em
excesso?
file.rb:8:in `<main>':
failed to allocate memory
(NoMemoryError)
Bônus: Uma linha
para acabar com a
memória RAM em
segundos:
Obs.: Não rodar no irb do seu servidor em produção...
#fikdik
É uma “proteção”
para não deixar um
método chamar a si
mesmo?
É uma “proteção”
para não deixar um
método chamar a si
mesmo?
É uma “proteção”
para não deixar um
método chamar a si
mesmo?
Done
!
É uma “proteção” para
não deixar um método
chamar a si mesmo
muitas vezes?
É uma “proteção” para
não deixar um método
chamar a si mesmo
muitas vezes?
É uma “proteção” para
não deixar um método
chamar a si mesmo
muitas vezes?
Done
!
É uma “proteção” para não
deixar um método chamar
a si mesmo
infinitamente?
É uma “proteção” para não deixar um
método chamar a si mesmo
infinitamente?
file.rb:2:in `me_myself_and_i':
stack level too deep
(SystemStackError)
from file.rb:2:in
`me_myself_and_i'
from file.rb:2:in
`me_myself_and_i'
from file.rb:2:in
`me_myself_and_i'
from file.rb:2:in
`me_myself_and_i'
... 11901 levels...
from file.rb:2:in
Será?
5
1 + 1 + 1 + 1
+ 1
5
1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 +
1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 +
1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 +
1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 +
1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 +
1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 +
1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 +
1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 +
1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 +
1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 +
2000
0
2000
0
file.rb:7:in `eval':
stack level too deep
(SystemStackError)
from file.rb:7:in `<main>'
É uma “proteção” para não deixar um
método chamar a si mesmo
infinitamente?
file.rb:7:in `eval':
stack level too deep
(SystemStackError)
from file.rb:7:in `<main>'
Pode não ser bem isso...
Vamos falar sobre pilha:
Stack
(abstract data type)
LIFO: last-in, first-out
(o último que entra é o primeiro que sai)
Stack (LIFO: last-in, first-out)
Stac
k
Stack (LIFO: last-in, first-out)
Stack (LIFO: last-in, first-out)
Stack (LIFO: last-in, first-out)
Stack (LIFO: last-in, first-out)
Stack (LIFO: last-in, first-out)
Stack (LIFO: last-in, first-out)
Stack (LIFO: last-in, first-out)
Em Ruby tudo é objeto.
RubyVM::InstructionSequence
RubyVM::InstructionSequence.of
Proc
Ou
method
Ruby Code
down to
VM Instructions
YARBx02x00x00x00x03x00x00x00rx02x00x00x00x00x00x00x01x00
x00x00x02x00x00x00x04x00x00x00xF9x01x00x00xFDx01x00x00bx
02x00x00x86_64-
linuxx00*x00x00x00x00x00x00x00bx00x00x00x00x00x00x00*x00
x00x00x00x00x00x00x01x00x00x00x00x00x00x00Zx00x00x00x00x
00x00x00Zx00x00x00x00x00x00x00;x00x00x00x00x00x00x00x00x
00x00x00x00x00x00x00x00x00x00x00x00x00x00x00Zx00x00x00x0
0x00x00x00;x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00
x00x00x00x00x00x00x00x00Zx00x00x00x00x00x00x00;x00x00x00
x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x
00x00*x00x00x00x00x00x00x00x10x00x00x00x00x00x00x001x00x
00x00x00x00x00x00x00x00x00x00vx00x00x00x02x00x00x00rx00
x00x00x11x00x00x00x0Fx00x00x00x13x00x00x00rx00x00x00x01
x00x00x00x00x00x00x00x10x00x00x00x01x00x00x00x01x00x00x
00x00x00x00x00x10x00x00x00x01x00x00x00x01x00x00x00x00x00
x00x00x10x00x00x00x01x00x00x00x01x00x00x00x02x00x00x00x
01x00x00x00x14x00x00x009x00x00x00x00x00x00x00x00x00x00x0
0x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00
x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x0
0x00x00x00x00x00x00x00x01x00x00x00x00x00x00x00x01x00x00
x00x00x00x00x00x02x00x00x00x00x00x00x00x02x00x00x00x00x0
0x00x00x17x00x00x00x00x00x00x00xD9x00x00x00x00x00x00x00
xF9x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00xFFxFFxF
FxFFxFFxFFxFFxFFx00x00x00x00x00x00x00x00x00x00x00x00x00
x00x00x00xF9x00x00x00x00x00x00x00x00x00x00x00x00x00x00x0
0x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x03x00
x00x00x00x00x00x00x04x00x00x00x00x00x00x00)x01x00x00x00x
00x00x00x00x00x00x00x03x00x00x00x00x00x00x00xF1x00x00x00
== disasm:
#<ISeq:the_sum@(irb)>==================================
0000 trace 8
( 54)
0002 trace 1
( 55)
0004 putobject_OP_INT2FIX_O_1_C_
0005 putobject_OP_INT2FIX_O_1_C_
0006 opt_plus <callinfo!mid:+, argc:1, ARGS_SIM
<callcache>
0009 putobject_OP_INT2FIX_O_1_C_
0010 opt_plus <callinfo!mid:+, argc:1, ARGS_SIM
<callcache>
0013 putobject_OP_INT2FIX_O_1_C_
0014 opt_plus <callinfo!mid:+, argc:1, ARGS_SIM
<callcache>
0017 trace 16
putobject_OP_INT2FIX_O_1_C_
putobject_OP_INT2FIX_O_1_C_
opt_plus <callinfo!mid:+,
argc:1…
putobject_OP_INT2FIX_O_1_C_
opt_plus <callinfo!mid:+,
argc:1…
putobject_OP_INT2FIX_O_1_C_
opt_plus <callinfo!mid:+,
argc:1...
putobject_OP_INT2FIX_O_1_C_
putobject_OP_INT2FIX_O_1_C_
putobject_OP_INT2FIX_O_1_C_
putobject_OP_INT2FIX_O_1_C_
opt_plus <callinfo!mid:+,
argc:1…
opt_plus <callinfo!mid:+,
argc:1…
opt_plus <callinfo!mid:+,
argc:1...
putobject_OP_INT2FIX_O_1_C_
putobject_OP_INT2FIX_O_1_C_
opt_plus <callinfo!mid:+,
argc:1…
putobject_OP_INT2FIX_O_1_C_
opt_plus <callinfo!mid:+,
argc:1…
putobject_OP_INT2FIX_O_1_C_
opt_plus <callinfo!mid:+,
argc:1...
putobject_OP_INT2FIX_O_1_C_
putobject_OP_INT2FIX_O_1_C_
opt_plus <callinfo!mid:+,
argc:1…
putobject_OP_INT2FIX_O_1_C_
opt_plus <callinfo!mid:+,
argc:1…
putobject_OP_INT2FIX_O_1_C_
opt_plus <callinfo!mid:+,
argc:1...
putobject_OP_INT2FIX_O_1_C_
putobject_OP_INT2FIX_O_1_C_
opt_plus <callinfo!mid:+,
argc:1…
putobject_OP_INT2FIX_O_1_C_
opt_plus <callinfo!mid:+,
argc:1…
putobject_OP_INT2FIX_O_1_C_
opt_plus <callinfo!mid:+,
argc:1...
putobject_OP_INT2FIX_O_1_C_
putobject_OP_INT2FIX_O_1_C_
opt_plus <callinfo!mid:+,
argc:1…
putobject_OP_INT2FIX_O_1_C_
opt_plus <callinfo!mid:+,
argc:1…
putobject_OP_INT2FIX_O_1_C_
opt_plus <callinfo!mid:+,
argc:1...
n1 > n2 > p1 > n3 > p2 >
n4 > p3
putobject_OP_INT2FIX_O_1_C_
putobject_OP_INT2FIX_O_1_C_
opt_plus <callinfo!mid:+,
argc:1…
putobject_OP_INT2FIX_O_1_C_
opt_plus <callinfo!mid:+,
argc:1…
putobject_OP_INT2FIX_O_1_C_
opt_plus <callinfo!mid:+,
argc:1...
n1 > n2 > p1 > n3 > p2 >
n4 > p3
putobject_OP_INT2FIX_O_1_C_
putobject_OP_INT2FIX_O_1_C_
opt_plus <callinfo!mid:+,
argc:1…
putobject_OP_INT2FIX_O_1_C_
opt_plus <callinfo!mid:+,
argc:1…
putobject_OP_INT2FIX_O_1_C_
opt_plus <callinfo!mid:+,
argc:1...
n1 > n2 > p1 > n3 > p2 >
n4 > p3
putobject_OP_INT2FIX_O_1_C_
putobject_OP_INT2FIX_O_1_C_
opt_plus <callinfo!mid:+,
argc:1…
putobject_OP_INT2FIX_O_1_C_
opt_plus <callinfo!mid:+,
argc:1…
putobject_OP_INT2FIX_O_1_C_
opt_plus <callinfo!mid:+,
argc:1...
n1 > n2 > p1 > n3 > p2 >
n4 > p3
putobject_OP_INT2FIX_O_1_C_
putobject_OP_INT2FIX_O_1_C_
opt_plus <callinfo!mid:+,
argc:1…
putobject_OP_INT2FIX_O_1_C_
opt_plus <callinfo!mid:+,
argc:1…
putobject_OP_INT2FIX_O_1_C_
opt_plus <callinfo!mid:+,
argc:1...
n1 > n2 > p1 > n3 > p2 >
n4 > p3
putobject_OP_INT2FIX_O_1_C_
putobject_OP_INT2FIX_O_1_C_
opt_plus <callinfo!mid:+,
argc:1…
putobject_OP_INT2FIX_O_1_C_
opt_plus <callinfo!mid:+,
argc:1…
putobject_OP_INT2FIX_O_1_C_
opt_plus <callinfo!mid:+,
argc:1...
n1 > n2 > p1 > n3 > p2 >
n4 > p3
putobject_OP_INT2FIX_O_1_C_
putobject_OP_INT2FIX_O_1_C_
opt_plus <callinfo!mid:+,
argc:1…
putobject_OP_INT2FIX_O_1_C_
opt_plus <callinfo!mid:+,
argc:1…
putobject_OP_INT2FIX_O_1_C_
opt_plus <callinfo!mid:+,
argc:1...
n1 > n2 > p1 > n3 > p2 >
n4 > p3
putobject_OP_INT2FIX_O_1_C_
putobject_OP_INT2FIX_O_1_C_
opt_plus <callinfo!mid:+,
argc:1…
putobject_OP_INT2FIX_O_1_C_
opt_plus <callinfo!mid:+,
argc:1…
putobject_OP_INT2FIX_O_1_C_
opt_plus <callinfo!mid:+,
argc:1...
n1 > n2 > p1 > n3 > p2 >
n4 > p3
Recursão?
Recursão:
Capacidade que uma rotina
(função ou método) possui
de invocar a si mesma.
Recursão:
Condição de
parada:
Hi
Fulano!
Hi
Fulano!
Hi
Fulano!
Recursão vs
Iteração
Como contar a
quantidade de
itens em uma
lista?
Array
:
Iteração
:
Iteração
:
Array
:
4
Array
:
4
Iteração
:
Iteração
:Array
:
4
Iteração
:
Array
:
4
Transformar todas
as letras em
maiúsculas:
["A", "B", "C",
Mas no dia a dia não
fazemos exatamente
assim...
Como realmente fazemos:
E com recursão?
Head / Tail
“A”
Hea
d
Tail
“B”
Hea
d
“A”
Hea
d
Tail
“A”
Hea
d
Tail
“A”
Hea
d
Tail
Como contar a
quantidade de
itens em uma
lista?
count(["A", "B", "C",
"D"])
count(["B", "C", "D"])
count(["C", "D"])
count(["D"])
count([])
1 + count(["B", "C",
"D"])
1 + 1 + count(["D",
"D"])
1 + 1 + 1 +
count(["D"])
1 + 1 + 1 + 1 +
count([])
1 + 1 + 1 + 1 + 0
4
Como somar todos
os itens de uma
lista?
1 + sum([2, 2, 2])
1 + 2 + sum([2, 2])
1 + 2 + 2 + sum([2])
1 + 2 + 2 + 2 + sum([])
1 + 2 + 2 + 2 + 0
7
E por aí vai...
Stack Overflow
Stack Overflow
1 + count(["B", "C", "D"])
1 + count(["C", "D"])
1 + count(["D"])
1 + count([])
0
Tamanho do
seu Stack
Stack Overflow
1 + count(["B", "C", "D"])
1 + count(["C", "D"])
1 + count(["D"])
1 + count([])
0
Stack
Overflow
Stack Overflow
1 + count(["B", "C", "D"])
1 + count(["C", "D"])
1 + count(["D"])
1 + count([])
0
stack level too
deep
(SystemStackErro
r)
Stack Overflow
file.rb:7:in `eval':
stack level too deep
(SystemStackError)
from file.rb:7:in `<main>'
Stack Overflow
stack level too
deep
(SystemStackErro
r)
s
1 +
1 +
1 +
1 +
1 +
1 +
1 +
1 +
1 +
1 +
1 +
1 +
1 +
E aí?
Opção 1:
Aumentar o tamanho do
Stack
ulimit -all
core file size (blocks, -c) 0
data seg size (kbytes, -d)
unlimited
scheduling priority (-e) 0
file size (blocks, -f)
unlimited
pending signals (-i)
31321
max locked memory (kbytes, -l)
64
max memory size (kbytes, -m)
unlimited
open files (-n)
1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q)
819200
RubyVM::DEFAULT_PA
RAMS
{
thread_vm_stack_size:
1048576,
thread_machine_stack_size:
1048576,
fiber_vm_stack_size: 131072,
fiber_machine_stack_size:
524288
Opção 2:
Tail Call Optimization
c
Tail Call
Optimization
1 + count(["B", "C", "D"])
1 + count(["C", "D"])
1 + count(["D"])
1 + count([])
0
stack level too
deep
(SystemStackErro
r)
c
Tail Call
Optimizationcount(["A", "B", "C", "D"],
0)
count(["B", "C", "D"], 1)
count(["C", "D"], 2)
count(["D"], 3)
count([], 4)
4
Tamanho do
seu Stack
Reaproveitament
o do seu Stack
file.rb:11:in `count':
stack level too deep
(SystemStackError)
from file.rb:11:in `count'
from file.rb:11:in `count'
from file.rb:11:in `count'
from file.rb:11:in `count'
from file.rb:11:in `count'
from file.rb:11:in `count'
from file.rb:11:in `count'
from file.rb:11:in `count'
... 8723 levels...
from file.rb:11:in `count'
from file.rb:11:in `count'
from file.rb:11:in `count'
from file.rb:17:in `<main>'
Precisamos compilar o
nosso código com
instruções específicas
para a RubyVM / YARV
== disasm: #<ISeq:count@ppt/tco.rb>=============================
local table (size: 5, argc: 1 [opts: 1, rest: -1, post: 0, block
kwrest: -1])
[ 5] list<Arg> [ 4] acc<Opt=0> [ 3] head [ 2] tail
0000 putobject_OP_INT2FIX_O_0_C_
0001 setlocal_OP__WC__0 4
0003 trace 8
0005 trace 1
0007 getlocal_OP__WC__0 5
0009 opt_empty_p <callinfo!mid:empty?, argc:0, ARGS_SIMPLE>
0012 branchunless 21
0014 nop
0015 nop
0016 getlocal_OP__WC__0 4
0018 trace 16
0020 leave
0021 trace 1
0023 getlocal_OP__WC__0 5
0025 opt_send_without_block <callinfo!mid:shift, argc:0, ARGS_SI
0028 setlocal_OP__WC__0 3
0030 trace 1
0032 getlocal_OP__WC__0 5
0034 setlocal_OP__WC__0 2
== disasm: #<ISeq:count@ppt/tco.rb>=============================
local table (size: 5, argc: 1 [opts: 1, rest: -1, post: 0, block
kwrest: -1])
[ 5] list<Arg> [ 4] accc<Opt=0> [ 3] head [ 2] tail
0000 putobject_OP_INT2FIX_O_0_C_
0001 setlocal_OP__WC__0 4
0003 trace 8
0005 trace 1
0007 getlocal_OP__WC__0 5
0009 opt_empty_p <callinfo!mid:empty?, argc:0, ARGS_SIMPLE>
0012 branchunless 21
0014 nop
0015 nop
0016 getlocal_OP__WC__0 4
0018 trace 16
0020 leave
0021 trace 1
0023 getlocal_OP__WC__0 5
0025 opt_send_without_block <callinfo!mid:shift, argc:0, ARGS_SI
0028 setlocal_OP__WC__0 3
0030 trace 1
0032 getlocal_OP__WC__0 5
0034 setlocal_OP__WC__0 2
Acompanhar eventos
durante a execução do
código internamente na
VM
stackprof
ruby-prof
trace + tail call
optimization
=
== disasm: #<ISeq:count@<compiled>>===============================
local table (size: 5, argc: 1 [opts: 1, rest: -1, post: 0, block:
kwrest: -1])
[ 5] list<Arg> [ 4] acc<Opt=0> [ 3] head [ 2] tail
0000 putobject_OP_INT2FIX_O_0_C_
0001 setlocal_OP__WC__0 4
0003 getlocal_OP__WC__0 5
0005 opt_empty_p <callinfo!mid:empty?, argc:0, ARGS_SIMPLE>,
0008 branchunless 15
0010 nop
0011 nop
0012 getlocal_OP__WC__0 4
0014 leave
0015 getlocal_OP__WC__0 5
0017 opt_send_without_block <callinfo!mid:shift, argc:0, ARGS_SIMP
0020 setlocal_OP__WC__0 3
0022 getlocal_OP__WC__0 5
0024 setlocal_OP__WC__0 2
0026 putself
0027 getlocal_OP__WC__0 2
0029 getlocal_OP__WC__0 4
0031 putobject_OP_INT2FIX_O_1_C_
0032 opt_plus <callinfo!mid:+, argc:1, ARGS_SIMPLE>, <call
0035 opt_send_without_block <callinfo!mid:count, argc:2, FCALL|ARG
0008 branchunless 15
0010 nop
0011 nop
0012 getlocal_OP__WC__0 4
0014 leave
0015 getlocal_OP__WC__0 5
0017 opt_send_without_block <callinfo!mid:shift, argc:0, ARGS_SIMP
0020 setlocal_OP__WC__0 3
0022 getlocal_OP__WC__0 5
0024 setlocal_OP__WC__0 2
0026 putself
0027 getlocal_OP__WC__0 2
0029 getlocal_OP__WC__0 4
0031 putobject_OP_INT2FIX_O_1_C_
0032 opt_plus <callinfo!mid:+, argc:1, ARGS_SIMPLE>, <call
0035 opt_send_without_block <callinfo!mid:count, argc:2, FCALL|ARG
<callcache>
0038 leave
0008 branchunless 15
0010 nop
0011 nop
0012 getlocal_OP__WC__0 4
0014 leave
0015 getlocal_OP__WC__0 5
0017 opt_send_without_block <callinfo!mid:shift, argc:0, ARGS_SIMP
0020 setlocal_OP__WC__0 3
0022 getlocal_OP__WC__0 5
0024 setlocal_OP__WC__0 2
0026 putself
0027 getlocal_OP__WC__0 2
0029 getlocal_OP__WC__0 4
0031 putobject_OP_INT2FIX_O_1_C_
0032 opt_plus <callinfo!mid:+, argc:1, ARGS_SIMPLE>, <call
0035 opt_send_without_block <callinfo!mid:count, argc:2, FCALL|ARG
<callcache>
0038 leave
== disasm: #<ISeq:count@<compiled>>===============================
local table (size: 5, argc: 1 [opts: 1, rest: -1, post: 0, block:
kwrest: -1])
[ 5] list<Arg> [ 4] acc<Opt=0> [ 3] head [ 2] tail
0000 putobject_OP_INT2FIX_O_0_C_
0001 setlocal_OP__WC__0 4
0003 getlocal_OP__WC__0 5
0005 opt_empty_p <callinfo!mid:empty?, argc:0, ARGS_SIMPLE>,
0008 branchunless 15
0010 nop
0011 nop
0012 getlocal_OP__WC__0 4
0014 leave
0015 getlocal_OP__WC__0 5
0017 opt_send_without_block <callinfo!mid:shift, argc:0, ARGS_SIMP
0020 setlocal_OP__WC__0 3
0022 getlocal_OP__WC__0 5
0024 setlocal_OP__WC__0 2
0026 putself
0027 getlocal_OP__WC__0 2
0029 getlocal_OP__WC__0 4
0031 putobject_OP_INT2FIX_O_1_C_
0032 opt_plus <callinfo!mid:+, argc:1, ARGS_SIMPLE>, <call
0035 opt_send_without_block <callinfo!mid:count, argc:2, FCALL|TAI
ess 15
OP__WC__0 4
OP__WC__0 5 ( 5)
without_block <callinfo!mid:shift, argc:0, ARGS_SIMPLE>, <callcache
OP__WC__0 3
OP__WC__0 5 ( 6)
OP__WC__0 2
( 8)
OP__WC__0 2
OP__WC__0 4
_OP_INT2FIX_O_1_C_
<callinfo!mid:+, argc:1, ARGS_SIMPLE>, <callcache>
without_block <callinfo!mid:count, argc:2, FCALL|TAILCALL|ARGS_SIMP
100000
0
Por
quê?
Mais rápido que iterar?
user system total
real
.each: 16.480000 0.000000 16.480000
( 16.492415)
recursion: 26.280000 0.380000 26.660000
Maior proximidade
com conceitos de
linguagens
funcionais
Considerada uma
forma elegante de
resolver problemas
Quicksort em C
utilizando
iteração
Quicksort em
Haskell utilizando
recursão
Maneira de lidar
com diferentes
estruturas de
dados
Listas Ligadas
Grafos
Árvores Binárias
Mais uma maneira de
resolver problemas e
entender os detalhes da
linguagem
Referências:
- RubyVM::InstructionSequence
http://ruby-doc.org/core-2.3.1/RubyVM/InstructionSequence.html
- Inline caching in MRI
http://tenderlovemaking.com/2015/12/23/inline-caching-in-mri.html
- Ruby, Trace, Leave, Oh my!
http://kgrz.io/2014/04/19/ruby-trace-leave-oh-my.html
Referências:
- Tail Call Optimization in Ruby
http://nithinbekal.com/posts/ruby-tco/
- Tailin' Ruby
http://timelessrepo.com/tailin-ruby
- Tail Call Optimization in Ruby: Deep Dive
http://blog.tdg5.com/tail-call-optimization-in-ruby-deep-dive/
Referências:
- TCOMethod
Simplifies compiling code with tail call optimization in MRI Ruby
https://github.com/tdg5/tco_method
- Hamster
Efficient, Immutable, Thread-Safe Collection classes for Ruby
https://github.com/hamstergem/hamster
- Functional Ruby
A gem for adding functional programming tools to Ruby. Inspired by
Erlang, Clojure, Haskell, and Functional Java.
https://github.com/jdantonio/functional-ruby
Obrigado!
gbaptista.com.br
Twitter: @guilhermebps
github.com/gbaptista
linkedin.com/in/guilhermebaptista

Mais conteúdo relacionado

Mais procurados

NTUSTxTDOH 資訊安全基礎工作坊 基礎逆向教育訓練
NTUSTxTDOH 資訊安全基礎工作坊 基礎逆向教育訓練NTUSTxTDOH 資訊安全基礎工作坊 基礎逆向教育訓練
NTUSTxTDOH 資訊安全基礎工作坊 基礎逆向教育訓練Sheng-Hao Ma
 
Code Vulnerabilities & Attacks
Code Vulnerabilities & AttacksCode Vulnerabilities & Attacks
Code Vulnerabilities & AttacksMarcus Botacin
 
BlockChain implementation by python
BlockChain implementation by pythonBlockChain implementation by python
BlockChain implementation by pythonwonyong hwang
 
Devel::NYTProf v5 at YAPC::NA 201406
Devel::NYTProf v5 at YAPC::NA 201406Devel::NYTProf v5 at YAPC::NA 201406
Devel::NYTProf v5 at YAPC::NA 201406Tim Bunce
 
PL/Perl - New Features in PostgreSQL 9.0
PL/Perl - New Features in PostgreSQL 9.0PL/Perl - New Features in PostgreSQL 9.0
PL/Perl - New Features in PostgreSQL 9.0Tim Bunce
 
PGCon 2014 - What Do You Mean my Database Server Core Dumped? - How to Inspec...
PGCon 2014 - What Do You Mean my Database Server Core Dumped? - How to Inspec...PGCon 2014 - What Do You Mean my Database Server Core Dumped? - How to Inspec...
PGCon 2014 - What Do You Mean my Database Server Core Dumped? - How to Inspec...Faisal Akber
 
TDOH x 台科 pwn課程
TDOH x 台科 pwn課程TDOH x 台科 pwn課程
TDOH x 台科 pwn課程Weber Tsai
 
FreeBSD on Cavium ThunderX System on a Chip
FreeBSD on Cavium ThunderX System on a ChipFreeBSD on Cavium ThunderX System on a Chip
FreeBSD on Cavium ThunderX System on a ChipSemihalf
 
TDOH 南區 WorkShop 2016 Reversing on Windows
TDOH 南區 WorkShop 2016 Reversing on WindowsTDOH 南區 WorkShop 2016 Reversing on Windows
TDOH 南區 WorkShop 2016 Reversing on WindowsSheng-Hao Ma
 
Introduzione ai network penetration test secondo osstmm
Introduzione ai network penetration test secondo osstmmIntroduzione ai network penetration test secondo osstmm
Introduzione ai network penetration test secondo osstmmSimone Onofri
 
NTUSTxTDOH - Pwn基礎 2015/12/27
NTUSTxTDOH - Pwn基礎 2015/12/27NTUSTxTDOH - Pwn基礎 2015/12/27
NTUSTxTDOH - Pwn基礎 2015/12/27Sheng-Hao Ma
 
Эксплуатируем неэксплуатируемые уязвимости SAP
Эксплуатируем неэксплуатируемые уязвимости SAPЭксплуатируем неэксплуатируемые уязвимости SAP
Эксплуатируем неэксплуатируемые уязвимости SAPPositive Hack Days
 
An (abridged) Ruby Plumber's Guide to *nix
An (abridged) Ruby Plumber's Guide to *nixAn (abridged) Ruby Plumber's Guide to *nix
An (abridged) Ruby Plumber's Guide to *nixEleanor McHugh
 
Perl at SkyCon'12
Perl at SkyCon'12Perl at SkyCon'12
Perl at SkyCon'12Tim Bunce
 
Generator Tricks for Systems Programmers
Generator Tricks for Systems ProgrammersGenerator Tricks for Systems Programmers
Generator Tricks for Systems ProgrammersHiroshi Ono
 
Simplest-Ownage-Human-Observed… - Routers
 Simplest-Ownage-Human-Observed… - Routers Simplest-Ownage-Human-Observed… - Routers
Simplest-Ownage-Human-Observed… - RoutersLogicaltrust pl
 
EWD 3トレーニングコース#24 GlobalストレージのJavaScript用抽象化-(e) ドキュメントの末端ノードを渡り歩く
EWD 3トレーニングコース#24 GlobalストレージのJavaScript用抽象化-(e) ドキュメントの末端ノードを渡り歩くEWD 3トレーニングコース#24 GlobalストレージのJavaScript用抽象化-(e) ドキュメントの末端ノードを渡り歩く
EWD 3トレーニングコース#24 GlobalストレージのJavaScript用抽象化-(e) ドキュメントの末端ノードを渡り歩くKiyoshi Sawada
 

Mais procurados (20)

NTUSTxTDOH 資訊安全基礎工作坊 基礎逆向教育訓練
NTUSTxTDOH 資訊安全基礎工作坊 基礎逆向教育訓練NTUSTxTDOH 資訊安全基礎工作坊 基礎逆向教育訓練
NTUSTxTDOH 資訊安全基礎工作坊 基礎逆向教育訓練
 
Code Vulnerabilities & Attacks
Code Vulnerabilities & AttacksCode Vulnerabilities & Attacks
Code Vulnerabilities & Attacks
 
Php Security
Php SecurityPhp Security
Php Security
 
BlockChain implementation by python
BlockChain implementation by pythonBlockChain implementation by python
BlockChain implementation by python
 
36 gotas de-sabiduria
36 gotas de-sabiduria36 gotas de-sabiduria
36 gotas de-sabiduria
 
Devel::NYTProf v5 at YAPC::NA 201406
Devel::NYTProf v5 at YAPC::NA 201406Devel::NYTProf v5 at YAPC::NA 201406
Devel::NYTProf v5 at YAPC::NA 201406
 
PL/Perl - New Features in PostgreSQL 9.0
PL/Perl - New Features in PostgreSQL 9.0PL/Perl - New Features in PostgreSQL 9.0
PL/Perl - New Features in PostgreSQL 9.0
 
PGCon 2014 - What Do You Mean my Database Server Core Dumped? - How to Inspec...
PGCon 2014 - What Do You Mean my Database Server Core Dumped? - How to Inspec...PGCon 2014 - What Do You Mean my Database Server Core Dumped? - How to Inspec...
PGCon 2014 - What Do You Mean my Database Server Core Dumped? - How to Inspec...
 
TDOH x 台科 pwn課程
TDOH x 台科 pwn課程TDOH x 台科 pwn課程
TDOH x 台科 pwn課程
 
FreeBSD on Cavium ThunderX System on a Chip
FreeBSD on Cavium ThunderX System on a ChipFreeBSD on Cavium ThunderX System on a Chip
FreeBSD on Cavium ThunderX System on a Chip
 
TDOH 南區 WorkShop 2016 Reversing on Windows
TDOH 南區 WorkShop 2016 Reversing on WindowsTDOH 南區 WorkShop 2016 Reversing on Windows
TDOH 南區 WorkShop 2016 Reversing on Windows
 
Introduzione ai network penetration test secondo osstmm
Introduzione ai network penetration test secondo osstmmIntroduzione ai network penetration test secondo osstmm
Introduzione ai network penetration test secondo osstmm
 
NTUSTxTDOH - Pwn基礎 2015/12/27
NTUSTxTDOH - Pwn基礎 2015/12/27NTUSTxTDOH - Pwn基礎 2015/12/27
NTUSTxTDOH - Pwn基礎 2015/12/27
 
Hotspot tools
Hotspot toolsHotspot tools
Hotspot tools
 
Эксплуатируем неэксплуатируемые уязвимости SAP
Эксплуатируем неэксплуатируемые уязвимости SAPЭксплуатируем неэксплуатируемые уязвимости SAP
Эксплуатируем неэксплуатируемые уязвимости SAP
 
An (abridged) Ruby Plumber's Guide to *nix
An (abridged) Ruby Plumber's Guide to *nixAn (abridged) Ruby Plumber's Guide to *nix
An (abridged) Ruby Plumber's Guide to *nix
 
Perl at SkyCon'12
Perl at SkyCon'12Perl at SkyCon'12
Perl at SkyCon'12
 
Generator Tricks for Systems Programmers
Generator Tricks for Systems ProgrammersGenerator Tricks for Systems Programmers
Generator Tricks for Systems Programmers
 
Simplest-Ownage-Human-Observed… - Routers
 Simplest-Ownage-Human-Observed… - Routers Simplest-Ownage-Human-Observed… - Routers
Simplest-Ownage-Human-Observed… - Routers
 
EWD 3トレーニングコース#24 GlobalストレージのJavaScript用抽象化-(e) ドキュメントの末端ノードを渡り歩く
EWD 3トレーニングコース#24 GlobalストレージのJavaScript用抽象化-(e) ドキュメントの末端ノードを渡り歩くEWD 3トレーニングコース#24 GlobalストレージのJavaScript用抽象化-(e) ドキュメントの末端ノードを渡り歩く
EWD 3トレーニングコース#24 GlobalストレージのJavaScript用抽象化-(e) ドキュメントの末端ノードを渡り歩く
 

Destaque

TDC2016POA | Trilha Web - Garanta a segurança de suas aplicações Web com Keyc...
TDC2016POA | Trilha Web - Garanta a segurança de suas aplicações Web com Keyc...TDC2016POA | Trilha Web - Garanta a segurança de suas aplicações Web com Keyc...
TDC2016POA | Trilha Web - Garanta a segurança de suas aplicações Web com Keyc...tdc-globalcode
 
TDC2016POA | Trilha Web - A essência do CSS
TDC2016POA | Trilha Web - A essência do CSSTDC2016POA | Trilha Web - A essência do CSS
TDC2016POA | Trilha Web - A essência do CSStdc-globalcode
 
Agilizando o desenvolvimento web com SASS
Agilizando o desenvolvimento web com SASSAgilizando o desenvolvimento web com SASS
Agilizando o desenvolvimento web com SASSRenato Galvão
 
Levando seu app do iOS para o macOS
Levando seu app do iOS para o macOSLevando seu app do iOS para o macOS
Levando seu app do iOS para o macOSGuilherme Rambo
 
TDC 2016 - Garantindo a qualidade da sua infraestrutura
TDC 2016 - Garantindo a qualidade da sua infraestruturaTDC 2016 - Garantindo a qualidade da sua infraestrutura
TDC 2016 - Garantindo a qualidade da sua infraestruturaFernanda Martins
 
TDC 2016 - Sass: CSS com super-poderes.
TDC 2016 - Sass: CSS com super-poderes.TDC 2016 - Sass: CSS com super-poderes.
TDC 2016 - Sass: CSS com super-poderes.Rodrigo Amora
 
TDC POA 2016 - Robotium + Cucumber + Gradle, misture com spoon e tenha uma ex...
TDC POA 2016 - Robotium + Cucumber + Gradle, misture com spoon e tenha uma ex...TDC POA 2016 - Robotium + Cucumber + Gradle, misture com spoon e tenha uma ex...
TDC POA 2016 - Robotium + Cucumber + Gradle, misture com spoon e tenha uma ex...João Clineu - CTFL, CSM, CSD
 
Como ensinei mais de 1000 testadores
Como ensinei mais de 1000 testadoresComo ensinei mais de 1000 testadores
Como ensinei mais de 1000 testadoresElias Nogueira
 
TDC2016POA | Trilha Web - Realtime applications com Socket.io
TDC2016POA | Trilha Web - Realtime applications com Socket.ioTDC2016POA | Trilha Web - Realtime applications com Socket.io
TDC2016POA | Trilha Web - Realtime applications com Socket.iotdc-globalcode
 
Apresentação tdc 2016 - trilha de testes
Apresentação tdc   2016 - trilha de testesApresentação tdc   2016 - trilha de testes
Apresentação tdc 2016 - trilha de testesSamuel Lucas
 
A transição de um QA tradicional para um Agile Tester
A transição de um QA tradicional para um Agile TesterA transição de um QA tradicional para um Agile Tester
A transição de um QA tradicional para um Agile TesterJéssica Mollo
 
TDC Floripa 2015 - Branding, UX e Marketing
TDC Floripa 2015 - Branding, UX e MarketingTDC Floripa 2015 - Branding, UX e Marketing
TDC Floripa 2015 - Branding, UX e Marketingleite08
 
Tdc 5 ideias para melhorar os seus testes
Tdc   5 ideias para melhorar os seus testesTdc   5 ideias para melhorar os seus testes
Tdc 5 ideias para melhorar os seus testesLindomar Peixinho Reitz
 
Ensinando e aprendendo com desafios
Ensinando e aprendendo com desafiosEnsinando e aprendendo com desafios
Ensinando e aprendendo com desafiosJônatas Paganini
 
TDC2016POA | Trilha Web - JSON API: não reinvente a roda
TDC2016POA | Trilha Web - JSON API: não reinvente a rodaTDC2016POA | Trilha Web - JSON API: não reinvente a roda
TDC2016POA | Trilha Web - JSON API: não reinvente a rodatdc-globalcode
 
TDC2016POA | Trilha Web - Realidade Virtual com WebVR
TDC2016POA | Trilha Web -  Realidade Virtual com WebVRTDC2016POA | Trilha Web -  Realidade Virtual com WebVR
TDC2016POA | Trilha Web - Realidade Virtual com WebVRtdc-globalcode
 
Estou desempregado e agora? Como me recolocar como QA.
Estou desempregado e agora? Como me recolocar como QA.Estou desempregado e agora? Como me recolocar como QA.
Estou desempregado e agora? Como me recolocar como QA.Robson Agapito Correa
 
Apresentação de Padrões de Design para Aplicativos Móveis.
Apresentação de Padrões de Design para Aplicativos Móveis.Apresentação de Padrões de Design para Aplicativos Móveis.
Apresentação de Padrões de Design para Aplicativos Móveis.Hewerson Freitas
 
TDC2016POA | Trilha Education - Jogos na Educação, onde estamos errando?
TDC2016POA | Trilha Education -  Jogos na Educação, onde estamos errando?TDC2016POA | Trilha Education -  Jogos na Educação, onde estamos errando?
TDC2016POA | Trilha Education - Jogos na Educação, onde estamos errando?tdc-globalcode
 
TDC2016POA | Trilha Empreendedorismo - Manual Prático do Empreendedorismo
TDC2016POA | Trilha Empreendedorismo - Manual Prático do EmpreendedorismoTDC2016POA | Trilha Empreendedorismo - Manual Prático do Empreendedorismo
TDC2016POA | Trilha Empreendedorismo - Manual Prático do Empreendedorismotdc-globalcode
 

Destaque (20)

TDC2016POA | Trilha Web - Garanta a segurança de suas aplicações Web com Keyc...
TDC2016POA | Trilha Web - Garanta a segurança de suas aplicações Web com Keyc...TDC2016POA | Trilha Web - Garanta a segurança de suas aplicações Web com Keyc...
TDC2016POA | Trilha Web - Garanta a segurança de suas aplicações Web com Keyc...
 
TDC2016POA | Trilha Web - A essência do CSS
TDC2016POA | Trilha Web - A essência do CSSTDC2016POA | Trilha Web - A essência do CSS
TDC2016POA | Trilha Web - A essência do CSS
 
Agilizando o desenvolvimento web com SASS
Agilizando o desenvolvimento web com SASSAgilizando o desenvolvimento web com SASS
Agilizando o desenvolvimento web com SASS
 
Levando seu app do iOS para o macOS
Levando seu app do iOS para o macOSLevando seu app do iOS para o macOS
Levando seu app do iOS para o macOS
 
TDC 2016 - Garantindo a qualidade da sua infraestrutura
TDC 2016 - Garantindo a qualidade da sua infraestruturaTDC 2016 - Garantindo a qualidade da sua infraestrutura
TDC 2016 - Garantindo a qualidade da sua infraestrutura
 
TDC 2016 - Sass: CSS com super-poderes.
TDC 2016 - Sass: CSS com super-poderes.TDC 2016 - Sass: CSS com super-poderes.
TDC 2016 - Sass: CSS com super-poderes.
 
TDC POA 2016 - Robotium + Cucumber + Gradle, misture com spoon e tenha uma ex...
TDC POA 2016 - Robotium + Cucumber + Gradle, misture com spoon e tenha uma ex...TDC POA 2016 - Robotium + Cucumber + Gradle, misture com spoon e tenha uma ex...
TDC POA 2016 - Robotium + Cucumber + Gradle, misture com spoon e tenha uma ex...
 
Como ensinei mais de 1000 testadores
Como ensinei mais de 1000 testadoresComo ensinei mais de 1000 testadores
Como ensinei mais de 1000 testadores
 
TDC2016POA | Trilha Web - Realtime applications com Socket.io
TDC2016POA | Trilha Web - Realtime applications com Socket.ioTDC2016POA | Trilha Web - Realtime applications com Socket.io
TDC2016POA | Trilha Web - Realtime applications com Socket.io
 
Apresentação tdc 2016 - trilha de testes
Apresentação tdc   2016 - trilha de testesApresentação tdc   2016 - trilha de testes
Apresentação tdc 2016 - trilha de testes
 
A transição de um QA tradicional para um Agile Tester
A transição de um QA tradicional para um Agile TesterA transição de um QA tradicional para um Agile Tester
A transição de um QA tradicional para um Agile Tester
 
TDC Floripa 2015 - Branding, UX e Marketing
TDC Floripa 2015 - Branding, UX e MarketingTDC Floripa 2015 - Branding, UX e Marketing
TDC Floripa 2015 - Branding, UX e Marketing
 
Tdc 5 ideias para melhorar os seus testes
Tdc   5 ideias para melhorar os seus testesTdc   5 ideias para melhorar os seus testes
Tdc 5 ideias para melhorar os seus testes
 
Ensinando e aprendendo com desafios
Ensinando e aprendendo com desafiosEnsinando e aprendendo com desafios
Ensinando e aprendendo com desafios
 
TDC2016POA | Trilha Web - JSON API: não reinvente a roda
TDC2016POA | Trilha Web - JSON API: não reinvente a rodaTDC2016POA | Trilha Web - JSON API: não reinvente a roda
TDC2016POA | Trilha Web - JSON API: não reinvente a roda
 
TDC2016POA | Trilha Web - Realidade Virtual com WebVR
TDC2016POA | Trilha Web -  Realidade Virtual com WebVRTDC2016POA | Trilha Web -  Realidade Virtual com WebVR
TDC2016POA | Trilha Web - Realidade Virtual com WebVR
 
Estou desempregado e agora? Como me recolocar como QA.
Estou desempregado e agora? Como me recolocar como QA.Estou desempregado e agora? Como me recolocar como QA.
Estou desempregado e agora? Como me recolocar como QA.
 
Apresentação de Padrões de Design para Aplicativos Móveis.
Apresentação de Padrões de Design para Aplicativos Móveis.Apresentação de Padrões de Design para Aplicativos Móveis.
Apresentação de Padrões de Design para Aplicativos Móveis.
 
TDC2016POA | Trilha Education - Jogos na Educação, onde estamos errando?
TDC2016POA | Trilha Education -  Jogos na Educação, onde estamos errando?TDC2016POA | Trilha Education -  Jogos na Educação, onde estamos errando?
TDC2016POA | Trilha Education - Jogos na Educação, onde estamos errando?
 
TDC2016POA | Trilha Empreendedorismo - Manual Prático do Empreendedorismo
TDC2016POA | Trilha Empreendedorismo - Manual Prático do EmpreendedorismoTDC2016POA | Trilha Empreendedorismo - Manual Prático do Empreendedorismo
TDC2016POA | Trilha Empreendedorismo - Manual Prático do Empreendedorismo
 

Semelhante a TDC2016POA | Trilha Ruby - Stack Level too Deep e Tail Call Optimization: É uma boa ideia fazer recursão em Ruby?

All bugfixes are incompatibilities
All bugfixes are incompatibilitiesAll bugfixes are incompatibilities
All bugfixes are incompatibilitiesnagachika t
 
Feb14 successful development
Feb14 successful developmentFeb14 successful development
Feb14 successful developmentConnor McDonald
 
DevOps in PHP environment
DevOps in PHP environment DevOps in PHP environment
DevOps in PHP environment Evaldo Felipe
 
Power of linked list
Power of linked listPower of linked list
Power of linked listPeter Hlavaty
 
Fisl - Deployment
Fisl - DeploymentFisl - Deployment
Fisl - DeploymentFabio Akita
 
04 - I love my OS, he protects me (sometimes, in specific circumstances)
04 - I love my OS, he protects me (sometimes, in specific circumstances)04 - I love my OS, he protects me (sometimes, in specific circumstances)
04 - I love my OS, he protects me (sometimes, in specific circumstances)Alexandre Moneger
 
MySQL Replication: Demo Réplica en Español
MySQL Replication: Demo Réplica en EspañolMySQL Replication: Demo Réplica en Español
MySQL Replication: Demo Réplica en EspañolKeith Hollman
 
JRuby 9000 - Taipei Ruby User's Group 2015
JRuby 9000 - Taipei Ruby User's Group 2015JRuby 9000 - Taipei Ruby User's Group 2015
JRuby 9000 - Taipei Ruby User's Group 2015Charles Nutter
 
introduction-infra-as-a-code using terraform
introduction-infra-as-a-code using terraformintroduction-infra-as-a-code using terraform
introduction-infra-as-a-code using terraformniyof97
 
owasp lithuania chapter - exploit vs anti-exploit
owasp lithuania chapter - exploit vs anti-exploitowasp lithuania chapter - exploit vs anti-exploit
owasp lithuania chapter - exploit vs anti-exploitKęstutis Meškonis
 
Search for Vulnerabilities Using Static Code Analysis
Search for Vulnerabilities Using Static Code AnalysisSearch for Vulnerabilities Using Static Code Analysis
Search for Vulnerabilities Using Static Code AnalysisAndrey Karpov
 
Ruby on Docker
Ruby on DockerRuby on Docker
Ruby on Dockerjasnow
 
MongoDB: How it Works
MongoDB: How it WorksMongoDB: How it Works
MongoDB: How it WorksMike Dirolf
 
Quick Intro To JRuby
Quick Intro To JRubyQuick Intro To JRuby
Quick Intro To JRubyFrederic Jean
 
Writing Metasploit Plugins
Writing Metasploit PluginsWriting Metasploit Plugins
Writing Metasploit Pluginsamiable_indian
 
ByPat博客出品Lvs+keepalived
ByPat博客出品Lvs+keepalivedByPat博客出品Lvs+keepalived
ByPat博客出品Lvs+keepalivedredhat9
 

Semelhante a TDC2016POA | Trilha Ruby - Stack Level too Deep e Tail Call Optimization: É uma boa ideia fazer recursão em Ruby? (20)

All bugfixes are incompatibilities
All bugfixes are incompatibilitiesAll bugfixes are incompatibilities
All bugfixes are incompatibilities
 
Feb14 successful development
Feb14 successful developmentFeb14 successful development
Feb14 successful development
 
DevOps in PHP environment
DevOps in PHP environment DevOps in PHP environment
DevOps in PHP environment
 
Power of linked list
Power of linked listPower of linked list
Power of linked list
 
Fisl - Deployment
Fisl - DeploymentFisl - Deployment
Fisl - Deployment
 
Capistrano
CapistranoCapistrano
Capistrano
 
04 - I love my OS, he protects me (sometimes, in specific circumstances)
04 - I love my OS, he protects me (sometimes, in specific circumstances)04 - I love my OS, he protects me (sometimes, in specific circumstances)
04 - I love my OS, he protects me (sometimes, in specific circumstances)
 
Network namespaces
Network namespacesNetwork namespaces
Network namespaces
 
MySQL Replication: Demo Réplica en Español
MySQL Replication: Demo Réplica en EspañolMySQL Replication: Demo Réplica en Español
MySQL Replication: Demo Réplica en Español
 
Php resque
Php resquePhp resque
Php resque
 
JRuby 9000 - Taipei Ruby User's Group 2015
JRuby 9000 - Taipei Ruby User's Group 2015JRuby 9000 - Taipei Ruby User's Group 2015
JRuby 9000 - Taipei Ruby User's Group 2015
 
Ruby.new @ VilniusRB
Ruby.new @ VilniusRBRuby.new @ VilniusRB
Ruby.new @ VilniusRB
 
introduction-infra-as-a-code using terraform
introduction-infra-as-a-code using terraformintroduction-infra-as-a-code using terraform
introduction-infra-as-a-code using terraform
 
owasp lithuania chapter - exploit vs anti-exploit
owasp lithuania chapter - exploit vs anti-exploitowasp lithuania chapter - exploit vs anti-exploit
owasp lithuania chapter - exploit vs anti-exploit
 
Search for Vulnerabilities Using Static Code Analysis
Search for Vulnerabilities Using Static Code AnalysisSearch for Vulnerabilities Using Static Code Analysis
Search for Vulnerabilities Using Static Code Analysis
 
Ruby on Docker
Ruby on DockerRuby on Docker
Ruby on Docker
 
MongoDB: How it Works
MongoDB: How it WorksMongoDB: How it Works
MongoDB: How it Works
 
Quick Intro To JRuby
Quick Intro To JRubyQuick Intro To JRuby
Quick Intro To JRuby
 
Writing Metasploit Plugins
Writing Metasploit PluginsWriting Metasploit Plugins
Writing Metasploit Plugins
 
ByPat博客出品Lvs+keepalived
ByPat博客出品Lvs+keepalivedByPat博客出品Lvs+keepalived
ByPat博客出品Lvs+keepalived
 

Mais de tdc-globalcode

TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidadeTDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidadetdc-globalcode
 
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...tdc-globalcode
 
TDC2019 Intel Software Day - ACATE - Cases de Sucesso
TDC2019 Intel Software Day - ACATE - Cases de SucessoTDC2019 Intel Software Day - ACATE - Cases de Sucesso
TDC2019 Intel Software Day - ACATE - Cases de Sucessotdc-globalcode
 
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPATDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPAtdc-globalcode
 
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVinoTDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVinotdc-globalcode
 
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...tdc-globalcode
 
TDC2019 Intel Software Day - Inferencia de IA em edge devices
TDC2019 Intel Software Day - Inferencia de IA em edge devicesTDC2019 Intel Software Day - Inferencia de IA em edge devices
TDC2019 Intel Software Day - Inferencia de IA em edge devicestdc-globalcode
 
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca PublicaTrilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publicatdc-globalcode
 
Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#tdc-globalcode
 
TDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Go - Case EasylocusTDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Go - Case Easylocustdc-globalcode
 
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?tdc-globalcode
 
TDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - Clean architecture em GolangTDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - Clean architecture em Golangtdc-globalcode
 
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QATDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QAtdc-globalcode
 
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendenciaTDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendenciatdc-globalcode
 
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR ServiceTDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Servicetdc-globalcode
 
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NETTDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NETtdc-globalcode
 
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8tdc-globalcode
 
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...tdc-globalcode
 
TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - .NET funcional com F#TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - .NET funcional com F#tdc-globalcode
 
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor  em .Net CoreTDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor  em .Net Core
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Coretdc-globalcode
 

Mais de tdc-globalcode (20)

TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidadeTDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
 
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
 
TDC2019 Intel Software Day - ACATE - Cases de Sucesso
TDC2019 Intel Software Day - ACATE - Cases de SucessoTDC2019 Intel Software Day - ACATE - Cases de Sucesso
TDC2019 Intel Software Day - ACATE - Cases de Sucesso
 
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPATDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
 
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVinoTDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
 
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
 
TDC2019 Intel Software Day - Inferencia de IA em edge devices
TDC2019 Intel Software Day - Inferencia de IA em edge devicesTDC2019 Intel Software Day - Inferencia de IA em edge devices
TDC2019 Intel Software Day - Inferencia de IA em edge devices
 
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca PublicaTrilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
 
Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#
 
TDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Go - Case EasylocusTDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Go - Case Easylocus
 
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
 
TDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - Clean architecture em GolangTDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - Clean architecture em Golang
 
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QATDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
 
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendenciaTDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
 
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR ServiceTDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
 
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NETTDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
 
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
 
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
 
TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - .NET funcional com F#TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - .NET funcional com F#
 
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor  em .Net CoreTDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor  em .Net Core
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core
 

Último

Introduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The BasicsIntroduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The BasicsTechSoup
 
Mixin Classes in Odoo 17 How to Extend Models Using Mixin Classes
Mixin Classes in Odoo 17  How to Extend Models Using Mixin ClassesMixin Classes in Odoo 17  How to Extend Models Using Mixin Classes
Mixin Classes in Odoo 17 How to Extend Models Using Mixin ClassesCeline George
 
Key note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdfKey note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdfAdmir Softic
 
Unit-IV- Pharma. Marketing Channels.pptx
Unit-IV- Pharma. Marketing Channels.pptxUnit-IV- Pharma. Marketing Channels.pptx
Unit-IV- Pharma. Marketing Channels.pptxVishalSingh1417
 
SKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptx
SKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptxSKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptx
SKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptxAmanpreet Kaur
 
Making communications land - Are they received and understood as intended? we...
Making communications land - Are they received and understood as intended? we...Making communications land - Are they received and understood as intended? we...
Making communications land - Are they received and understood as intended? we...Association for Project Management
 
General Principles of Intellectual Property: Concepts of Intellectual Proper...
General Principles of Intellectual Property: Concepts of Intellectual  Proper...General Principles of Intellectual Property: Concepts of Intellectual  Proper...
General Principles of Intellectual Property: Concepts of Intellectual Proper...Poonam Aher Patil
 
How to Create and Manage Wizard in Odoo 17
How to Create and Manage Wizard in Odoo 17How to Create and Manage Wizard in Odoo 17
How to Create and Manage Wizard in Odoo 17Celine George
 
Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...ZurliaSoop
 
On National Teacher Day, meet the 2024-25 Kenan Fellows
On National Teacher Day, meet the 2024-25 Kenan FellowsOn National Teacher Day, meet the 2024-25 Kenan Fellows
On National Teacher Day, meet the 2024-25 Kenan FellowsMebane Rash
 
Basic Civil Engineering first year Notes- Chapter 4 Building.pptx
Basic Civil Engineering first year Notes- Chapter 4 Building.pptxBasic Civil Engineering first year Notes- Chapter 4 Building.pptx
Basic Civil Engineering first year Notes- Chapter 4 Building.pptxDenish Jangid
 
Activity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfActivity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfciinovamais
 
microwave assisted reaction. General introduction
microwave assisted reaction. General introductionmicrowave assisted reaction. General introduction
microwave assisted reaction. General introductionMaksud Ahmed
 
Understanding Accommodations and Modifications
Understanding  Accommodations and ModificationsUnderstanding  Accommodations and Modifications
Understanding Accommodations and ModificationsMJDuyan
 
Holdier Curriculum Vitae (April 2024).pdf
Holdier Curriculum Vitae (April 2024).pdfHoldier Curriculum Vitae (April 2024).pdf
Holdier Curriculum Vitae (April 2024).pdfagholdier
 
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...Nguyen Thanh Tu Collection
 
Dyslexia AI Workshop for Slideshare.pptx
Dyslexia AI Workshop for Slideshare.pptxDyslexia AI Workshop for Slideshare.pptx
Dyslexia AI Workshop for Slideshare.pptxcallscotland1987
 
Sociology 101 Demonstration of Learning Exhibit
Sociology 101 Demonstration of Learning ExhibitSociology 101 Demonstration of Learning Exhibit
Sociology 101 Demonstration of Learning Exhibitjbellavia9
 
ComPTIA Overview | Comptia Security+ Book SY0-701
ComPTIA Overview | Comptia Security+ Book SY0-701ComPTIA Overview | Comptia Security+ Book SY0-701
ComPTIA Overview | Comptia Security+ Book SY0-701bronxfugly43
 

Último (20)

Introduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The BasicsIntroduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The Basics
 
Mixin Classes in Odoo 17 How to Extend Models Using Mixin Classes
Mixin Classes in Odoo 17  How to Extend Models Using Mixin ClassesMixin Classes in Odoo 17  How to Extend Models Using Mixin Classes
Mixin Classes in Odoo 17 How to Extend Models Using Mixin Classes
 
Key note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdfKey note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdf
 
Unit-IV- Pharma. Marketing Channels.pptx
Unit-IV- Pharma. Marketing Channels.pptxUnit-IV- Pharma. Marketing Channels.pptx
Unit-IV- Pharma. Marketing Channels.pptx
 
SKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptx
SKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptxSKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptx
SKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptx
 
Making communications land - Are they received and understood as intended? we...
Making communications land - Are they received and understood as intended? we...Making communications land - Are they received and understood as intended? we...
Making communications land - Are they received and understood as intended? we...
 
General Principles of Intellectual Property: Concepts of Intellectual Proper...
General Principles of Intellectual Property: Concepts of Intellectual  Proper...General Principles of Intellectual Property: Concepts of Intellectual  Proper...
General Principles of Intellectual Property: Concepts of Intellectual Proper...
 
How to Create and Manage Wizard in Odoo 17
How to Create and Manage Wizard in Odoo 17How to Create and Manage Wizard in Odoo 17
How to Create and Manage Wizard in Odoo 17
 
Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
 
On National Teacher Day, meet the 2024-25 Kenan Fellows
On National Teacher Day, meet the 2024-25 Kenan FellowsOn National Teacher Day, meet the 2024-25 Kenan Fellows
On National Teacher Day, meet the 2024-25 Kenan Fellows
 
Basic Civil Engineering first year Notes- Chapter 4 Building.pptx
Basic Civil Engineering first year Notes- Chapter 4 Building.pptxBasic Civil Engineering first year Notes- Chapter 4 Building.pptx
Basic Civil Engineering first year Notes- Chapter 4 Building.pptx
 
Activity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfActivity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdf
 
microwave assisted reaction. General introduction
microwave assisted reaction. General introductionmicrowave assisted reaction. General introduction
microwave assisted reaction. General introduction
 
Understanding Accommodations and Modifications
Understanding  Accommodations and ModificationsUnderstanding  Accommodations and Modifications
Understanding Accommodations and Modifications
 
Holdier Curriculum Vitae (April 2024).pdf
Holdier Curriculum Vitae (April 2024).pdfHoldier Curriculum Vitae (April 2024).pdf
Holdier Curriculum Vitae (April 2024).pdf
 
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
 
Dyslexia AI Workshop for Slideshare.pptx
Dyslexia AI Workshop for Slideshare.pptxDyslexia AI Workshop for Slideshare.pptx
Dyslexia AI Workshop for Slideshare.pptx
 
Sociology 101 Demonstration of Learning Exhibit
Sociology 101 Demonstration of Learning ExhibitSociology 101 Demonstration of Learning Exhibit
Sociology 101 Demonstration of Learning Exhibit
 
ComPTIA Overview | Comptia Security+ Book SY0-701
ComPTIA Overview | Comptia Security+ Book SY0-701ComPTIA Overview | Comptia Security+ Book SY0-701
ComPTIA Overview | Comptia Security+ Book SY0-701
 
Mehran University Newsletter Vol-X, Issue-I, 2024
Mehran University Newsletter Vol-X, Issue-I, 2024Mehran University Newsletter Vol-X, Issue-I, 2024
Mehran University Newsletter Vol-X, Issue-I, 2024
 

TDC2016POA | Trilha Ruby - Stack Level too Deep e Tail Call Optimization: É uma boa ideia fazer recursão em Ruby?