hisham hm

David Bowie in 1999 on the cultural impact of the internet


It’s impressive to see David Bowie’s foresight on the cultural impact of the internet back in 1999, and how the interviewer was completely oblivious to it:

« Bowie: [When I was really young,] it still produced sighs of horror from people when you said “I’m in rock’n'roll”. Now it’s a career opportunity. And the internet now carries that flag, from the subversive and possibly rebellious, and chaotic, and nihilistic… Forget about the Microsoft element: the monopolies do not have a monopoly — maybe on programs.

Interviewer: What you like about it is that anyone can say anything, or do anything?

Bowie: From where I am, by virtue of the fact that I am a pop singer and writer, I really embrace the idea that there’s a new demystification process going on between the artist and the audience. If you look back at this last decade, there hasn’t been a single entity, artist or group that personified or became the brand of the 90s. It started to fade in the 80s… in the 70s there were definitely such artists, in the 60s… the Beatles, and Hendrix… in the 50s there was Presley.

Now it’s sub-groups, it’s genres: it’s hip-hop, it’s girl-power, it’s a communal kind of thing. It’s about a community, it’s becoming more and more about the audience. Because the point of having someone who led the forces has dissapeared, because the vocabulary of rock is too well-known. It’s a currency that is not devoid of meaning anymore, but it’s become only conveyor of information, not a conveyor of rebellion, and the internet has taken on that, as I said. So I find that a terribly exciting era.

So, from my standpoint, being an artist, I’d like to see what the new construction is between artist and audience. There is a breakdown, personified I think about rave culture, where the audience is at least as important as the person who is playing at the rave. It’s almost like the artist is to accompany the audience and what the audience is doing. And that feeling is very much permeating music. And permeating the internet. »


Carta a Jean Wyllys

Jean,

Eu acho improvável que essa carta chegue a você, mas estou lhe escrevendo para que ela chegue pelo menos ao meu círculo de amigos e quem sabe um pouco além disso. Estou escrevendo para fazer uma análise crítica, não da sua posição, mas primariamente da linguagem usada nos seus posts sobre a sua viagem a Israel e à Palestina, pois eu sinceramente acho que você não se deu conta do jogo de linguagem pelo qual você se deixou enredar.

Em primeiro lugar, quero dizer que acredito nas suas boas intenções. Se não acreditasse, não perderia o meu tempo escrevendo isso. Meu objetivo aqui é mostrar o quanto é presente um tipo de discurso, até entre as pessoas mais bem-intecionadas, que não faz outra coisa senão perpetuar o status quo.

Vou fazer isso dissecando o seu relato no Facebook, e apontando onde isso acontece:

A DOR É A MESMA - ou paz sem voz não é paz, é medo

(Quarto relato da viagem, agora à Palestina)

Não, Jean. A dor do oprimido nunca é a mesma que a do opressor. Será que anos militando em causas sociais ainda não te ensinaram isso? Sim, homens sofrem com o machismo, mas não se compara com o que as mulheres sofrem. A diferença é de uma escala gritante e todos sabemos o quanto resumir isso com um “todos sofrem” ou o seu “a dor é a mesma” é contra-producente para a questão.

Hoje foi o dia da visita a campos de refugiados na Cisjordânia, Palestina, já prevista no programa da viagem, para conhecê-los de perto e por dentro e conversar com alguns de seus moradores sobre os sofrimentos a eles impostos pela política de colonização dos territórios palestinos por parte do governo de Israel.

“Política de colonização”? Por que, Jean, você nunca usa o termo ocupação para se referir ao que acontece na Palestina? Os únicos momentos em que essa palavra aparece nos seus relatos é ao citar a fala de outras pessoas. “Colonização” é o que os alemães e italianos fizeram no sul do Brasil, não o que está acontecendo lá. Você não se dá conta, mas usa o vocábulario do discurso oficial israelense.

