SlideShare uma empresa Scribd logo
1 de 179
RESPIRAÇÃO PROGRAMADA
Como desenvolver um software que ajuda a salvar vidas
QUEM SOU EU
@marceloemanoel
Engenheiro de Software no
http://www.xlung.net
XLUNG
Portal de Ensino deVentilação Mecânica
ENSINO INTERATIVO
DESAFIOS SEMANAIS
MANUAL ILUSTRADO
ARTIGOS
Material científico relevante
SIMULADOR
30 PAÍSES
REUNIÃO COM CLIENTE
PROPOSTA
Desenvolvimento/aperfeiçoamento de um
simulador de ventilação mecânica para fins de
ensino
MAS O QUE É UM
VENTILADOR MECÂNICO?
PRA COMPREENDER ISSO
PRECISAMOS ENTENDER
COMO RESPIRAMOS
PULMÃO CASEIRO
PULMÃO CASEIRO
Laringe/Faringe
PULMÃO CASEIRO
Laringe/Faringe
Traquéia
PULMÃO CASEIRO
Laringe/Faringe
Traquéia
Brônquio Direito
Brônquio Esquerdo
PULMÃO CASEIRO
Laringe/Faringe
Traquéia
Brônquio Direito
Brônquio Esquerdo
Pulmão DireitoPulmão Esquerdo
PULMÃO CASEIRO
Laringe/Faringe
Traquéia
Brônquio Direito
Brônquio Esquerdo
Pulmão DireitoPulmão Esquerdo
CaixaToráxica
PULMÃO CASEIRO
Laringe/Faringe
Traquéia
Brônquio Direito
Brônquio Esquerdo
Pulmão DireitoPulmão Esquerdo
Diafragma
CaixaToráxica
INSPIRAÇÃO
Diafragma Contrai
Pressão interna na caixa
toráxica diminui
Pressão atmosférica externa
fica maior
Diferença de pressão empurra
o ar para os pulmões
EXPIRAÇÃO
Diafragma Relaxa
Pressão interna na caixa
toráxica aumenta
Pressão atmosférica se iguala
Pressão interna empurra o ar
para fora dos pulmões
RESPIRAÇÃO
Inspiração e Expiração
–Manel
Ventilador mecânico é uma máquina que, ligada a um
paciente, auxilia a respiração injetando ar nos pulmões
através do aumento da pressão nas vias aéreas.
MOTIVAÇÕES PARA O USO
DO SIMULADOR NO ENSINO
Maior aprendizado dos alunos
RISCO ZERO para pacientes
Melhora substancial na qualidade de vida dos
pacientes
Stephen Hawking
Esclerose Lateral Amiotrófica
doença degenerativa
Depende de um ventilador mecânico para
viver!
MOTIVAÇÕES PESSOAIS
Trabalhar em algo que é desafiador
Contribuir para a construção de algo útil para a
sociedade e que afeta positivamente a vida de
outras pessoas
REUNIÃO COM O CLIENTE 02
A equipe antiga de devs e a passagem de código
PVM
PVM
PEN DRIVEVERSION MANAGER
Pronto pra explodir no próximo "commit"
Nenhum dos desenvolvedores iniciais!
Build System dependente de IDE
BUILD SYSTEM
Your “Build System"
for not working outside your machine
Granted by:
The new dev
BUILD AUTOMÁGICO!
Declarativo
Download automático das dependências do projeto
Compila,Testa e Gera versão
publica no repositorio ivy
BUILD AUTOMÁGICO
apply plugin: "eclipse"
apply plugin: "idea"
apply plugin: "java"
apply plugin: "jacoco"
apply plugin: 'ivy-publish'
apply plugin: "sonar-runner"
project.ext {
repo = Grgit.open(project.file('.'))
}
group = "net.xlung"
version = “${repo.head().id}"
sourceCompatibility="1.8"
targetCompatibility=“1.8"
defaultTasks 'clean', ‘check’, 'publish'
repositories {
mavenCentral()
}
BUILD AUTOMÁGICO
dependencies {
testCompile("junit:junit:4.1+") {
exclude(group: "org.hamcrest")
}
testCompile 'org.hamcrest:hamcrest-all:1+'
testCompile('org.mockito:mockito-core:1.9+') {
exclude(group: "org.hamcrest")
}
}
publishing {
repositories {
ivy {
url "${System.properties['user.home']}/.ivy2/local"
layout "pattern", {
artifact "[organisation]/[module]/[revision]/jars/[artifact].[ext]"
ivy "[organisation]/[module]/[revision]/ivys/ivy.xml"
}
}
}
publications {
ivy(IvyPublication) {
module "simulator"
from components.java
}
}
}
UMA SIMPLIFICAÇÃO DA
ARQUITETURA INICIAL
DIAGRAMA DE ENTIDADES
Tempo
Real
Vent.
Mec.
Paciente
AC
VCV
AC
PCV
SIMV
VCV
SIMV
PCV
CPAP
PSV
Resp.
Esp.
Gráf.
Alarme
Freq.
Alarme
Vol.
Alarme
Fluxo
DIAGRAMA DE ENTIDADES
Tempo
Real
Vent.
Mec.
Paciente
AC
VCV
AC
PCV
SIMV
VCV
SIMV
PCV
CPAP
PSV
Resp.
Esp.
Gráf.
Alarme
Freq.
Alarme
Vol.
Alarme
Fluxo
Código Duplicado!
ESTRATÉGIAS DEVENTILAÇÃO
Tempo
Real
Vent.
Mec.
Paciente
AC
VCV
AC
PCV
SIMV
VCV
SIMV
PCV
CPAP
PSV
Resp.
Esp.
Gráf.
Alarme
Freq.
Alarme
Vol.
Alarme
Fluxo
ESTRATÉGIAS DE ALARMES
Tempo
Real
Vent.
Mec.
Paciente
AC
VCV
AC
PCV
SIMV
VCV
SIMV
PCV
CPAP
PSV
Resp.
Esp.
Gráf.
Alarme
Freq.
Alarme
Vol.
Alarme
Fluxo
STRATEGY PATTERN
Tempo
Real
Vent.
Mec.
Paciente
AC
VCV
AC
PCV
SIMV
VCV
SIMV
PCV
CPAP
PSV
Resp.
Esp.
Gráf.
Alarme
Freq.
Alarme
Vol.
Alarme
Fluxo
Alarme
Modo
Vent.
STRATEGY PATTERN
Tempo
Real
Vent.
Mec.
Paciente
AC
VCV
AC
PCV
SIMV
VCV
SIMV
PCV
CPAP
PSV
Resp.
Esp.
Gráf.
Alarme
Freq.
Alarme
Vol.
Alarme
Fluxo
Alarme
Modo
Vent.
<<Interface>>
VENTILADOR MECÂNICO
/**
* Atribui novo valor para a frequência.
* @param freq Frequência.
*/
public void setFreq(float freq) {
totalTime = (float) 60 / freq;
cvvm.setFreq(freq);
cpvm.setFreq(freq);
simvv.setFreq(freq);
simvp.setFreq(freq);
}
 
