Shared posts

28 Jul 22:03

DevJuice: Adding warnings for TODO and FIXME comments

by Erica Sadun

DevJuice Adding warnings for TODO and FIXME comments

A clever post from deallocatedobjects cropped up on IRC on Friday, and I thought I'd share its wisdom. The post discusses how you can add a custom build phase to automatically show TODO and FIXME comments as warnings in your Xcode 4 (and later) projects.

It takes very little work. Select a target and choose Editor > Add Build Phase > Add Run Script Build Phase. Paste the following bash script in:

KEYWORDS="TODO:|FIXME:|\?\?\?:|\!\!\!:"
find "${SRCROOT}" \( -name "*.h" -or -name "*.m" \) -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($KEYWORDS).*\$" | perl -p -e "s/($KEYWORDS)/ warning: \$1/"

According to the write-up, credit goes to "Tim" on the Cocos2D forums.

Thanks, swillits

DevJuice: Adding warnings for TODO and FIXME comments originally appeared on TUAW - The Unofficial Apple Weblog on Sat, 27 Jul 2013 12:00:00 EST. Please see our terms for use of feeds.

Source | Permalink | Email this | Comments
12 Jul 03:29

Where 'Crysis' came from: the story of Crytek

by Polygon Staff
09 Jul 14:48

Kit FUI

by John Gruber

Great idea:

Fantasy User Interfaces, Fictional User Interfaces, Fake User Interfaces, Futuristic User Interfaces. Regardless of what the F stands for, they all represent the same thing, the user interfaces and heads up displays found in many popular movies and television shows. […]

Kit FUI is an IMDb-like database that makes it easy to find screenshots, videos and the designers of these FUIs.

06 Jul 02:19

Play this: 'Rotational' adds a new dimension to 'Super Hexagon'

by Sam Byford
Screen_shot_2013-07-02_at_9

Terry Cavanagh's Super Hexagon is challenging enough without throwing depth and lateral movement into the mix, but that's what Kevin Messman has done with Rotational. Described by its creator as a "love letter to Hexagon," Rotational involves similar slip-through-the-shapes gameplay while shifting the action to the surface of a sphere.

Like Super Hexagon, the music is retro and the visuals are sparse; also like Super Hexagon, you're unlikely to last more than a few seconds before succumbing to the onslaught of geometry. It's a free download for both Mac and PC.

Continue reading…

20 Jun 02:52

Aglomerações

by Carlos Ruas

2087

19 Jun 13:00

DevJuice: iOS/Android PortKit translates visual metaphors

by Erica Sadun

The clever folk over at Kintek have posted a handy system-to-system guide for anyone working in the mobile development space. This metaphor overview quickly references how items like buttons, switches, one-of-n selection, and other common interface items are expressed by default in the target arenas.

You'll find items from Android, iOS 6, and iOS 7 listed side-by-side, so you can quickly review their visual presentation. Resource links take you to developer documentation. It's nicely done and well worth checking out.

[Via Swiss Miss]

DevJuice: iOS/Android PortKit translates visual metaphors originally appeared on TUAW - The Unofficial Apple Weblog on Tue, 18 Jun 2013 16:00:00 EST. Please see our terms for use of feeds.

Source | Permalink | Email this | Comments
19 Jun 12:57

Neven Mrgan on the iOS 7 Icon Template Grid

by John Gruber

Neven Mrgan:

But whether we accept the idea of a grid or not, here’s the bigger point: no icon designer I’ve asked thinks Ive’s grid is helpful. In that sense, it’s wrong. The large circle is too big. Many apps in iOS 7 use it: all the Store apps, Safari, Messages, Photos… In all these icons, the big shape in the center is simply too big. Every icon designer I’ve asked would instead draw something like the icon on the right. To our eyes — and we get paid to have good ones, we’re told — this is more correct.

31 May 03:57

Anatomy of a Logo: Star Wars

by John Gruber

The lesson: iterate, iterate, iterate.

28 May 21:05