Antes do início da viagem de carro, uma tempestade se armava no céu, intensificando o frio de congelar os ossos, e, por isso, fui aconselhado a desistir desse item do programa porque as tempestades costumam prejudicar a visibilidade nas estradas. Mas como não sou homem de desistir fácil de coisa alguma, arrisquei-me a viajar mesmo sob ameaça de tempestade.
Um carro conduzido por dois dos meus anfitriões israelenses nos levou até a fronteira entre Jerusalém e Belém, onde uma placa com um texto em letras garrafais [sic] escrito em hebraico, árabe e inglês avisa que, a partir dali, nenhum israelense pode passar porque estará pondo em risco a própria vida além de violando as leis do país.
Ali, conhecemos o palestino Jamil El Kassas e pulamos para seu carro, já que carros com placas israelenses em campos de refugiados árabes são inadmissíveis porque podem ser atacados a qualquer momento. Seguimos.

Que selvageria esses palestinos, hein? “Podendo atacar a qualquer momento”. Existem diversas categorias de placas de carros e algumas delas podem sim trafegar em ambos os territórios. Mas é claro que te contaram a versão que desumaniza os palestinos e aqui você a repete como fato, sem pestanejar.

A primeira parada foi num restaurante árabe, mas boa parte do relato do Jamil foi durante a viagem. Algumas histórias ele preferia não contar em um lugar público.

Você também parece não questionar o fato de que o único palestino com quem você teve contato foi selecionado pelos seus anfitriões israelenses. Tenho certeza que se você tivesse entrado em contato com a comunidade palestina no Brasil antes da viagem, esta poderia se certificar que você teria acesso a muito mais visões e uma pluralidade de relatos e opiniões, e não apenas a uma que, casualmente, coincide com a visão do grupo israelense que o convidou.

Jamil atravessou na sua vida por diversas tragédias inimagináveis que mudaram sua visão de mundo e seu objetivo da vida. Participou da primeira Intifada, jogando pedras na polícia israelense, como aprendeu dos meninos mais velhos, viu seu irmão mais novo ser morto por um tiro de um soldado de Israel, acompanhou o luto da sua mãe e viu a morte do seu pai, foi preso, conheceu Yasser Arafat na prisão, onde também aprendeu hebraico, conseguiu trabalho em Jerusalém - para o qual devia passar todos os dias pelos controles humilhantes na fronteira - e viu muitos amigos morrerem por causa do conflito. Mas teve três fatos que mudaram tudo para ele. O primeiro foi o assassinato do irmão. O segundo, tempo depois, foi um atentado terrorista de um grupo palestino em Jerusalém, com várias vítimas civis. Ele estava em sua casa, no campo de refugiados, e viu sua mãe chorar enquanto assistia às notícias.

- Por que você chora, mãe? Isso foi do lado de lá… Os mortos não são palestinos, mas judeus - ele questionou.

- Choro porque outras mães perderam seus filhos pela violência, como eu. A dor é a mesma - respondeu ela.

Essa frase mudou sua visão de mundo.

Quando sua mãe morreu de um ataque ao coração, o terceiro fato que o levaria a ser quem ele é hoje, ele se questionou tudo. Lembro do choro da mãe naquele dia e entendeu que essa guerra precisava acabar.

Aqui a história que dá título ao seu relato. Sim, Jean, a dor de qualquer mãe que perde um filho merece respeito. Mas, de novo, a dor de um povo oprimido por outro não é a mesma do povo opressor. A preocupação de um povo quanto a foguetes caseiros que são abatidos por artilharia de última geração não é a mesma dor que a de um povo que tem uma cidade inteira transformada em ruínas.

É extremamente injusto empacotar a sua visita ao território palestino sob um título “A dor é a mesma”.

A dor de ninguém é a mesma. E em alguns lugares há muito mais gente em dor, com medo, passando necessidades, perdendo suas casas, sua liberdade, do que em outros.

Hoje ele diz, orgulhoso, que é um ativista pela paz e trabalha incansavelmente por ela, como diretor da ONG Combatentes pela Paz, junto a palestinos e israelenses que querem a mesma coisa. “Eu defendo a resistência pacífica à ocupação e acredito que a única solução para todos nós é a negociação e o diálogo para que Israel e Palestina possam coexistir. Os dois”.
Ele é contra os atentados, a violência e a política do “boicote” e diz que ambos os lados devem retomar as negociações tempo atrás frustradas.

Por que “boicote” está entre aspas, Jean? Você pode até ser contra, achá-lo inefetivo, mas para que tentar desmerecer através das aspas? Para deixar mais claro: que diferença de entonação teria se você tivesse colocado “violência” entre aspas? Você não colocou porque a violência existe. Da mesma forma, por mais que você não queira, o boicote é real. E historicamente foi um instrumento muito efetivo contra governos opressores que eventualmente cederam, não preciso citar exemplos pois você sabe quais são.

