Shared posts

29 Sep 15:06

Pagination Done the PostgreSQL Way

Hello my dear friends. In this article I will talk about PostgreSQL and pagination.

Pagination in simple way

Let’s start with simple examples. A query to fetch the 10 most recent news:

SELECT * FROM news WHERE category_id = 1234 ORDER BY date, id DESC LIMIT 10;

In SQL we are using ORDER BY to get most recent first news and LIMIT to fetch only the first 10 news.

Worst Case: No index for ORDER BY

# EXPLAIN ANALYZE SELECT * FROM news WHERE category_id = 1234 ORDER BY id LIMIT 10;
                                                       QUERY PLAN
-------------------------------------------------------------------------------------------------------------------------
 Limit  (cost=27678.15..27678.18 rows=10 width=8) (actual time=393.361..393.363 rows=10 loops=1)
   ->  Sort  (cost=27678.15..28922.17 rows=497609 width=8) (actual time=393.359..393.360 rows=10 loops=1)
         Sort Key: id
         Sort Method: top-N heapsort  Memory: 25kB
         ->  Seq Scan on foo  (cost=0.00..16925.00 rows=497609 width=8) (actual time=0.024..277.040 rows=499071 loops=1)
               Filter: (category_id = 1234::integer)
               Rows Removed by Filter: 500929
 Total runtime: 233.021 ms
(8 rows)

The limiting factor is the number of rows that match the WHERE condition. The database might use an index to satisfy the WHERE condition, but must still fetch all matching rows to sort them.

no_index

Fetch Next Page

To get next resent 10 news in most cases using OFFSET:

SELECT * FROM news WHERE category_id = 1234 ORDER BY date, id DESC OFFSET 10 LIMIT 10;

Worst Case: No index for ORDER BY

# EXPLAIN ANALYZE SELECT * FROM news WHERE category_id = 1234 ORDER BY id OFFSET 10 LIMIT 10;
                                                       QUERY PLAN
-------------------------------------------------------------------------------------------------------------------------
 Limit  (cost=30166.22..30166.25 rows=10 width=8) (actual time=388.711..388.714 rows=10 loops=1)
   ->  Sort  (cost=30166.20..31410.22 rows=497609 width=8) (actual time=388.706..388.711 rows=20 loops=1)
         Sort Key: id
         Sort Method: top-N heapsort  Memory: 25kB
         ->  Seq Scan on foo  (cost=0.00..16925.00 rows=497609 width=8) (actual time=0.020..271.130 rows=499071 loops=1)
               Filter: (category_id = 1234::integer)
               Rows Removed by Filter: 500929
 Total runtime: 388.761 ms
(8 rows)
# EXPLAIN ANALYZE SELECT * FROM news WHERE category_id = 1234 ORDER BY id OFFSET 100 LIMIT 10;
                                                       QUERY PLAN
-------------------------------------------------------------------------------------------------------------------------
 Limit  (cost=36285.62..36285.65 rows=10 width=8) (actual time=389.534..389.536 rows=10 loops=1)
   ->  Sort  (cost=36285.37..37529.40 rows=497609 width=8) (actual time=389.512..389.524 rows=110 loops=1)
         Sort Key: id
         Sort Method: top-N heapsort  Memory: 30kB
         ->  Seq Scan on news  (cost=0.00..16925.00 rows=497609 width=8) (actual time=0.029..274.907 rows=499071 loops=1)
               Filter: (category_id = 1234::integer)
               Rows Removed by Filter: 500929
 Total runtime: 389.588 ms
(8 rows)
# EXPLAIN ANALYZE SELECT * FROM news WHERE category_id = 1234 ORDER BY id OFFSET 1000 LIMIT 10;
                                                       QUERY PLAN
-------------------------------------------------------------------------------------------------------------------------
 Limit  (cost=44246.58..44246.61 rows=10 width=8) (actual time=389.982..389.986 rows=10 loops=1)
   ->  Sort  (cost=44244.08..45488.10 rows=497609 width=8) (actual time=389.765..389.930 rows=1010 loops=1)
         Sort Key: id
         Sort Method: top-N heapsort  Memory: 96kB
         ->  Seq Scan on news  (cost=0.00..16925.00 rows=497609 width=8) (actual time=0.024..271.414 rows=499071 loops=1)
               Filter: (category_id = 1234::integer)
               Rows Removed by Filter: 500929
 Total runtime: 390.049 ms
(8 rows)

As you can see by EXPLAIN for each next page need more memory to sort rows, before to do OFFSET and LIMIT. This might become the limiting factor when browsing farther back. Fetching the last page can take considerably longer than fetching the first page.

no_index2

Improvement #1: Indexed ORDER BY

To impove pagination we should have indexes for fields, which we are using in ORDER BY:

# CREATE INDEX index_news_on_id_type ON news USING btree (id);
CREATE INDEX
# CREATE INDEX index_news_on_category_id ON news USING btree (category_id);
CREATE INDEX

The same index can be using in WHERE and ORDER BY.

# EXPLAIN ANALYZE SELECT * FROM news WHERE category_id = 1234  ORDER BY id OFFSET 10 LIMIT 10;
                                                                  QUERY PLAN
----------------------------------------------------------------------------------------------------------------------------------------------
 Limit  (cost=1.07..1.71 rows=10 width=8) (actual time=0.087..0.112 rows=10 loops=1)
   ->  Index Only Scan using index_news_on_id_type on news  (cost=0.42..31872.47 rows=497609 width=8) (actual time=0.057..0.109 rows=20 loops=1)
         Index Cond: (category_id = 1234::integer)
         Heap Fetches: 20
 Total runtime: 0.158 ms
(5 rows)

# EXPLAIN ANALYZE SELECT * FROM news WHERE category_id = 1234  ORDER BY id OFFSET 100 LIMIT 10;
                                                                  QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------------------------------
 Limit  (cost=6.83..7.47 rows=10 width=8) (actual time=0.315..0.338 rows=10 loops=1)
   ->  Index Only Scan using index_news_on_id_type on news  (cost=0.42..31872.47 rows=497609 width=8) (actual time=0.058..0.318 rows=110 loops=1)
         Index Cond: (category_id = 1234::integer)
         Heap Fetches: 110
 Total runtime: 0.409 ms
(5 rows)

# EXPLAIN ANALYZE SELECT * FROM news WHERE category_id = 1234  ORDER BY id OFFSET 1000 LIMIT 10;
                                                                   QUERY PLAN
------------------------------------------------------------------------------------------------------------------------------------------------
 Limit  (cost=64.48..65.12 rows=10 width=8) (actual time=1.651..1.663 rows=10 loops=1)
   ->  Index Only Scan using index_news_on_id_type on news  (cost=0.42..31872.47 rows=497609 width=8) (actual time=0.041..1.596 rows=1010 loops=1)
         Index Cond: (category_id = 1234::integer)
         Heap Fetches: 1010
 Total runtime: 1.698 ms
(5 rows)

As you can see, fetching the next page is also faster. But in order to select, for example, the 10 page (10 per page), PostgreSQL should select 100 records and make offset 90 of selected rows.

index

Improvement #2: The Seek Method

To remove the rows from previous pages we can use WHERE filter instead of OFFSET.

# SELECT * FROM news WHERE category_id = 1234 AND (date, id) < (prev_date, prev_id) ORDER BY date DESC, id DESC LIMIT 10;

In this case neither the size of the base set(*) nor the fetched page number affects the response time. And the memory footprint is very low!

Examples:

# SELECT * FROM news WHERE category_id = 1234 AND id < 12345678 ORDER BY id DESC LIMIT 10;
                                                                      QUERY PLAN
-------------------------------------------------------------------------------------------------------------------------------------------------------
 Limit  (cost=0.42..1.09 rows=10 width=8) (actual time=0.036..0.060 rows=10 loops=1)
   ->  Index Only Scan Backward using index_news_on_id_type on news  (cost=0.42..33116.37 rows=497603 width=8) (actual time=0.035..0.053 rows=10 loops=1)
         Index Cond: ((category_id = 1234::integer) AND (id < 12345678::integer))
         Heap Fetches: 10
 Total runtime: 0.098 ms
(5 rows)

index2

But the Seek Method has serious limitations:

  • You cannot directly navigate to arbitrary pages (because you need the values from the previous page)
  • Bi-directional navigation is possible but tedious (you need to revers the ORDER BY direction and WHERE comparison)
  • Works best with full row values support (workaround is possible, but ugly and less performant)

Use case

The Seek Method perfect for “Infinite Scrolling” and “Next-Prev” (only this button) navigations:

index2

This types of paginations doesn’t need:

  • navigate to arbitrary pages
  • browse backwards (only for “Prev-Next” navigation)
  • show total pages

Summary

As you can see, pagination can be improved by using an indexes (duh..) and the seek method. Last one can improve performance of pagination, but it can be used only for several types of paginations.

This article based on slides for Markus Winand’s talk “Pagination Done the PostgreSQL Way” for PGDay on 1st Feb 2013 in Brussels. Also good article “We need tool support for keyset pagination”.

That’s all folks! Thank you for reading till the end.

25 Oct 21:34

TOP 9 – Alternativas ao Dropbox para Linux

by Pedro Pinto
O Dropbox é inquestionavelmente o serviço da cloud mais popular do mundo, isto porque também foi um dos primeiros. Nos últimos anos têm aparecido várias alternativas, que oferecem até clientes mais robustos para Linux. Hoje deixamos 9 alternativas ao Dropbox 1) AeroFS – Uma alternativa segura ao Dropbox com base em P2P O AeroFS é […]
24 Oct 13:19

Samsung testa 5G com download de 7,5 Gb/s

by Carlos Cardoso

spaceballs-meme

Antes de se tornar clinicamente insano, envenenado com o plástico do OLPC Nicholas Negroponte fez várias previsões sobre o futuro da tecnologia. Uma delas é a chamada Inversão Negroponte, segundo a qual a comunicação (na época) pessoa a pessoa era via cabo e a comunicação broadcast era sem-fio. No futuro (ou seja, hoje) pessoas falariam com pessoas sem fio, e receberíamos broadcast via cabo.

Ele acertou, mas logo isso deixará de ser verdade. O cabo tende a morrer, o grande gargalo da velocidade está sumindo. As operadoras não estão gostando do investimento pesado para aumentar a velocidade das conexões, mas são pressionadas pelos fabricantes de celulares, pelos consumidores e pelos fabricantes de equipamentos de telecomunicação.