Esta X-Wing em tamanho real feita de Lego é o maior modelo da história

by Jesus Diaz

Isso é inacreditável: a Lego construiu um modelo em tamanho real de uma nave X-Wing usando surpreendentes 5.335.200 blocos! É tão grande quanto a coisa real, com espaço para Luke Skywalker e até Porkins.

Como você pode ver nessas imagens e vídeos exclusivos do Gizmodo, o modelo reproduz a X-Wing Fighter Lego 9493 de US$ 60. Mas em vez de 560 peças e alguns centímetros de largura, este modelo usa mais de cinco milhões de peças e tem 3,3 metros de altura e mais de 13 metros de comprimento. Assim como a X-Wing real – e 42 vezes o tamanho do modelo de Lego.

original (1) original (3) original

Os fatos inacreditáveis

Eis os detalhes do modelo:

  • Contém 5.335.200 peças de lego
  • Pesa 20.856kg
  • Altura: 3.35 metros
  • Comprimento: 13.1 metros
  • Envergadura: 13.44 metros
  • 32 construtores passaram 17.336 (cerca de quatro meses) para montar.

Onde você pode ver

Para capturar as fotos e vídeos, o Gizmodo teve que viajar para um hangar próximo a Nova York, onde o modelo chegou de navio da Lego Model Shop em Kladno, na República Tcheca. Mas você pode ver com seus próprios olhos se estiver em Manhattan, já que ele está em exposição no meio da Times Square. De acordo com a Lego:

O modelo foi projetado para resistir a toda o transporte, montagem e desmontagem, e para garantir que era seguro para Times Square considerando o sistema de metrô abaixo e as exigências sísmicas da Califórnia para a instalação Legoland California Resort.

original (2)

A X-Wing sendo apresentada em Times Square, em Nova York.

Não está em Nova York? Sem problema. Após três dias na cidade, a X-Wing será transportada para a Costa Oeste, onde ficará até o fim do ano. E você conseguirá até sentar dentro dela:

original (4)

Imagens exclusivas do Gizmodo

original (7) original (8) original (9) original (10) original (11) original (12) original (13) original (14) original (15) original (16) original (17) original original (5) original (6)

A coisa é tão grande e pesada que precisa de uma estrutura metálica interna para suportá-la:

original (18) original (19) original (20) original (21) original (22) original (23) original (24) original (25) original (26)

Eis uma das caixas usadas para transporte:

original (27)

O modelo foi criado para promover a animação de TV Lego Star Wars The Yoda Chronicles, que vai estrear no Cartoon Network dos Estados Unidos no dia 29 de maio.

original (28)

Imagens e vídeo por Nick Stango

10 May 00:52

Massimo Vignelli on Grid-Based Design

by John Gruber

Massimo Vignelli:

The grid is an integral part of book design. It’s not something that you see. It’s just like underwear: you wear it, but it’s not to be exposed. The grid is the underwear of the book.

Love that he draws each photo as he sketches the layout.

06 May 20:48

Adobe announces first hardware, the Project Mighty smart stylus and Napoleon ruler

by Jacob Kastrenakes
Hero_large

Adobe has just announced its first hardware initiative, a pressure sensitive stylus and an electronic ruler that will tightly integrate with its software applications. The company's Project Mighty stylus and Napoleon ruler have been showcased connecting to an iPad and iPhone over Bluetooth. The pen works much like existing styli, but when working alongside Napoleon, the two tools can be used to create curved and angled shapes in a way that would be difficult to do with a third-party stylus. So far, the tools have only been demonstrated working with an unreleased app, which Adobe told us was created specifically for the hardware.

Both Project Mighty and Napoleon appear to be small, simple pieces with an aesthetic reminiscent of the...

Continue reading…

27 Mar 19:35

Netflix signs up The Matrix, Babylon 5 creators to develop a new sci-fi series: Sense8

by Richard Lawler