Mas isso é possível? Jamil assegura que a maioria do povo palestino quer a paz, mas o fracasso dos acordos de Oslo e a política do governo Netanyahu e dos extremistas do lado palestino impedem que aconteça. Diz que ambos terão que ceder algumas coisas: “Os assentamentos judeus no território palestino devem ser desmontados e nós devemos negociar condições para a questão do retorno. Eu sei que não vou voltar à região onde nasci e abro mão disso, outras regiões serão negociadas. E a ocupação nos territórios anexados na guerra de 1967 tem que acabar”. Ele também fala do cotidiano e diz que humilhações que passam no check-point e o abandono dos seus bairros aumentam o ressentimento. “Há também uma questão econômica e social: para conquistar a paz, também precisamos melhorar as condições de vida do nosso povo”. Para o irmão mais novo de Jamil, muito mais duro em sua posição, a chave está só nas mãos de Israel: “Se a maioria do povo israelense quiser acabar com a violência, não pode continuar votando em Netanyahu e tem que olhar para nós como pessoas, não como terroristas. Eu não sou terrorista: trabalho, estudo, estou fazendo mestrado, também quero paz, mas isso depende deles”.

Sinceramente Jean, o que há de “muito mais duro” no discurso do irmão mais novo de Jamil? Você não concorda com ele? O que temos aqui é um povo opressor e outro oprimido. Um dos lados tem o poder de unilateralmente acabar com a política de opressão. O outro lado não tem.

Israel teve o poder de unilateralmente sair de Gaza. Se quiser, pode unilateralmente sair da Cisjordânia. Claro, a saída de Gaza teve o objetivo não de avançar a paz, mas de instituir o cerco que gerou o isolamento da região, o rompimento de fato da administração palestina em duas regiões isoladas controladas por grupos diferentes (o velho dividir-para-conquistar de sempre).

Não é interessante o fato de que hoje, no discurso israelense, o maior empecilho à paz do lado palestino seja a divisão entre Hamas e Fatah e a falta de um parceiro do outro lado que represente o povo inteiro, sendo que essa divisão é perpetuada pelo estado de isolamento de Gaza provocado por Israel?

A insistência em pintar uma falsa simetria é uma constante no discurso que se diz em prol da paz mas que mantém o status quo. Atenção quanto a isso.

Jamil diz que a morte de Arafat mudou muitas coisas. “Não vai ter outro como ele: Arafat falava com todos. Seus herdeiros políticos estão envolvidos na corrupção e não têm capacidade para governar”. Também acha que foi uma tragédia a morte de Rabin, o ex-primeiro-ministro israelense assassinado por um extremista judeu contrário aos acordos.

Teria sido útil aqui você explicar aos seus leitores, como você fez em relação a Rabin, quem foi Yasser Arafat e quais foram as circunstâncias de sua morte. Se você não assume que seus leitores saibam como morreu Rabin, então possivelmente eles não sabem que Arafat morreu após passar anos sitiado em um prédio cercado por tanques israelenses.

As mortes de Arafat e Rabin foram, sim, grandes passos para trás para o processo de paz. Mas enquanto a morte de Rabin foi um acidente da história causado por um extremista judeu agindo sozinho, a morte de Arafat foi fruto da política de estado de Israel.

A violência, ele diz, só piora as coisas e se retroalimenta. Cada atentado palestino contra civis israelenses fortalece eleitoralmente Netanyahu e cada palestino morto pelo exército de Israel fortalece os extremistas do seu lado. “Eu conheço o povo judeu, convivo há muito tempo com eles - diz Jamil e, surpreendentemente, repete algo que, quase com as mesmas palavras, ouvi ontem à noite do escritor israelense David Grossman, o que mais uma vez me mostrou a coincidência entre pessoas de ambos os lados -. Desde a Shoá, eles vivem com medo, e Netanyahu é mestre em manipular essa emoção. Precisamos que ambos os lados deixem de ver o outro como inimigo. Tem muitos israelenses e palestinos que trabalham para isso”. O problema, para ele, é que a dirigência política de ambos os lados não quer a solução pacífica e isso dificulta a interlocução, mas mesmo assim ressalta a diferença entre a Cisjordânia, sob o controle do Al-Fatah, e Gaza, controlada pelo Hamas: “Aqui tem liberdade, lá não. Nem eleições, nem liberdades civis ou religiosas”. Ele fala da questão religiosa: “Aqui a minoria cristã e a maioria muçulmana convivem sem problemas e a sociedade árabe é muito mais secular”. Em Gaza e Hebrón, onde os religiosos fundamentalistas são fortes, é muito diferente, ele diz.

