Apresentação da semana 9 da unidade curricular de Introdução à Programação do DCTI do ISCTE-IUL. Alterações de Manuel Menezes de Sequeira sobre versão original por vários autores do DCTI, incluindo Luís Nunes e André Santos.
TDC Florianópolis 2018 - Bolovo 2.0: Indo do EJB 2.0 ao Domain Driven DesignAlexandre Rodrigues
Em 2007 Phillip Calçado e Paulo Silveira apresentaram o termo Bolovo no evento JustJava para especificar a arquitetura que utilizava as classes BusinessObject (BO), LayerObject (LO), ValueObject (VO) oriundas do EJB 2.0, muito conhecido como design anêmico e que já não se vazia necessária com o JaveEE5. Onze anos se passaram e muita coisa mudou, contudo ainda encontramos a arquitetura Bolovo em novos projetos. O que estamos fazendo de errado? Como mudar?
Apresentação da semana 9 da unidade curricular de Introdução à Programação do DCTI do ISCTE-IUL. Alterações de Manuel Menezes de Sequeira sobre versão original por vários autores do DCTI, incluindo Luís Nunes e André Santos.
TDC Florianópolis 2018 - Bolovo 2.0: Indo do EJB 2.0 ao Domain Driven DesignAlexandre Rodrigues
Em 2007 Phillip Calçado e Paulo Silveira apresentaram o termo Bolovo no evento JustJava para especificar a arquitetura que utilizava as classes BusinessObject (BO), LayerObject (LO), ValueObject (VO) oriundas do EJB 2.0, muito conhecido como design anêmico e que já não se vazia necessária com o JaveEE5. Onze anos se passaram e muita coisa mudou, contudo ainda encontramos a arquitetura Bolovo em novos projetos. O que estamos fazendo de errado? Como mudar?
Apresentação realizada no dia 07/07/2011 no TDC 2011, com o objetivo de mostrar como as pequenas alterações na linguagem implementadas no JDK7, definidas na JSR 334 (Project Coin), podem facilitar a vida do desenvolvedor.
Palestra sobre Javascript realizada no primeiro ciclo do Plano de Geração de Conhecimento realizado em outubro de 2013, no LEMAF - Universidade Federal de Lavras.
O Plano de geração de conhecimento é um trabalho realizado para tutoria de desenvolvedores com estagiários no estudo de tecnologias, com o objetivo de disseminação de conhecimento.
Palestra ministrada por Fernando Simeone, Carlos Eduardo Chessi Melo, Eduardo Assis da Silva e José Henrique Santos Andrade .
### Atualização 20/02/2015
Palestra melhorada, com algumas correções. Reapresentada por Fernando Simeone e Carlos Eduardo Chessi Melo na SETI (Semana de Tecnologia da Informação) na Universidade Federal de Lavras.
Essa apresentação fala um pouco sobre o que é, quando e porque aplicar Refatoração em seu código.
Além de mostrar algumas técnicas que Martin Fowler mostra em seu livro.
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...Tchelinux
Escrever um bom código, legível, eficiente e seguro, é uma competência necessária para codificar em qualquer linguagem. O objetivo é abordar técnicas de refatoração, boas práticas, código seguro e testes, utilizando exemplos com a linguagem Java. A bibliografia indicada é Refatoração, do Martin Fowler, e Effective Java do Joshua Bloch.
9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...Manuel Menezes de Sequeira
Fundamentos da Programação 9:
• Operação toString()
• Classes, instâncias e objectos
• Leituras com Scanner
Apresentação 9 da unidade curricular de Fundamentos de Programação da Universidade Europeia. Alterações de Manuel Menezes de Sequeira sobre versão original por vários autores do DCTI do ISCTE-IUL, incluindo Luís Nunes, Ricardo Ribeiro, André Santos e o próprio Manuel Menezes de Sequeira.
Apresentação realizada no dia 07/07/2011 no TDC 2011, com o objetivo de mostrar como as pequenas alterações na linguagem implementadas no JDK7, definidas na JSR 334 (Project Coin), podem facilitar a vida do desenvolvedor.
Palestra sobre Javascript realizada no primeiro ciclo do Plano de Geração de Conhecimento realizado em outubro de 2013, no LEMAF - Universidade Federal de Lavras.
O Plano de geração de conhecimento é um trabalho realizado para tutoria de desenvolvedores com estagiários no estudo de tecnologias, com o objetivo de disseminação de conhecimento.
Palestra ministrada por Fernando Simeone, Carlos Eduardo Chessi Melo, Eduardo Assis da Silva e José Henrique Santos Andrade .
### Atualização 20/02/2015
Palestra melhorada, com algumas correções. Reapresentada por Fernando Simeone e Carlos Eduardo Chessi Melo na SETI (Semana de Tecnologia da Informação) na Universidade Federal de Lavras.
Essa apresentação fala um pouco sobre o que é, quando e porque aplicar Refatoração em seu código.
Além de mostrar algumas técnicas que Martin Fowler mostra em seu livro.
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...Tchelinux
Escrever um bom código, legível, eficiente e seguro, é uma competência necessária para codificar em qualquer linguagem. O objetivo é abordar técnicas de refatoração, boas práticas, código seguro e testes, utilizando exemplos com a linguagem Java. A bibliografia indicada é Refatoração, do Martin Fowler, e Effective Java do Joshua Bloch.
9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...Manuel Menezes de Sequeira
Fundamentos da Programação 9:
• Operação toString()
• Classes, instâncias e objectos
• Leituras com Scanner
Apresentação 9 da unidade curricular de Fundamentos de Programação da Universidade Europeia. Alterações de Manuel Menezes de Sequeira sobre versão original por vários autores do DCTI do ISCTE-IUL, incluindo Luís Nunes, Ricardo Ribeiro, André Santos e o próprio Manuel Menezes de Sequeira.
Como conectar programas em linguagem java a bases de dadosHenrique Fernandes
Estarei tratando aqui, como podemos utilizar a linguagem java, para acessar bancos de
dados. Os conceitos aqui discutidos, podem ser usados para criar aplicações, que acessem
diferentes base de dados, desde banco de dados relacionais, banco de dados orientados a
objetos ou até arquivos em textos plano. Utilizaremos os padrões de projeto Factory com
DAO(Data Access Object).
Semelhante a J1Brasil: Persistência de Dados além do JPA, ou Como usar noSQL em Java (11)
Impulsione sua carreira contribuindo para projetos open sourceAlexandre Porcelli
Qual o sonho de todo desenvolvedor de software? Desenvolver novas tecnologias e frameworks? Trabalhar em um time internacional? Ser incentivado a experimentar e buscar a inovação? Home office? Ser ativo em uma comunidade? Ser referência em uma determinada tecnologia? Ficar longe dos CRUDs? Ser bem pago para isto? Que tal "todas as anteriores"?
A primeira boa notícia é que este sonho pode se tornar sua realidade: é o mundo do open source. A segunda boa notícia é que só depende de você para chegar lá.
Contudo percorrer este caminho não é tão simples assim, aprenda neste keynote o caminho das pedras: desde o primeiro pull request até viver do desenvolvimento de software open source e de que forma estas contribuições podem efetivamente impulsionar a sua carreira de desenvolvedor de software.
NoSQL for the rest of us - a JBoss perspective over those hot tools and how y...Alexandre Porcelli
Nowadays noSQL technologies had become very popular in the market, however a lot of doubts are always present when we have to decide which technology we have to use. There is a specific noSQL/Big Data Technology according to scenario, the application or non-functional requirements, in this presentation you will see how differentiate the noSQL technologies, and how to apply them together with JBoss Technologies, enabling real modern architectures. During this talk we'll cover some of the most important tools like Inifispan, MongoDB and Neo4J from data model and architecture as well, presenting to the audience some rationalization when each of them should be used in real world scenarios.
Armazenamento de Dados em Poucas Palavras ou Uma resposta definitiva para tod...Alexandre Porcelli
De onde viemos?
Onde estamos?
Para onde vamos?
Qual é o propósito de tudo isso?
O que é a verdade?
O que é bom e o que é mau?
Qual é o significado da vida?
Estas são algumas das chamadas "questões fundamentais". Esta palestra tem como desafio
prover as respostas para todas elas.
DevinVale: SQL, noSQL ou newSQL - Onde armazenar meus dados?Alexandre Porcelli
Nos últimos 30 anos tem-se vivido a hegemonia dos bancos de dados relacionais, a grande bala de prata da TI. No entanto, em 2009 surgiu o movimento noSQL que além de trazer novas opções de ferramentas e modelos de dados, criou uma nova escola de pensamento. Esta nova escola tem exercido forte influência nos tradicionais bancos de dados relacionais, emergindo uma nova classe de ferramentas, chamada NewSQL.
Esta palestra irá apresentar as diferenças e similaridades entre SQL, NoSQL e NewSQL.
Nos últimos 30 anos tem-se vivido a hegemonia dos bancos de dados relacionais, a grande bala de prata da TI. No entanto, em 2009 surgiu o movimento noSQL que além de trazer novas opções de ferramentas e modelos de dados, criou uma nova escola de pensamento. Esta nova escola tem exercido forte influência nos tradicionais bancos de dados relacionais, emergindo uma nova classe de ferramentas, chamada NewSQL.
Esta palestra irá apresentar as diferenças e similaridades entre SQL, NoSQL e NewSQL.
A importância dos dados em sua arquitetura... uma visão muito além do SQL Ser...Alexandre Porcelli
Nos últimos 30 anos temos vivido a hegemonia dos bancos de dados relacionais, a grande bala de prata da TI. O armazenamento de dados se tornou tão comoditizado, que nem mesmo nos questionamos se o modelo relacional é adequado as nossas necessidades. Mas será que o armazenamento de dados se resume ao modelo relacional? Será que as técnicas tradicionais de normalização ou ferramentas de produtividade como ORM são realmente adequadas? Será que você está tratando seus dados com a devida atenção?
Nesta palestra respondemos estas e outras perguntas sobre tratamento e armazenamento de dados. Colocamos o "dedo na ferida" e apresentamos uma nova escola de pensamento bem como algumas ferramentas que suportam esta nova realidade.
J1Brasil: Persistência de Dados além do JPA, ou Como usar noSQL em Java
1. J1Brasil
Persistência de Dados além do JPA,
ou Como usar noSQL em Java
Alexandre Porcelli
alexandre.porcelli@gmail.com
segunda-feira, 13 de dezembro de 2010
2. Java One Brasil 2010
Alexandre Porcelli
Founder
Alexandre Porcelli
Writer
Alexandre Porcelli
Organizer
Alexandre Porcelli
Commiter / Parser Developer
Alexandre Porcelli
Creator &
Project Lead
segunda-feira, 13 de dezembro de 2010
10. problemas do
dia-a-dia
segunda-feira, 13 de dezembro de 2010
11. OLTP
On-line Transaction Processing is characterized by a large number of
short on-line transactions (INSERT, UPDATE, DELETE). The main emphasis
for OLTP systems is put on very fast query processing, maintaining data
integrity in multi-access environments and an effectiveness measured by
number of transactions per second.
segunda-feira, 13 de dezembro de 2010
12. segurança
autenticação
segunda-feira, 13 de dezembro de 2010
13. JAAS, LDAP,
OAUTH...
segunda-feira, 13 de dezembro de 2010
14. public boolean isValid(String nomeUsuario, String passw) {
PreparedStatement st;
Connection conn = null;
try {
conn = dataSource.getConnection();
st = conn.prepareStatement("SELECT 1 FROM USERS WHERE id = ? and passw = ?");
st.setString(1, nomeUsuario);
st.setString(2, passw);
ResultSet rs = st.executeQuery();
if (rs.next()) {
return true;
}
return false;
} catch (SQLException e) {
return false;
} finally {
try {
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
throw new RuntimeException("Can't close connection", e);
}
}
}
segunda-feira, 13 de dezembro de 2010
15. Estrura de Dados: Chave-Valor
Durabilidade: In-Memory / Serialização Paralela / Réplica
Site: http://redis.io/
Escrito em: C
+ Baixa Latência
+ Serialização Paralela
Pontos Positivos:
+ Estruturas de Dados
+ Cases
Pontos Negativos: o/
segunda-feira, 13 de dezembro de 2010
16. public class SegurancaRedisCode {
public static void main(String[] args) {
SegurancaRedisCode seg = new SegurancaRedisCode();
seg.addUserPassw("porcelli", "1234");
Assert.assertTrue(seg.isValid("porcelli", "1234"));
Assert.assertFalse(seg.isValid("porcelli", "123"));
Assert.assertFalse(seg.isValid("xxx", "1234"));
}
private final Jedis jedis;
public SegurancaRedisCode() {
jedis = new Jedis("localhost");
}
public boolean isValid(String nomeUsuario, String passwd) {
String correctPassw = jedis.get("user:" + nomeUsuario + ":passwd");
if (correctPassw != null && passwd.equals(correctPassw)) {
return true;
} else {
return false;
}
}
public void addUserPassw(String nomeUsuario, String passwd) {
jedis.set("user:" + nomeUsuario + ":passwd", passwd);
jedis.save();
}
}
segunda-feira, 13 de dezembro de 2010
19. @Entity
@Table(name = "categorias")
public class Categoria {
@Id
@GeneratedValue
private Integer id;
private String nome;
@OneToMany
@OrderColumn
@JoinColumn(name = "parent_id")
private List<Categoria> filhos = new LinkedList<Categoria>();
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "parent_id", insertable = false, updatable = false)
private Categoria parent;
....
}
segunda-feira, 13 de dezembro de 2010
20. Estrura de Dados: Grafo
Durabilidade: Single Node
Site: http://neo4j.org
Escrito em: Java
+ ACID
+ Maturidade
Pontos Positivos:
+ Velocidade no Traverse
+ Suporte RDF & SPARQL
Pontos Negativos: - Falta de Sharding
segunda-feira, 13 de dezembro de 2010
21. private static enum TipoRelacionamento implements RelationshipType {
PAI
}
private final GraphDatabaseService graph;
private static final String NEO4J_PATH = "sample/tree";
public Neo4jSampleCode() {
graph = new EmbeddedGraphDatabase(NEO4J_PATH);
}
public Node novaCategoria(String nome, Node pai) {
Transaction tx = graph.beginTx();
try {
Node newCat = graph.createNode();
newCat.setProperty("nome", nome);
if (pai != null) {
pai.createRelationshipTo(newCat, TipoRelacionamento.PAI);
}
tx.success();
return newCat;
} finally {
tx.finish();
}
}
segunda-feira, 13 de dezembro de 2010
22. public Node getPai(Node node) {
Transaction tx = graph.beginTx();
Node result;
try {
Iterable<Relationship> relationships = node.getRelationships(
TipoRelacionamento.PAI, Direction.INCOMING);
if (relationships.iterator().hasNext()) {
result = relationships.iterator().next().getStartNode();
} else {
result = null;
}
tx.success();
return result;
} finally {
tx.finish();
}
}
segunda-feira, 13 de dezembro de 2010
23. public List<Node> getFilhos(Node pai) {
Transaction tx = graph.beginTx();
List<Node> result = new LinkedList<Node>();
try {
Iterable<Relationship> relationships = pai.getRelationships(
TipoRelacionamento.PAI, Direction.OUTGOING);
for (Relationship relationship : relationships) {
result.add(relationship.getEndNode());
}
tx.success();
return result;
} finally {
tx.finish();
}
}
segunda-feira, 13 de dezembro de 2010
24. public List<Node> getArvoreCompleta(Node pai) {
Transaction tx = graph.beginTx();
List<Node> result = new LinkedList<Node>();
try {
Traverser traverser = pai.traverse(Order.BREADTH_FIRST,
StopEvaluator.END_OF_GRAPH,
ReturnableEvaluator.ALL_BUT_START_NODE,
TipoRelacionamento.PAI, Direction.OUTGOING);
for (Node node : traverser) {
result.add(node);
}
tx.success();
return result;
} finally {
tx.finish();
}
}
segunda-feira, 13 de dezembro de 2010
26. produtos
diversidade & irregularidade
segunda-feira, 13 de dezembro de 2010
27. nome effective java tv led 32” mesa de madeira mod
valor R$ 80 R$ 1234 R$ 503
um dos melhores livros
descr. tv de led 32” muito boa! mesa de canto legal
sobre java!
qtd. páginas 300 X X
técnico/tecnologia/
categoria X X
programação/java
cons. energia X A X
cor X X marrom claro
dimensão X X 20x40x90
segunda-feira, 13 de dezembro de 2010
30. Estrura de Dados: Documento
Durabilidade: Réplica
Site: http://mongodb.org
Escrito em: C++
+ Velocidade
+ Index
Pontos Positivos:
+ Consultas ad-hoc
+ Auto Sharding
- Durabilidade
Pontos Negativos: - Update in Place
Google: mongodb and fourquare
segunda-feira, 13 de dezembro de 2010
31. private final DB db;
public MongoDBSampleCode() throws UnknownHostException, MongoException {
Mongo mongo = new Mongo();
db = mongo.getDB("MeuDatabase");
db.getCollection("produtos").drop();
}
public void novoEletronico(int id, String nome, int valor,
String descricao, String consumoEnergia) {
DBCollection coll = db.getCollection("produtos");
DBObject dados = new BasicDBObject();
dados.put("id", id);
dados.put("nome", nome);
dados.put("valor", valor);
dados.put("tipo", "eletronico");
dados.put("desc", descricao);
dados.put("cons_energia", consumoEnergia);
coll.insert(dados);
}
segunda-feira, 13 de dezembro de 2010
32. public void getProdutosPorValorMenorQue(int valor) {
DBCollection coll = db.getCollection("produtos");
DBObject query = new BasicDBObject();
query.put("valor", new BasicDBObject("$lt", valor));
for (DBObject foundDoc : coll.find(query)) {
System.out.println(foundDoc);
}
}
segunda-feira, 13 de dezembro de 2010
33. public static void main(String[] args) throws UnknownHostException,
MongoException {
MongoDBSampleCode samp = new MongoDBSampleCode();
samp.novoEletronico(1, "tvled32", 1234, "Tv de led 32"", "A");
samp.novoEletronico(2, "geladeira", 2030, "Geladeira Duas portas", "B");
samp.novoLivro(3, "effective java", 80,
"um dos melhores livros sobre java!",
"técnico/tecnologia/programação/java", 300);
samp.novoLivro(4, "senhor dos anéis 2", 23, "clássico",
"romance/ficção", 300);
samp.novoMovel(5, "mesa de madeira", 503, "mesa de canto legal",
"clara", "20x40x90");
samp.getProdutosPorValorMenorQue(600);
}
segunda-feira, 13 de dezembro de 2010
34. {
"id": 3,
"nome": "effective java",
"valor": 80,
"tipo": "livro",
"desc": "um dos melhores livros sobre java!",
"categoria": "técnico/tecnologia/programação/java",
"qtd_pgs": 300
}
{
"id": 4,
"nome": "senhor dos anéis 2",
"valor": 23,
"tipo": "livro",
"desc": "clássico",
"categoria": "romance/ficção",
"qtd_pgs": 300
}
{
"id": 5,
"nome": "mesa de madeira",
"valor": 503,
"tipo": "movel",
"desc": "mesa de canto legal",
"cor": "clara",
"dimensao": "20x40x90"
}
segunda-feira, 13 de dezembro de 2010
35. cache + db
bigdata & latência
segunda-feira, 13 de dezembro de 2010
37. mas fora do #trendtopic...
1.000.000 tx/hora
100tx/seg.
segunda-feira, 13 de dezembro de 2010
38. no início...
Código Banco de Dados
segunda-feira, 13 de dezembro de 2010
39. depois...
CACHE
Código Banco de Dados
segunda-feira, 13 de dezembro de 2010
40. Estrura de Dados: Família de Colunas
Durabilidade: Réplica
Site: http://cassandra.apache.org
Escrito em: Java
+ Conceito Dynamo & Big-Table
Pontos Positivos: + Escalabilidade
+ Configuração
Pontos Negativos: Google: cassandra & digg
segunda-feira, 13 de dezembro de 2010
42. exemplo...
Keyspace: Keyspace1
Família de Colunas: Standard1
nome
chave valor timestamp
da coluna
porcelli telefone 1234-5678 1291325256 ...
segunda-feira, 13 de dezembro de 2010
43. final private CassandraClientPool pool;
public CassandraSampleCode() {
pool = CassandraClientPoolFactory.INSTANCE.get();
}
public void novoDado(String nomeUsuario, String telefone, String email) {
CassandraClient client = null;
try {
client = pool.borrowClient("localhost", 9160);
Keyspace keyspace = client.getKeyspace("Keyspace1");
ColumnPath columnPath = new ColumnPath();
columnPath.setColumn_family("Standard1");
columnPath.setColumn(bytes("telefone"));
keyspace.insert(nomeUsuario, columnPath, bytes(telefone));
columnPath.setColumn(bytes("email"));
keyspace.insert(nomeUsuario, columnPath, bytes(email));
} finally {
pool.releaseClient(client);
}
}
segunda-feira, 13 de dezembro de 2010
49. Estrura de Dados: Lista Invertida
Durabilidade: Single Node
Site: http://lucene.apache.org
Escrito em: Java
+ Baixa Latência
Pontos Positivos: + Durabilidade
+ Padrão
Pontos Negativos: o/
segunda-feira, 13 de dezembro de 2010
50. OLAP
On-line Analytical Processing is characterized by relatively low volume
of transactions. Queries are often very complex and involve
aggregations. For OLAP systems a response time is an effectiveness
measure. OLAP applications are widely used by Data Mining techniques.
segunda-feira, 13 de dezembro de 2010
54. Perguntas?
@porcelli
segunda-feira, 13 de dezembro de 2010
55. Código Fonte https://github.com/porcelli/j1brasil-sample-code
segunda-feira, 13 de dezembro de 2010
56. Obrigado
@porcelli
github.com/porcelli
about.me/porcelli porcelli.com.br
alexandre.porcelli@gmail.com
linkedin.com/in/alexandreporcelli
segunda-feira, 13 de dezembro de 2010