ZSH – Arquivo mais antigo

Basta seguir o que foi dito no post anterior mas trocando o o minúsculo por um maiúsculo O (sort order down). O arquivo mais antigo de um diretório é dado por:

print *(.Om[1])

De qualquer forma, o m (modification time) pode ser seguido de alguns parâmetros. Pode ser s (seconds), m (minutes), h (hours), d (days), w (weeks), M (months), (before), + (since).

Para um retorno de arquivos com mais de 30 dias usamos *(.md+30) e para arquivos com menos de 2 semanas usamos *(.mw-2). Para remover todos os arquivos com menos de 2 horas é possível fazer:

rm -f *(.mh-2)

Red -convertendo imagens para tons de cinza

Resolvi fazer um programa em Red (lembrando que ainda está em desenvolvimento e na versão 0.6) para converter uma imagem colorida em preto e branco (tonalidades de cinza). Basta que as cores R, G e B possuam o mesmo valor para que a imagem seja mostrada com tonalidades de cinza. Basicamente temos seis formas de conversão, cada qual apresentando resultados característicos.

Claridade

O nível do cinza será calculado como
Claridade = (max(R, G, B) + min(R, G, B)) / 2

Luminosidade

O nível do cinza será calculado como
Luminosidade = 0.21 × R + 0.72 × G + 0.07 × B

Brilho Médio

O nível do cinza será calculado como
Brilho médio = (R + G + B) / 3

Canais

Escolhemos um dos canais (R, G, B) e replicamos e seu valor nos outros dois canais. Esta técnica simula uma foto feita com um filme preto e branco com a utilização de um filtro com uma das cores dos canais. O resultado é que as cores complementares serão bloqueadas deixando passar apenas a cor do filtro. Utilizando um filtro vermelho em uma foto onde aparece o céu azul e com nuvens brancas, o céu ficará bem mais escuro entregando uma maior dramaticidade para a foto.

O efeito obtido por cada uma das técnicas pode ser visto nas imagens abaixo.
Como a parte gráfica para Mac e Linux ainda estão em desenvolvimento (a do Windows também mas está mais próxima do resultado final), o programa só roda no Windows. Futuramente deverá rodar no Mac, Linux, etc..

Casualmente o programa ficou com 100 linhas como pode ser visto abaixo.

Red [
Title: "Dessaturate"
Author: "Guaracy Monteiro"
Needs: 'View
Version: 0.1
]
desaturate: function [
image
/Lightness
/Luminosity
/RedChannel
/GreenChannel
/BlueChannel
/local img
][
img: copy image
case [
Lightness [
forall img [
t: img/1
t/1: t/2: t/3: ((max max (t/1) (t/2) (t/3)) + (min min (t/1) (t/2) (t/3))) / 2
img/1: t
]
]
Luminosity [
forall img [
t: img/1
t/1: t/2: t/3: to integer! ((t/1 * 0.21) + (t/2 * 0.72) + (t/3 * 0.07))
img/1: t
]
]
RedChannel [
forall img [
t: img/1
t/2: t/3: t/1
img/1: t
]
]
GreenChannel [
forall img [
t: img/1
t/1: t/3: t/2
img/1: t
]
]
BlueChannel [
forall img [
t: img/1
t/1: t/2: t/3
img/1: t
]
]
true [
forall img [
t: img/1
t/1: t/2: t/3: ((t/1 + t/2 + t/3) / 3)
img/1: t
]
]
]
return img
]
load-image: function [][
request-file/title/filter "Load Image" ["Images" "*.jpg;*.png;*.bmp"]
]
im: load-image
view [
title "Desaturate image"
text "Method:"
return
dd: drop-down
on-change [
im2/image:
switch dd/selected [
1 [desaturate/Lightness im1/image]
2 [desaturate/Luminosity im1/image]
3 [desaturate im1/image]
4 [desaturate/RedChannel im1/image]
5 [desaturate/GreenChannel im1/image]
6 [desaturate/BlueChannel im1/image]
]
]
data ["Lightness" "Luminosity" "Average" "Red Channel" "Green Channel" "Blue Channel"]
button "Load" [
im: load load-image
im1/image: im
im1/size: im/size
im2/image: im
im2/size: im/size
]
button "Quit" [unview]
return
im1: image im
im2: image im
]
quit

view raw
desaturate.red
hosted with ❤ by GitHub

Resultado das diferentes conversões para visualizar a diferença entre elas:

O programa ainda sofrerá alterações mas, por enquanto, era isto.

O Emacs é um ótimo SO. Só precisa de …

a. ( ) um usuário inteligente;
b. ( ) um usuário muito inteligente;
c. ( ) um usuário simpático e inteligente;
d. ( ) um usuário simpático e mega inteligente;
e. ( ) todas as alternativas anteriores.

O que o John Kitchin fez beira o surreal para quem não conhece o Emacs. Todo o curso, de cabo a rabo e com a participação dos alunos, está no Emacs + org-mode + Python + git.

Talvez fique mais fácil entender o motivo de algumas pessoas utilizarem o Emacs apenas pelo org-mode ou  trocarem de editor pelo módulo, mesmo trabalhando em áreas diversas.

Existem alternativas para deseja instalar o Emacs e acha que seria difícil configurar. Note que o Emacs30 está em fase de desenvolvimento.

Vídeo de como funciona o esquema.