Continuing its quest to sate subscribers' appetites with a flow of original content, Netflix has announced a new original series, Sense8. Due in late 2014, it's being developed by the Wachowskis of The Matrix, V for Vendetta, Cloud Atlas and Speed Racer fame, as well as J. Michael Straczynski, creator of Babylon 5. Details are thin, but the press release promises a gripping global tale of minds linked and souls hunted with a ten episode run for its first season.

As it did with House of Cards, Arrested Development and other productions, Netflix is relying heavily on data from viewers to decide which programs to support. According to chief content officer Ted Sarandos, "Andy and Lana Wachowski and Joe Straczynski are among the most imaginative writers and gifted visual storytellers of our time," whose creations are very frequently viewed on the service. According to the creators themselves, they've sought to work together for a decade, and this idea started from a late night conversation about "the ways technology simultaneously unites and divides us." If that's not enough for now, then there are a few more details and quotes in the press release, which is included after the break.

Filed under: Home Entertainment, HD

Comments

24 Mar 22:03

Quais são algumas das piores práticas para aplicações Ruby on Rails?

by Fabio Akita

Alguns dias atrás me pediram para responder no Quora a pergunta "Ruby on Rails: Quais são algumas das piores práticas para aplicações Ruby on Rails?". Foi uma resposta que teve muitos votos positivos então resolvi que seria um bom post para meu blog. Segue minha versão extendida.

Existem diversas práticas ruins em desenvolvimento de aplicações em geral e em particular em Ruby on Rails. Eu mesmo já cometi e aprendi sobre várias elas na prática e em particular tive que pegar alguns projetos de resgate onde continuo vendo os mesmos erros acontecendo repetidamente, então vamos tentar resumir as principais que mais me irritam.

1) Primeiro de tudo é a ausência de testes, ou cobertura muito pequena, ou testes que são muito frágeis. Pessoal, isso é uma coisa básica! Se ainda não fazem isso comecem imediatamente a adicionar os malditos testes! Quanto pior for a qualidade e cobertura dos testes proporcionalmente mais caro fica manter e expandir uma aplicação, ponto final. Codificadores que não escrevem testes demonstram muito pouco respeito pela sua própria prática.

Já discutimos ad nauseaum (dica pra começar: "The RSpec Book") sobre testes nos últimos anos então o que não falta é material para aprender e as melhores práticas. Não me importo se os testes são feitos "by the book" escrevendo testes antes do código ou se os testes são adicionados depois do código, contanto que no final existam testes que eu possa executar e ter segurança de que não estou criando bugs de regressão, quebrando coisas que não deveria. Não custa quase nada adicionar os testes mínimos, então adicionem.

Ultimamente tivemos diversos problemas de segurança, muita gente simplesmente atualizou suas gems para as mais recentes para pegar as correções. Somente quem tinha bons testes viu que algumas dessas correções introduziam regressões. Quem não testou e só atualizou acabou colocando no ar versões com bugs.

2) Escreva nomes em inglês dentro do seu código. Não me importo se você é brasileiro, italiano, francês ou o que for. Nomes de classes, de variáveis, de métodos, tudo deve ser em inglês. Estamos num mundo globalizado, não é pensar muito longe que amanhã um americano vai mexer no seu código todo em português. Além do problema de consistência: a sintaxe da linguagem, todas as bibliotecas padrão, é tudo em inglês. É uma enorme dissonância cognitiva ter nomes em português no meio. É como você estar lendo uma revista em português com diversos parágrafos em inglês no meio. Não faz nenhum sentido.

E aproveitando outra coisa que muitos não fazem: não é obrigatório usar o sistema de localização do Rails. Porém no primeiro momento onde você se ver adicionando strings de mensagens dentro de models e controllers, pare! Existe local para isso, e é em config/locales. Não tem nada pior do que achar dezenas de mensagens espalhadas por todas as classes.