Aqui, vejo perpetuado outro elemento desse terrível jogo de linguagem. Quando se fala das políticas negativas de Israel, elas são sempre personalizadas na figura de Netanyahu. Nunca é Israel quem faz as coisas, é Netanyahu. Não é a coalizão que ele representa, que obteve metade dos do votos no país, ou sequer seu partido Likud, que venceu as eleições. Do outro lado, quando se fala das ações negativas, é o Hamas. Ou seja, no jogo de linguagem, um lado tem “um cara mau”, um cara que é a exceção; no outro lado, o mal é institucional, é o coletivo. Isso aparece em todo lugar. Nesse cartoon, por exemplo:

Note que nesse cartoon não são Israel, nem os EUA, nem ao menos o Likud ou o Partido Republicano. Da mesma forma ocorre no seu discurso, Jean.

E não, Jean, não é “surpreendente” que o palestino escolhido pelos israeleneses para conversar com você tenha o mesmo discurso que eles. Não seja tão ingênuo.

A conversa é em hebraico, inglês e português. Na mesa, nossos amigos israelenses e palestinos dialogam sem problemas e o resto dos clientes não se estranha. “Em Gaza não poderíamos estar falando em hebraico em um lugar público, seria perigoso”, diz Jamil. Aproveitamos para preguntar pela situação dos homossexuais em Gaza e ele simplesmente ignora a pergunta e muda de assunto. Esperamos e, tempo depois, perguntamos novamente. Constrangido, ele diz que, pessoalmente, não tem problemas com isso, “mas o meu povo tem seus costumes”. Pergunto se eu poderia ir a Gaza ou Hebron sendo gay. “Não, impossível, seria muito perigoso”.

Saímos do restaurante e fomos para a casa dele, no campo de refugiados Dheisheh. No caminho, as paredes estão cheias de pichações e imagens de Yasser Arafat e dos rostos de jovens assassinados pelo exército. Perto do campo, um grupo de jovens joga pedras aos soldados e o ar está contaminado de gás lacrimogêneo. Já no “campo de refugiados”, a expressão que denomina o local se mostra confusa para nosso olhar brasileiro. O que encontramos é um lugar semelhante às favelas da Rocinha ou Cantagalo, semi-urbanizado e sem morro. Não é muito diferente dos bairros palestinos de Jerusalém, mais pobre. Na casa de Jamil, fomos recebidos com café arabe e continuamos a conversa.

Talvez a expressão “campo de refugiados” seja confusa para o seu olhar brasileiro pois, ao ver algo que parece a Rocinha, você enxerga uma favela: uma região semi-urbanizada de pessoas pobres, que não têm condições de sair dali e veem a precariadade da sua realidade como sendo a vida normal. Diferente do que acontece lá, onde pessoas de classe média têm suas casas sumariamente destruídas por equipes de demolição enviadas por Israel, e têm que ir, sim, refugiadas, para viver em situações precárias que remetem a favelas do Brasil. Mas as realidades são totalmente diferentes.


Civis e médicos palestinos fogem durante bombardeio israelense em uma escola da ONU

Jamil nos levou à sua casa e nos apresentou à sua família (a esposa, Fatma, três filhas e um filho). Numa sincronicidade que só Jung explica, Fatma trabalha como doula em Belém e milita informalmente pelo parto humanizado e contra violência obstétrica, temas que fazem parte de minha agenda parlamentar. Fatma é fascinante e demonstrou particular interesse na situação dos direitos sexuais e reprodutivos das mulheres brasileiras, já que as palestinas pobres não gozam plenamente desses direitos (nem de outros!), seja por questões culturais, seja pela situação de injustiça social imposta aos palestinos pela não-solução do conflito árabe-israelense.

