Getting the Android’s AlarmClock application source from official repositories:
git clone git://android.git.kernel.org/platform/packages/apps/AlarmClock.git
To get the head version for an old platform like the 1.4 (codename donut), choose the correspondent branch using -o or –origin:
git clone git://android.git.kernel.org/platform/packages/apps/AlarmClock.git --origin donut
This is a simple program I wrote called Who Am I that shows informations about the device which it is running. Which can be useful for developers and maybe advanced users.
Download:
Main Activity source code:
package net.silveiraneto.whoami;
import android.app.Activity;
import android.os.Build;
import android.os.Bundle;
import android.widget.EditText;
public class WhoAmI extends Activity {
private EditText mEditor;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.whoami);
mEditor = (EditText) findViewById(R.id.editor);
Object[][] properties = {
{"Build.BOARD", Build.BOARD},
{"Build.BRAND", Build.BRAND},
{"Build.CPU_ABI", Build.CPU_ABI},
{"Build.DEVICE", Build.DEVICE},
{"Build.DISPLAY", Build.DISPLAY},
{"Build.FINGERPRINT", Build.FINGERPRINT},
{"Build.HOST", Build.HOST},
{"Build.ID", Build.ID},
{"Build.MANUFACTURER", Build.MANUFACTURER},
{"Build.MODEL", Build.MODEL},
{"Build.PRODUCT", Build.PRODUCT},
{"Build.TAGS", Build.TAGS},
{"Build.TIME", Build.TIME},
{"Build.USER", Build.USER},
};
for(Object[] prop: properties) {
mEditor.append(String.format("%s: %s\n", prop[0], prop[1]));
}
}
}
And its Android Manifest:
Quando desenvolvendo aplicações móveis para o Android as vezes precisamos obter imagens do dispositivo para comparar com um alguma referencia no computador. Como tirar screenshots no Android? Usar uma aplicação para isso e então passar as imagens para o computador? Não, há um jeito mais fácil.
Juntamente com o Android SDK há uma ferramenta na pasta tools chamada ddms (Dalvik Debug Monitor Server). O ddms ainda está pouco integrado com o plugin ADT do Eclipse e também pouco documentado, mas é extremamente útil para várias tarefas como monitoras o heap de memória, threads, processos e, é claro, tirar screenshots.
Para utiliza-lo com todas suas funcionalidades lembre-se de desligar primeiro o Eclipse (porque no momento só pode ter um aplicativo conectado ao ADB), porém que para fins de captura de tela isso não é necessário. Selecione um dispositivo, vá no menu Devices → Screen Capture (Control-S). Pronto, você tem no computador uma captura da tela do dispositivo.
Here is a simple server for those who are starting studying sockets or just needs a simple socket server example for reuse while writing your own behavior.
Features:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
private static final int DEFAULT = 8080;
public Server() {
this(DEFAULT);
}
public Server(int port) {
ServerSocket sock;
try {
sock = new ServerSocket(port);
System.out.println(String.format("Listening on port %d.", port));
while (true) {
try {
Socket client = sock.accept();
System.out.println("A new connection was accepted.");
BufferedReader in = new BufferedReader(
new InputStreamReader(client.getInputStream()));
OutputStreamWriter out = new OutputStreamWriter(client
.getOutputStream());
String input = "";
while (!input.equals("exit")) {
input = in.readLine();
if (input.equals("shutdown")) {
System.exit(0);
}
out.write(input.toUpperCase() + "\r\n");
out.flush();
}
in.close();
out.close();
client.close();
System.out.println("Connection closed.");
} catch (NullPointerException npe) {
System.out.println("Connection closed by client.");
}
}
} catch (IOException ioe) {
System.err.println(ioe);
System.exit(-1);
}
}
public static void main(String[] args) throws IOException {
new Server();
}
}
Usage:
$ javac Server.java
$ java Server
Listening on port 8080.
In another terminal:
$ telnet localhost 8080
Trying ::1…
Connected to localhost.
Escape character is ‘^]’.
hi
HI
The quick brown fox jumps over the lazy dog.
THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG.
exi
EXI
exit
EXIT
Connection closed by foreign host.
Today I was programming a toString method for a class widely used in a application, using the very useful String.format that provides a C’s like printf formatter.
@Override
public String toString() {
return String.format("VO[a: %.1f, b: %.1f, c: %.1f]", a, b, a+b);
}
%.1f means a float with one digit precision after the dot separator. The code produces something like:
VO[a: 1.0, b: 2.0, c: 3.0]
The problem arises when running a JUnit test on this method wrote using a regular expression to extract the values from the String to test it correctness. We cannot assume that the dot will be always the separator for displaying a float value, in my locale pt_BR would be a comma. So the output would be:
VO[a: 1,0, b: 2,0, c: 3,0]
For a predictable output we can set a Locale for String.format:
Locale en = new Locale("en");
return String.format(en, "VO[a: %.1f, b: %.1f, c: %.1f]", a, b, a+b);
So it will always use the dot as common separator. Of course you should follow and respect the localization and internationalization efforts in others moments but in this toString case we are using it internally for debug and unitary testing so we can set a English default locale for safety reasons.
Achei esse chaveiro miniatura do baixo-violino Höfner_500/1, o famoso baixo do Paul McCartney nos tempos dos Beatles. Por enquanto eu fico com o chaveiro mas um dia ainda vou ter uma réplica desse baixo. 🙂
Essa quarta-feira acontece o primeiro CEJUG Café com Tapioca de 2010.
O foco serão duas palestras ministradas pelo José Donizetti da Caelum, sendo a primeira sobre VRaptor 3 e a segunda sobre Test Driven Development.
O evento será realizado no auditório do Atlântico.
Hoje devido a Lua ter chegado ao perigeu da órbita com a Terra coincidentemente na noite de lua cheia, tivemos uma lua 14% maior e uma luminosidade 30% maior.
Eu já havia tentado tirar fotos da lua diversas vezes, sempre frustradas. Hoje consegui fotos com uma qualidade mÃnima, onde se pode distinguir alguns das principais montanhas, crateras e mares da Lua. São fotos a partir de algumas tentativas da janela do meu quarto, sem nenhum equipamento especial além da própria câmera, Canon PowerShot G10.
Essa é uma das fotos, passando por um aumento do contraste no Gimp:
O restante das fotos estão neste álbum no Flickr.
Eu achei um bom mapa lunar e destaquei sobre a foto alguns lugares que foram possÃveis distinguir na foto.
Algumas dicas para tirar uma boa foto da lua Canon PowerShot G10:
Quantos zeros tem entre um e mil?
É mais fácil responder perguntas desse tipo escrevendo pequenos programas usando o suporte a programação funcional e compreensão de lista que algumas linguagens como Python oferecem.
Para contar os zeros de um número, transformamos ele em uma string e contamos quantas substrings ‘0’ ele contém. Por exemplo o 800:
str(800).count('0')
# 2
Para gerar uma lista ordenada com os elementos do intervalo entre um e mil, inclusive os valores um e mil:
xrange(1,1001)
# [1, 2, ... , 999, 1000]
Pegamos esse intervalo e geramos uma outra lista onde cada elemento é a contagem dos zeros do número do intervalo.
[str(x).count('0') for x in xrange(1,1001)]
# [0, 0, ... , 0, 3]
Por exemplo, 1 não tem nenhum zero. Dois também não. 999 também não. 1000 tem três.
Somamos todos os elementos da lista temos o número de algarismos zero entre um e mil.
sum([str(x).count('0') for x in xrange(1,1001)])
E a resposta é 192.
O mesmo poderia ser obtido contando quantos zeros há na representação de string da lista do intervalo.
str(range(1,1001)).count('0')
Mas essa abordagem apesar de menor é menos geral se você quiser modifica-la para contagens mais complexas.
A diferença do range pro xrange é que o range constrói a lista real do intervalo real em memória e o xrange uma representação da lista do intervalo. Em geral mas não sempre, a performasse do xrange é melhor.
De toda forma, em ambos os casos, o resultado é o mesmo.