Por exemplo, a Samsung, que como todo bom megaconglomerado da Pior Coréia, se encaixa em todas essas categorias. Agora eles testaram o que pode ser a gênese da telefonia celular 5G.

Samsungs-5G-technology

Em um teste eles equiparam uma van com rádios 5G, instalaram uma estação-base na beira da pista e mediram a velocidade. Conseguiram transmitir, com o veículo parado dados na velocidade de 7,5 Gb/s; baixando 940 MB por segundo, o equivalente a 30x uma conexão 4G LTE.

Só que celular se chama telefonia móvel, então tem que se mexer. Com o primo coreano do Stig ao volante, percorreram o circuito a 110 km/h enquanto mediam novamente a conexão. Nessas condições chegaram a um link de 1,2 Gb/s; equivalente a um download de 150 MB por segundo.

Sim, tem vídeo.

Samsung Tomorrow 5G — Live Demonstration

Com velocidades assim não faz sentido manter uma infraestrutura de cabos, para nada. Um roteador Wi-Fi só precisará de um slot para SIM card e o resto é festa.

Claro, isso em países de verdade.  Vejamos uma comparação nada científica, entre um 4G da Rogers, canadense e um da Vivo.

quaquaquatrog

Agradecimentos ao kid pelo screenshot.

É, como fica evidente o Brasil não está preparado para um evento tecnológico do porte do 5G da Samsung…

Fonte: WPC.

The post Samsung testa 5G com download de 7,5 Gb/s appeared first on Meio Bit.








24 Oct 13:17

Chromecast compatível com Wi-Fi de 5 GHz está a caminho

by Ronaldo Gogoni

Chromecast

Convenhamos, o Chromecast é um sucesso. Por apenas US$ 35 (ou R$ 199 por aqui) é possível transformar qualquer TV não-Smart num hub de entretenimento e diversão, conectado com seu desktop e seus dispositivos mobile lhe permitindo assistir o que quiser em qualquer tela grande, inclusive podendo espelhar seu desktop ou seu smartphone. E agora o Google está pensando numa nova versão do gadget, com uma conectividade melhorada.

chromecast-001

De acordo com documentos do FCC, o Google deu entrada em patentes que mostram um novo Chromecast que a princípio não traz nada de novo, mas o detalhe crucial é uma linha que revela adicional compatibilidade com frequência Wi-Fi de 5 GHz. Para muita gente, o fato do dongle ser limitado à frequência de 2,4 GHz pode ser um problema, mas é importante salientar que a boa parte dos dispositivos mobile ainda operam somente em 2,4 GHz.

chromecast-002

O Google muito provavelmente optou só agora fazer do Chromecast um gadget dual band para aumentar a compatibilidade com aparelhos que operam em ambas as frequências, como Macs, iPads e iPhones e outros Androids de ponta, a fim de disponibilizar uma transferência de dados mais ágil. De qualquer forma essa parece ser a única adição relevante ao dongle. Não há nenhuma alteração na aparência e os documentos não sugerem nenhuma adição ou feature novo.

Ainda não há a menor menção de quando esse novo Chromecast chegará ao mercado, mas é legal saber que ele será mais compatível com uma frequência de Wi-Fi mais veloz.

Fonte: SG.

The post Chromecast compatível com Wi-Fi de 5 GHz está a caminho appeared first on Meio Bit.








23 Oct 20:25

Magnus Hagander: A few short notes about PostgreSQL and POODLE

The POODLE attack on https (the attack is about https, the vulnerability in SSL, an important distinction) has received a lot of media attention lately, so I figured a (very) short writeup was necessary.

The TL;DR; version is, you don't have to worry about POODLE for your PostgreSQL connections when using SSL.

The slightly longer version can be summarized by:

  • The PostgreSQL libpq client in all supported versions will only connect with TLSv1 and newer, which is not vulnerable.
  • The PostgreSQL server prior to the upcoming 9.4 version will however respond in SSLv3 (which is the vulnerable version) if the client insists on it (which a third party client can do).
  • To exploit POODLE, you need a client that explicitly does out-of-protocol downgrading. Something that web browsers do all the time, but very few other clients do. No known PostgreSQL client library does.
  • To exploit POODLE, the attacker needs to be able to modify the contents of the encrypted stream - it cannot be passively broken into. This can of course happen if the attacker can control parameters to a SQL query for example, but the control over the data tends to be low, and the attacker needs to already control the client. In the https attack, this is typically done through injecting javascript.
  • To exploit POODLE, there needs to be some persistent secret data at a fixed offset in each connection. This is extremely unlikely in PostgreSQL, as the protocol itself has no such data. There is a "cancel key" at the same location in each stream, but it is not reused and a new one is created for each connection. This is where the https attack typically uses the session cookie which is both secret and fixed location in the request header.

For a really good writeup on the problem, see this post from PolarSSL, or this one from GnuTLS.

23 Oct 13:56

pgAFIS: o Elefante Biométrico

by Rodrigo HJORT
Tecnologias biométricas são cada vez mais empregadas em aplicações civis. Um exemplo disso é que nas eleições deste ano, 21,6 milhões de brasileiros (15% do total de eleitores do país) em 762 municípios (entre eles 15 capitais) deverão usar a biometria nas urnas eletrônicas, visando reduzir os riscos de erros, fraudes e lentidão.


Na Índia, uma iniciativa pioneira do governo promete criar o maior banco de dados biométricos do mundo. No país existem mais de meio bilhão de pessoas que não possuem qualquer espécie de identificação, o que torna impossível a elas receber auxílios governamentais, abrir conta em banco, solicitar empréstimos, obter carteira de motorista, entre outros. Com a expectativa de cadastrar os dados biométricos de mais de um milhão de pessoas ao dia, o projeto espera ter até o final do ano os registros dos 1,2 bilhão de indianos em seu banco de dados.


Diante disso, ao vasculhar sobre o tema, descobri que os códigos fontes de rotinas biométricas FBI/NIST são públicos. Tais rotinas são o coração dos sistemas AFIS (Automatic Fingerprint Identification System), e dentre elas duas se destacam: o extrator de características (feature extractor) e o comparador de minúcias (matcher).


Estudando esse código do NIST, em linguagem C, resolvi criar o suporte a tais funcionalidades de forma nativa no meu SGBD preferido, o PostgreSQL. E assim nasceu o pgAFIS (Automated Fingerprint Identification System support for PostgreSQL), um módulo capaz de fornecer funcionalidades de extração de características e comparação de minúcias a partir de instruções SQL dentro do PostgreSQL.

Mas como funciona isso na prática?

Bem, comecemos pela modelagem de dados. É preciso criar uma tabela em que sejam armazenadas as informações das impressões digitais, tal como descrito a seguir:

Table "public.fingerprints"
Column | Type | Modifiers
--------+--------------+-----------
id | character(5) | not null
pgm | bytea |
wsq | bytea |
mdt | bytea |
xyt | text |
Indexes:
"fingerprints_pkey" PRIMARY KEY, btree (id)
  • "pgm" guarda imagens originais das impressões digitais (PGM)
  • "wsq" guarda imagens comprimidas das impressões digitais (WSQ)
  • "mdt" guarda os templates das digitais do tipo XYTQ em formato binário (MDT)
  • "xyt" guarda os dados das minúcias das digitais em formato textual
O tipo de dados usado nessas colunas é o "bytea" (um array de bytes), similar ao BLOB em outros SGBDs. Os formatos PGM e WSQ são abertos e muito conhecidos no mercado. Já o formato MDT eu que inventei. :D

Em seguida, as impressões digitais devem ser obtidas em formato cru (raw) e armazenadas na coluna "pgm" dessa tabela. O formato PGM é uma espécie de bitmap (mapa de bits), onde não existe compressão. Os leitores de impressão digital gravam arquivos obtidos com esse formato.


Agora é que o pgAFIS entra em cena! Uma função é capaz de converter os dados binários de um conteúdo PGM no formato WSQ (uma espécie de JPEG criado pelo NIST/FBI). Isso é feito com a execução dessa instrução SQL:

UPDATE fingerprints
SET wsq = cwsq(pgm, 2.25, 300, 300, 8, null);

A segunda etapa em que age o pgAFIS é na extração das características locais das impressões digitais (as minúcias) a partir do conteúdo WSQ. O resultado são as informações do tipo XYTQ (coordenadas horizontal e vertical, ângulo de inclinação e qualidade) de cada minúcia. Novamente, basta executar uma instrução SQL:

UPDATE fingerprints
SET mdt = mindt(wsq, true);

Para ter uma ideia de volume: imagens de impressões digitais em formato PGM de 300x300 pixels de 90 kB ao serem comprimidas no formato WSQ ocupam 28 kB de espaço. Ao extrair as minúcias e gerar o respectivo conteúdo no formato MDT (específico do pgAFIS), esse ocupa míseros 150 bytes! A versão textual do MDT, em XYT, ocupa um pouco mais: cerca de 300 bytes!

afis=>
SELECT id,
length(pgm) AS raw_bytes,
length(wsq) AS wsq_bytes,
length(mdt) AS mdt_bytes,
length(xyt) AS xyt_chars
FROM fingerprints
LIMIT 5;

id | pgm_bytes | wsq_bytes | mdt_bytes | xyt_chars
-------+-----------+-----------+-----------+-----------
101_1 | 90015 | 27895 | 162 | 274
101_2 | 90015 | 27602 | 186 | 312
101_3 | 90015 | 27856 | 146 | 237
101_4 | 90015 | 28784 | 154 | 262
101_5 | 90015 | 27653 | 194 | 324
(5 rows)

Tais processos fazem parte da etapa de obtenção dos dados biométricos, representada na figura abaixo:


Muito legal, mas fazemos o quê com esse monte de dados binários? As comparações biométricas!

Os sistemas biométricos são capazes de realizar duas operações essenciais de comparação: verificação e identificação.

Na verificação, também chamada de autenticação ou busca [1:1], uma impressão digital de amostra é comparada contra uma única digital já armazenada no banco de dados. Tal processo pode ser visualizado na figura abaixo:


E eis que o pgAFIS ataca novamente! Com ele, essa operação também pode ser realizada através de uma simples instrução SQL:

SELECT (bz_match(a.mdt, b.mdt) >= 20) AS match
FROM fingerprints a, fingerprints b
WHERE a.id = '101_1' AND b.id = '101_6';

