Week 1 – Introduction to the Android Platform


andriod archtecture

The Android Architecture

linux kernel: is lowest layer of software in the Android Platform

  • Security: it provides a permissions architecture, so you can restrict access to data and resources for only processes that have proper authorizations.
  • Memory & Process Management: processes can run simultaneously without interfering each other
  • File & Network I/O
  • Device Drivers: allow device drivers to be plugged in, so Android can communicate with a wide range of low-level hardware components (radios, memory, cameras, etc).

Android Linux Kernel also includes several Android-specific components:

  • Power Management: mobile devices often run on battery power
  • Android Shared Memory and Low Memory Killer: it provides memory sharing and memory managing features, because mobile devices have limited memory.

———————————————————————————————–

Android Runtime:

~> Two main components:

– Core Java Libraries:

  • Basic Java Classes (java.*, javax.*) – Data Structure, Concurrence mechanisms and file I/O.
  • Android packages have software that’s specific to the life cycle of mobile applications. (android.*)
  • The org packages support various internet-web applications. (org.*)
  • Junit packages support the unit testing of applications. (junit.*)

– Dalvik Virtual Machine: it is the software that execute Android applications. The Dalvik Virtual Machine was specifically designed to run in the resource-constrained (slower CPU and less RAM and limited battery life than desktop device) environment (mobile devices).

———————————————————————————————–

Application Framework:

Component: Activity Manager, Window Manager, Content Providers, View System, etc.

  • Package Manager: Database that keeps track of all the applications currently installed on your device (bunch of icons, each one representing an application package that’s stored on the phone. The package Manager stores information about these applications.
  • Window Manager: manages the many windows that comprise applications (notification bar, which display status indicators, that tell about battery, current time and wifi. In the main application window it has the webpage, app icons. And in the sub-windows it has menus and dialogs).
  • View System: it contains many graphical user interface elements (icons, text entry boxes, buttons, etc)
  • Resource Manager: it manages non-compiled resources (strings, graphics, user interface layout files, etc)
  • Activity Manager: it manages app lifecycle and navigation stack
  • Content Provider: inter-application data sharing. It’s database that allow applications to store and share structured information.
  • Locations Manager: it provides locations and movement information. (eg. google maps)
  • Notification Manager: it places notifications icons in the status bar when important events occur.

———————————————————————————————–

Application:

  • home: main screen
  • contacts: contacts database
  • phone: dial phone numbers
  • browser: view web pages
  • email reader: compose and read email messages
Anúncios

MYO: Inovação tecnológica na interação humano-computador

MYO-Wearable-Gesture-Control

We already use our hands for everything” – Stephen Lake

Em uma velocidade altamente expansiva, a tecnologia transforma o modo de viver das pessoas. O Thalmic Labs não ficou para trás e fez uma contribuição com uma tecnologia inovadora. Essa Startup é uma empresa destinada ao desenvolvimento de controle de gestos e de interação humano-computador. A sua grande criação chama-se MYO, uma tecnologia inovadora que utiliza a atividade elétrica dos músculos para controlar computadores, smartphones, e vários outros gadgets. O resultado do uso dessa tecnologia revolucionária é a perfeita interação com computadores e uma mágica sensação de controle.

O MYO se conecta com os aparelhos via Bluetooth e possibilita controlar apresentações (Exemplo: Power Point), jogar vídeo game, editar aúdio, navegar na internet, entre outras atividades. E tudo isso é compatível com o Windows, o Mac OS, Android e iOS.

Vídeo demonstrativo do MYO: http://www.youtube.com/watch?feature=player_embedded&v=oWu9TFJjHaM

“Em menos de um ano, nossa empresa cresceu de 3 fundadores para mais de 30 empregados. Nós estamos transformando a face da interação humano-computador com um grupo único, de pessoas talentosas que se juntaram a nós e que passaram por startups e empresas multinacionais. Os membros dos nosso time estão empolgados em expandir os limites das tecnologias atuais e entusiasmados em apresentar o nosso primeiro produto, MYO, para todas as pessoas do mundo.” disse Stephen Lake, CEO e Co-Founder do Thalmic Labs em entrevista para a TechVibes.

Por ser uma tecnologia que surpreende os limites das tecnologias atuais, o Thalmic Labs já possui um enorme portfolio de publicações em revistas e jornais de peso como Forbes, MIT Technology Review, The Wall Street Journal, Bloomberg Businessweek, sem contar as mídias sociais Techcrunch e Mashable. O sucesso dessa startup é visto não só nas publicações sobre ela, mas também no número de MYO pré-vendidos. Já são mais de 30.000 MYO’s já pedidos e eles serão entregues apenas no início de 2014.

Foi vencedor do Canadian Startup Awards 2013 como a startup do ano (http://www.techvibes.com/blog/winners-2013-canadian-startup-awards-2014-01-20). E considerada, pela Digital Trends, “Best of CES Awards 2014” como “cool tech” (http://www.digitaltrends.com/ces/best-of-ces/).

Vídeo que mostra tudo por trás de todo trabalho no Thalmic Labs:

https://www.youtube.com/watch?v=oV0PbKZyqg8&feature=youtu.be

Algumas fotos do MYO:

myo

myo1

O time do Thalmic Labs:

ThalmicTeam

Harvard CS50 – week 0 [Portuguese]

Aqui está a minha primeira semana no curso CS50 da Harvard University. Muito aprendizado, muitas coisas interessantes e muita gente inteligente interagindo juntos.

harvard

Lecture:

O computador representa apenas dois valores: 0 e 1 (binários). off ou on, false ou true.

Com o ASCII temos bits representando números (valores binários), números representando letras e letras representando textos, email, etc.

– O que é o CS50?

“Uma introdução para uma iniciativa intelectual da Ciência da Computação e a arte da programação.”

Algoritmo: Um procedimento, um processo, uma sequência de instruções para fazer algo.

Na Ciência da Computação, entende-se por algoritmo como uma sequência de instruções para resolver um problema.

Para o entendimento do que significa algoritmo, o Professor David utiliza o exemplo do dicionário.

~> Procurar a palavra “mike” no dicionário: (Há várias maneiras de se procurar)

– Uma delas seria: virar a página e procurar por “mike”, virar a página e procurar por “mike”, virar a página e procurar por “mike”.. etc. Até que ache a a palavra desejada.

– Um diferente tipo de sequência seria: ir para a metade do dicionário, procurar pela letra da página. Se a letra for alfabeticamente maior que a letra inicial da palavra procurada, volta páginas e repete o processo. Caso contrário, segue para as próximas páginas e repete o processo. Assim otimizaria o processo, deixaria mais rápido e eficiente, já que metade do dicionário, a cada processo, seria jogado fora.

Pseudo-código (pseudocode) é um tipo de sintaxe que representa uma linguagem de programação.

Uma “variável” é um contêiner, um recipiente de memória. Dentro de cada variável, é possível colocar valores: palavras, parágrafos, imagens, etc.

Um “loop” é um tipo de ciclo. Toda vez que é utilizado a palavra “for” (para, em inglês), tem a ideia de loop, de algo cíclico

Vídeo TEDedhttp://www.youtube.com/watch?v=6hfOvs8pY1k

No vídeo é mostrado o pseudo-código para contar quantas pessoas estavam na quarto. Primeiramente é tentar contar de 1 em 1 pessoa. Então ele utiliza um loop (for), indicando “para cada pessoa no quarto: acrescente +1 na variável ‘N’ (contador)”. Mas é um tanto devagar, então é utilizado um outro pseudo-código para agilizar o processo. O código agora é “para cada par de pessoas, acrescente +2 na variável ‘N’ (contador).”. Porém, nesse código há um erro: quando há uma, três, cinco pessoas (números ímpares), acaba contando apenas um par e deixa de contar a pessoa que não faz parte do par. Para solucionar esse erro, é utilizado a “condição”. A condição é uma bifurcação (dois caminhos diferentes). Caso aceite a condição, vai por um caminho, caso contrário, irá seguir outra instrução. O código aparece da seguinte forma agora: “Se restar uma pessoa, acrescente +1 na variável ‘N’ (contador).”. Agora o pseudo-código está completo e pode contar a quantidade de pessoas dentro do quarto, de uma forma mais ágil.

Walkthroughs:

Cough 1: https://www.youtube.com/watch?v=gb341GXeskk

Cough 2: https://www.youtube.com/watch?v=u-vSE5alMdw

Cough 3: https://www.youtube.com/watch?v=HchQ1p-is5A

Cough 4: https://www.youtube.com/watch?v=qRAdcnpSqws

Professor David J. Malan inicia um projeto no Scratch: ele que o gatinho faça “cough” (onomatopeia de tosse) por 1 segundo. Depois aumenta para 2 cough, e 3, 4.. porém, não é o melhor design de código para implementar. Então ele pega o bloco “repeat” (repetir), que tem o mesmo significado de um loop nas linguagens de programação. Então ele pode repetir quantas vezes quiser, com um código mais simples e reduzido.

Para o “programinha” de fazer o gatinho falar “cough” é definido uma função “cough”. E para quando utilizar a função “cough”, é executado exatamente a fala do gatinho. O professor implementa ainda mais a função “cough” utilizando uma variável “n” para dizer quantas vezes quer que o gatinho fale “cough”.

Agora ele define uma função chamada “sneeze” (espirro), que faz o gatinho falar “achoo” (onomatopeia de espirro).

A única diferença entre as funções “cough” e “sneeze” é apenas o nome das funções e o que o gatinho fala. O resto é o mesmo código. Então para um melhor design do código, podemos refatorá-lo. Então cria-se mais uma função que pode receber uma string “word” (palavra que irá colocar para o gatinho falar), e um númeor inteiro de vezes que o gatinho irá falar (“n”). Então para as duas funções, é chamado a nova função, o que minimiza uma quantidade de código duplicado.

Counting Sheep: https://www.youtube.com/watch?v=9s3cZ3DBUwE

O professor David tenta implementar um novo programinha! Agora ele quer fazer as ovelhas contaram infinitamente, a cada segundo. Ele cria uma variável chamada “counter” (contador) e pega o bloco “forever”, que tem a função de executar infinitamente o que está dentro desse bloco, que no caso é fazer a ovelha falar o contador a cada segundo (1, 2, 3, 4, 5…).

Don’t pet the Cat: https://www.youtube.com/watch?v=982SmMd0wgI

Agora o professor implementa um programa que mostra um gato que não gosta que ele seja alimentado. Cria um bloco que irá executar infinitamente (“forever” – nome do bloco), utiliza o bloco “if-else”, mostrando que se colocar o mouse em cima dele, ele solta um grito de leão, caso contrário (else), ele continua miando como propriamente o gato.

Shorts:

– Algoritmos: https://www.youtube.com/watch?v=HFLczUUHWNw

O algoritmo é um sequeência de instruções (etapa por etapa). Para cada problema, existem diversos tipos de algoritmos que podem ser implementados. O CS50 dá um exemplo sobre “como ir de casa para o trabalho”. Há diferentes maneiras:

Algoritmo 1: Andando

1. Ir até a porta e abrí-la

2. Andar 3 km.

3. Entrar no prédio do trabalho

Algoritmo 2: Bicicleta

1. Ir até a porta e abrí-la

2. Colocar o capacete

3. Andar de bicicleta por 3km.

4. Tirar a capacete e prender a bicicleta

5. Entra no prédio do trabalho.

Algoritmo 3: Bus

1. Ir até a porta e abrí-la

2. Andar um tempo até o ponto de ônibus

3. Pegar o ônibus

4. Andar até o prédio (após descer do ônibus)

5. Entrar no prédio do trabalho

Algoritmo 4: Taxi

1. Ligar para empresa de taxi

2. Ir até a porta e abrí-la

3. Pegar o táxi por 3km

4. Entrar no prédio do trabalho

Todas fazem a mesma coisa: levar até o trabalho.

Para cada caso, cada algoritmo tem pós e contras:

– Custo:

Andar: De graça ~> Melhor opção

Bicicleta: Barato

Ônibus: Barato

Taxi: Caro

– Velocidade:

Andar: Devagar

Bicicleta: Médio

Ônibus: Médio

Taxi: Rápido ~> Melhor opção

– Threads: https://www.youtube.com/watch?v=3YD66bHehhQ

Quando você navega na internet, parece que tudo é executa ao mesmo tempo. Por exemplo: Você utiliza o Google Chrome, enquanto ouve música no iTunes e escreve uma redação no Word (ferramenta da Microsoft). Mas por de trás, é executado 1 programa de cada vez, e isso é uma das funções dos sistemas operacionais (Windows, Mac OSX, Linux). O sistema operacional gerencia cada um desses processos separadamente.

CS50 mostra um exemplo no Scratch: um peixe que nada, mas a cada 3 segundos, ele fala. Ou seja, executa dois processos ao mesmo tempo (nada e fala).

A “semana 0” teve como primeiro exercício, um programa para desenvolver na ferramenta Scratch do MIT. Um dos games mais legais que foram feitos foi esse: http://scratch.mit.edu/projects/266919/

É basicamente um DDR jogado no computador.

Facebook: https://www.facebook.com/leandro.tk.1

Twitter: https://twitter.com/LeandroTk_

Introduction: Leandro Tk [English]

Hey guys!

tkkkk
My name is Leandro Tk e today I’m 21. In this introduction, I’ll tell you the reason that I want to start this blog.

About 2 years ago, I finished my high school. I did the “Vestibular” (It’s similar to SAT in US) to get college/university. I thought Civil Engineering was the best choice to myself. It wasn’t! I quickly gave up. So I thoght about Business Administration. It’s a human course, and since I was a kid, I always read business’ books. I was one of the students approved to study at USP (Universidade de São Paulo – Sao Paulo University). But I chose FGV (Fundação Getúlio Vargas).

I didn’t like the course. It was too theoretical. It was like I didn’t learn anything in a half year. But It was difficult to give up of FGV, because it’s one of the Top Business Universities in Brazil. But in this middle time, I did a online course on Codecademy (codecademy.com) about Python, a programming language. Despite of the headaches to understand the Computer Science concepts, It was very fun learn to program. So I decide to study Computer Science at College and a couple weeks ago, I was approved to study at Fatec-SP (São Paulo State Technological College).

Today I definitely know what I want be: An amazing Software Engineer. I did a few online courses: Codecademy, Udacity, Coursera, NovoEd, Dash, edX, lynda.com. This websites have excellent content about programming and software engineering, as it’s ministered by top professional and universities like Harvard, MIT, Stanford, Berkeley, etc.

My goal is to propagate the knowledge that I learned in this courses. I also have interest in startups, entrepreneurship and technology, so I want to write about it as well.

Facebook: https://www.facebook.com/leandro.tk.1

Twitter: https://twitter.com/LeandroTk_

Introdução: Leandro Tk [Portuguese]

Olá pessoal!

tkkkk

Meu nome é Leandro Tk e hoje tenho 21 anos. Nessa introdução contarei a vocês o motivo de querer iniciar um blog.

A uns 2 anos, me formei do ensino médio. Prestei para engenharia civil, achando que seria a profissão que iria me dedicar toda a vida. Não foi assim! Logo desisti. Então pensei em administração. É um curso mais de humanas, mas que eu sempre li livros a respeito, desde criança. Passei na USP, mas acabei escolhendo a FGV.

Não me encontrei no curso. Foi uma decisão difícil largar essa universidade tão conceituada, sem saber, de fato, o que iria fazer. Até que fiz um curso do Codecademy (codecademy.com) sobre Python, uma linguagem de programação. Apesar das dores de cabeça pra entender os conceitos de programação, foi muito divertido aprender a programar , sozinho, e principalmente essa Python! Decidi fazer Ciências da Computação (ou qualquer curso relacionado). Hoje acabo de ser aprovado na Fatec-SP como aluno de Análise e Desenvolvimento de Sistemas, e espero o resultado da USP.

Bom, 2013 foi ano de uma virada total na minha vida, quanto a carreira. Deixar uma grande faculdade, com um futuro garantido nas (multi)nacionais, e ganhando muito dinheiro, sem saber o que fazer da vida. Hoje tenho certeza que é essa área que quero seguir. Fiz inúmeros cursos online: Codecademy, Udacity, Coursera, NovoEd, Dash, edX, lynda.com. Esses são cursos online e gratuitos (a maioria), e muitos deles é sobre a área de programação, engenheira de software. O conteúdo é de pura excelência, já que são ministrados por profissionais do mercado americano e universidades como Harvard, MIT, Stanford, Berkeley, entre outras de um nível impressionante!

De tudo que eu aprendi desses cursos que fiz e estou fazendo, queria passar para todos, então escreverei o que aprendi, tutoriais, artigos, etc. Esse é um dos motivos de começar o blog.. poder disponibilizar todo conteúdo e conhecimento que tive com todos os cursos que fiz.

Além da parte de programação e engenharia de software, quero fazer posts sobre startups, empreendedorismo, pois é um outro assunto que tenho muito interesse, tenho estudo e lido muito sobre o assunto. Quero passar todo o conhecimento que tive com os vários livros, por exemplo Lean Startup (Startup Enxuta), do Eric Ries.

A ideia é contribuir com conteúdos de qualidade para todas as pessoas.

Facebook: https://www.facebook.com/leandro.tk.1

Twitter: https://twitter.com/LeandroTk_