Raf Simons lançou nesta sexta-feira (22.01) a coleção Archive Redux. Bastante aguardada pelos amantes de moda, a coleção resgata 100 das peças mais famosas do arquivo do estilista — que comemora 25 anos de carreira em 2021 —, disponíveis para compra no site Matches Fashion.
Entre os destaques da coleção estão uma parka pintada à mão da coleção inverno 2004; um clássico blazer preto de 1999 e algumas peças da colaboração de Simons com Sterling Ruby, lançadas em 2014.
"Não foi fácil escolher", disse Raf ao site de compras. "Foi emocionante? Talvez em alguns momentos, porque trouxe à tona muitas memórias. Eu costumo visitar os arquivos ... mas dessa vez estávamos dissecando tudo o que era interessante. Tinham coisas que eu pensava, 'Nós fizemos isso?'"
A marca de Raf Simons conquistou seguidores devotos desde seu lançamento em 1995. Sua base de fãs, em especial os mais jovens, inspiraram o estilista a criar esta coleção: "Recebi muitos pedidos de jovens que queriam as peças, pessoas que nem tinham nascido quando estávamos fazendo algumas delas!", diz ele.
O lançamento da Archive Redux acontece na esteira da coleção masculina de Raf para a Prada, na Semana de Moda de Milão. Desde fevereiro de 2020, o estilista atua como co-diretor criativo da grife, ao lado de Miuccia Prada.

Os especialistas das Nações Unidas para as detenções arbitrárias deverão dar razão à queixa apresentada por Julian Assange. Segundo a BBC, o fundador da WikiLeaks considera que está a ser alvo de uma “detenção ilegal”. No entanto, só amanhã, sexta-feira, é que esta decisão deverá ser anunciada oficialmente.
“Se eu triunfar e se for descoberto que as entidades estatais atuaram fora da lei, eu espero a devolução imediata do meu passaporte e o fim de mais tentativas para me deterem”, publicou Assange, esta quinta-feira, na rede social Twitter. O fundador da WikiLeaks refere ainda nessa mensagem que “se as Nações Unidas anunciarem amanhã [sexta-feira] que eu perdi o meu caso conta o Reino Unido e a Suécia, sairei da Embaixada ao meio-dia de sexta-feira e aceitarei a minha detenção pela polícia britânica, uma vez que não haverá perspetiva significativa de mais recursos”.
O porta-voz da polícia britânica anunciou esta quinta-feira que “o mandado continua em vigor. Se ele (Julian Assange) sair da embaixada (do Equador em Londres), nós vamos fazer todos os esforços para o deter”.
Assange apresentou queixa à ONU em 2014 contra o Reino Unido e o país do qual é natural, a Suécia, apelando para que fosse libertado, uma vez que considerava estar detido arbitrariamente na Embaixada. Apesar de o Equador lhe ter concedido asilo, as autoridades britânicas afirmaram sempre que se decidisse sair da Embaixada seria detido e extraditado para a Suécia.
Recorde-se de que em 2010, Assange foi acusado de crimes de assédio sexual e violação e, devido a mandato emitido pela Suécia, acabou por ser detido em Londres.

Viúvo(a), Eletricista e Assemelhados, nascido	em 11/10/1965	em Paty do Alferes-RJ, candidato	a Deputado Federal	no Rio de Janeiro	pelo AVANTE - AVANTE
Candidato ao cargo de Deputado Federal no Rio de Janeiro pelo AVANTE, Eraldo Muniz obteve 646 votos totalizados (0,01% dos votos válidos) mas não foi eleito nas Eleições 2018.

Investimentos do governo em transportes encerram 2020 no patamar mais baixo em 15 anos, diz estudo | Economia | G1
"Essa tendência de queda é um reflexo da crise econômica que o país lida desde 2015 e 2016, e também reflexo da crise fiscal que o governo enfrenta nos últimos anos", diz Matheus de Castro, especialista em Infraestrutura da CNI.
"É notável ver o ritmo de execução orçamentária que a pasta vem experimentando nos últimos anos. Ela tem conseguido executar praticamente todos os recursos que são disponibilizados para investimentos", afirma Matheus.
Para acelerar o investimento o setor de transportes, a CNI destaca que o país tem de avançar na agenda de reformas - com o objetivo de melhorar o ambiente de negócios do país - e no processo de concessão e privatização.
"A agenda de concessões é essencial para a retomada dos investimentos para o setor de transportes", diz Matheus. "De um lado temos o menor investimento desde 2005, mas, por outro, temos uma execução recorde e essa defesa muito forte da agenda de concessões e privatizações."

