Pular para o conteúdo principal

Postagens

Mostrando postagens com o rótulo Web

The Interview Game - Part II

I am trying to digest my last interview. What I did right and wrong. As the previous event, I had 4 technical interviews but different from previous event, interviewers asked more times about my experience. What am I doing? What was my last big decision? What is interesting in my current job? And so on. This is something that I didn’t like because I have been working here for only 3 months in my new job so it was not easy to talk about things that I am still learning. My first interviewer gave me 2 questions…I spend a good time with a bad solution in my second problem and that was an easy question. In the end I gave a good answer but I had already involved. Question 1: how to convert a file path (file path will always have root dir) to an canonical path. Ex: "/a/b/../c" $\Rightarrow$ "/a/c". Question 2: how to implement a data structure for control use of limited resources of 3 kinds. (Ex: Lock SA is a company that provide lockers to users in airport. When a ne...

The Interview Game - Part I

Introduction Do you want to work at a top company of Nasdaq. Ok. Go ahead, but be aware with the interviewing process. It could be not so easy as you would like to. Companies as Amazon, Google, Microsoft have famous hard selective process. So, I will try my best to help you to improve your results. In these posts, I will talk about questions that I have been asked and what solutions I found as more appropriated. To be simpler, I will divide questions in 2 groups: general technical knowledge and algorithm questions. This post is about the first group… General Technical Knowledge What is TCP? What is UDP? What is fundamental difference between each one? TCP is a network protocol that provides reliable, ordered, error-checked delivery of a stream of octets between programs running on computers connected to a local area network, intranet or the public Internet. TCP could be seen as a facility to communication. As TCP, UDP is a network protocol however UDP provides communication with...

Very short REST client in Ruby

I've studied Ruby for 2 years. I feel Ruby like Lego blocks: it is cool, funny, and you could even build a wall with this easily but it could be expensive to make a very solid wall. Anyway, here is a funny to.  Look how simple is to do a Getter REST client in ruby (you could try RESTfolia, restfulie, etc). I call Getter REST client because, it just for GET requests. require "net/http" require "uri" require 'json' require 'methodize' uri = URI.parse("http://localhost:8080/jdb/list") response = Net::HTTP.get_response(uri) json = JSON.parse(response.body) json.extend(Methodize) With authentication, we get: req = Net::HTTP::Get.new(uri.request_uri) req.basic_auth 'user', 'password' res = Net::HTTP.start(uri.hostname, uri.port) {|http| http.request(req) } json = JSON.parse(res.body) json.extend(Methodize) That is it!

Código Inspirado

Acabo de reler um código que escrevi e achei a solução tão maluca e útil rs que vale a pena ser comentada. O objetivo é implementar uma versão simples do HttpResponse cujo comportamento seja minimamente próximo a versão original, sem no entanto precisar extender um NullObject do HttpResponse. A solução de sempre... proxy dinâmico. public class DynamicProxy implements InvocationHandler{ private Set set = new HashSet (); private Object target; private String getTarget; public DynamicProxy(Object target, String getTarget){ Method[] methods = target.getClass().getMethods(); set.addAll(Arrays.asList(methods)); this.getTarget = getTarget; this.target = target; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { if (set.contains(method)){ return method.invoke(target, args); }else { if (method.toString().equals(getTarget)){ return target; } } return null; } } Agora o método que fabrica o HttpResponse. O resultado d...

Apple não é o dono da Bola

Tem uma anedota que ilustra bem como o que a Apple e o Android OS significam no mercado de smartphones e tablets . Todas as tardes, o pessoal saía para jogar bola num campinho próximo ao centro. O encontro não era formal, não havia hora combinada, não sabíamos quem compareceria nem quem iria trazer a bola. Na verdade a questão da bola costumava ser a mais problemática.  As mães não gostavam que levássemos a bola novinha  para se perder no meio do mato ou coisas assim. Mas tentávamos o possível para sempre ter uma bola ali. Em alguns casos, aparecia um moleque mimado que, por estar ele com uma bola, deixávamos que ele participasse do racha. Geralmente esses moleques não suportavam a primeira dividida e ameaçavam levar a preciosa redonda caso fossem contrariados. Evitávamos esse mal estar: quando encontrávamos essa situação, tolerávamos o cidadão o máximo possível. Foi então um dia que cheguei um pouco mais tarde que o habitual e o jogo já havia começado. E era...

Easy Tricks

I've already done a thumbnail page, using DropBox, ImageMagick, bash > ls > html > css. First tip: You can sync your files online and across computers with @Dropbox. 2GB account is free! https://www.dropbox.com/home . Second, select a collection of files (in my case, PDF files about boardgames) and put them in a public folder within Dropbox (I've created games subfolder in public folder to do that). Use ImageMagick to create thumbnail from files:  (to install imagemagick in Linux use:  sudo apt-get install imagemagick) So, to create a thumb for all files I've used following command: for a in $(ls *.pdf); do convert -thumbnail x96 $a[0] $a.png; done Now, it is possible create HTML from these files: for a in $(ls *.pdf); do echo " $a " >> file.html; done (yes, I know... I would use sed command to change pdf extension rather than just to suffix ".png"... it's just to keep things simple :D) Next, I've created an index f...