Nessa instrução, a impressão digital identificada como "101_1" é comparada à "101_6". Caso o nível de similaridade entre as duas seja pelo menos 20, podemos considerar que ambas são iguais, ou seja, referem-se ao mesmo dedo de uma mesma pessoa. Trata-se de um procedimento rápido, pois a identificação da pessoa é informada no início e o sistema precisa apenas retornar um valor lógico: "sim" ou "não".

Já a identificação ou busca [1:N] é um processo custoso para o sistema, uma vez que uma impressão digital de amostra deve ser comparada contra todos os registros existentes no banco de dados biométricos. Além disso, o retorno é um conjunto de possíveis identificações encontradas no banco, ou seja, as consideradas mais similares à amostra segundo o algoritmo de comparação. Esse processo pode ser visualizado na figura abaixo:


Mesmo com essa ressalva de que o processo pode onerar o servidor, o pgAFIS oferece um recurso para lidar com esse risco: a limitação no número de possíveis suspeitos. Em linguagem SQL, um exemplo de busca seria assim:

SELECT a.id AS probe, b.id AS sample,
bz_match(a.mdt, b.mdt) AS score
FROM fingerprints a, fingerprints b
WHERE a.id = '101_1' AND b.id != a.id
AND bz_match(a.mdt, b.mdt) >= 23
LIMIT 3;
Nesse exemplo, são retornadas as três impressões digitais que mais se assemelham à identificada como "101_1".

Gostou? Divirta-se! Contribua! Os códigos estão disponibilizados no GitHub: https://github.com/hjort/pgafis.


22 Oct 17:47

SQL Injection no Drupal 7

by David Sopas
Ontem a empresa SektionEins publicou um boletim de segurança que divulga uma falha SQL Injection no Drupal (versões >= 7.0 <= 7.31). Rapidamente a equipa de segurança do Drupal categorizou esta vulnerabilidade como Altamente Crítica e preparou-se prontamente para lançar uma correção – já disponível na versão 7.32. Leia-se no site oficial do Drupal: Posted by […]
21 Oct 12:32

Hans-Juergen Schoenig: Killing proper indexing: A neat idea

After being on the road to do PostgreSQL consulting for Cybertec for over a decade I noticed that there are a couple of ways to kill indexing entirely. One of the most favored ways is to apply functions or expressions on the column people want to filter on. It is a sure way to kill […]
20 Oct 19:52

Google descobriu falha no SSL e a Web voltou a não estar segura

by Pedro Simões
A segurança na Internet é sempre um pressuposto que não deve ser tido como lei e os utilizadores devem estar sempre atentos a problemas que surgem e que podem comprometer as suas navegações. Um novo problema agora descoberto veio revelar que o protocolos de cifra das comunicações da Internet tem um bug grave e que […]
17 Oct 22:10

Understanding Your Home Network and Keeping It Secure

by Dominic Bannister, Jr.

Hi, I’m Dominic Bannister, customer support representative team lead here at OpenDNS. As you know, our service helps users connect with confidence on any device, anywhere, anytime. However, there’s more you can do to protect your home networks—for example, securing the very devices you use to connect to the Internet. Some examples of devices on your network environment include modems, routers, and computers.

In this post, we’ll focus on explaining your network environment, and then provide some tips on how to secure it.

 

Understanding Your Network Environment

Let’s start by finding out more about the devices you use to connect to the Internet. Here’s a quick list of questions that should give us all the information we need:

What is the make, model, and version of the modem or router provided by your Internet Service Provider (ISP)?

Knowing the make, model, and version of your modem or router will not only help you understand the device’s features and limitations, but will also help you properly secure it! Check the body of the device or read the manual to find this information.

What are the IP address and login credentials for your modem or router?

Most modems and routers will have the default login information and IP address printed on the body. The modem or modem-router combination that your ISP provides is what we call the gateway or edge device. A gateway or edge device is networking device which handles communication from your network to the outside world. Settings on this device will dictate how the rest of your network behaves.

How is your network connected to the Internet?

You should map out your network environment with topology software. Just kidding! It’s not necessary for you to go that far, but a basic understanding of which devices connect to what can be very helpful. A simple map structure of your network can come in handy when locating and troubleshooting a network problem.

To get you started, here’s a basic home network map:

Screen Shot 2014-10-09 at 1.27.56 PM

Finally, remember to note the various types of devices on your network.

A modem is not exactly the same as a combination modem-router, and each will handle your network traffic in a unique way.

There are many online resources that can help you understand your network devices. To get you started, here’s a video explaining the difference between a hub, a switch, and a router.

 

Tips to Secure Your Network Environment

Now that you have a better understanding of your home network, here are a few simple steps you can take to minimize unauthorized access. (Of course, by using OpenDNS, you’ve already added an extra layer of security!)

Change the login credentials on your gateway device and router.

As mentioned previously, most modems and routers have default login credentials that make initial configuration easy. After the initial setup, change the username (if possible) and password to prevent unauthorized access to your modem or router. There are many online resources that provide a list of default login credentials for modems and routers, which can be used to easily compromise your network.

Keep your operating system and router updated.

Most vulnerabilities are exploited due to outdated software and/or firmware. Running the latest operating system and router firmware helps protect your network against intrusion.

Have a network use policy for your home.

It is easy to overlook this point, but it is critical to have a set of protocols (pun intended) that everyone should follow. For example, one of our rules at home is “don’t click on suspicious links.” What are suspicious links? See how well you can spot a phishing site with our quiz.

Create separate guest networks for visitors.

Typically, if you have a Wi-Fi network and users connect to the same access point, those users are a part of and have access to your network. Isolating guest users helps prevent access to your local network resources. Many home routers have this feature, but it has to be enabled. Please consult your router’s manual on how to configure separate guest network.

Disable your router’s remote login feature.

Many routers allow you to remotely log in to your home machine and network, but this makes your network vulnerable to attacks. Disabling the remote login feature will prevent others who are not directly connected to your router from accessing it.

Stay up-to-date on technology news about your network devices.

Keeping up with the latest news about online threats that target devices on your network, sometimes region specific, can help you take necessary actions to either prevent your system from being compromised or find solutions for an already affected system. There are many websites, blogs, and forums dedicated to each of the devices you use to get online. If you prefer short updates, you can sign up for news updates or follow like-minded individuals or groups on their social media sites. Lastly, be aware of changes in your network environment. If you notice that your connection speed has slowed down significantly, or if your machine is running slower than usual, these are signs that something is amiss and needs to be checked.

 

By no means is this a definitive guide on home networking. However, having a grasp of how your network is set up and applying basic security measures will not only help you troubleshoot your home network problems, but they will also minimize malicious users from gaining access to your network. Remember, there’s no place like 127.0.0.1, so keep it safe!

Need more help? You can always reach the OpenDNS Support Team by submitting a ticket here

The post Understanding Your Home Network and Keeping It Secure appeared first on OpenDNS Blog.

17 Oct 13:17

Google anuncia cabo submarino entre Estados Unidos e América Latina

by Ricardo Fraga

cabo_submarino_usa_la

De acordo com o Google, a América Latina conta, atualmente, com mais de 300 milhões de usuários conectados à internet, o que representa mais da metade de toda a população da região. Como a empresa depende muito da qualidade da conexão para que os usuários possam ter uma boa experiência com os seus produtos e serviços, o Google investe continuamente na conectividade mundial.

No início de agosto, a empresa anunciou a construção de um cabo submarino interligando os Estados Unidos e o Japão em um investimento de US$ 300 milhões. Nesta quinta-feira, foi a vez da América Latina — mais especificamente o Brasil — ser contemplada com um novo anúncio da empresa.

Segundo Cristian Ramos, gerente de parcerias de desenvolvimento de infraestrutura de internet para a América Latina, o Google fechou uma parceria com as empresas Algar (Brasil), Antel (Uruguai) e Angola Cables para a construção de um novo cabo submarino interligando os Estados Unidos ao Brasil. Com 10.556 quilômetros, o cabo sairá da cidade americana de Boca Raton, na Flórida, com destino a Santos, no litoral de São Paulo, dando uma passadinha por Fortaleza.

Diferentemente do caso do Japão, a empresa não forneceu os valores do projeto, mas garantiu que há um custo de “dezenas de milhões de dólares” envolvido na construção e manutenção do cabeamento. O projeto terá início imediatamente e a previsão do término da construção é 2016. Quando em operação, o novo cabo (composto de seis pares de fibra óptica) elevará a velocidade de conexão da rede em 64 Tb/s.

Só resta esperar que os nossos tubarões sejam mais bonzinhos do que estes aqui.

Fonte: Google e SubCom.

The post Google anuncia cabo submarino entre Estados Unidos e América Latina appeared first on Meio Bit.








17 Oct 13:14

O mais novo hacker da china tem… 13 anos

by Marisa Pinto
Wang já ajudou a corrigir mais de 100 sistemas que eram vulneráveis a ataques Apesar de a China tentar ser bastante rígida e inflexível no que respeita à utilização dos serviços na Internet, também é bastante conhecida pelos ‘crânios’ que conseguem aceder aos sistemas informáticos bastante seguros. Estamos a falar de hackers e, alguns deles, […]
17 Oct 02:08

Shellshock sobre DHCP

by Augusto Campos

Enviado por Daniel Moreno (danielhnmorenoΘgmail·com):

“Olá a todos. Todos sabemos que a vulnerabilidade shellshock fez um estrago grande. Segue o link de um vídeo explicativo do shellshock afetando o protocolo DHCP. Espero que gostem ;-)” [referência: ]

O artigo "Shellshock sobre DHCP" foi originalmente publicado no site BR-Linux.org, de Augusto Campos.

16 Oct 17:10

Cidade alemã Gummersbach muda de Windows para Linux Suse

by Pedro Pinto
Apesar da história da cidade de Munique ainda não ter sido bem explicada (relativamente à mudança de Windows para Linux ter sido considerado um desastre), a verdade é que há mais cidades alemãs a seguirem o exemplo e a migrar de Windows para Linux. Gummersbach, uma cidade da Alemanha com cerca de 50 mil habitantes […]
15 Oct 18:29

Grupo de intervenção urbana decide “reformar” São Paulo consertando pequenas coisas pela cidade

by Redação Hypeness
Na sua casa, se uma lâmpada queima, a grade entorta, a torneira pinga e o vidro quebra, você conserta. Mas por que você passa reto por tudo isso na sua cidade? O artista plástico Rodrigo Machado e os cineastas Filipe Machado e Gustavo McNair decidiram brincar de “maridos de aluguel” para a cidade de São […]
15 Oct 18:25