No finalzinho de 2017 eu falei de um projeto chamado youtube downloader, um projeto de exemplo, experimental, que emprega o uso de filas para fazer todo o processo de download e encoding de mídias, a partir do youtube. Mesmo tendo o propósito de exclusivamente falar de RabbitMQ em um pipeline de processamento, natural desse tipo de tarefa, a temática de download do youtube é controversa e possui implicações em direitos autorais. Enfim a proposta do projeto não é infringir regras, leis ou direitos autorais, apenas exemplificar em um cenário clean, como otimizar o uso de filas com pipelines.
Download de mídias é um processo lento, pode levar segundos, minutos ou até horas, dependendo do tamanho, e formato do arquivo.
O processo de encoding (transformar de um formato em outro) é um processamento lento e leva também muito tempo para processar, se comparado a um simples insert em banco.
Com processamentos lentos (citados acima) atender a uma grande quantidade de requisições é uma tarefa complexa, pois além de throttling, geramos contenção de processamento.
Quando a capacidade de processamento alcança seu limite, é necessário ainda ter uma interface responsiva que consiga receber as requisições e os pedidos de download.
Essas são as características que fazem desse projeto um excelente playground para empregarmos mensageria e muitas outras tecnologias.
É importante ressaltar que esse projeto não tem a ambição de der um seed project para suas implementações de mensageria. Para isso embarquei um subset do Oragon Architecture (somente o pipeline de processamento com RabbitMQ) nele, fazendo customizações para eliminar algumas dependências adicionais e simplificar a entrega. A intenção é entregar 100% do código para que não haja algo escondido em um pacotes nuget externos. O projeto tem o objetivo de entregar o processamento necessário para baixar e encodar mídia. Como resultado da entregar downloads de vídeo e audio, e a capacidade de reproduzir os vídeos direto em sua interface.
Uma interface web, baseada em angular 1, contendo apenas 1 página (não é um SPA, é uma aplicação de 1 página mesmo pode chamar de UPA – Unique page application).
O Data Service encapsula as operações que interagem com o MongoDB e Redis, como inserts e updates no MongoDB, e repopular o cache do Redis.
É o primeiro step do pipeline, ele recebe a mensagem de solicitação, aplica uma validação básica e toma a decisão se descarta a mensagem ou não.
Cada pipeline activity, não interage com RabbitMQ, seu papel é receber uma mensagem, se precisar enriquecê-la, e solicitar a alteração no MongoDB. A cada insert ou update no MongoDB, uma chamada ao método de rebuild do cache é realizada para atualizar o Redis.
A infraestrutura de pipelines permite encadear diversos steps, configurando a quantidade de threads em cada um dos steps do pipeline. Viabilizando ainda a escala não só no processo, mas em diversos processos.
O pipeline é responsável por conectar seu método de negócio à fila, evitando a necessidade de escrever esse conector. Regras e convenções são determinadas para que esse modelo funcione.
Uma instância de um controlador de concorrência (tem o papel de definir quantos workers são necessários)
Caso o resultado seja de sucesso, envia a mensagem para a próxima etapa (fila do próximo step) e confirma a exclusão da mensagem com o ack manual.
Esse é um exemplo de 5 steps, há exemplos com muitos mais passos, e implantações com diversos pipelines.
Configurar isso manualmente tende a ser uma tarefa lenta que depende de atenção demais e possui muitas chances e oportunidades para erro humano. A automação me garante que a configuração está sendo aplicada corretamente.
O pipeline me permite não me preocupar com aspectos não funcionais e me dando liberdade para que meu step não tenha responsabilidades demais.
Embora aqui vejamos o pipeline embarcado em um projeto, como código de infraestrutura, na prática é parte de uma library referenciada via nuget. Isso de fato simplifica a vida. No dia-a-dia, consiste em adicionar um pacote nuget, e realizar as configurações para plugar meu método em uma fila, como membro de um pipeline mais complexo. Isso reduz muito o escopo de desenvolvimento e me dá flexibilidade para tomar decisões o mais tarde possível.
Esse pipeline possui algumas convenções. Elas não suportam TODOS os cenários de uso, mas suportam vários como:
Se for uma lista, cada elemento da lista é publicado no próximo step (Ex: recebeu pedido, quebrou em itens do pedido)
Quando o retorno não é uma lista, então essa nova instância é usada como mensagem para a próxima etapa (Ex: Entra pedido, sai ordem de compra)
Se o retorno for void, então a mesma mensagem que foi processada pelo step atual será usada no próximo step.
Quando um step falha, posso enviar a mensagem para a fila de erro, e não processar mais, posso reprocessar a mensagem por x vezes ou ainda posso devolver para a fila para que outro worker pegue-a.
Nesse caso, eliminei algumas implementações desses padrões para simplificar o entendimento, mas no projeto original esses comportamentos estão presentes.
O que não suporta e já sabemos que seria importante suportar: Desvios de fluxo e omissão de etapa. Não há infraestrutura de regras para isso, o pipeline é linear. Sequencial, sem desvios de fluxo ou supressão de algum step.
Esse tipo de abstração pode ser extensivamente testado de forma a garantir qualidade e resiliência em sua demanda de gerenciar esse ciclo de vida. Embora eu ainda esteja poluindo meu código com o update no MongoDB, como pode ver abaixo, não há gestão de filas, não há criação de workers, nada disso visível aos olhos. Essa implementação está na minha camada de infraestrutura e eu simplesmente conecto ao negócio. Isso me dá a flexibilidade de ser completamente agnóstico enquanto estou escrevendo meus serviços.
O consumer count manager (quem gerencia e entrega uma número mágico que representa a quantidade de workers necessários) está definido com mínimo de 1 worker e máximo de 10, avaliando o load do RabbitMQ a cada 1 minuto, e para sua conta ele espera que tenha 1 mensagem por worker (é o ratio para que ele decida quantos workers são necessários).
O service é o nosso S3MediaUploaderPipelineActivity (tem código dele aqui no post, acima) com suas configurações.