Do Browser para Impressora - Considerações Finais

Problemas com XML-FO Solução Flying Saucer Apesar de ser apreciável a iniciativa da Apache com o XML-FO, o Apache FOP não está suficiente maduro para ser utilizado em qualquer ocasião. Uma interessante alternativa é outro projeto que realiza uma transformação XSL mas diretamente para PDF. Esse é o projeto Flying Saucer, que contém entre outras coisas suporte para CSS3. Para o meu problema, O Flying Saucer tem mostrado como a melhor solução em termos de precisão além de contar com qualidades como flexibilidade e eficiência. Podemos verificar no projeto que ele faz uso do iText para gerar o arquivo PDF, mas tem a possibilidade de utilizar renderizadores para arquivos de saída diferentes. Procedimento necessário Instalar o Flying Saucer e suas dependências no Classpath do seu projeto. No caso de um projeto WEB, adicionar as bibliotecas no diretório WEB-INF. Utilizar o JAPX (The Java API for XML Processing ) para converter um arquivo XML num documento DOM (org.w3c.dom.Document)....

Do Browser para Impressora - Parte 3

Teoricamente, recuperar a saída de um Servlet (em geral um documento em texto como o HTML, mas pode ser qualquer arquivo incluso na resposta do servidor) mesmo que seja um JSP, deveria ser fácil. O JSP é convertido em uma classe Java que segue uma interface da especificação do Java Servlet com todas os métodos necessários para recuperar sua saída. Infelizmente, as classes geradas encontram-se em um contexto que o Classloader que executa os servlets não tem acesso. Então, para acessar as saídas dos JSPs é necessário uma abordagem mais indiretas. Na arquitetura J2EE, temos os seguintes recursos à nossa disposição: Filtros: antes do envio da resposta ao cliente a cadeia de filtros intercepta a mensagem e pode enviar uma nova mensagem baseado na mensagem interceptada; RequestDispatcher.include: esse (novo) método permite um servlet programaticamente adicionar o conteúdo de outro, o que é semelhante a tag jsp:include; new URL(urlLocation).openStream: método que abre uma conex...

Do Browser para Impressora - Parte 2

Ao invés de utilizar o browser para enviar um documento HTML para a impressora, podemos fazer uso de técnicas mais indiretas. Para isso, devemos utilizar um padrão que facilite manipulação de seu conteúdo. O padrão apropriado é o XHTML. Antes de explicar como o XHTML pode ser usado para transformação de um documentos em comandos de impressão, consideremos outros benefícios de se utilizar o XHTML no lugar do HTML. XHTML Uma das interessantes convergências tecnológicas é o padrão XML. O XML é uma especificação de texto com marcações derivado do SGML, que utiliza uma gramática mais restrita. Por uma especificação de texto com marcações eu quero dizer que o XML possui marcadores que definem uma certa propriedade do texto: por exemplo que um certo fragmento é um paragrafo ( Isso é um parágrafo ), ou o nome de diretor de cinema( Tim Burton , etc. Por uma gramática mais restrita eu quero dizer que a definição do que pode e o que não pode no XML é mais simples. Para maiores informações veja...

Do HTML para impressora - Parte 1

Certas vezes, nós nos deparamos como a necessidade de fazer um objeto de apresentação para situações bem diferentes como o Browser e a impressora. A briga é boa: podemos criar objetos especializados para cada meio ou criar um objeto versátil o suficiente para atender os meios alvos. A seguinte proposta se guia pelo segundo caso objetivando a codificação de um único código para realizar uma tarefa específica. Imagine uma aplicação com a seguinte funcionalidade: A aplicação tem basicamente a função de buscar notas por um certo critério, exibir e imprimir a nota procurada. Um operador informa os campos chaves da nota. No passo seguinte, a aplicação devolve uma página com os dados da nota e uma formatação que mimetize ao máximo o layout originial da nota. Eventualmente, como essa nota está integrada a uma aplicação web, a página conterá outras “informações” como logo, links de navegação etc que não tem nada a ver com a nota mas apenas com a aplicação que a contém. Sem um tratamento adeq...

Servlet - Mensagens Assíncronas

Meu trabalho de conclusão de curso foi sobre um sistema de comunicação de bibliotecas. Desenvolvi o trabalho inicialmente nas aulas de XP e mais tarde, junto com o co-autor da monografia, Leandro Bororo. Todo o trabalho gira em torno de dois problemas: exportar os dados da base para um formato especial, denominado MARC, e importar os dados desse formato para o banco. Podemos separar isso na discussão legal e na discussão chata. A discussão chata é justamente os objetivos básicos do projeto supracitados. A discussão legal é como criar uma interface WEB para esse componente que permita o acompanhamento do processo de importação ou exportação. Obviamente vou falar sobre o segundo caso. Desenvolver uma interface WEB para o MARC não é nenhum problema. No entanto, acompanhar a importação/exportação e permitir que o sistema trabalhe com arquivos grandes (mais de 10 megabytes) é outra história. A própria natureza de uma aplicação WEB torna a solução síncrona problemática. A análise de um...