--- import { getCollection } from "astro:content"; import { Image } from "astro:assets"; import Layout from "../../../layouts/main.astro"; import Link from "../../../components/Link.astro"; import FeaturedRecommendation from "../../../components/code/FeaturedRecommendation.astro"; import ProjectCard from "../../../components/code/ProjectCard.astro"; import SkillBadge from "../../../components/code/SkillBadge.astro"; import logoTiqa from "../../../assets/images/logo-tiqa-blanc.png"; import skillsData from "../../../data/skills.json"; const locale = "ar"; const experiences = (await getCollection("experiences")) .filter((e) => e.data.lang === locale && !e.data.draft) .sort((a, b) => (b.data.startDate > a.data.startDate ? 1 : -1)); const recentExperiences = experiences.slice(0, 4); const projects = (await getCollection("projects")) .filter((p) => p.data.lang === locale && !p.data.draft && p.data.category === "dev") .sort((a, b) => { if (a.data.featured !== b.data.featured) return a.data.featured ? -1 : 1; return b.data.date.getTime() - a.data.date.getTime(); }) .slice(0, 3); const recommendations = (await getCollection("recommendations")) .sort((a, b) => b.data.date.getTime() - a.data.date.getTime()) .slice(0, 3); const recommendationTexts = recommendations.map((rec) => ({ ...rec, text: rec.body || '', })); const topSkills = skillsData.categories.slice(0, 3); function formatMonth(dateStr: string) { const [year, month] = dateStr.split('-'); return new Date(parseInt(year), parseInt(month) - 1) .toLocaleDateString('ar-SA', { year: 'numeric', month: 'short' }); } ---

برمجة

أكثر من 20 سنة في بناء البرمجيات. Craftsmanship، TDD، DDD — وهاجس التحيّزات التي نضعها في الكود دون أن ندري.

مطوّر مستقل مقيم في ألبي، فرنسا، أرافق الفرق كمطوّر أول، أو قائد تقني، أو مدرب تقني. أفضّل البرمجيات الحرّة والأدوات التي تلبي احتياجات حقيقية.

المسار

← عرض الكل
{recentExperiences.map((exp) => { const isOngoing = !exp.data.endDate; const start = formatMonth(exp.data.startDate); const end = exp.data.endDate ? formatMonth(exp.data.endDate) : 'الحالي'; return (

{exp.data.role}

{exp.data.companyUrl ? ( {exp.data.company} ) : exp.data.company} {exp.data.location && ` · ${exp.data.location}`}

{start} — {end}
); })}

المشاريع

← عرض الكل
{projects.map((project) => ( ))}
{recommendationTexts.length > 0 && (

التوصيات

← عرض الكل
{recommendationTexts.map((rec) => ( ))}
)}

المهارات

← عرض الكل
{topSkills.map((category) => (

{category.name[locale as keyof typeof category.name]}

{category.skills.map((skill) => ( ))}
))}

القيم والمنهج

  • حركة Software Craftsmanship
  • الفائدة الاجتماعية للمطوّر
  • الفخر بالعمل، دون غرور
  • منهج Domain Driven Design
  • تنظيم أجايل: التكرار والتحسين المستمر

المجتمع والتدريس

أنشّط مجتمع Software Crafters Albi منذ 2018. أستاذ هندسة البرمجيات في جامعة شامبوليون في ألبي منذ 2019.

على الإنترنت

{[ { label: 'LinkedIn', href: 'https://www.linkedin.com/in/jalil' }, { label: 'Malt', href: 'https://www.malt.fr/profile/jalilarfaoui' }, { label: 'Stack Overflow', href: 'https://stackexchange.com/users/54164/jalil' }, { label: 'GitHub', href: 'https://github.com/JalilArfaoui' }, { label: 'Framagit', href: 'https://framagit.org/jalil' }, { label: 'Forge شخصية', href: 'https://forge.tiqa.fr' }, ].map((link) => ( {link.label} ))}
شعار Tiqa

SAS Tiqa
12, rue Fabre d'Églantine — 81 000 Albi, France
811 917 871 RCS Albi