3) Hoje existem diversos frameworks e bibliotecas para front-end, seja para stylesheet (Bourbon, Bootstrap, Compass), para javascript (jQuery, Ember, Angular, Backbone), e diversas ferramentas (Sass, Coffeescript). Além disso temos toda uma convenção e estruturas em app/assets para organizar tudo issso. Parem de colocar styles e javascript inline espalhados pelas views! É sintoma de preguiça, de falta de conhecimento e tentativa de pular passos fazendo gambiarras. Não faça isso!

4) Não tente ser mais esperto do que seu ORM (Object Relational Model), no caso o ActiveRecord. Na enorme maioria dos casos, se você estiver usando find_by_sql por motivos de otimizar "performance", você está fazendo a coisa errada. Pior ainda, em quase todos os casos que já vi essa tentativa de otimizar na mão não só não havia esse ganho como ainda já vi adicionando buracos de segurança, como o famigerado "SQL Injection". Aliás, esse é um tema frequente: otimização prematura e desnecessária adicionando bugs de segurança.

Talvez 1% dos maiores sites do mundo precisem de SQLs realmente específicos otimizados manualmente depois de muitos testes em produção, com volume de dados e métricas bem definidas para provar a diferença. Mas a maioria de nós está nos 99% que não precisa disso: apenas aprenda a usar o ActiveRecord corretamente.

Por exemplo, o problema fazer N+1 queries desnecessariamente, como está explicado no guia oficial de ActiveRecord e que eu copio aqui:

1
2
3
4
5
clients = Client.limit(10)
 
clients.each do |client|
  puts client.address.postcode
end

Esse código vai fazer 11 queries no banco. A primeira para buscar 10 clientes e depois no loop para buscar o endereço de cada cliente. Isso é tão óbvio que ninguém deveria estar caindo mais nisso. O correto é fazer:

1
2
3
4
5
clients = Client.includes(:address).limit(10)
 
clients.each do |client|
  puts client.address.postcode
end

Nesta versão já estamos puxando os endereços ao mesmo tempo que puxamos os clientes, em apenas 2 queries: uma para puxar os clientes e uma única pra puxar todos os endereços de todos os clientes. Não precisou escrever nenhum SQL na mão, bastou saber usar o ActiveRecord corretamente para cair de 11 para 2 queries.

Complementando e enfatizando: aprendam tudo sobre as as APIs do ActiveRecord e como as queries são montadas. Uma coisa horrorosa que já vi diversas vezes foram tentativas de ser "esperto" e fazer código como este:

1
Subscription.all.select { |s| s.expired? }.each { |s| s.destroy }

Para ficar claro: isso NÃO é "usar as funcionalidades funcionais de Ruby". Isso é ser ignorante quanto bancos de dados e ORMs em geral. Só para ficar absolutamente claro, esse código deveria ser assim:

1
2
Subscription.where(expired: true).destroy_all
Subscription.destroy_all(expired: true)

Lembrando que destroy permite chamar regras de negócio para cada objeto destruído e se usar delete é um comando simples SQL para apagar do banco apenas. Depende o que você pretende fazer ao destruir o objeto. Além disso o campo "expired" deveria ser um escopo dentro do model. Como podem ver, uma simples linha pode ter múltiplas opções dependendo do que se pretende fazer. Novamente não tente ser mais esperto do que o ORM, ele provavelmente já tem tudo que você está imaginando, então não reinvente a roda e leia as APIs.

Outros sintomas básicos que já vi: chamar save(validate: false). Se você está desativando a validação que você ou sua equipe colocou, o que está acontecendo? Existem sim, casos específicos de cargas de dados controlados que talvez possam precisar disso. Na maior parte dos casos não precisa. Na maior parte dos casos é o programador que teve preguiça de entender a aplicação fazendo uma gambiarra pra cumprir sua tarefa de forma "rápida" e largou uma bomba relógio pra trás (falta de testes esconde erros que esse tipo de ação causa).