Aqui, Jean, talvez o mais cruel dos deslizes de linguagem que você inadvertidamente cometeu.

Quem impõe a situação de injustiça social aos palestinos, na sua fala, não é Israel, mas é a “não-solução do conflito árabe-israelense”! Sim, a não-solução, essa entidade abstrata, é ela que promove a injustiça social. Some-se a isso o fato de que você constantemente bate na tecla que a solução depende dos dois lados, e torna-se um mero passo silogístico concluir que a injustiça social que os palestinos sofrem em função da ocupação é causada em parte por eles mesmos! Em outros ambientes de luta social que você conhece bem, isso se chama “culpabilizar a vítima”.

Enquanto eu concluía essa viagem, recebi, de uma amiga, uma intelectual do Rio cujo nome vou preservar para poupá-la dos insultos e outros ataques vis por parte da legião de imbecis de direita e de “esquerda” que vigora na internet;

(De novo, as aspas. Fique tranquilo, Jean: existem imbecis na esquerda, sim, e sem aspas. Não precisamos cair na velha falácia de que, se um esquerdista faz algo que não gostamos, ele não é “verdadeiramente de esquerda” — não me furto de fazer a mesma crítica quando falam que, se um muçulmano faz algo que reprovamos, ele não é “verdadeiramente muçulmano”; e assim por diante. Mas esse foi um mero parênteses.)

Vou pular os quatro parágrafos seguintes que são sobre suas divergências com Paulo Sérgio Pinheiro, que nem conheço e nem sei o que escreveu.

Eu me pergunto: se a minha posição sobre o conflito israelense-palestino sempre foi equilibrada, se nessa viagem dialoguei com diferentes setores, se eu me posiciono contra a violência e a favor da solução pacífica e da coexistência de dois estados - Israel e Palestina -, se eu, como muitos israelenses e palestinos, sou contrário à política de Netanyahu e do Hamas,

Novamente, de um lado é Netanyahu, a pessoa, e do outro é Hamas, a instituição.

se procuro tender pontes, dialogar, ouvir, aprender, por que essa over reaction (que não houve, por exemplo, quando Paulo Abraão veio a Israel)? É homofobia? É antissemitismo? Tem alguma outra coisa que não sabemos?

E é lamentável essa sua defensiva, “acusando sem acusar” aqueles que o criticam levantando de antemão os escudos de “homofobia” e “antissemitismo” em forma de pergunta, sem contar o conspiratório “alguma coisa que não sabemos”. O julgamento se reação à sua visita a Israel foi “over” ou não é opinião sua, não é fato. E na minha opinião, me parece óbvio que se a reação à sua viagem foi maior do que à de Paulo Abrão, é porque você é uma figura pública muito mais conhecida do que ele (tanto é que você até escreveu o nome dele errado).

Se alguém lhe atacar de forma homofóbica ou antissemita, diga com todas as letras e dê nome aos bois, e eu estarei contigo. Mas jogar essas cartas pra erguer o escudo de defesa antes de qualquer crítica… esse é outro truque de linguagem a que nós, que defendemos o fim da opressão na Palestina, já estamos acostumados demais.

E você conclui:

Em tempos de internet, a burrice motivada e/ou a má fé não poupam sequer as velhas raposas da política e da academia!

É verdade, Jean… é verdade. Eu confio que você não seja burro e nem tenha má fé. Eu confio que você quer a paz na Palestina tanto quanto eu. É por isso que eu o convido a refletir bem sobre o tipo de discurso que você está propagando, que repare de onde vêm os elementos de linguagem que você adotou e quais as consequências que essa linguagem tem.

Nada do que você escreveu é falso. Sim, a dor de toda mãe que perde um filho é a mesma. Sim, há pessoas que querem a paz dos dois lados. Sim, há muito que se pode falar sobre “os dois lados”. Mas a simetria não pode ser a tônica do discurso, pois ela não é a tônica da realidade.

Espero ter conseguido lhe fazer enxergar o quão arraigado no discurso dos envolvidos com a questão Palestina estão determinadas construções que perpetuam esse eterno stale-mate (uma peça pra frente, uma peça pra trás, repetidamente, e o jogo nunca termina). Em computação chamamos isso de deadlock: duas partes que nunca andam pois uma só vai se mover se a outra se mover primeiro. Só que na realidade uma das partes detém o poder, a outra não.

