diff --git a/astro.config.mjs b/astro.config.mjs index 49440e2..62aad6d 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -1,4 +1,5 @@ // @ts-check +import { readdirSync, readFileSync } from 'node:fs'; import { defineConfig } from 'astro/config'; import react from '@astrojs/react'; @@ -28,6 +29,16 @@ const LEGACY_EN_PATHS = [ '/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 export default defineConfig({ site: 'https://gabeefran.co', @@ -39,7 +50,7 @@ export default defineConfig({ 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({ webAnalytics: { enabled: true }, diff --git a/src/content/posts/pt/linux-since-10-what-nobody-tells-you.mdx b/src/content/posts/pt/linux-since-10-what-nobody-tells-you.mdx new file mode 100644 index 0000000..30f1e1b --- /dev/null +++ b/src/content/posts/pt/linux-since-10-what-nobody-tells-you.mdx @@ -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. + diff --git a/src/layouts/BaseLayout.astro b/src/layouts/BaseLayout.astro index 713e050..07a183f 100644 --- a/src/layouts/BaseLayout.astro +++ b/src/layouts/BaseLayout.astro @@ -15,9 +15,11 @@ interface Props { * on disk we fall back to the logo. */ 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 canonicalURL = new URL(Astro.url.pathname, Astro.site); --- @@ -38,6 +40,7 @@ const canonicalURL = new URL(Astro.url.pathname, Astro.site); {title} + {noindex && } diff --git a/src/lib/posts.ts b/src/lib/posts.ts index 4d0481c..394b90c 100644 --- a/src/lib/posts.ts +++ b/src/lib/posts.ts @@ -12,9 +12,13 @@ export function slugOf(entry: PostEntry): string { return entry.id.replace('pt-', '').replace('en-', ''); } -export async function getPostsByLang(lang: Lang): Promise { +/** + * 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 { 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()); } diff --git a/src/pages/[lang]/posts/[...slug].astro b/src/pages/[lang]/posts/[...slug].astro index 1e4fdd5..8af9cd0 100644 --- a/src/pages/[lang]/posts/[...slug].astro +++ b/src/pages/[lang]/posts/[...slug].astro @@ -10,7 +10,7 @@ import { postCardPath } from '../../../lib/social-cards'; export async function getStaticPaths() { const pathsByLang = await Promise.all( 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(); @@ -28,6 +28,7 @@ const readingMinutes = estimateReadingMinutes(post.body ?? ''); description={post.data.description} lang={lang} image={postCardPath(lang, slugOf(post))} + noindex={post.data.draft} >