Epson e a Jato de Tinta Sem Cartucho

by Carlos Cardoso

Epson-Eco

Impressora, você sabe, é um problema para dois grupos: quem usa muito e quem usa pouco. No meu caso precisei de uma impressão colorida, comprei uma baratinha, o cartucho acabou e trocar equivale a uns 80% do valor da bicha.

Cartucho com mais tinta?

Seca, e continua custando mais caro que antimatéria. O mercado informal tem apelado pra soluções criativas, como esquemas de recarga, tinta de origem duvidosa e similares.

Uma das formas mais interessantes de driblar o custo dos cartuchos são os tanques de grande capacidade. Uns kits vendidos em regime de esquemão por sua lojinha não-autorizada preferida. Agora, na melhor estratégia “se não pode vencê-los”, a Epson apresenta (pro 1ª Mundo, aqui no patropi já existe faz tempo) uma impressora, original oficial com tanques de tinta.

É a Epson Eco Tank L355 (afinal tudo tem que ter pegada ecológica hoje em dia), na verdade uma multifuncional com resolução de impressão de 5760 DPI por 1440 DPI, velocidade de 9 páginas por minuto monocromático, 4,5 PPM (cor.) e modo rápido 33 PPM mono.

O scanner tem resolução de 1200 × 2400 DPI, ela é Wi-Fi, e voltada pra uso em pequenos escritórios.

O preço? No Brasil sai a R$ 612,00.

“Ah, mas e a tinta? Aí o bicho pega!

Não necessariamente.

O refil colorido de tinta (o T664320, por exemplo) custa aqui R$ 30,00. Original. São 70 mL, dá pra umas 6.500 páginas. O conjunto completo, 4 cores + PB sai a R$ 150,00. Isso dá um custo de R$ 0,023 por página.

O cartucho preto T664120 custa R$ 32,90. A autonomia fica na casa de 4.000 páginas. Isso dá um custo por página de R$ 0,008225. Tudo isso com suprimentos oficiais.

Posso viver com esses números.

Fonte: GG.

The post Epson e a Jato de Tinta Sem Cartucho appeared first on Meio Bit.








15 Oct 18:23

The Big Opportunity

A while back, Talking Points Memo had this small post:

If you read TPM through our RSS feed, you should know that one of the many benefits of Prime membership is full text RSS feeds. No ‘read mores’ or 'click throughs’. And of course, zero ads. Click here to sign up.

Now that is not the kind of thing that’s going to blow any minds. Nice, but still just a small thing. But TMP knows its core audience of wonky, lefty political junkies wants their fix fast. They know that RSS is the best tool to deliver that fix, and they’re making it a little easier for members to get it.

Lately I’ve been doing some old-fashioned market research, trying to figure out what the growth opportunity is for a reader. Ten years ago, there were dozens of industry analysts tracking the “RSS market.” 

Back then, some estimates pegged RSS usage around 10 or 11 percent of Internet users. Today, there are still millions of users, but probably in the single digits percentage-wise.

But while there aren’t analysts writing annual RSS reports any more, I think the opportunity is more clear than ever. I’m old enough to remember when Apple’s market share was around 3 percent of all computers sold. Nobody needs to hear the Apple story again, but it’s easy to forget that it wasn’t too long ago that the Mac was destined to die. But the company had a better, cleaner UI and it focused on doing the little things well.

Right now, we’re focused on doing the little things that make users happy. (As always, please leave comments about what you want to see.) I don’t think we’re talking about anything radical. 

We’re not in a hurry. We don’t have VC money or investors pushing for a quick return. There is no timetable to cash out. We’re just trying to make an insanely good reader. I don’t know what the “market opportunity” is for RSS and frankly, we don’t concern ourselves with that stuff. It’s just a matter of of doing the small things right. 

14 Oct 21:29

Erro nas urnas

by ProgramadorREAL

tirinha1294

Sim, eu fiz essa tirinha por uma necessidade interna de ser xingado e ver discussões intermináveis sobre política…

(Era ironia, tá? Apenas aproveitem a piada e discutam política em outro lugar :D)

P.A.: Cara, você viu a polêmica em relação às urnas??
Programador: Que aconteceu?
P.A.: O pessoal estava reclamando que aperta uma coisa na urna e aparece outra…
Programador: Pfff… Usuários… Escuto essa mesma desculpa todos os dias…
P.A.: Pior…

Camiseta: Colocar a culpa na máquina é humano!

The post Erro nas urnas appeared first on Vida de Programador.

14 Oct 19:51

Urnas Eletrônicas, Fraudes e Hollywood

by Carlos Cardoso

democraciayay

A internet causa um efeito interessante: ela dá às pessoas a ilusão de poder, ou melhor: a ilusão de que conhecimento é poder. Não é. Fora a Batgirl qual outra bibliotecária poderosa você conhece? Mais ainda: a internet dá a ilusão de conhecimento instantâneo. Um idiota bem-treinado consigo acessar 3 ou 4 artigos da Wikipedia, resvalar os olhos em informação e continuar uma conversa passando a impressão de expert no assunto… mas é puro teatro.

Outras pessoas realmente acreditam que um post no blogspot em um blog com NovaOrdemMundial no título, GIFs animados e mapas mostrando a origem dos visitantes é a mais confiável fonte possível, superando até o absolutamente isento e sensato AboveTopSecret.com.

Esses sites estão fazendo a festa com denúncias de fraude nas eleições (já fizeram antes, mas tudo bem). Repetem até não poder mais as mesmas histórias, mas na mente do conspirador de internet (e do jornalista também) se a mesma denúncia aparece em 3 sites, conta como 3 ocorrências. O grande alvo agora são as Urnas Eletrônicas, as preferidas de quem trabalha com tecnologia e portanto não confia nelas, mas confia no iPhone, no Android, no Facebook, no ABS do carro, no GPS, no Marcapasso, no OhMyBod…

As urnas são 100% seguras?

Claro que não. Nada é 100% seguro, mas elas são muito mais seguras do que no tempo da votação em papel, onde a PM era responsável pelas urnas, e a fraude imperava. Seções inteiras vinham com votos marcados pela mesma pessoa, urnas de seções onde um candidato era majoritário tendiam a desaparecer… mas isso só quem nasceu antes de 1990 lembra.

O que mais me diverte é a arrogância dos blogueiros “denunciando” as fraudes. Eles se acham mais inteligentes que os candidatos, que o TSE e que os partidos. Quem já acompanhou apuração sabe que fiscal de partido é o bicho mais paranóico que existe. Exigiam recontagem quando voto caía no chão. Eu GARANTO que se houver um mínimo descuido de segurança os partidos serão os primeiros a reclamar. A não ser que você acredite que TODOS estão envolvidos em uma enorme conspiração, provavelmente junto com o HAARP.

Nesta eleição a “fraude” está sendo ecumênica. Há denúncias de PT e PSDB fraudando urnas. As mais comuns, embora não tenho visto mais de 3 ou 4 casos é de eleitor que foi votar e descobriu que já tinha votado.

Lamento, essa é uma fraude BURRA. Usando a Navalha de Occam, a explicação mais simples é a verdadeira: mesários atolados destacam o comprovante errado, ninguém confere e quando o sujeito vai votar, olham e dizem que já foi.

A outra “fraude” que percorre a internet é melhor ainda:

Hulu — The Simpsons – Electronic Voting

Sim, estão dizendo que em algumas urnas você marca 45 para Aécio e aparece que o voto foi 13, para Dilma. Em outros relatos absolutamente dignos de confiança afinal estão na internet, ocorre o contrário. Você vota 13 na Dilma, aparece que o voto foi 45, pra Aécio.

Isso é uma das coisas mais idiotas que já vi, mesmo na Internet.

Eu adoro séries bobas, adoro NCIS, adoro os Dois Idiotas, Um Teclado, mas agora com autoridade de quem tem um tiquinho de experiência em programação: FRAUDES NÃO SÃO EXIBIDAS EM TELA. É absolutamente, completamente, TOTALMENTE idiota você fazer uma alteração fraudulenta em um banco de dados e exibir essa alteração. É… desnecessário. É a bomba-relógio com contador.

Na remooooota possibilidade de alguém ter acesso ao código-fonte das urnas esse alguém não tocaria na interface, faria as alterações somente na hora de gravar os dados no cartão de memória. Algo assim:

function GravaDados ($voto) {
 
IF ($voto == “Khan” { $votosKhan = $votosKhan + 1}
 
IF ($voto == “Khodos”) {$votosKhan = $votosKhan+1}
 
ExibeVoto ($voto)
 
}

Você só “vê” que está sendo hackeado em filmes e séries de TV. Nenhum programador digno do seu mojo arriscaria seu pescoço cometendo um crime eleitoral sério assim e MOSTRARIA AO ELEITOR QUE O VOTO FOI FRAUDADO.

Isso também inviabiliza a bobagem de querer “comprovante impresso” para recontagem.

“Então as pessoas estão mentindo?”

Provavelmente. E antes que alguém comece as acusações, lembre-se: pessoas mentem o tempo todo, por dinheiro e principalmente por atenção. Vide o tal estivador que afirmou categoricamente ter visto os corpos das vítimas do acidente do Cessna, tendo inclusive “fechado os olhos” do Eduardo Magalhães Campos. Pessoas disseram que viram o avião em chamas e outros chegaram a afirmar que o avião havia batido em um helicóptero. A GloboNews até publicou uma foto

Ah sim, há gente DENUNCIANDO que a Urna Eletrônica “fez download” de “alguma coisa” ao final do voto. O tal download? Uma barra de processamento, muito provavelmente pela lerdeza do equipamento, que não era topo de linha em 1763 quando foi projetada, muito menos hoje. Se ela fosse colorida podiam colocar a Bola de Praia da Morte, do Mac…

spinning_beach_ball_of_death_1_13512_5315_image_7479

Em conclusão: é possível fraude em urnas eletrônicas? Com certeza, mas é muito mais complicado do que com votos manuais. Ou você acredita em uma megaconspiração illuminati começando no TSE, para que o código-fonte original (mega-auditado por partidos) seja alterado, ou então você passa a ter que alterar o firmware de urna a urna. Quanta gente você acha que tem know-how pra isso? No Acre?

Imagine uma história Missão Impossível de conspiradores invadindo centrais de armazenamento, abrindo urnas de caixas lacradas, regravando o firmware durante a noite e…

Nah, é muito mais fácil dar salgadinho, refresco e van até o local da votação. Em último caso, dentadura.

The post Urnas Eletrônicas, Fraudes e Hollywood appeared first on Meio Bit.








14 Oct 14:55

A Evolução da Mesa de Computador

by Carlos Cardoso
pccomida

Sim, você conhece essa mesa!

Antigamente existia um negócio chamado jornal. Era como se alguém imprimisse em grandes folhas de papel vagabundo os sites de notícia de 2 dias atrás, e cobrasse por isso.

Aos domingos empresas costumavam anunciar seus produtos, mas para adquiri-los você tinha que… ir até a loja. Absurdo, eu sei. Entre os produtos mais populares estavam os das lojas de móveis de escritório, e neles via-se algumas das mais toscas invenções das mentes distorcidas dos designers, as famigeradas “mesas de computador”.

O único ponto em comum era que nenhum dos projetistas chegou sequer perto de um computador, então as mesas vinha com gavetas para teclado onde ele só ficava metade para fora, encaixes para impressora que a colocavam debaixo da mesa e — juro — uma vez vi uma mesa dessas com… plataforma para mouse. Um braço metálico com uma plataforma onde você colocaria o mousepad. Passagens para cabos? Bobagem, ninguém perdia tempo com isso.

Essas mesas foram saindo de moda, as pessoas perceberam que mesas comuns eram mais que suficientes, mas o próprio conteúdo mudou.

Aí entra um trabalho muito legal do Laboratório de Inovação de Harvard, que pega uma típica mesa de 1980, com toda a tecnologia da época, e vai avançando, mostrando os objetos que foram substituídos por apps, hardware ou redes sociais. É muito rápido, mas quer saber?

Quem passou por isso tem essa exata sensação. É rápido mesmo.

the evolution of the desk by the harvard innovation lab from designboom

Fonte: LS.

The post A Evolução da Mesa de Computador appeared first on Meio Bit.








14 Oct 13:11

Microsoft contribui com o Projeto Open Compute

by Openness Team

microsof_openness-template

por Bill Laing, Vice-Presidente Corporativo de Nuvem & Negócios da Microsoft

Recentemente fiz um discurso para 3 mil participantes do Projeto Open Compute (OCP), que aconteceu em San Jose, na Califórnia. Nele, anunciei que a Microsoft está se juntando a OCP, uma comunidade focada em engenharia voltada para o desenvolvimento de hardware mais eficiente para a nuvem e para computação de alto desempenho por meio de colaboração aberta. Além disso, informei também que estamos contribuindo para a OCP, com o que chamamos de especificação do servidor em nuvem da Microsoft: os projetos para o hardware de servidores mais avançados em datacenters da Microsoft oferecer serviços em nuvem globais como o Windows Azure, Office 365, Bing e outros.

Estamos muito animados com nossa participação na comunidade OCP e poder compartilhar nossa inovação no mercado de nuvem com a indústria, a fim de promover datacenters mais eficientes e adoção de computação em nuvem é um universo promissor.

especificação para servidores em nuvem da Microsoft fornece essencialmente o melhor planejamento para os servidores de um datacenter oferecendo o portfólio mais diversificado do mundo de serviços para nuvem. Esses servidores são otimizados para software Windows Server e construídos para atender às enormes exigências de disponibilidade, escalonabilidade e eficiência do Windows Azure, nossa plataforma de nuvem global. Ela oferece melhorias significativas em relação aos modelos tradicionais de servidores corporativos: redução de custos por servidor de até 40%, 15% de ganhos de eficiência de energia e redução de 50% no valor da implantação e tempo de serviço. Esperamos também que este projeto de servidor possa contribuir para os nossos esforços de sustentabilidade ambiental através da redução da rede de cabeamento em 1.100 milhas e de metal por 10.000 toneladas em toda a nossa base de 1 milhão de servidores.

A Microsoft é o único fornecedor mundial de nuvem a divulgar publicamente estas especificações de servidor através do OCP, e as informações que estamos compartilhando são altamente detalhadas. Como parte desse esforço, a Microsoft Open Technologies possui seu software em código aberto, criado para a gestão das operações de hardware, tais como diagnósticos do servidor, fonte de alimentação e controle da temperatura da máquina. Também gostaríamos de ajudar a construir uma comunidade de software de código aberto dentro do OCP.

As especificações que estamos contribuindo para o OCP refletem nossa longa história na arquitetura de datacenter e cloud computing. Começamos a gerenciar nossos próprios data centers em 1989, e entregamos nosso primeiro serviço on-line global, o MSN, em 1995. Temos investido mais de US$ 15 bilhões em nossa infraestrutura de nuvem que hoje oferece mais de 200 serviços em nuvem para 1 bilhão de clientes e 20 milhões de empresas em mais de 90 países em todo o mundo.

Nossa união com o OCP faz dessa contribuição uma base sólida para um longo histórico de compartilhamento dos nossos aprendizados acerca do hardware para nuvem. A nossa organização global Services Foundation começou a fornecer pesquisas para datacenter e informações para parceiros de hardware há mais de cinco anos atrás. Agora, na Cimeira do OCP, parceiros da indústria estão mostrando hardware de produção, com base em nossas especificações do OCP. Estamos ansiosos para ver ofertas comerciais em um futuro próximo.

Este esforço se alinha com nossa estratégia de nuvem open source. A Microsoft é a única empresa do setor que oferece plataformas de nuvem, como o Windows Azure, bem como a infraestrutura de software para clientes empresariais e parceiros para construir suas próprias nuvens. Como resultado, podemos continuamente levar a tecnologia e as melhores práticas a partir de nossas ofertas de nuvem pública, e construí-las em nossas soluções de nuvem privada. É um ciclo virtuoso que permite uma plataforma de nuvem híbrida consistente – uma nuvem open source – abrangendo Windows Azure, nuvens parceiras e os datacenters dos clientes. Essa consistência dá aos clientes mais flexibilidade para mover e gerenciar aplicativos corporativos em nuvens, e mais opções de modelos de TI que melhor se adequam às suas necessidades e orçamentos. Da mesma forma, a especificação do servidor em nuvem da Microsoft para o OCP vai ajudar a impulsionar a inovação de hardware para a computação em nuvem, o que reforça a visão de nuvem open source para dar aos clientes uma plataforma consistente para uma melhor eficiência de TI e economia.

Nós já estamos recebendo um grande feedback de liderança dos integrantes do OCP e dos membros da comunidade sobre nossa participação e contribuição no mercado open source. Estamos ansiosos para trabalhar com a comunidade para ajudar a empurrar a inovação dos  datacenters para frente. Você pode encontrar mais informações sobre a especificação de servidor em nuvem da Microsoft em www.opencompute.org.

14 Oct 13:02

“Temos as mesmas capacidades, mas não as mesmas oportunidades”

by Marco Gomes

Há quem defenda que a meritocracia já existe em nossa sociedade, mas eu discordo, considero que ela não existe pois não saímos todos das mesmas linhas de partida. O menino rico branco que estuda no colégio particular Dante Alighieri na região nobre de São Paulo tem muito mais oportunidades e acesso ao sucesso que uma menina pobre e negra que estudou na escola pública Theo Dutra na Brasilândia.

Alunos da escola particular Dante Alighieri estão em encontro com Fernando Henrique Cardoso, todos na foto têm pele clara e cabelos lisos; alunos da escola pública Morro Grande estão reunidos e há grande variedade de tons de pele entre os alunos

Compare a diversidade de cores de pele nas turmas da escola particular Dante Alighieri e da escola pública Morro Grande, ambas em São Paulo, SP.

Temos as mesmas capacidades, mas não as mesmas oportunidades“, esta frase que a candidata Marina Silva disse em visita a Paraisópolis, comunidade pobre encravada no meio de um bairro rico de São Paulo, exemplifica bem esta minha opinião sobre a não existência da meritocracia em nossa sociedade.

A meritocracia é um ideal a ser perseguido, e em minha opinião um dos objetivos do Estado deve ser prover a todos os cidadãos igualdade de oportunidades e facilidade de acesso. Não que eu considere possível cumprir esta “igualdade de oportunidades” literalmente (não acredito que seja), mas, de novo, é um ideal a ser perseguido.

The post “Temos as mesmas capacidades, mas não as mesmas oportunidades” appeared first on Marco Gomes.

13 Oct 18:12

Em sua terra natal, Lin Gui revive velhos hábitos e ajuda companheiras de seleção

by Imprensa CBTM

Chinesa de nascimento, Lin Gui aproveita para matar saudades da terra natal

 
Da redação, no Rio de Janeiro (RJ) – 02/10/2014
 
O intercâmbio das integrantes da seleção brasileira de tênis de mesa na China com o clube chinês Shandong Luneng, onde as meninas estão treinando, tem um gostinho especial para uma atleta. Nascida no país asiático, Lin Gui aproveita o período para explorar ao máximo as atividades na maior potência mundial da modalidade - e também, claro, para matar as saudades de sua terra natal.
 
O período de treinamentos no Luneng é fruto da parceria entre a Confederação Brasileira de Tênis de Mesa (CBTM) e a State-Grid, empresa chinesa de energia elétrica e proprietária do clube. A seleção também disputará a Liga da China, de 13 a 17 deste mês.
 
“Estou muito feliz de estar treinando aqui. A China é o país do tênis de mesa. Estamos num clube que tem muita tradição no país, com uma estrutura excelente e muito profissionalismo”, disse Lin Gui, projetando uma evolução das brasileiras após mais essa etapa do programa.
 
“Com certeza esse período vai ajudar muito a seleção brasileira, os treinos, as atitudes. Estamos num clube de alto nível da China, no principal país da modalidade, temos muitas técnicas para aprender”, completou.
 
Apesar de estar bem focada nos treinamentos, Lin Gui não deixa de matar as saudades de costumes típicos da China. Com bom humor, ela diz que usa os treinamentos na cidade de Jinan não só para evoluir como jogadora, mas também para compensar as "investidas" na culinária local.
 
“Tenho de treinar bastante para poder comer mais das comidas típicas da China (risos). Mas não como nada de insetos”, brincou a atleta.
 
Durante o Aberto do Brasil, realizado em agosto, em Santos (SP), Lin Gui ajudou bastante as atletas chinesas que vieram participar do torneio, principalmente com o idioma. Agora, ela conta com o apoio das chinesas para tornar mais fácil a vida das brasileiras e destaca a interação entre as atletas das duas nacionalidades.
 
“As meninas daqui gostam de aprender coisas novas, então estou sempre ajudando. As chinesas também têm prazer de ensinar algumas palavras às brasileiras”, finalizou.
 
De olho na Liga da China, time ficará completo na próxima semana
 
Das quatro integrantes da seleção brasileira, Caroline Kumahara e Lin Gui já estão na China. Na próxima segunda-feira (06/10), o técnico Hugo Hoyama e a atleta Ligia Silva embarcam para Jinan, mas o time ficará completo apenas no final da semana, quando Jessica Yamada desembarcar em solo chinês.
 
Após o período de treinamentos, Ligia, Lin Gui e Jessica formarão o time CBTM-State-Grid para disputarem a Liga da China. Kumahara não participará, pois disputará a Copa do Mundo feminina, na cidade de Linz, na Áustria, entre os dias 17 e 19 de outubro.
 
A Confederação Brasileira de Tênis de Mesa conta com recursos da Lei Agnelo/Piva – Lei de Incentivo Fiscal e Governo Federal – Ministério do Esporte.
 
Siga a CBTM nas redes sociais:
 
FACEBOOK: www.facebook.com/TMBrasil
TWITTER: www.twitter.com/cbtm_tm
INSTAGRAM: @cbtenisdemesa
 
iDigo | Assessoria de comunicação CBTM
imprensa@cbtm.org.br
Tweet This
13 Oct 17:32

Definição, restrições e benefícios do modelo de arquitetura REST

by Ricardo Plansky

Ultimamente vim pensando a respeito de lançar o blog e começar escrevendo um artigo sobre como criar um web service RESTful, mas antes disso, conversando num hangout com alguns outros devs, percebi que antes do “como fazer”, seria bacana um “o que é”, para mostrar os fundamentos e os conceitos por trás da arquitetura REST. A grande discussão na ocasião era: até que ponto vale a pena usar um grande esforço para tornar a sua aplicação RESTful.

Primeiramente, gostaria de falar o que este artigo NÃO é: este artigo não tem como objetivo mostrar o porquê de usar REST ao invés de usar SOAP ou qualquer outro protocolo/arquitetura para construir sua API. Este artigo tem como principal objetivo, na verdade, deixar claro o que é o REST; quais as vantagens de usar esta arquitetura; o que faz da sua API ser considerada RESTful e o porquê muitas dizem que são, mas na verdade não são.

Vamos lá.

O que é REST?

O termo foi definido no ano 2000, na tese de doutorado de Roy Fielding e é a sigla para Representational State Transfer: é um design de arquitetura construído para servir aplicações em rede. A aplicação mais comum de REST é a própria World Wide Web, que utilizou REST como base para o desenvolvimento do HTTP 1.1.

REST traz uma série de benefícios – que irei falar logo mais – mas ele não é um padrão, você não é obrigado a seguí-lo para construir seus web services ou aplicação web, ele é apenas uma espécie de guia com algumas recomendações.

Este tema é muito comentado quando falamos em construção de web services, mas este não é um modelo de arquitetura específico para construção de APIs somente, ele pode – E DEVE – ser utilizado na construção de sistemas web que não serão expostos na forma de API necessariamente.

As restrições do REST

1. Client-Server

É a restrição básica para uma aplicação REST. O objetivo desta divisão é separar a arquiterura e responsabilidades em dois ambientes. Assim, o cliente (consumidor do serviço) não se preocupa com tarefas do tipo: comunicação com banco de dados, gerenciamento de cache, log, etc. E o contrário também é válido, o servidor (provedor do serviço) não se preocupa com tarefas como: interface, experiência do usuário, etc. Permitindo, assim, a evolução independente das duas arquiteturas.

Neste modelo, o servidor espera pelas requisições do cliente, executa estas requests e devolve uma resposta.

01

2. Stateless

Um mesmo cliente pode mandar várias requisições para o servidor, porém, cada uma delas devem ser independentes, ou seja, toda requisição deve conter todas as informações necessárias para que o servidor consiga entendê-la e processá-la adequatamente.

Neste caso, o servidor não deve guardar nenhuma informação a respeito do estado do cliente. Qualquer informação de estado deve ficar no cliente, como as sessões, por exemplo.

3. Cacheable

Como muitos clientes acessam um mesmo servidor, e muitas vezes requisitando os mesmos recursos, é necessário que estas respostas possam ser cacheadas, evitando processamento desnecessário e aumentando significativamente a performance.

Isso significa que um primeiro cliente solicita um determinado resource para o servidor, o servidor processa esta requisição e armazena isso temporariamente no cache. Quando os demais clientes solicitam o mesmo resource, o servidor devolve o que está no cache sem ter que reprocessá-lo. A regra para limpar o cache varia de resource para resource, pode ser limpo sempre que houver uma troca de estado no resource; pode ser limpo em um determinado intervalo de tempo antes de ser reprocessado, de hora em hora, por exemplo, e por aí vai.

4. Uniform Interface

É, basicamente, um contrato para comunicação entre clientes e servidor. São pequenas regras para deixar um componente o mais genérico possível, o tornando muito mais fácil de ser refatorado e melhorado.

Dentro desta regra, existe uma espécie de guideline para fazer essa comunicação uniforme:

1) Identificando o resource – cada resource deve ter uma URI específica e coesa para poder ser acessado, por exemplo, para trazer um determinado usuário cadastrado no site:

HTTP/1.1 GET http://rplansky.com/user/rplansky

2) Representação do resource - é a forma como o resource vai ser devoldido para o cliente. Esta representação pode ser em HTML, XML, JSON, TXT, entre outras. Exemplo de como seria um retorno simples da chamada acima:

{

"name": "Ricardo Plansky",
"job": "Web Analyst/Developer",
"hobbies": ["football", "coding", "music"]
}

3) Resposta auto-explicativa – além do que vimos até agora, é necessário a passagem de meta informações (metadata) na requisição e na resposta. Algumas destas informações são: código HTTP da resposta, Host, Content-Type, etc. Tendo como exemplo a mesma URI que acabamos de ver:

GET /#!/users/rplansky HTTP/1.1
 User-Agent: Chrome/37.0.2062.94
 Accept: application/json
 Host: rplansky.com

4) Hypermedia – Esta parte por muitas vezes é esquecida quando falamos de REST. Consiste em retornar todas as informações necessárias na resposta para que cliente saiba navegar e ter acesso a todos os resources da aplicação. Não vou prolongar neste item que será o assunto do próximo post. Apenas um exemplo:

Requisição

HTTP/1.1 POST http://rplansky.com/rplansky/posts

Resposta

{
    "post": {
        "id": 42,
        "title": "Conceitos REST",
        "decription": "Um pouco sobre conceito da arquitetura REST",
        "_links": [
            {
                "href": "/rplansky/post/42",
                "method": "GET",
                "rel": "self"
            },
            {
                "href": "/rplansky/post/42",
                "method": "DELETE",
                "rel": "remove"
            },
            {
                "href": "/rplansky/post/42/comments",
                "method": "GET",
                "rel": "comments"
            },
            {
                "href": "/rplansky/posts/42/comments",
                "method": "POST",
                "rel": "new_comment"
            },
            {...}
        ]
    },
    "_links": {
        "href": "/post",
        "method": "GET",
        "rel": "list"
    }
}

5. Layered System

A sua aplicação deve ser composta por camadas, e estas camadas devem ser fáceis de alterar, tanto para adicionar mais camadas, quanto para removê-las. Dito isso, um dos princípios desta restrição é que o cliente nunca deve chamar diretamente o servidor da aplicação sem antes passar por um intermediador, no caso, pode ser um load balancer ou qualquer outra máquina que faça a interface com o(s) servidor(es). Isso garante que o cliente se preocupe apenas com a comunicação com o intermediador e o intermediador fica responsável por distribuir as requições nos servidores, seja um ou mais, indifere nesse caso. O importante é ficar claro que criando um intermediador, a sua estrutura fica muito mais flexível à mudanças.

02

6. Code-On-Demand (Opcional)

Esta condição permite que o cliente possa executar algum código sob demanda, ou seja, estender parte da lógica do servidor para o cliente, seja através de um applet ou scripts. Assim, diferentes clientes podem se comportar de maneiras específicas mesmo que utilizando exatamente os mesmos serviços providos pelo servidor.

Como este item não faz parte da arquitetura em si, ele é considerado opcional. Ele pode ser utilizado quando executar alguma parte do serviço do lado do cliente for mais eficaz ou rápida.

E o que é RESTful?

Muita gente, quando usa diferentes URIs, verbos HTTP e diferentes formatos de retorno, passa a dizer que tem uma API RESTful. Tudo isso é muito importante e faz parte, mas não é apenas isso que compõe o RESTful.

Para uma API ser considerada RESTful ela deve seguir estritamente as regras definidas na arquitetura REST (com exceção da 6, obviamente, que é opcional), além de possuir um certo nível de coesão e maturidade, definidos na escala chamada de Richardson Maturity Model.

Falarei no próximo artigo mais detalhadamente sobre como construir na prática uma API RESTful seguindo este modelo. Mas para dar uma breve noção, os níveis são:

Nível 0: Resumidamente é a ausência de qualquer regra, é apenas a utilização do HTTP como transporte das operações no servidor. Normalmente se usa apenas um endpoint (URI) e um verbo HTTP.

Nível 1: Aplicação de resources. A API é dividida em diferentes endpoints que apontam para um ou mais resources.

Nível 2: Implementação de verbos HTTP para diferentes tipos de operações que deseja executar. Uma mesma URI por aceitar mais de um verbo HTTP, por exemplo: GET /user pode retornar todos os usuários e POST /user passando os atributos do usuário pode criar um novo.

Nível 3: Um novo conceito é adicionado, chamado: HATEOAS (Hypertext As The Engine Of Application State). Onde a API deve fornecer para o cliente toda a informação necessária para interagir com a aplicação.

Conclusão

REST é um modelo de arquitetura bem definido para servir aplicações web. Ele já oferece todo o guideline necessário para construirmos um serviço coeso, escalável e performático – e não é difícil. No dia-a-dia nós já utilizamos muitas das recomendações do REST: client-server, cache, stateless, etc. Para passarmos a ser RESTful, é apenas uma questão de se policiar e botar em prática alguns novos passos, até que tudo se torne automático. Seguir este modelo de arquitetura nos permite se preparar para o crescimento do serviço sem grandes impactos, além de oferecer aos clientes da aplicação um modelo que é de conhecimento comum, intuitivo até, evitando a necessidade de fazê-lo entender sobre uma nova arquitetura para consumir o serviço.

