A partir da versão 3.8 do Python, os termos master e slave serão alterados para worker e helper. A decisão se dá após debates da comunidade sobre a terminologia usada, que já duram quase duas décadas.
“Por razões de diversidade, seria legal tentar evitar a terminologia ‘mestre’ e ‘escravo’, que pode ser associada a escravidão”, escreveu Victor Stinner, um dos desenvolvedores no Red Hat, em seu pedido mais recente para troca da terminologia.
O pedido gerou diversas discussões e dentre sugestões, críticas e respostas, um usuário identificado como Steve D’Aprano, comentou “Na verdade, nas subculturas BDSM, ‘mestre/escravo’ pode ter conotações *positivas*. Você quer dar suporte a diversidade, então por que quer discriminar essa subcultura?”.
Sugestões foram feitas, como webmaster/postmaster, master/apprentice, parent/children, etc. Mas no final ficou decidido que passaria a se chamar “workers” e “helpers” (algo como operário e ajudante) e o “master process” passará a se chamar “parent process” (processo pai/mãe).
Apesar da terminologia jé ser muito usado na área de hardware, outras comunidades na área de software já fizeram modificações similares. Em 2014, Drupal e Django trocaram as terminologias para primary/replica e leader/follower, respectivamente.
A Adobe anunciou que está abrindo uma plataforma para permitir que usuários, empresas e desenvolvedores criem ferramentas personalizadas para serem usadas com o ecossistema do Adobe XD.
Já disponível para parceiros, a API do Adobe XD agora é aberta para que os desenvolvedores possa adicionar novas ferramentas, automatizar projetos e conectar a ferramentas e serviços comuns aos designers ou específicas para cada projeto.
Junto a isso, o Adobe XD também agora apresenta integração com ambientes de colaboração populares como o Microsoft Teams, Slack e Jira Software Cloud.
“Estamos compromissados como o desenvolvimento de um ecossistema ricos acerca do Adobe XD, para atender as necessidades do designer moderno. (…) Oferecer experiências de usuário atraentes e engajadas é imperativo para marcas, empresas e todos os produtos digitas, e a Adobe está focada em prover aos designers poderosos recursos de colaboração”
Scott Belsky. Diretor de Produto e Vice-Presidente Executivo do Adobe Creative Cloud.
A plataforma aberta estará disponível ainda em 2018, mas a Adobe já vem trabalhando para construir plugins com o XD com parceiros como a Microsoft, Trello, UserTesting, Airtable, Dribble, Sillicon Publishg, Slope, inMotionNow, Astute Graphics, Anima e Google Cloud, além de suas próprias ferramentas como o Behance e Adobe Stock.
Fundo de 10 milhões de dólares para capacitação em inovação criativa
A Adobe também revelou que seu fundo de incentivo ao design, Adobe Fund for Design, criado em Maio deste ano, distribuiu uma grande quantidade de investimentos para desenvolvedores de UX em todo mundo. Os investimentos iniciais incluíram indivíduos e empresas, com diversos produtos disponíveis ainda este mês:
CloudApp – Video, webcam, captura de tela com anotação e criação de GIF através da nuvem.
Protoio, Inc., makers of Overflow – Capacita designers a projetar, apresentar e compartilhar bonitos diagramas de fluxo que contam uma história.
Stark – Ajuda seu projeto e a construir produtos que são acessíveis éticos e inclusivos.
Florian Schulz, Maker of Ratio – Criar ferramentas para integração de tipografia.
Precious Design Studio – Um estúdio que ajuda inovadores a modelarem produtos e serviços que as pessoas amem interagir, bem como ferramentas de design como Data Populator e Open Color Tools.
Odin Chart – Tyler Wolf é um designer de visualização de dados construtor do Odin Chart, uma ferramenta simples que cria gráficos para produtos digitais e publiccações.
Iconscoutby Chamestudio – Ícones de alta qualidade, ilustrações e fotos stock em um único lugar.
Impekable – Agência digital especializada em experiência do usuário e desenvolvimento de softwares.
UI Faces – Avatares para maquetes (mockups) de design.
Prototypr.io – Comunide para designers que querem compartilhar seus trabalhos e ficarem atualizados com as últimas ferramentas e novidades sobre design.
Modulz – Gerador de código para construção de interfaces gráficas sem a necessidade de programar.
Design+Code – O time por traz dos populares cursos de código e dedsign e do plugin Angle.
Yummygum – Criar designs belos e experiencias refrescantes para web e mobile.
A Adobe também anunciou algumas novidades para o Adobe XD, como facilidade nos workflows, para o processo designer-desenvolvedor e opções de extrair assets.
As vezes você precisa trabalhar com sites ou projetos multi-idiomas. Alguns desses projetos carregam dinamicamente a tradução ou possui páginas específicas em outro idioma. Redirecionar automaticamente para o conteúdo específico da região é um comportamento fundamental para uma boa experiência do usuário.
Detecção por Geolocalização
A forma mais simples e rápida de fazer isso, é através de uma API open-source online chamada Nekudo (https://geoip.nekudo.com/). O Nekudo não está mais disponível e virou IPI. Você precisa fazer um cadastro gratuito em https://ipapi.com/product e pegar sua chave e cadastrar o IP. Na dúvida de saber qual o IP do seu server, abra o seu prompt de comando (windows) ou terminal (Unix/Mac/Linux) e digite ping seusite.com.br.
A forma ideal de fazer isso é a partir da sugestão, ao invés do redirecionamento direto, como é feito no site da Apple e Adobe. Isso porque o usuário pode estar em viagem ou simplesmente preferir usar o conteúdo em outro idioma.
Vamos para a prática.
Javascript
Para facilitar, vamos usar um jQuery básico, que está presente em quase todos os sites e sistemas. Basta um “ajaxizinho” apenas para chamarmos a API do Geoplugin.
A URL https://api.ipapi.com/, seguido da chave e IP já devolve os dados em formato JSON. Como ele vai pegar o IP atual do usuário, não é necessário passar o IP:
O retorno então será:
Agora basta tratarmos o código para que execute uma ação e depois redirecione. Ficando assim:
Nesse ponto, apenas verificamos se não está no Brasil e ele vai redirecionar a página em questão.
Todavia, ele não vai guardar essa preferência. Logo, toda vez que a pessoa entrar no site, ela vai ter que responder a pergunta novamente. Mas para evitar que isso ocorra, podemos usar o localStorage. Garantindo assim que seja memorizada a opção e evitando que a API seja requerida desnecessariamente. O código final ficaria assim:
Como saber se está funcionando?
Para testar, basta você usar um serviço de VPN. Você pode fazer isso através de algum site, programa ou simplesmente rodando pelo Opera, que já possui uma VPN própria e é ótimo mantê-lo instalado para testes. Recomendamos que você use o Opera, pois, além de ser um bom navegador, ele é mais seguro para evitar usar sites duvidosos ou serviços de terceiros. O Opera Developer é uma boa opção e possui VPN integrado. Clique na imagem para ser direcionado a página de download oficial.
Após instalar o Ópera, para habilitar o VPN, basta ir nas configurações, a partir do símbolo do O, no canto superior esquerdo.
Indo na guia Avançados > Recursos, ele vai retornar a primeira opção como VPN. Simplesmente a habilite.
Feito isso, a opção de VPN vai ficar visível e você poderá testar o funcionamento em diversos locais.
Ah, mas eu não quero redirecionar assim, quero que seja pelo servidor
Muito bem, digamos que você queira que o redirecionamento seja feito direto pelo servidor porque você é mal que nem um pica-pau. Sem problemas.
Para isso, você pode usar o cURL da sua linguagem de preferência e fazer o redirecionamento através dela. Aqui vai um exemplo mais comum, em PHP:
Lembrando que isso precisa ser inserido antes mesmo do doctype, pois se não pode retornar o erro de Headers Already Sent.
Concluindo
É bem simples testar o IP quanto a localização. Há diversos serviços, alguns pagos e outros gratuitos, que fazem esse tipo de redirecionamento. Também há plugins e extensões que você pode instalar em seu servidor, mas certamente a demonstrada aqui vai servir para a grande maioria dos projetos.
Uma dúvida foi postada no grupo de Design e Programação de nossa página, lá no Facebook, hoje. Essa pergunta era referente a como selecionar de uma linha de uma tabela HTML?
Para tal, basta usar um pouco de Javascript e CSS.
Montando a Tabela
Vamos montar, para testar, uma tabela simples, respeitando a semântica HTML básica. Vamos aproveitar para colocar logo um botão, que vai ser por onde podemos visualizar os dados da linha selecionada:
Para sermos mais justos, vamos fazer o exemplo usando Javascript puro. No nosso exemplo, vamos contemplar a opção de selecionar uma única linha ou mais de uma linha, opção determinada apenas por um parâmetro. Ainda vamos ver como manipular os dados.
Inicialmente, precisamos capturar a tabela e adicionar, à ação de clique, uma função que adicione ou remova a classe de seleção:
var tabela = document.getElementById("minhaTabela");
var linhas = tabela.getElementsByTagName("tr");
for(var i = 0; i < linhas.length; i++){
var linha = linhas[i];
linha.addEventListener("click", function(){
//Adicionar ao atual
selLinha(this, false); //Selecione apenas um
//selLinha(this, true); //Selecione quantos quiser
});
}
A função selLinha() vai ser responsável por adicionar ou remover a class “selecionado” do nó. Passamos também um parâmetro que vai determinar se poderá selecionar mais que uma linha ou apenas uma. O primeiro laço, caso múltiplos seja falso, irá apenas desmarcar todos as linhas antes de marcar a linha clicada.
/**
Caso passe true, você pode selecionar multiplas linhas.
Caso passe false, você só pode selecionar uma linha por vez.
**/
function selLinha(linha, multiplos){
if(!multiplos){
var linhas = linha.parentElement.getElementsByTagName("tr");
for(var i = 0; i < linhas.length; i++){
var linha_ = linhas[i];
linha_.classList.remove("selecionado");
}
}
linha.classList.toggle("selecionado");
}
Agora vamos adicionar uma função ao clique do botão para que a gente possa visualizar os dados selecionados. Para isso, iremos justamente capturar apenas as linhas que tiverem a class “selecionado” e, através de um laço, vamos concatenar os valores dentro dos nós <td> da(s) linha(s) selecionada(s).
/**
Exemplo de como capturar os dados
**/
var btnVisualizar = document.getElementById("visualizarDados");
btnVisualizar.addEventListener("click", function(){
var selecionados = tabela.getElementsByClassName("selecionado");
//Verificar se eestá selecionado
if(selecionados.length < 1){
alert("Selecione pelo menos uma linha");
return false;
}
var dados = "";
for(var i = 0; i < selecionados.length; i++){
var selecionado = selecionados[i];
selecionado = selecionado.getElementsByTagName("td");
dados += "ID: " + selecionado[0].innerHTML + " - Nome: " + selecionado[1].innerHTML + " - Idade: " + selecionado[2].innerHTML + "\n";
}
alert(dados);
});
Vamos Testar?
ID
Nome
Idade
01
Rodrigo
33
02
Taynara
21
03
Raveny
22
04
Sérgio
51
05
Alice
20
No entanto, se você preferir ver todo código completo, acesse o JsFiddle incorporado abaixo:
No último dia 12 de Junho, a Corel lançou a nova versão de sua suite específica para designers de produtos e engenheiros. Chamada de CorelDRAW Techinical Suite 2018, esta versão traz ainda mais integração com plataformas CAD e se foca na criação e finalização de produtos técnicos, como esquemas, manuais de construção e similares.
A suite inclui o Corel DESIGNER e os já conhecidos pela maioria, Corel DRAW e Corel PHOTO-PAINT, dentre outros aplicativos satélites.
Tela do Corel DESIGNER 64 bits
Dentre as novidades da versão 2018 estão o novo modelo de desenho por simetria (modo similar ao perspectiva, do Illustrator, que permite desenhar em planos tridimensionais) e a conversão quase automática de modelos 3D em imagens vetorias 2D para ilustração profissional.
O novo modo de simetria ajuda o usuário a criar ilustrações isométricas.É possível converter modelos 3D para 2D para editar os vetores e dar melhores contextos a manuais e esquemas técnicos
O que está incluso?
Corel DESIGNER® 2018 – Ilustração de precisão técnica
CorelDRAW® 2018 – Conhecido programa de ilustração e impressão
PHOTO-PAINT® 2018 – Editor de imagem matricial
PowerTRACE® 2018 – Converso de imagem matricial para vetorial
Font Manager™ 2018 – Gerenciador de fontes
XVL Studio Corel Edition – Visualização 3D
CONNECT™ – Gerenciador de conteúdo
CAPTURE™ 2018 – Captura de tela
AfterShot™ 3 HDR – Editor de fotos RAW
PhotoZoom Pro 4 – Plugin de exportação de fotos digitais para o PHOTO-PAINT
O novo CorelDRAW Techinical Suite 2018 já está disponível no Brasil por R$2.699,00, permanentemente ou através de assinatura anual por R$1.099,00 e pode ser adquirido direto no site da Corel.
Na última WWDC, a Adobe apresentou uma solução de RA (Realidade Aumentada) que visa facilitar a produção de conteúdo para esse segmento. Nomeada de Adobe Aero, essa solução consiste em um conjunto de ações, complementos e aplicativos para agilizar o desenvolvimento de objetos 3D para realidade aumentada, tanto para design quanto para criação de aplicativos.
Em colaboração com a Apple e a Pixar, a Adobe também anunciou o suporte de USDZ (Universal Scene Description -Zipped) para o Adobe Creative Cloud. Designers podem criar e editar seus objetos em ferramentas como o Photoshop CC e Dimension CC, para então exportar nativamente para o USDZ que pode ser consumido pelo ecossistema da Apple.
O Project Aero consiste em desenvolver soluções para serem usadas com o ARKit da Apple e vinculando ao Xcode para refinamento e o uso no desenvolvimento.
Exemplos do uso das novas funcionalidades da Adobe poderão ser vistos no Festival do Impossível, que vai acontecer no começo de Junho em São Francisco.
Disclaimer: If you are coming from an english or international chat/group, please roll to jsfiddle at the end of this post and get all comments and explanations in english or access jsfiddle link.
Bibliotecas de gráficos existem aos montes. A maioria pesada e com poucas (ou complexas) opções de personalização. De modo que, pensei, será que é possível usar a animação do CSS para criar um gráfico leve? Como exercício, talvez eu pudesse desenvolver uma solução de gráfico radial que pudesse funcionar bem. Esse questionamento veio a partir da pergunta de uma pessoa, em um grupo, que queria criar um loading infinito com CSS.
Criando o CSS
Para poder criar a animação do load, pensei em diversas formas que já são usadas como solução, como o gradient ou gambiarras com contornos, mas eles não usam realmente o conceito da animação do raio a partir do centro. Para resolver, pensei em apelar para a trigonometria. Dividi então o círculo em 4 triângulos retângulos.
A partir daí podemos considerar a animação a partir de cada dos vértices da hipotenusa, se abrindo do raio, formando o triângulo retângulo, como no exemplo abaixo:
OK, conseguimos criar os triângulos com o clip-path do CSS. Graças ao ele podemos colocar caminhos de uma imagem a partir de vértices. Mas como colocar isso nos 4 triângulos? Não faria o menor sentido colocar os triângulos um do lado do outro. Como fazer então para utilizar um caminho completo para dar o efeito de transição radial?
Para isso, basta fazermos um cálculo simples. Quantos vértices seriam necessários para criar um polígono que dê a volta? Bem, basta contarmos o vértices do quadrado (4) mais um ao centro que define os triângulos e mais um para fechar a animação. Ou seja, precisamos de um hexagono.
Agora basta manipular os vértices do hexagono para se comportar similar ao triângulo retângulo, levando os pontos do vértice, em fila, sempre ao próximo ponto do quadrado.
Basta colocar agora a animação como linear, para evitar as pausas (o padrão possui um ease) e adicionar um elemento acima com um overflow: false e um border-radius: 50%, de forma a ficar realmente circular:
Controlando com Javascript
Podemos fazer um jeitinho para que o Javascript controle a animação. Para isso, podemos usar algumas propriedades que controlam a animação. Em especial, vamos poder pausar e continuar a animação, através do parâmetro animationPlayState.
O código completo está disponível pelo jsFiddle. O código está todo comentado e pode ser testado diretamente abaixo:
0%
Obs. Não use filtro blur ou muitas sombras se quiser compatibilidade com o Safari iOS.
Provavelmente, esta não é a melhor solução para criação de um gráfico radial. Mas é interessante vermos que podemos desenvolver novas soluções, e mais leves, a partir de tecnologias mais recentes. Se você gostou, compartilhe, se tem alguma dúvida, comente. Aproveite para curtir nossa página do Facebook e entrar no grupo, através do link abaixo.
Todos sabemos que transições são importantes para diminuir a sensação de repentinidade para o usuário e preparar o cérebro para, aos poucos, compreender a nova informação.
Porém, o transition do CSS3 não funciona uniformemente com todos os parâmetros. Quem nunca quis que um elemento HTML em tela sumisse aos poucos?
O mais comum é utilizar o bom e velho display: none;, porém este simplesmente não funciona ao aplicar um transition. Usemos a lógica de que a passagem de um bloco para um nada não é uma transição. No CSS, uma transição inicialmente precisa ser um comando baseado em números.
Como usar o CSS para fazer a transição de um objeto sumir?
Para realizar esta ação, vamos usar um pequeno truque. Ao invés de simplesmente não mostrar o objeto, vamos desativar sua propriedade de ser manipulável com o mouse ou toque. Para isso podemos usar a propriedade pointer-events, ficando:
Para fazer o objeto desaparecer vamos usar um pouco de JavaScript apenas para adicionar ou remover a classe CSS da div:
function ocultar(){
var element = document.getElementById("idDaDiv");
element.classList.add("hide");
}
function mostrar(){
var element = document.getElementById("idDaDiv");
element.classList.remove("hide");
}
Vamos testar?
Mas e se você quiser que ele também não ocupe um espaço? Pois pode ficar um buraco perturbador. Nesse caso você pode modificar a altura do elemento para poder aproveitar melhor esse espaço. Todavia, a propriedade height não é animável (talvez por possuir uma propriedade auto). Para esse caso, você precisa usar o max-heightpara realizar esta animação.
Lembre-se que para evitar que o conteúdo seja mostrado independente da div que você vai aplicar a transição, será necessário colocar a propriedade overflowcomo hidden. Também é importante salientar que a propriedade max-height só é animável caso você use as medidas fixas em pixels. Como ele determina apenas o tamanho máximo, não vai influenciar se você colocar um tamanho maior que o esperado, o que se torna funcional também para responsividade.
Vamos Testar?
Se acredita que essa dica de CSS é útil para mais alguém, compartilhe e curta esta página!