5) Não use um banco de dados NoSQL a menos que você tenha uma explicação técnica objetiva com argumentos que justifiquem a qualquer um de forma incontestável o porquê dessa escolha. Digo isso porque a maioria das vezes que alguém me falou em usar um MongoDB a resposta cai nas linhas do "vai que um dia precisamos". E não, a maioria de vocês não precisa de um banco de dados NoSQL. Para começar a maioria sequer entende a diferença entre documentos com schema flexível (MongoDB, CouchDB), estruturas de chave-valor (Redis, Riak), ou estruturas orientadas a coluna (Cassandra).

Primeiro que não sabem que existem esses diferentes tipos, então não sabem qual desses é o que realmente resolve seu problema, finalmente não tem idéia do trabalho que é dar manutenção em produção desse tipo de infraestrutura. Aprendam o seguinte: usem bancos de dados relacionais, de preferência PostgreSQL. Vocês não precisam de mais do que isso. Na maior parte do tempo é a preguiça de entender o modelo entidade-relacional e achar que o modelo NoSQL é "mais fácil".

Na minha experiência, ainda não cruzei com um projeto onde a presença de um banco NoSQL fosse indispensável. Em todos os casos que vi, eles acabavam fazendo o que um PostgreSQL faria com as duas mãos nas costas. "Ah, mas eu preciso fazer operações de geolocalização". Avaliem o PostGIS. "Ah, mas eu tenho alguns atritutos dinâmicos que variam, então preciso de uma schema flexível". Não necessariamente, provavelmente o suporte HStore é tudo que você precisa.

Outros casos básicos: usar o banco de dados de produção pra produzir relatórios pesados. Ou o caso mais básico: ter apenas uma instância de banco para leitura e escrita. Não custa nada fazer o básico: uma instância master que é read-write e outra slave que é read-only. Mande as operações de escrita pra master e queries complicadas que consomem processamente para a slave. Mais do que isso, aprenda que a configuração padrão de todo banco de dados é ruim. Aprenda a fazer o tuning básico.

Em resumo: a maioria dos projetos ruins que peguei demonstravam baixo nível de entendimento tanto de bancos de dados relacionais em geral, baixo conhecimento de SQL (índices pessoal! índices!), e por consequência uso muito pobre do ActiveRecord.

6) Falando nisso, outra coisa irritante é pegar um projeto que precisa de mais do que um bundle e rake db:migrate pra começar a funcionar. Seja porque tem um SOLR a ser configurado, um Redis, alguns rake tasks customizados que precisam ser executados, etc. Pessoalmente, existe um arquivo chamado README na raíz de todo projeto que não está lá de enfeite! Não vai custar 1 minuto preencher as informações básicas do ambiente nesse arquivo e economizar horas da sua equipe e dos programadores que vão herdar seu sistema no futuro. Ou você mesmo, que vai passar um tempo sem mexer nesse sistema e quando voltar vai ter que se lembrar de todos os detalhes.

Aliás, aprenda o básico de administração de sistemas Unix-like (Linux) antes de sair reclamando que Ruby é lento, que bancos de dados relacionais são lentos, que o framework é inseguro. Como você pode reclamar da segurança do framework se todas as portas dos seus servidores estão abertos publicamente??

7) E falando em qualidade de código, cobertura de testes e segurança, usem as ferramentas que a comunidade criou e que vão ajudar muito na manutenção dos projetos. O CodeClimate vai checar a qualidade geral do seu código e também da segurança. Cheque o tempo todo, qualquer coisa abaixo de nível 3 é ruim. Configurem seu projeto no Travis-CI e, finalmente, executem o Brakeman e atualize essa gem em particular constantemente. Isso vai garantir o mínimo do mínimo do seu projeto.

8) Eu gosto de usar os gráficos de projetos do Github. Ele conta muito sobre os programadores envolvidos no projeto. E antes que alguém diga, não, não é a comparação de quantidade de linhas de códigos ou quantidade absoluta de commits. É o comportamento individual comparado no tempo. Depois de algumas semanas é possível ver o que seria o "normal" desse programador. Então você começa a ver que a produtividade começa a cair, especialmente nas primeiras semanas, então próximo à entrega vê que dá picos. Normalmente isso é o programador que começou subestimando as tarefas do projeto e perto da entrega se desespera e começa a vomitar código. Comportamento muito ruim porque isso leva a pular passos como pular testes, escrever código sem cuidado, sem segurança e fazendo tudo que eu falei acima que não era pra fazer.

