Can Şahin
Bonjour, je suis Can Şahin
Je suis un ingénieur logiciel full-stack, titulaire d'un baccalauréat spécialisé en informatique de l'Université d'Ottawa. Je conçois des systèmes faits pour tourner en production et rester fiables à mesure qu'ils évoluent, et je suis actuellement à la recherche de mon prochain poste en génie logiciel.
Expérience professionnelle
Analyste TI, Université d'Ottawa
Septembre 2023 - Avril 2024
- Élimination des corrections manuelles des listes de distribution de réunions en construisant un script Python qui croisait les membres entre les groupes AWG, analystes d'affaires et gestionnaires d'applications et signalait les écarts.
- Soutien à la gouvernance de l'architecture des initiatives informatiques de l'université en révisant des documents d'architecture d'affaires et technique et en coordonnant les séances de revue hebdomadaires de l'AWG et mensuelles de l'ARB avec les gestionnaires de projet.
- Recherche et présentation d'occasions d'adoption de l'IA générative pour le département informatique aux architectes et aux parties prenantes à la suite d'un événement de l'industrie en architecture d'entreprise.
Développeur logiciel, March Networks
Janvier 2023 - Avril 2023
- Automatisation du contrôle de conformité manuel à hauteur de ~80 % pour les équipes juridiques et R&D via le développement d'un outil Python de génération et de mise en forme de rapports Black Duck, remplaçant les téléchargements manuels et les flux de travail basés sur des macros Excel.
- Passage de l'inspection manuelle de plus de 3 000 composants à une comparaison automatisée pour les revues de licences en construisant un outil Python qui comparait les composants, versions et identifiants de licence entre les versions de release et ne faisait ressortir que les licences à risque moyen et élevé pour approbation juridique.
- Réduction d'environ 50 % du temps de comparaison sur les grosses releases en retravaillant la logique de correspondance après que la comparaison un à un se soit révélée trop lente à grande échelle.
Projets
Couche de cache sémantique pour APIs LLM
Un proxy de cache qui intercepte les requêtes vers une API LLM et retourne des réponses stockées pour des questions sémantiquement similaires, évitant les appels redondants. Utilise des embeddings vectoriels et la similarité cosinus pour détecter les requêtes équivalentes, avec expiration TTL, suivi des accès, invalidation du cache et un tableau de bord Prometheus/Grafana en temps réel.
Pipeline RAG de recherche d'emploi
Un système RAG de niveau production sur 32 offres d'emploi tech canadiennes en direct. Combine BM25 et recherche vectorielle dense avec Reciprocal Rank Fusion, reranking par cross-encoder et vérification de citations par LLM. Évalué sur 50 questions : score composite 0.63, précision des citations 87%.
Application de progression en salle de sport
Une application full-stack de suivi d'entraînement qui progresse automatiquement vos poids selon les performances, avec un programme Push/Pull/Jambes de 17 exercices, des graphiques de progression et une détection intelligente du déchargement. Construite avec FastAPI, Neon (PostgreSQL), React, TypeScript et Tailwind CSS.
Spring RabbitMQ Orders
Un microservice de traitement de commandes événementiel construit avec Spring Boot et RabbitMQ. Publie des événements de commande sur un topic exchange, les consomme de manière asynchrone, réessaie les échecs avec un backoff exponentiel, achemine les messages épuisés vers une dead-letter queue et déduplique les événements pour un traitement idempotent.
Your Daily Sports Agent
Un agent IA autonome qui s'exécute quotidiennement via GitHub Actions, récupère des données sportives en direct depuis plusieurs API, et utilise l'API Anthropic pour rédiger une entrée de journal personnelle dans une voix cohérente. Zéro intervention manuelle, entièrement autonome de la collecte de données jusqu'au commit Git.
Passerelle API en Go
Une passerelle API et un proxy inverse écrits en Go avec la bibliothèque standard. Limitation de débit par token bucket dans Redis, rendue atomique par un script Lua, un circuit breaker par service implémenté à la main, et des tableaux de bord Prometheus/Grafana. En tests de charge locaux, elle a traité 13 700 requêtes par seconde tout en appliquant les limites de débit.
Gestionnaire de contacts
Un gestionnaire de contacts full-stack et multi-utilisateur avec une API Web .NET 10 et une interface React. Authentification JWT avec isolation des données par utilisateur, groupes de contacts, téléversement de photos, suivi des anniversaires, import/export CSV avec rapport d'erreurs par ligne, et un carnet d'adresses PDF imprimable. Construit avec EF Core et SQL Server côté serveur, TypeScript, Tailwind CSS et TanStack Query côté client.
Classification de types cellulaires à partir de données scRNA-seq
Un projet de classification de types cellulaires utilisant le cadre d'apprentissage profond scDeepInsight pour identifier les types cellulaires à partir de données de séquençage d'ARN à cellule unique sur plusieurs ensembles de données.
Site web portfolio
Le site que vous consultez. Bilingue EN/FR, construit avec React, Tailwind CSS et Framer Motion, avec des animations au défilement et un terminal caché dans le navigateur proposant des mini-jeux.