Esse discurso do deadlock arrasta a ocupação em um interminável “processo de paz” sem fim que nunca chega a lugar nenhum, enquanto as gerações expulsas de suas casas vão morrendo aos poucos, refugiadas mundo afora, até que o direito de retorno palestino deixe de ser uma questão, pois não restará mais ninguém vivo para retornar. Meu pai, refugiado de 1948, já morreu.

O jogo de Israel é arrastar o status quo, e uma das suas ferramentas é o discurso dessa falsa simetria, o discurso do “confronto Israel-Palestina” (lembra do quanto criticamos o uso do termo “confronto” quando a PM vai pra cima dos estudantes no Brasil? Quando um lado é absurdamente mais destrutivo que o outro, não é um “confronto”).

O nosso jogo é tornar o real estado das coisas visível, para assim podermos mudá-lo.


O mundo não acaba na fronteira

Sempre me entristece quando eu lembro de como as notícias promovem uma visão de mundo que, bem, não é uma “visão de mundo”, mas só do nosso próprio umbigo.

Ilustro com dois episódios:

Enchentes no sul. Acompanhamos as notícias sobre as enchentes no sul do Brasil. Vi imagens, relatos sobre estado de emergência, reações do governo, etc.

Mas se não fosse a Al Jazeera English​ não teria visto nada sobre a real escala do que aconteceu:

South America: Over 160,000 flee worst floods in 50 years

Paraguay, Argentina, Uruguay, Brazil and Bolivia have been battered by heavy rains blamed on the El Nino phenomenon.”

Zika vírus. Eu ligo a TV e vejo manchetes sobre a epidemia do zika vírus, especialmente na região Nordeste e sobre como ele está se alastrando pelo Brasil.

Mas se não fosse a internet não teria visto nada sobre isso:


Mapa interativo sobre a epidemia do zika

O mundo não acaba quando chegamos na linha imaginária da fronteira nacional. As pessoas sofrendo do lado de lá são tão gente quanto as que estão sofrendo do lado de cá.

Uma vez tive uma discussão sobre isso com não-lembro-quem, que me dizia que o importante era se preocupar com as questões brasileiras em especial, onde eu precisei insistir: “por que a vida de uma pessoa que eu não conheço, totalmente estranha pra mim, que mora em Rivera, Uruguai, seria menos importante pra mim do que a vida de outro estranho qualquer que mora em Santana do Livramento, RS, Brasil, separados por apenas uma rua?”


String interpolation in Lua

Lua is known for having a very lean standard library, and for providing mechanisms to do things instead of a ton of features.

String interpolation isn’t available out of the box, but doing it in Lua isn’t a new trick. In fact, the manual includes it as an example of string.gsub:

local t = {name="lua", version="5.3"}
x = string.gsub("$name-$version.tar.gz", "%$(%w+)", t)
--> x="lua-5.3.tar.gz"

This applies to members of a table only, though. Python is introducing a general string-interpolation syntax:

a = "Hello"
b = "World"
f"{a} {b}"
f"{a + ' ' + b}"

Given that Lua supports the f"str" syntax for functions with a single string argument, I thought it would be nice to put its Lua-provides-the-mechanisms ethos to test by trying to write my own Python-like f-string formatter.

And here it is, in all its 28-line glory (and I went for readability, and not to write it as short as possible):

function f(str)
   local outer_env = _ENV
   return (str:gsub("%b{}", function(block)
      local code = block:match("{(.*)}")
      local exp_env = {}
      setmetatable(exp_env, { __index = function(_, k)
         local stack_level = 5
         while debug.getinfo(stack_level, "") ~= nil do
            local i = 1
            repeat
               local name, value = debug.getlocal(stack_level, i)
               if name == k then
                  return value
               end
               i = i + 1
            until name == nil
            stack_level = stack_level + 1
         end
         return rawget(outer_env, k)
      end })
      local fn, err = load("return "..code, "expression `"..code.."`", "t", exp_env)
      if fn then
         return tostring(fn())
      else
         error(err, 0)
      end
   end))
end

It works just like the Python example:

a = "Hello"
b = "World"
print(f"{a} {b}")

Unlike the one-liner from the Lua manual, it also works with local variables:

local c = "Hello"
local d = "World"
print(f"Also works with locals: {c} {d}")

do
   local h = "Hello"
   do
      local w = "World"
      print(f"Of any scope level: {h} {w}")
   end
end

Some more demos:

print(f"Allows arbitrary expressions: one plus one is {1 + 1}")

local t = { foo = "bar" }
print(f"And values: t.foo is {t.foo}; print function is {_G.print}")

local ok, err = pcall(function()
   print(f"This fails: { 1 + } ")
end)
print("Errors display nicely: ", err)

If there’s interest, I can make this a module in LuaRocks (probably calling it F rather than f).

Update! This is now available in LuaRocks as a module! Install it with:

luarocks install f-strings

More info at the f-strings GitHub page. Enjoy!


How to make a pull request on GitHub - a quick tutorial

So you made changes to a project — a bugfix or maybe a new feature — and you want to send it for inclusion in the official (“upstream”) sources. Perhaps you sent an email or opened an issue in the bugtracker, and the project maintainers asked you to send a Pull Request (PR) on GitHub. But how to do this? Here’s a quick how-to guide!

Step 0 - Have a GitHub account

Before anything, you need to have a GitHub account! If you don’t have one already, go to github.com and sign up. Just follow the instructions, it’s easy and free.

Step 1 - “Fork the repository”

“Forking a repository” on GitHub means creating your own Git repository, which is a copy of the original.

Let’s visit a repository and fork it. Start by visiting https://github.com/hishamhm/pull-request-tutorial

In the upper-right there’s a button named “Fork”. It also shows a number: how many times this repository was forked by other people).

Press it, and it will create your own copy of the pull-request-tutorial repository, at https://github.com/YOUR_USERNAME/pull-request-tutorial (the real URL will, of course, contain your own username).

Step 2 - Download your fork and create a branch

Now, it’s time for you to make your changes in the source code (your bugfix or new feature). Start by downloading your repository to your computer. Go to the terminal, make sure git is installed in your computer and type:

git clone https://github.com/YOUR_USERNAME/pull-request-tutorial.git

This will download the files and create a directory called pull-request-tutorial that is linked to your fork (i.e. the copy of the repository under your control).

To avoid trouble later, let’s create a new “branch” in our repository so that the work on our bugfix or feature is stored separately. Pick a meaningful name that represents the changes you plan to make in your code. In our example, I’ll call it “fix-typo”:

git checkout -B fix-typo

Step 3 - Make your changes in your fork

Now enter the directory of your local fork, and edit it at will, implementing your bugfix or feature.

If you create a new file, remember to add it with git add:

git add new_file.txt

Commit your changes, adding a description of what was added. If you’re not used to Git, the simplest way is to commit all modified files and add a description message of your changes in a single command like this:

git commit -a -m "Fix typo in README file"

(But there are lots of ways to choose which files (and even parts of files) do commit and edit the commit message. Look for the Git documentation for details.)

Once your changes are committed, “push” the changes: send them to your GitHub repository using git push

git push

(The first time you push from a branch, Git will complain that your local branch in your computer is not connected to a branch in the GitHub server. Just do what the command tells you to do:

git push --set-upstream origin fix-typo

Next time you push again to this repository, just “git push” will do fine.)

Now, when you visit https://github.com/YOUR_USERNAME/pull-request-tutorial again, you should see your changes there.

Step 4 - Make the Pull Request

This is the simplest step! In your repository page, the next time you open the page after pushing to a new branch, there’s a big green button saying “Compare & pull request”. Press it!

This will open a page in which you’ll be able to further edit the description for your proposed changes. Write down a nice report explaining why these changes should be included in the official sources of your project, and then confirm.

The project authors will receive an email notification that you sent them a PR. Then it’s their turn to read it and comment. You will get notifications when they comment. If they suggest any changes to your bugfix or feature, go back to Step 3, edit it and push again: your Pull Request will be automatically updated. If they are happy with the changes and want to integrate your contributions to the project, the maintainers will click “Merge” and your code will become part of the original repository!

If you want to give it a try, feel free to use the repository I created for this tutorial: https://github.com/hishamhm/pull-request-tutorial

Fork it, edit it, commit and push your changes and send me a PR!

If you liked this tutorial, leave a star on its repo. :)