Em breve falo um pouco mais de REST… na prática.

Referências

Mensagem do anunciante:

Torne-se um Parceiro de Software Intel®. Filie-se ao Intel® Developer Zone. Intel®Developer Zone

13 Oct 16:56

Como trocar HD sem “reinstalar” o Ubuntu 14

by Marcelo Klumpp

Como trocar HD sem “reinstalar” o Ubuntu no seu PC. Aprenda os passos de uma vez por todas

Estes dias consegui um HD de 750 GB e decidi trocar meu antigo 500 GB por ele, mas não queria instalar novamente o Ubuntu do zero pois o que estava no HD de 500 GB já estava com todas as minhas configurações feitas e zeradas. Por isso tive a idéia de apenas “copiar” tudo que estava no HD antigo para o novo, então vamos ao trabalho

Primeiramente um aviso: este tutorial exige conhecimentos básicos sobre partições linux, UUIDs, montagens via linha de comando, GRUB e Boot via Live CD/USB. Se não tiver este conhecimento procure aprender sobre estes assuntos antes de seguir este tutorial. Qualquer resultado, seja positivo ou negativo, é por sua própria conta e risco.

Começando a trocar HD

Faça um boot via cd ou pendrive do Ubuntu para o iniciar via Live, feito isso desligue o computador e adicione o novo HD como secundário na placa-mãe fazendo como que ele fique como sdb, e deixando o HD antigo como sda. Ligue o computador iniciando com um Live do Ubuntu.

Com o Live do Ubuntu, abra o GParted e configure o novo HD com as respectivas partições a seu modo, criando, é claro, uma partição swap, uma home e uma pra raiz do Linux.

Eu configurei as partições de meu novo HD exatamente como o antigo, criando várias partições, pois eu não uso apenas 1 sistema em meu HD, então acabei ficando com 7 partições igual ao meu antigo. Mas por hora o que me interessa é o Ubuntu, que está instalado na partição /dev/sda6 e meu home que está na partição /dev/sda3.
Feito a configuração das partições no novo HD, abra o terminal e logue-se como root apenas para não ficar digitando “sudo” toda vez que for fazer qualquer comando:

sudo su

Logado como root, se quiser verificar algumas informações para ter certeza informações dos HDs para não se confundir, faça o comando:

fdisk -l

Para se orientar com as partições faça o comando:

blkid

Irei mostrar como exemplo a resposta com meu blkid:

/dev/sda1: LABEL="Win7" UUID="86947B0E947AFFCB" TYPE="ntfs" 
/dev/sda2: UUID="d1751472-9d26-4734-ba25-983149a589c7" TYPE="swap" 
/dev/sda3: LABEL="home" UUID="550718db-744a-4726-94ae-233f8e19b46f" TYPE="ext4" 
/dev/sda5: LABEL="Debian" UUID="aa5be1d6-192b-486c-a68b-98514cdd98ff" TYPE="ext4" 
/dev/sda6: UUID="6d5ab2ce-f784-4e1c-ac49-5757d8881794" TYPE="ext4" 
/dev/sda7: LABEL="Slackware" UUID="e1c02fd4-d484-421f-bdf3-656e1e3ec06f" TYPE="ext4" 
/dev/sda8: LABEL="Fedora" UUID="b0d951af-10bc-4328-8bac-01eb74088be7" TYPE="ext4" 

/dev/sdb1: UUID="243051C330519D1C" TYPE="ntfs" 
/dev/sdb2: LABEL="Swap" UUID="5f1b9ca2-665c-41df-b198-b157821781d5" TYPE="swap" 
/dev/sdb3: LABEL="home" UUID="eb1bacf8-c35f-407a-9ab8-c801b31817c8" TYPE="ext4" 
/dev/sdb5: LABEL="Debian" UUID="b822fd87-b838-4358-b72c-b24766dcc027" TYPE="ext4" 
/dev/sdb6: LABEL="Ubuntu" UUID="ca3c4b0a-92bc-4833-9ae6-35e416ccd0a8" TYPE="ext4" 
/dev/sdb7: LABEL="Slack" UUID="852931b9-5db1-4cfd-bc42-e570580be5c7" TYPE="ext4" 
/dev/sdb8: LABEL="Fedora" UUID="021899b7-2d52-47cd-a5b2-ec27c5134f70" TYPE="ext4" 

/dev/sdc1: LABEL="1TB" UUID="7269B1DE4B618CBF" TYPE="ntfs" 

/dev/sdd1: LABEL="AllDistrOS" UUID="2ec7fe7f-8713-4c7f-bd8a-08209f55541e" TYPE="ext2"

Como podem notar, tenho 3 HDs com as configurações das partições já feitas e por último em ext2 o meu Live com o Ubuntu e outras distros, mas o que interessa agora é apenas o sistema Ubuntu e o home, então vamos criar 2 pastas para os sistemas de arquivos raiz cada um apontando para o HD antigo (sda) e outro apontando para o HD novo (sdb) e o mesmo para o home:

mkdir /home_sda3
mkdir /home_sdb3
mkdir /sistema_sda6
mkdir /sistema_sdb6

Após criar todas as pastas, monte a partição em que irá trabalhar no momento, vamos começar pelo home:

mount /dev/sda3 /home_sda3
mount /dev/sdb3 /home_sdb3

Após montar as partições indicando o HD antigo e o novo, basta copiar os arquivos com o seguinte comando:

cp -afv /home_sda3/* /home_sdb3

A opção “-a” serve para preservar todas as informações dos arquivos, como permissões, tipo do arquivo e pasta, links , etc. a opção “-f” é para copiar as pastas cheias e a opção “-v” é para ver as informações dos arquivos passando de uma pasta para outra.
Após terminar a cópia, dê um ls nas duas pastas com a opção “-l” para ver que as permissões estão corretas:

ls /home_sda3 /home_sdb3 -l

Se quiser ver o quanto de espaço está ocupado em cada partição para ter certeza de que está batendo, dê o comando e analize apenas o campo “Usado”. Note que está igual:

df -h /dev/sda3 /dev/sdb3

Faça o mesmo com a partição raiz:

mount /dev/sda6 /sistema_sda6
mount /dev/sdb6 /sistema_sdb6
cp -afv /sistema_sda6/* /sistema_sdb6

Aplicar/Modificar um UUID nas partições

Apenas copiar os arquivos não adianta, devemos lembrar que o Linux trabalha com UUIDs das respectivas partições para fazer o boot e outras coisas, então devemos configurar o boot do sistema. Há 2 modos de fazer esta configuração, o primeiro modo é editando o arquivo de partições e o arquivo de boot manualmente e trocando todos os UIDs da configuração antiga pela nova, o segundo modo, que é o modo que usaremos, é modificar o UUID das próprias partições do novo HD deixando exatamente igual ao do antigo.

Note que no meu comando blkid tenho exatamente 7 partições nos 2 HDs (existe a partição 4, mas como é uma partição extendida, ele não aparece e não estou contando com ele), mas os UUIDs estão naturalmente diferentes. A idéia é copiar o UUID da partições do antigo HD e modificar nas partições do novo HD para que fiquem IDÊNTICOS.

Exemplo:

/dev/sda3: LABEL="home" UUID="550718db-744a-4726-94ae-233f8e19b46f" TYPE="ext4" 
/dev/sda6: UUID="6d5ab2ce-f784-4e1c-ac49-5757d8881794" TYPE="ext4" 
/dev/sdb3: LABEL="home" UUID="eb1bacf8-c35f-407a-9ab8-c801b31817c8" TYPE="ext4"
/dev/sdb6: LABEL="Ubuntu" UUID="ca3c4b0a-92bc-4833-9ae6-35e416ccd0a8" TYPE="ext4"

Note que as partições sda3 e sdb3 são para o home e estão em ext4, porém, suas UUIDs são diferentes e o mesmo acontece para o sistema raiz (sda6 e sdb6), então irei trocar o UUID das partições sdb para ficar igual ao sda. Para isto temos desmontar as partições e usar o comando tune2fs com o parâmetro “-U”, que serve para modificar a UUID de uma partição específica.

umount -a
tune2fs /dev/sdb3 -U 550718db-744a-4726-94ae-233f8e19b46f
tune2fs /dev/sdb6 -U 6d5ab2ce-f784-4e1c-ac49-5757d8881794

Como resultado fica assim, note que estão exatamente iguais:

/dev/sda3: LABEL="home" UUID="550718db-744a-4726-94ae-233f8e19b46f" TYPE="ext4" 
/dev/sda6: UUID="6d5ab2ce-f784-4e1c-ac49-5757d8881794" TYPE="ext4" 
/dev/sdb3: LABEL="home" UUID="550718db-744a-4726-94ae-233f8e19b46f" TYPE="ext4"
/dev/sdb6: LABEL="Ubuntu" UUID="6d5ab2ce-f784-4e1c-ac49-5757d8881794" TYPE="ext4"

Caso exista mais partições Linux em seu HD, deve fazer para todas as outras partições, exemplo em meu HD:

tune2fs /dev/sdb5 -U aa5be1d6-192b-486c-a68b-98514cdd98ff
tune2fs /dev/sdb7 -U e1c02fd4-d484-421f-bdf3-656e1e3ec06f
tune2fs /dev/sdb8 -U b0d951af-10bc-4328-8bac-01eb74088be7

Uma observação, o comando tune2fs com a opção -U não tem efeito para as partições Swap e NTFS, então deve-se modificar o arquivo fstab na nova partição trocando o UUID deles pelo do novo HD.

Após fazer as modificações das partições Linux necessárias, remounte a raiz do Live como leitura e escrita, pois o comando em que indiquei mais acima o deixa como somente leitura, monte novamente a partição raiz do novo HD e faça o seguinte comando para trocar o antigo e o novo UUID do Swap no arquivo fstab:

mount -o remount,rw /
mount /dev/sdb6 /sistema_sdb6
sed -i "s/d1751472-9d26-4734-ba25-983149a589c7/5f1b9ca2-665c-41df-b198-b157821781d5/g" /sistema_sdb6/etc/fstab

Repare que no campo A do sed (“s/A/B/g”) está com o UUID antigo e o campo B está com o novo UUID.
Faça também para a partição NTFS, caso use o outro sistema senão não conseguirá fazer boot nele.

sed -i "s/86947B0E947AFFCB/243051C330519D1C/g" /sistema_sdb6/etc/fstab

(Re)Instalando o grub

Seu novo HD ainda não tem o grub instalado, então antes de reiniciar é necessário instalar o grub via linha de comando indicando a pasta da partição montada pela nova raiz de sistema e o novo HD. Então faça o comando:

grub-install --no-floppy --root-directory=/sistema_sdb6 /dev/sdb

Desligue o computador, retire o antigo HD e deixe o novo no lugar e ligue o computador novamente.
Já iniciado o Ubuntu no novo HD, abra o terminal e faça o comando para atualizar o grub:

sudo update-grub

Isto atualizará a tabela com o(s) UUID(s) restante(s) para o boot, útil para quando já tiver um outro sistema operacional em NTFS instalado na 1ª partição.

Feito tudo isto, seu sistema está pronto para uso no novo HD e sem reinstala-lo e reconfigurar tudo novamente do zero.

Este esquema serve não só para o Ubuntu mas para as distros Linux em geral.

Dica

Comando como super usuário para “gerar” um UUID para modificar na partição específica:

uuidgen

Se por algum motivo uma partição linux, seja em um pendrive, seja em algum outro HD for necessário “recriar um novo UUID”, existe este comando mencionado que dá o seguinte resultado como exemplo:

05a1fbc1-d8b0-4e8f-8c81-e7e6fbfe6254

Este é um UUID novo gerado para partições Linux, para aplicar este UUID em uma partição específica, basta usar o comando tune2fs como super usuário e a partição desmontada:

tune2fs /dev/sdXZ -U 05a1fbc1-d8b0-4e8f-8c81-e7e6fbfe6254

X = Uma unidade específica
Z = A partição em que se quer modificar um UUID

Ufa! Essa troca HD foi um parto mas conseguimos!

Como trocar HD sem “reinstalar” o Ubuntu 14 is a post from: Ubuntu Dicas

O post Como trocar HD sem “reinstalar” o Ubuntu 14 apareceu primeiro em Ubuntu Dicas.

13 Oct 16:54

Por aí: fazendo a internet do Brasil pelo mundo

by Redação iMasters

Que os brasileiros têm feito muita coisa, a gente sabe. Mas quem está fazendo o que e onde, nem sempre fica bem claro.

A ideia aqui é que você apareça, com a sua equipe, sua turma, seus amigos, mostrando um trabalho, a participação num hackaton, palestra etc. Tudo o que signifique “fazer a internet do Brasil” para você, cabe aqui! Quer participar? Envie uma foto e descrição para redacao@imasters.com.br.

luileao01

Durante o Google I/O, em São Francisco/EUA, aconteceu um encontro dos Organizadores dos Google Developer Groups (GDG) de várias partes do mundo. Você consegue encontrar os brasileiros Luis Leão e Paulo Fernandes?

luisleao02
Luis Leão, Zeno Rocha, Paulo Fernandes e André Moretzsohn – Google I/O – São Francisco/EUA

mack
Durante o Up Summit, um dos maiores eventos para líderes de startup do mundo, Edson Mackeenzy, do Videolog.tv, e Justin Wilcox, da Ninbus Helth, se encontraram com Tony Celestino e Dave Parker, respectivamente Country Manager Brasil e VP da UP Global, entidade responsável pelo Startup Weekend no mundo. O UP Summit aconteceu em maio, em Las Vegas.

hangout-1 hangout-4 hangout-3 hangout-2

Hangouts sobre Design de Software
A ideia nasceu na comunidade PHP Brasil e hoje já abrange várias outras comunidades de desenvolvedores de todo o país. Toda semana novos participantes compartilham suas experiências sobre Design de Software Orientado a Objetos. Veja os hangouts já realizados no canal do PHP Brasil no YouTube.

Maujor lança mais um livrolivro maujor
Maurício Samy Silva, o Maujor, grande dinossauro da web e colunista do iMasters, lançou o livro Web Design Responsivo, pela editora Novatec. Com informações detalhas sobre as técnicas do design responsivo, seus princípios, métodos e tecnologias aplicáveis, Maujor explica através de exemplos práticos e de forma simples e clara tudo o que é preciso saber para a criação de uma página com design adaptável e layout responsivo. O iMasters teve o prazer de colaborar com este livro – o site foi utilizado para testes e análises da publicação. O conteúdo final é incrível e vale muito a leitura do livro!

 

***

Artigo publicado na Revista iMasters, na seção “Por aí”. Você pode assinar a Revista e receber as edições impressas em casa, saiba mais.

Mensagem do anunciante:

Torne-se um Parceiro de Software Intel®. Filie-se ao Intel® Developer Zone. Intel®Developer Zone

12 Oct 23:42

Craig Kerstiens: A simple guide for DB migrations

Most web applications will add/remove columns over time. This is extremely common early on and even mature applications will continue modifying their schemas with new columns. An all too common pitfall when adding new columns is setting a not null constraint in Postgres.

Not null constraints

What happens when you have a not null constraint on a table is it will re-write the entire table. Under the cover Postgres is really just an append only log. So when you update or delete data it’s really just writing new data. This means when you add a column with a new value it has to write a new record. If you do this requiring columns to not be null then you’re re-writing your entire table.

Where this becomes problematic for larger applications is it will hold a lock preventing you from writing new data during this time.

A better way

Of course you may want to not allow nulls and you may want to set a default value, the problem simply comes when you try to do this all at once. The safest approach at least in terms of uptime for your table –> data –> appliction is to break apart these steps.

  1. Start by simply adding the column with allowing nulls but setting a default value
  2. Run a background job that will go and retroactively update the new column to your default value
  3. Add your not null constraint.

Yes it’s a few extra steps, but I can say from having walked through this with a number of developers and their apps it makes for a much smoother process for making changes to your apps.

11 Oct 14:23

Gerenciar tempo: 3 técnicas que nunca saíram de moda

by Rodrigo Moreti

Quando você chega ao escritório, você sabe em que tarefa trabalhar primeiro ou tem de decidir na hora? Gerenciar tempo, antes de mais nada, é organizar suas tarefas. Posso dizer isso pelo que aconteceu comigo, aqui no Runrun.it. Meu trabalho é justamente pesquisar as melhores estratégias para aumentar produtividade e contá-las aqui para você. Eu ...

The post Gerenciar tempo: 3 técnicas que nunca saíram de moda appeared first on Runrun.it Blog.

10 Oct 13:05

Web.br 2014 – Bootstrap: Ame ou Odeie

by diego@tableless.com.br (Tableless.com.br)

A palestra da @hannelita foi muito interessante. Ela, como back-end, falou sobre o caso dela com o Bootstrap, mostrando os motivos que a levaram a utilizar Booststra e pontos de atenção, onde ela descobriu quais os casos para usá-lo um framework assim com cuidado.

Eu gosto bastante do Bootstrap, mas apenas em alguns momentos. Bootstrap, para mim, não serve para fazer websites. Ele é ótimo pra fazer painéis administrativos. Mas um website, que tem o design muito específico, não aconselho usar qualquer tipo de framework pronto. Abaixo seguem minhas anotações sobre a palestra:

  • Por que você usa Bootstrap? Só por que é fácil? você tem alguma razão plausível para usar bootstrap?
  • A documentação de um framework como o Bootstrap, precisa ser bem escrita e com muitos exemplos. Isso é bom p/ quem nao sabe front
  • Não faça uma documentação usando apenas o readme.md do GitHub. Faça algo decente, faz favor.
  • Documentação é importante. A ferramenta pode ser legal, mas se a documentação for um lixo, esquece.
  • Bonus: um back-end consegue fazer um site responsivo usando bootstrap. Aí o back-end fica feliz a toa. ;-)
  • É muito rápido fazer qualquer coisa com o Bootstrap. Tem JS e LESS de grátis lá! ;-)
  • Back-Ends conseguem aprender Bootstrap de um jeito fácil.
  • Motivos para não usar Bootstrap. 1. A separação entre conteúdo e apresentação não é muito boa.
  • Os nomes de classes não são intuitivos. Isso é um problema. Nomenclatura na verdade é o problema do mundo de desenvolvimento.
  • Problemas semânticos.
  • Os nomes de classes não são intuitivos. Isso é um problema. Nomenclatura na verdade é o problema do mundo de desenvolvimento.
  • Geralmente o problema disso é usar muitas classes para atrelar estrutura e design.
  • Muitos sites terão a mesma identidade visual. Aqui cai naquele negócio do design.
  • Você não usaria o bootstrap para fazer um site complexo.
  • Não use um framework se você não quiser usar o design dele.
  • No Locaweb Style tivemos esse problema de redesign. Nós tínhamos que reescrever parte do bootstrap para ficar com o nosso design.
  • Para mim, opinião pessoal, não use Bootstrap para fazer websites. Bootstrap é muito bom para painéis administrativos.
  • Mas aí eu sugiro usar o Locaweb Style. É bem mais bonito. ;-) http://locaweb.github.io/locawebstyle/
  • Fazer o redesign de um site que já usa um framework é muito custoso.
  • Você já usou o Bourbon Neat? É legal, mas não se compara com Boostrap. Neat é só GRID.
  • Bourbon é legal. Eu aconselho dar uma olhadinha. Aí compara com Compass… que é bem mais conhecido. http://bourbon.io
  • As vezes, na minha opinião, você só vai precisar de um framework de Grid. As vezes nem isso!
  • Tenha cautela com os Mixins do Bourbon, Compass ou qualquer outro cara desse tipo
  • Ainda há outra opção, o Foundation. O foundation pode ser comparado ao Bootstrap… Ele é minha segunda opção, sempre.
  • Escolha o framework mais adequado para o seu projeto atual. Bootstrap é interessante para sistemas administrativos
  • Se você trabalha em um projeto aberto, é muito melhor criar um framework interno, onde você faz sua semântica e organização.

---
Este artigo foi escrito por Diego Eis.

Visite o nosso site para mais posts sobre desenvolvimento web! Tableless.

09 Oct 20:07

The Pirate Bay tem Super Camuflagem para não ser detectado

by Vítor M.
O The Pirate Bay tem vindo a tornar-se no inimigo público número um dos organismos que defendem os direitos de autor e outros na mesma linha de acção. Tentaram junto dos Governos de vários países perseguir e fechar os servidores deste serviço encetando uma verdadeira cruzada, mas nunca conseguiram resultados com sucesso. O The Pirate […]