Quando esse comportamento começa a acontecer você vê o sintoma seguinte: programador reclamando do projeto, reclamando que o gerenciamento está ruim, que o cliente é ruim, que o projeto é ruim. São as desculpas mais comuns de péssimos programadores que cometeram erros e jogam seus erros nos outros. Impressionante como esse comportamento tem alta correlação com o tipo de gráfico que mencionei no Github.

Nessa mesma linha vamos combinar: código que está somente na sua máquina não está "pronto". Pronto significa já no repositório, passando todos os testes no Travis-CI, feito deployment em produção e sem gerar bugs de regressão ou bugs de usabilidade que os clientes/usuários descobrem sozinhos na primeira vez que usam a nova versão. Aliás, por que diabos você saiu do escritório sem colocar o código em produção? Não há desculpa para isso. Cansei de ver programadores que "esquecem" de colocar o código em produção. O que você estava esperando? Um convite formal? Programador que demora pra colocar o código no repositório está fazendo as coisas erradas. Já mandei funcionários embora que depois dizem "ah, faltou eu fazer push do código no repositório". O que é isso? Tentativa amadora de fazer código como refém?

Bullshit!

Essas são algumas más-práticas. Existem mais, quais são as piores que você já viu? Comentem e eu vou incorporar as mais interessantes no artigo também.

21 Mar 00:18

Motion Magnification Technology

by The Gorilla

I saw this video recently and I can’t get it out of my mind. Like a lot of technology, it looks like it was originally built for science, but I can see this filtering down pretty quickly. I can imagine some pretty cool things being done with this tech for VFX/Motion Graphics. What is amazing, is that it works on existing footage. No need for a special camera. For some reason, it seems like this would be right up Michel Gondry’s wheel house.

How could this new technology be applied to VFX or Motion graphics?

19 Mar 00:53

Valve's Joe Ludwig on the uncertain future of virtual reality and partnering with Oculus

by Ben Gilbert

Valve's Joe Ludwig on the uncertain future of virtual reality and partnering with Oculus

It's a beautiful late winter day in Bellevue, Wash. Instead of enjoying the outdoors, I'm sitting in a rectangular white room with three programmers, surrounded by three walls covered in augmented reality markers. Not that I'm complaining: Valve Software's Joe Ludwig, the programmer in the room who most resembles a member of Anthrax, is walking me through his company's latest work in the world of virtual reality. It's the first anyone outside of Valve will see of the company's VR efforts thus far.

As it turns out, the software company is working with Oculus VR to port the tremendously popular free-to-play first-person shooter, Team Fortress 2, to the upcoming Rift development kit. The free update, dubbed "VR Mode," is the latest benchmark in Valve's ongoing hardware initiative. "We think that both augmented and virtual reality are going to be a huge deal over the next several years," Ludwig tells us.

Gallery: Valve - Team Fortress 2 VR Mode and Joe Ludwig

Filed under: Gaming, Peripherals, Software, HD

Comments

18 Mar 01:47

Oz the Great and Powerful, por Michael Kutsche

by Flavio Remontti

O artista Michael Kutsche, já destacado por seus trabalhos nos filmes John Carter of Mars, Thor e Alice no País das Maravilhas, divulgou esta semana em seu blog suas artes desenvolvidas na produção de Oz the Great and Powerful, dos estúdios Disney. Como de costume, seus trabalhos impressionam pelo realismo.

Até o momentoa três trabalhos foram liberados pelo artista. Vamos continuar acompanhando.

VISITE:  Michael Kutshe blog 

Veja também:

 

16 Mar 03:37

Hitler finds out Google Reader is shutting down



Hitler finds out Google Reader is shutting down