VENTILADOR MECÂNICO
public float getFreq() {
switch (mode) {
case CONTROLLED_VOL_MODE:
return cvvm.getFreq();
case CONTROLLED_PRES_MODE:
return cpvm.getFreq();
case SIMV_VOL_MODE:
return simvv.getFreq();
case SIMV_PRES_MODE:
return simvp.getFreq();
case CPAP_MODE:
return cpap.getFreq();
default:
return 0;
}
}
MIGRAÇÃO DE
RESPONSABILIDADES
DIAGRAMA DE ENTIDADES
Tempo
Real
Vent.
Mec.
Paciente
AC
VCV
AC
PCV
SIMV
VCV
SIMV
PCV
CPAP
PSV
Resp.
Esp.
Gráf.
Alarme
Freq.
Alarme
Vol.
Alarme
Fluxo
Alarme
Modo
Vent.
DIAGRAMA DE ENTIDADES
Tempo
Real
Vent.
Mec.
Paciente
AC
VCV
AC
PCV
SIMV
VCV
SIMV
PCV
CPAP
PSV
Resp.
Esp.
Gráf.
Alarme
Freq.
Alarme
Vol.
Alarme
Fluxo
Alarme
Modo
Vent.
Entidade Desnecessária
DIAGRAMA DE ENTIDADES
Vent.
Mec.
Paciente
AC
VCV
AC
PCV
SIMV
VCV
SIMV
PCV
CPAP
PSV
Resp.
Esp.
Gráf.
Alarme
Freq.
Alarme
Vol.
Alarme
Fluxo
Alarme
Modo
Vent.
DIAGRAMA DE ENTIDADES
Vent.
Mec.
Paciente
AC
VCV
AC
PCV
SIMV
VCV
SIMV
PCV
CPAP
PSV
Resp.
Esp.
Gráf.
Alarme
Freq.
Alarme
Vol.
Alarme
Fluxo
Alarme
Modo
Vent.
Thread!
Thread!
Thread!
Thread! Thread! Thread!
Thread!
Thread!
Thread!
Thread!
Thread!
Thread!
VENTILADOR MECÂNICO
public class MechanicFan implements Runnable, Constants {
 
/* Modo de ventilação. */
private int mode;
private int newMode;
/* Tempo total (inspiração + expiração). */
private float totalTime;
/**/
private float fio2;
/* Janela da apresentação gráfica. */
private Graphics graphics;
/* Objeto de tempo real. */
private RealTime realTime;
public LayoutWeb guiWeb;
/* Objeto referênte ao modo de ventilação ciclada à volume controlado. */
private ControlledVolVentilationMode cvvm;
/* Objeto referênte ao modo de ventilação ciclada à pressão controlada. */
private ControlledPresVentilationMode cpvm;
/**/
private SIMVVolVentilationMode simvv;
/**/
private SIMVPresVentilationMode simvp;
/**/
private CPAP cpap;
/* Threads responsável pela a geração dos sinais. */
private Thread cvvm_thread;
private Thread cpvm_thread;
private Thread simvv_thread;
private Thread simvp_thread;
private Thread cpap_thread;
private NewMonitor monitor;
private int stopmf = 0;
VENTILADOR MECÂNICO
public class MechanicFan implements Runnable, Constants {
 
/* Modo de ventilação. */
private int mode;
private int newMode;
/* Tempo total (inspiração + expiração). */
private float totalTime;
/**/
private float fio2;
/* Janela da apresentação gráfica. */
private Graphics graphics;
/* Objeto de tempo real. */
private RealTime realTime;
public LayoutWeb guiWeb;
/* Objeto referênte ao modo de ventilação ciclada à volume controlado. */
private ControlledVolVentilationMode cvvm;
/* Objeto referênte ao modo de ventilação ciclada à pressão controlada. */
private ControlledPresVentilationMode cpvm;
/**/
private SIMVVolVentilationMode simvv;
/**/
private SIMVPresVentilationMode simvp;
/**/
private CPAP cpap;
/* Threads responsável pela a geração dos sinais. */
private Thread cvvm_thread;
private Thread cpvm_thread;
private Thread simvv_thread;
private Thread simvp_thread;
private Thread cpap_thread;
private NewMonitor monitor;
private int stopmf = 0;
Sou uma Thread
Que tem outras Threads!
VENTILADOR MECÂNICO
public class MechanicFan implements Runnable, Constants {
 
/* Modo de ventilação. */
private int mode;
private int newMode;
/* Tempo total (inspiração + expiração). */
private float totalTime;
/**/
private float fio2;
/* Janela da apresentação gráfica. */
private Graphics graphics;
/* Objeto de tempo real. */
private RealTime realTime;
public LayoutWeb guiWeb;
/* Objeto referênte ao modo de ventilação ciclada à volume controlado. */
private ControlledVolVentilationMode cvvm;
/* Objeto referênte ao modo de ventilação ciclada à pressão controlada. */
private ControlledPresVentilationMode cpvm;
/**/
private SIMVVolVentilationMode simvv;
/**/
private SIMVPresVentilationMode simvp;
/**/
private CPAP cpap;
/* Threads responsável pela a geração dos sinais. */
private Thread cvvm_thread;
private Thread cpvm_thread;
private Thread simvv_thread;
private Thread simvp_thread;
private Thread cpap_thread;
private NewMonitor monitor;
private int stopmf = 0;
Modos de ventilação
VENTILADOR MECÂNICO
/**
* Troca o modo de operação do ventilador.
*/
public void switchMode() {
/* Verifica qual é o modo atual e para a thread de execução. */
switch (this.mode) {
case CONTROLLED_VOL_MODE:
cvvm_thread.stop();
break;
case CONTROLLED_PRES_MODE:
cpvm_thread.stop();
break;
case SIMV_VOL_MODE:
simvv_thread.stop();
break;
case SIMV_PRES_MODE:
simvp_thread.stop();
break;
case CPAP_MODE:
cpap_thread.stop();
break;
}
}
VENTILADOR MECÂNICO
this.mode = newMode;
/* Verifica qual o novo modo de operação e inicia
uma nova thread de execução.*/
switch (this.mode) {
case CONTROLLED_VOL_MODE:
cvvm_thread = new Thread(cvvm);
cvvm_thread.start();
break;
case CONTROLLED_PRES_MODE:
cpvm_thread = new Thread(cpvm);
cpvm_thread.start();
break;
case SIMV_VOL_MODE:
simvv_thread = new Thread(simvv);
simvv_thread.start();
break;
case SIMV_PRES_MODE:
simvp_thread = new Thread(simvp);
simvp_thread.start();
break;
case CPAP_MODE:
cpap_thread = new Thread(cpap);
cpap_thread.start();
break;
}
}
É MUITA THREAD MAH!
É MUITA THREAD MAH!
60!!!
PROBLEMAS COM
MULTITHREADING
Dificuldade de sincronização de código
Aumenta a complexidade do problema
Difícil de testar
REDUZIR DRASTICAMENTE O
NÚMERO DETHREADS!
PROPOSTA DE ARQUITETURA
Paciente
AC
VCV
AC
PCV
SIMV
VCV
SIMV
PCV
CPAP
PSV
Resp.
Esp.Gráf.
Alarme
Freq.
Alarme
Vol.
Alarme
Fluxo
Vent.
Mec.
Thread!
Modo
Vent.
Alarme
Plotter
SINGLETHREAD
IMUTÁVEL
COMO ASSIM?
NÃO SE ALTERA ESTADO!
SEMPRE CRIA-SE UM NOVO!
String
String
public static void main(String[] args) {
String msg = "Hello World";
msg.replace("Hello ", "");
System.out.println(msg);
}
String
public static void main(String[] args) {
String msg = "Hello World";
msg.replace("Hello ", "");
System.out.println(msg);
}
"Hello World"
BigDecimal
BigDecimal
public static void main(String[] args) {
BigDecimal one = new BigDecimal(1);
one.add(one);
System.out.println(one);
}
BigDecimal
public static void main(String[] args) {
BigDecimal one = new BigDecimal(1);
one.add(one);
System.out.println(one);
}
1
AGORA É POSSÍVELTESTAR!
CÁLCULO DOVOLUME EXPIRADO ANTES
/**
* Gera o sinal de volume durante a fase expiratória.
*/
public void volumeExpiration() {
float timeInit = inspirationTime + inspiratoryPause;
volume = (float) (volumeMax / (Math.exp((time - timeInit) / (timeConstant))));
volumeExp = volume;
volume = volume + pacient.getEffortVol();
//System.out.println("V: " + pacient.getEffortVol());
volumeBase = volume;
}
CÁLCULO DOVOLUME EXPIRADO DEPOIS
@Override
public Decimal volumeExpiration(MechanicalVentilator ventilator, Decimal time) {
Patient patient = ventilator.getPatient();
Decimal timeConstant = patient.getTimeConstant();
VentilationParameters parameters = ventilator.getVentilationParameters();
FlowMode flowMode = parameters.getFlowMode();
Decimal inspiratoryTime = flowMode.inspirationTime(mechanicalVentilator);
Decimal inspiratoryPause = parameters.getInspiratoryPause();
Decimal maxVolume = ventilator.getMaxVolume();
Decimal inspirationTime = inspiratoryTime.add(inspiratoryPause);
double exp =
Math.exp(time.subtract(inspirationTime).divideBy(timeConstant).doubleValue());
return maxVolume.divideBy(exp);
}
AGORA POSSO DAR PARÂMETROS E SIMULAR
QUALQUER MOMENTO DA EXPIRAÇÃO
TESTE
public class ControlledVolumeVentilationModeSpec {
@Mock private MechanicalVentilator ventilator;
@Mock private Patient patient;
@Mock private VentilationParameters ventilationParameters;
@Mock private FlowMode flowMode;
private ControlledVolumeVentilationMode ventilationMode;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
when(ventilator.getPatient()).thenReturn(patient);
when(ventilator.getVentilationParameters())
.thenReturn(ventilationParameters);
when(ventilationParameters.getFlowMode()).thenReturn(flowMode);
ventilationMode = new ControlledVolumeVentilationMode();
}
TESTE
/**
* timeInit = inspirationTime + inspiratoryPause;
* volume = patient.getEffortVolume() +
* (maxVolume / Math.exp((time - timeInit) / patient.timeConstant));
*/
@Test public void
volumeInExpirationObeysTheFollowingEquation() {
when(flowMode.inspirationTime(ventilator)).thenReturn(TEN);
when(ventilationParameters.getInspiratoryPause()).thenReturn(ZERO);
when(patient.getEffortVolume()).thenReturn(new Decimal(20));
when(patient.getTimeConstant()).thenReturn(new Decimal(45));
when(ventilator.getMaxVolume()).thenReturn(new Decimal(500));
assertThat(ventilationMode.volumeExpiration(ventilator, ZERO),
is(new Decimal("624.42241")));
}
DADOS IMPRECISOS
SOMA DE FLOATS
public class Main {
public static void main(String[] args) {
for(float v = 0; v < 1; v += 0.1) {
System.out.println(v);
}
}
}
RESULTADO
0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.70000005
0.8000001
0.9000001
BIGDECIMAL PARA GANHAR
PRECISÃO
• Se precisão é um problema, em vez de usar
números de ponto flutuante (float e double),
recomenda-se a utilização de BigDecimal
SOMA DE BIGDECIMALS
public class Main {
public static void main(String[] args) {
BigDecimal limite = new BigDecimal(1);
BigDecimal incremento = new BigDecimal("0.1");
for(BigDecimal soma = new BigDecimal("0.0");
soma.compareTo(limite) < 0;
soma = soma.add(incremento)) {
System.out.println(soma);
}
}
}
RESULTADO
0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
MELHORIA CONTÍNUA
MELHORIA CONTÍNUA
ESTABELECER MÉTRICAS
MELHORIA CONTÍNUA
ESTABELECER MÉTRICAS
ALTERAR O CÓDIGO
MELHORIA CONTÍNUA
ESTABELECER MÉTRICAS
ALTERAR O CÓDIGO
COLETAR ESTATÍSTICAS
MELHORIA CONTÍNUA
ESTABELECER MÉTRICAS
ALTERAR O CÓDIGO
COLETAR ESTATÍSTICAS
AVALIAR O RESULTADO
MELHORIA CONTÍNUA
ESTABELECER MÉTRICAS
ALTERAR O CÓDIGO
COLETAR ESTATÍSTICAS
AVALIAR O RESULTADO
MELHORIA CONTÍNUA
ESTABELECER MÉTRICAS
ALTERAR O CÓDIGO
COLETAR ESTATÍSTICAS
AVALIAR O RESULTADO
ESTABELECER MÉTRICAS
Ex. Regra: ”BigDecimal(double)"
não deve ser usado
Critical
BigDecimal v0 = new BigDecimal(0.1);
System.out.println(v0);
QUAL O RESULTADO???
Esperado:
0.1

Realidade:
0.100000000000000005551115123125782702118158
3404541015625
BigDecimal v0 = new BigDecimal(0.1);
System.out.println(v0);
BigDecimal v0 = new BigDecimal(0.1);
System.out.println(v0);
Esperado:
0.1

Realidade:
0.100000000000000005551115123125782702118158
3404541015625
TáErrado!
Esperado:
0.1

Realidade:
0.1
BigDecimal v0 = BigDecimal.valueOf(0.1);
System.out.println(v0);
Esperado:
0.1

Realidade:
0.1
BigDecimal v0 = BigDecimal.valueOf(0.1);
System.out.println(v0);
ManelApproves!
Ex. Regra:Atributos de classes
devem seguir uma convenção
Major
public class MyClass {
public int FIRST = 1; // Inválido
public int second = 2; // Válido
}
Ex. Regra: Imports desnecessários
devem ser removidos
Minor
package my.company;
 
import java.lang.String;
// Inválido - classes do pacote java.lang são implicitamente importadas
import my.company.SomeClass;
// Inválido - arquivos do mesmo pacote são implicitamente importados
import java.io.File;
// Inválido - File não está sendo usado
 
import my.company2.SomeType;
import my.company2.SomeType;
// Inválido - 'SomeType' já foi importado
 
class ExampleClass {
 
public String someString;
public SomeType something;
 
}
Ex. Regra:TagsTODO devem ser
resolvidas
INFO
public void doSomething() {
// TODO
}
ALTERAR O CÓDIGO
COLETAR ESTATÍSTICAS
31 CLASSES
11444 LINHAS DE CÓDIGO
19% DUPLICAÇÃO DE CÓDIGO
0% COBERTURA DE CÓDIGO
1476 Issues
CRITICAL
70
MAJOR
867
INFO
1
MINOR
538
MINOR INFO MAJOR CRITICAL
MÉTRICAS
MÉTRICAS PRA TODO
LADO
HOJE
ALTERAR O CÓDIGO
COLETAR ESTATÍSTICAS
AVALIAR O RESULTADO
Antes Depois
Antes Depois
Antes Depois
Antes Depois
ANTES DEPOIS
RESULTADO DA AVALIAÇÃO
AgoraVai
PRECISAMOS SAIR DO APPLET
Tecnologia de 10 anos atrás
Difícil encontrar bibliotecas que se adequem ao
problema
Difícil de melhorar o layout
NOVA INTERFACE
Web
Fácil de mudar o layout
Tecnologias mais atuais
Mobile friendly
100% HTML + JS?
100% CLIENT SIDE
Bom desempenho
Fácil customização
Ecossistema farto
100% CLIENT SIDE
Bom desempenho
Fácil customização
Ecossistema farto
Segurança menor
Reescrever toda a simulação
SCALA
Permite utilizar toda a base de código Java
existente
Introduz melhorias de legibilidade
Permite usar programação funcional
Favorece concorrência e escalabilidade
FRAMEWORK WEB FULL
STACK
MVC
Templates compilados
Assets (javascripts, css, imagens) compilados
Acesso a dados
Java e Scala
APLICAÇÕES DE ALTA
CONCORRÊNCIA E DISTRIBUÍDAS
Alto Desempenho
Descentralizado
Tolerante a falhas
WEBSOCKETS
HTTP REQUEST
SERVER
HTTP REQUEST
HTTP RESPONSE
SERVER
HTTP REQUEST
SERVER
WEBSOCKET CONNECTED
SERVERAtor
Simulação
WEBSOCKET CONNECTED
SERVERAtor
Simulação
WEBSOCKET CONNECTED
SERVERAtor
Simulação
SERVER
WEBSOCKET CONNECTED
Ator
Sim. 1
SERVER
WEBSOCKET CONNECTED
W
EBSOCKET CONNECTED
Ator
Sim. 1
Sim. 2
Ator
SERVER
WEBSOCKET CONNECTED
W
EBSOCKET CONNECTED
WEBSOCKET CONNECTED
Ator
Sim. 1
Ator
Sim. 3
Sim. 2
Ator
NOVOS SIMULADORES
Simulador de Fisiologia Aplicada
Simulador de Oxigenoterapia
FISIOLOGIA APLICADA
FISIOLOGIA APLICADA
OXIGENOTERAPIA
OXIGENOTERAPIA
Simulador de ventilação mecânica

Mais conteúdo relacionado

Semelhante a Simulador de ventilação mecânica

Java introdução ao java
Java   introdução ao javaJava   introdução ao java
Java introdução ao javaArmando Daniel
 
Aula02 android hands_on
Aula02 android hands_onAula02 android hands_on
Aula02 android hands_onRoberson Alves
 
Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014Michael Castillo Granados
 
Introdução ao Zend Framework 2
Introdução ao Zend Framework 2Introdução ao Zend Framework 2
Introdução ao Zend Framework 2Elton Minetto
 
JasperReports Tecnicas de geracao_de_relatorios1
JasperReports  Tecnicas de geracao_de_relatorios1JasperReports  Tecnicas de geracao_de_relatorios1
JasperReports Tecnicas de geracao_de_relatorios1Sliedesharessbarbosa
 
PHPUnit e teste de software
PHPUnit e teste de softwarePHPUnit e teste de software
PHPUnit e teste de softwarericardophp
 
Como ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noiteComo ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noiteComunidade NetPonto
 
(A10) LabMM3 - JavaScript - Subalgoritmos
(A10) LabMM3 - JavaScript - Subalgoritmos(A10) LabMM3 - JavaScript - Subalgoritmos
(A10) LabMM3 - JavaScript - SubalgoritmosCarlos Santos
 
Applets e Java web start
Applets e Java web startApplets e Java web start
Applets e Java web startArtur Rodrigues
 
Introducao ao Spring Web MVC
Introducao ao Spring Web MVCIntroducao ao Spring Web MVC
Introducao ao Spring Web MVCEder Magalhães
 
Desmistificando o cairngorm
Desmistificando o cairngormDesmistificando o cairngorm
Desmistificando o cairngormEric Cavalcanti
 
Mule esb teste parte 2
Mule esb teste   parte 2Mule esb teste   parte 2
Mule esb teste parte 2Jeison Barros
 
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...Rogério Moraes de Carvalho
 
Organizandoacasa 120316203302-phpapp02
Organizandoacasa 120316203302-phpapp02Organizandoacasa 120316203302-phpapp02
Organizandoacasa 120316203302-phpapp02Fernanda Prezotto
 

Semelhante a Simulador de ventilação mecânica (20)

Java introdução ao java
Java   introdução ao javaJava   introdução ao java
Java introdução ao java
 
Aula02 android hands_on
Aula02 android hands_onAula02 android hands_on
Aula02 android hands_on
 
Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014
 
Introdução ao Zend Framework 2
Introdução ao Zend Framework 2Introdução ao Zend Framework 2
Introdução ao Zend Framework 2
 
PHP fora da Web
PHP fora da WebPHP fora da Web
PHP fora da Web
 
JasperReports Tecnicas de geracao_de_relatorios1
JasperReports  Tecnicas de geracao_de_relatorios1JasperReports  Tecnicas de geracao_de_relatorios1
JasperReports Tecnicas de geracao_de_relatorios1
 
PHPUnit e teste de software
PHPUnit e teste de softwarePHPUnit e teste de software
PHPUnit e teste de software
 
Como ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noiteComo ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noite
 
(A10) LabMM3 - JavaScript - Subalgoritmos
(A10) LabMM3 - JavaScript - Subalgoritmos(A10) LabMM3 - JavaScript - Subalgoritmos
(A10) LabMM3 - JavaScript - Subalgoritmos
 
Applets e Java web start
Applets e Java web startApplets e Java web start
Applets e Java web start
 
Introducao ao Spring Web MVC
Introducao ao Spring Web MVCIntroducao ao Spring Web MVC
Introducao ao Spring Web MVC
 
Desmistificando o cairngorm
Desmistificando o cairngormDesmistificando o cairngorm
Desmistificando o cairngorm
 
Modulos SNEP
Modulos SNEPModulos SNEP
Modulos SNEP
 
Mule esb teste parte 2
Mule esb teste   parte 2Mule esb teste   parte 2
Mule esb teste parte 2
 
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
 
Selenium - WebDriver
Selenium - WebDriverSelenium - WebDriver
Selenium - WebDriver
 
Organizando a casa
Organizando a casaOrganizando a casa
Organizando a casa
 
Organizandoacasa 120316203302-phpapp02
Organizandoacasa 120316203302-phpapp02Organizandoacasa 120316203302-phpapp02
Organizandoacasa 120316203302-phpapp02
 
Desenvolvimento de Extensões PECL
Desenvolvimento de Extensões PECLDesenvolvimento de Extensões PECL
Desenvolvimento de Extensões PECL
 
Mock Objects
Mock ObjectsMock Objects
Mock Objects
 

Simulador de ventilação mecânica