draft posts correction and linux since 10 post as draft

This commit is contained in:
Gabriel Franco 2026-09-30 11:08:40 -03:00
parent 6cd13476dc
commit 14e3d2ad9a
5 changed files with 74 additions and 5 deletions

View file

@ -1,4 +1,5 @@
// @ts-check // @ts-check
import { readdirSync, readFileSync } from 'node:fs';
import { defineConfig } from 'astro/config'; import { defineConfig } from 'astro/config';
import react from '@astrojs/react'; import react from '@astrojs/react';
@ -28,6 +29,16 @@ const LEGACY_EN_PATHS = [
'/feed.xml', '/feed.xml',
]; ];
// Draft posts still get a page (reachable by URL) but stay out of the sitemap.
// This runs before content collections exist, so read the frontmatter directly.
const DRAFT_PATHS = readdirSync('./src/content/posts', { recursive: true, encoding: 'utf-8' })
.filter((file) => file.endsWith('.mdx'))
.map((file) => readFileSync(`./src/content/posts/${file}`, 'utf-8'))
.filter((raw) => /^draft:\s*true\s*$/m.test(raw))
.map((raw) => raw.match(/^slug:\s*"?(en|pt)-([^"\n]+)"?/m))
.filter((match) => match !== null)
.map(([, lang, slug]) => `/${lang}/posts/${slug.trim()}/`);
// https://astro.build/config // https://astro.build/config
export default defineConfig({ export default defineConfig({
site: 'https://gabeefran.co', site: 'https://gabeefran.co',
@ -39,7 +50,7 @@ export default defineConfig({
redirects: Object.fromEntries(LEGACY_EN_PATHS.map((path) => [path, path === '/' ? '/en' : `/en${path}`])), redirects: Object.fromEntries(LEGACY_EN_PATHS.map((path) => [path, path === '/' ? '/en' : `/en${path}`])),
integrations: [react(), mdx(), sitemap()], integrations: [react(), mdx(), sitemap({ filter: (page) => !DRAFT_PATHS.some((path) => page.endsWith(path)) })],
adapter: vercel({ adapter: vercel({
webAnalytics: { enabled: true }, webAnalytics: { enabled: true },

View file

@ -0,0 +1,50 @@
---
title: "Eu Uso Linux Desde os Meus 10 Anos de Idade: Aqui Está o Que Ninguém te Conta"
description: "ainda não tem descrição"
slug: "pt-linux-since-10-what-nobody-tells-you"
pubDate: 2026-09-30
tags: ["draft"]
seoKeywords: ""
draft: true
language: "pt"
---
Quando eu comecei a programar, ouvi dizer que pra aprender programação de verdade tem que usar Linux. Eu simplesmente fui lá e segui essa dica à risca. Instalei o Ubuntu 18.04 em dual boot com o Windows 7, e a partir daí nunca mais pensei da mesma forma.
Nesse post, quero compartilhar um pouco da minha experiência, e dar algumas dicas pra quem está começando agora ou quer começar em breve.
## Um pouco da minha história
Tudo começa em maio de 2018. Eu tinha 10 anos de idade e já sabia que gostava muito de tecnologia, e tinha muito interesse por informática e edição de vídeos. O ponto de partida foi meu pai, que me levou a uma livraria aqui em Porto Alegre pra escolher um livro, já que ele queria que eu retomasse o gosto pela leitura. Ele sempre foi o maior [early adopter](https://en.wikipedia.org/wiki/Technology_adoption_life_cycle) das fases que se iniciavam na minha vida, até hoje é.
Ele queria que eu comprasse um livro de literatura mesmo, de histórias com início, meio e fim. Eu, por outro lado, queria comprar um livro que me ensinasse alguma coisa nova, dentro dos meus interesses. Concordamos em levar um de cada. Eu escolhi ["Programação em Python 3"](https://www.estantevirtual.com.br/livro/programacao-em-python-3-0FS-0355-000-BK), do [Mark Summerfield](https://mark-summerfield.github.io/index.html).
Meu pai tinha um PC que ele raramente usava. Na verdade, quem usava era eu, pra aprender programação e praticar o conteúdo do livro. Tinha um AMD Athlon, já ultrapassado mesmo naquela época, e rodava Windows 7. Conseguia programar, mas era meio lento. Além disso, eu era muito de pesquisar na internet, principalmente no YouTube, por dicas sobre assuntos que eu gostava. Assim, numa dessas pesquisas, vi alguns vídeos que diziam que Linux era melhor pra programar e aprender sobre informática e computação. Ouvi que tinha ferramentas melhores e era mais prático. Então já fui logo pesquisar como instalar, e depois de muito tempo tentando e me perguntando se tinha apagado os arquivos do meu pai, consegui colocar o Ubuntu ao lado do Windows 7 sem perder nada.
## A real vantagem do Linux
Depois de algum tempo nesse mundo, percebi que a maior vantagem de ter escolhido o Linux não foi a praticidade, nem nada parecido. Foi aprender na marra sobre como um sistema operacional funciona, e como consertar coisas que dão errado.
cotinuar ....
## Acho que eu sei como posso te ajudar
Dar dicas sobre como se adaptar melhor ao linux, tirando o mindset do windows da cabeça, comparando com como as coisas são no windows. A finalidade é ajudar o eleitor a se acostumar mais rápido. Falar com o leitor em segunda pessoa nessa seção.
### Entenda o terminal
Falar que o terminal não é a única opção, mas falar sobre a importância de saber fazer as coisas pela linha de comando.
### Entenda o gerenciamento de pacotes
Falar sobre o que é gerenciamento de pacotes, como ele funciona no windows, e como funciona nas distros linux.
### Entenda os drivers
Falar sobre minha experiência com os drivers de wifi como exemplo
## Enfim...
Conclusão.

View file

@ -15,9 +15,11 @@ interface Props {
* on disk we fall back to the logo. * on disk we fall back to the logo.
*/ */
image?: string; image?: string;
/** Keep the page out of search engines (used for draft posts). */
noindex?: boolean;
} }
const { title, description, lang } = Astro.props; const { title, description, lang, noindex } = Astro.props;
const image = Astro.props.image && existsSync(`public${Astro.props.image}`) ? Astro.props.image : '/logo.png'; const image = Astro.props.image && existsSync(`public${Astro.props.image}`) ? Astro.props.image : '/logo.png';
const canonicalURL = new URL(Astro.url.pathname, Astro.site); const canonicalURL = new URL(Astro.url.pathname, Astro.site);
--- ---
@ -38,6 +40,7 @@ const canonicalURL = new URL(Astro.url.pathname, Astro.site);
<title>{title}</title> <title>{title}</title>
<meta name="description" content={description} /> <meta name="description" content={description} />
{noindex && <meta name="robots" content="noindex" />}
<meta property="og:type" content="website" /> <meta property="og:type" content="website" />
<meta property="og:site_name" content="Gabriel Franco's notes" /> <meta property="og:site_name" content="Gabriel Franco's notes" />

View file

@ -12,9 +12,13 @@ export function slugOf(entry: PostEntry): string {
return entry.id.replace('pt-', '').replace('en-', ''); return entry.id.replace('pt-', '').replace('en-', '');
} }
export async function getPostsByLang(lang: Lang): Promise<PostEntry[]> { /**
* Drafts are left out by default so they never show up in lists, tags or the
* feed. Pass `includeDrafts` to still build their pages (reachable by URL only).
*/
export async function getPostsByLang(lang: Lang, { includeDrafts = false } = {}): Promise<PostEntry[]> {
const posts = await getCollection('posts', ({ id, data }) => { const posts = await getCollection('posts', ({ id, data }) => {
return id.startsWith(`${lang}-`) && !data.draft; return id.startsWith(`${lang}-`) && (includeDrafts || !data.draft);
}); });
return posts.sort((a, b) => b.data.pubDate.valueOf() - a.data.pubDate.valueOf()); return posts.sort((a, b) => b.data.pubDate.valueOf() - a.data.pubDate.valueOf());
} }

View file

@ -10,7 +10,7 @@ import { postCardPath } from '../../../lib/social-cards';
export async function getStaticPaths() { export async function getStaticPaths() {
const pathsByLang = await Promise.all( const pathsByLang = await Promise.all(
LANGS.map(async (lang) => LANGS.map(async (lang) =>
(await getPostsByLang(lang)).map((post) => ({ params: { lang, slug: slugOf(post) }, props: { post } })), (await getPostsByLang(lang, { includeDrafts: true })).map((post) => ({ params: { lang, slug: slugOf(post) }, props: { post } })),
), ),
); );
return pathsByLang.flat(); return pathsByLang.flat();
@ -28,6 +28,7 @@ const readingMinutes = estimateReadingMinutes(post.body ?? '');
description={post.data.description} description={post.data.description}
lang={lang} lang={lang}
image={postCardPath(lang, slugOf(post))} image={postCardPath(lang, slugOf(post))}
noindex={post.data.draft}
> >
<PostLayout post={post} lang={lang} readingMinutes={readingMinutes}> <PostLayout post={post} lang={lang} readingMinutes={readingMinutes}>
<Content components={{ ObservationCard }} /> <Content components={{ ObservationCard }} />