Compare commits

..

No commits in common. "8a24c9d4b11a63add5826d62b4701be8469aac44" and "91a8d4e220b585e842c1f981c2ab14e7b085c9b3" have entirely different histories.

14 changed files with 14 additions and 272 deletions

View File

@ -11,5 +11,5 @@ trim_trailing_whitespace = true
indent_style = space indent_style = space
indent_size = 2 indent_size = 2
[*.{ts,vue}] [*.ts]
quote_type = single quote_type = single

View File

@ -1,13 +1,11 @@
import { defineClientConfig } from '@vuepress/client'; import { defineClientConfig } from '@vuepress/client';
import PreviewImage from './components/PreviewImage.vue'; import PreviewImage from './components/PreviewImage.vue';
import ResponsiveImage from './components/ResponsiveImage.vue'; import ResponsiveImage from './components/ResponsiveImage.vue';
import LatestRepositories from './components/LatestRepositories.vue';
export default defineClientConfig({ export default defineClientConfig({
enhance({ app, router, siteData }) { enhance({ app, router, siteData }) {
app.component('PreviewImage', PreviewImage); app.component('PreviewImage', PreviewImage);
app.component('ResponsiveImage', ResponsiveImage); app.component('ResponsiveImage', ResponsiveImage);
app.component('LatestRepositories', LatestRepositories);
}, },
setup() {}, setup() {},
layouts: {}, layouts: {},

View File

@ -1,36 +0,0 @@
<template>
<div v-if="error">
{{ error }}
</div>
<div v-else v-for="repo in githubRepos">
<p>{{ repo.name }} updated at {{ repo.updated_at }}</p>
</div>
</template>
<script setup lang="ts">
import { readFromCache } from '../composables/cache';
import {
GithubError,
GithubRepo,
getLatestRepositories,
} from '../composables/github';
let githubRepos: GithubRepo[] | null = null;
let error: GithubError | null;
const getRepositories = () => {
return getLatestRepositories('phundrak', 5);
};
readFromCache<GithubRepo[]>('latestRepos', getRepositories).subscribe({
next: (repos: GithubRepo[]) => {
githubRepos = repos;
error = null;
},
error: (errorResponse: GithubError) => {
githubRepos = null;
error = errorResponse;
},
});
</script>
<style lang="less"></style>

View File

@ -1,46 +0,0 @@
import { Observable, of } from 'rxjs';
const cacheAgeLimitInMilliseconds = 1000 * 60 * 60;
export function isDataOutdated(name: string): boolean {
const lastUpdated: number = +localStorage.getItem(name + '-timestamp');
const now: number = Date.now();
const elapsedTime: number = now - lastUpdated;
return elapsedTime > cacheAgeLimitInMilliseconds;
}
export function storeInCache<T>(
data: Observable<T>,
name: string
): Observable<T> {
data.subscribe({
next: (response: T) => {
localStorage.setItem(name, JSON.stringify(response));
localStorage.setItem(name + '-timestamp', `${Date.now()}`);
},
});
return data;
}
export function readFromCache<T>(
name: string,
callback: () => Observable<T>
): Observable<T> {
let data: Observable<T>;
if (isDataOutdated(name)) {
data = storeInCache<T>(callback(), name);
} else {
let dataFromCache = localStorage.getItem(name);
try {
data = of(JSON.parse(dataFromCache));
} catch (err) {
console.error(
`Could not parse ${JSON.stringify(
dataFromCache
)}: ${err}. Fetching again data from callback function.`
);
data = storeInCache<T>(callback(), name);
}
}
return data;
}

View File

@ -1,139 +0,0 @@
import { Observable, switchMap, map } from 'rxjs';
import { fromFetch } from 'rxjs/fetch';
export interface GithubRepo {
id: number;
node_id: string;
name: string;
full_name: string;
private: boolean;
owner: Owner;
html_url: string;
description: string;
fork: boolean;
url: string;
forks_url: string;
keys_url: string;
collaborators_url: string;
teams_url: string;
hooks_url: string;
issue_events_url: string;
events_url: string;
assignees_url: string;
branches_url: string;
tags_url: string;
blobs_url: string;
git_tags_url: string;
git_refs_url: string;
trees_url: string;
statuses_url: string;
languages_url: string;
stargazers_url: string;
contributors_url: string;
subscribers_url: string;
subscription_url: string;
commits_url: string;
git_commits_url: string;
comments_url: string;
issue_comment_url: string;
contents_url: string;
compare_url: string;
merges_url: string;
archive_url: string;
downloads_url: string;
issues_url: string;
pulls_url: string;
milestones_url: string;
notifications_url: string;
labels_url: string;
releases_url: string;
deployments_url: string;
created_at: Date;
updated_at: Date;
pushed_at: Date;
git_url: string;
ssh_url: string;
clone_url: string;
svn_url: string;
homepage: string;
size: number;
stargazers_count: number;
watchers_count: number;
language: string;
has_issues: boolean;
has_projects: boolean;
has_downloads: boolean;
has_wiki: boolean;
has_pages: boolean;
forks_count: number;
mirror_url: null;
archived: boolean;
disabled: boolean;
open_issues_count: number;
license: null;
allow_forking: boolean;
is_template: boolean;
web_commit_signoff_required: boolean;
topics: any[];
visibility: string;
forks: number;
open_issues: number;
watchers: number;
default_branch: string;
}
export interface Owner {
login: string;
id: number;
node_id: string;
avatar_url: string;
gravatar_id: string;
url: string;
html_url: string;
followers_url: string;
following_url: string;
gists_url: string;
starred_url: string;
subscriptions_url: string;
organizations_url: string;
repos_url: string;
events_url: string;
received_events_url: string;
type: string;
site_admin: boolean;
}
export interface GithubError {
message: string;
documentation_url: string;
}
export function getLatestRepositories(
user: string,
amount: number
): Observable<GithubRepo[]> {
return getRepositoriesOfUser(user).pipe(
map((repositories: GithubRepo[]) => {
return repositories
.sort(
(a: GithubRepo, b: GithubRepo) =>
+b.updated_at - +a.updated_at
)
.slice(0, amount);
})
);
}
export function getRepositoriesOfUser(user: string): Observable<GithubRepo[]> {
const fetchUrl = `https://api.github.com/users/${user}/repos`;
return fromFetch(fetchUrl).pipe(
switchMap((response: Response) => {
if (response.ok) {
return response.json();
} else {
console.error(`Error ${response.status}: ${JSON.stringify(response)}`);
return [];
}
}),
);
}

View File

@ -4,9 +4,7 @@ I am on various websites and some social networks where you can follow
me. me.
## Social Networks ## Social Networks
- **Mastodon** : [@phundrak@phundrak.com](https://emacs.ch/@phundrak) - **Mastodon** : [@phundrak@emacs.ch](https://emacs.ch/@phundrak)
should work, otherwise head over to
[@phundrak@emacs.ch](https://emacs.ch/@phundrak)
- **Twitter** : [@phundrak](https://twitter.com/phundrak), though I - **Twitter** : [@phundrak](https://twitter.com/phundrak), though I
harldy use it anymore and mostly reshare my Mastodon messages and harldy use it anymore and mostly reshare my Mastodon messages and
sometimes they get truncated sometimes they get truncated

View File

@ -1,15 +1,9 @@
# Resume # Resume
## Profesionnal Experiences ## Information
### Aubay (2023 - ) Lucien Cartier-Tilet
### VoxWave (2014 - 2018)
## Education Computer Science - Hypermedia Technologies second year student
### 2nd Year Masters Degree (University of Paris 8)
### 1st Year Masters Degree (University of Paris 8)
### Computer Science Bachelor Degree (University of Paris 8)
### English Litterature (University of Lyon 2)
### Baccalaureate
## Web Programming ## Web Programming
@ -44,7 +38,7 @@
### CI/CD and Deploying to the Web ### CI/CD and Deploying to the Web
- Experienced with web servers such as Nginx and Caddyserver - Experienced with web servers such as Nginx and Caddyserver
- Good knowledge of virtualization and deployment with Docker and - Good knowledge of virtualization and deployment with Docker and
Docker Compose for virtualization, Drone.io, and GitHub Actions for Docker Compose for virtualization, Drone.io, and Github Actions for
deployment. deployment.
## Operating Systems ## Operating Systems
@ -57,7 +51,7 @@
## Office Applications ## Office Applications
- Good knowledge with org-mode (main tool), LaTeX - Good knowledge with org-mode (main tool), LaTeX
- I know my way around LibreOffice, Microsoft Office, OnlyOffice, and - I know my way around Libre Office, Microsoft Office, OnlyOffice, and
WPS Office WPS Office
## Audio ## Audio

View File

@ -4,9 +4,7 @@ Je suis présent sur différentes plateformes et quelques réseaux
sociaux où vous pouvez me suivre. sociaux où vous pouvez me suivre.
## Réseaux sociaux ## Réseaux sociaux
- **Mastodon** : [@phundrak@phundrak.com](https://emacs.ch/@phundrak) - **Mastodon** : [@phundrak@emacs.ch](https://emacs.ch/@phundrak)
devrait fonctionner, sinon direction
[@phundrak@emacs.ch](https://emacs.ch/@phundrak)
- **Twitter** : [@phundrak](https://twitter.com/phundrak), cependant - **Twitter** : [@phundrak](https://twitter.com/phundrak), cependant
je ny suis plus très actif et jy repartage principalement mes je ny suis plus très actif et jy repartage principalement mes
messages Mastodon qui parfois se font tronquer messages Mastodon qui parfois se font tronquer

View File

@ -3,7 +3,7 @@
On pote me trova sur multe loca ueb e redes sosial do te pote me segue. On pote me trova sur multe loca ueb e redes sosial do te pote me segue.
## Redes sosial ## Redes sosial
- **Mastodon** : [@phundrak@phundrak.com](https://emacs.ch/@phundrak) ta debe funsiona, si no visita [@phundrak@emacs.ch](https://emacs.ch/@phundrak) - **Mastodon** : [@phundrak@emacs.ch](https://emacs.ch/@phundrak)
- **Twitter** : [@phundrak](https://twitter.com/phundrak), ma me lo - **Twitter** : [@phundrak](https://twitter.com/phundrak), ma me lo
usa a poca veses, la plu de mea tuitas es mea mesajes mastodon ce es usa a poca veses, la plu de mea tuitas es mea mesajes mastodon ce es
a vesas truncada a vesas truncada

View File

@ -2,16 +2,7 @@
## Informas ## Informas
Lucien Cartier-Tilet Lucien Cartier-Tilet
## Esperia Profesal Studiante en la Master 2 de Tecnolojia de la Ipermedia de Paris 8
### Aubay (2023 - )
### VoxWave (2014 - 2018)
## Educa
### Mestral 2 de Tecnolojia de la Ipermedia (Universia de Paris 8)
### Mestral 1 de Informatica (Universia de Paris 8)
### Mestral 1 de Informatica (Universia de Paris 8)
### Lisensa de Informatica (Universia de Paris 8)
### Engles Leteratural (Universia de Lyon 2)
### Laural
## Programi ueb ## Programi ueb
### Front-end ### Front-end

View File

@ -3,7 +3,5 @@ title: Projets
--- ---
# Programmation # Programmation
## Projets GitHub les plus étoilés ## Projets GitHub les plus étoilés
<LatestRepositories />
## Derniers dépôts de code actifs sur GitHub ## Derniers dépôts de code actifs sur GitHub
# Linguistique # Linguistique

View File

@ -2,18 +2,12 @@
title: CV title: CV
--- ---
# Curriculum Vitae # Resume
## Expériences profesionnelles ## Informations
### Aubay (2023 - ) Lucien Cartier-Tilet
### VoxWave (2014 - 2018)
## Éducation Étudiant informatique, M2 Technologies de lHypermédia, Paris 8
### Master 2 Technologies de lHypermédia (Université Paris 8)
### Master 1 Informatique (Université Paris 8)
### Licence Informatique (Université Paris 8)
### Anglais LLCE (Université Lyon 2)
### Baccalauréat
## Programmation Web ## Programmation Web

View File

@ -17,7 +17,6 @@
"build": "vuepress build content" "build": "vuepress build content"
}, },
"dependencies": { "dependencies": {
"rxjs": "^7.8.1",
"vuepress-plugin-remove-html-extension": "^0.1.0" "vuepress-plugin-remove-html-extension": "^0.1.0"
}, },
"config": { "config": {

View File

@ -2323,13 +2323,6 @@ rxjs@^7.5.5:
dependencies: dependencies:
tslib "^2.1.0" tslib "^2.1.0"
rxjs@^7.8.1:
version "7.8.1"
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543"
integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==
dependencies:
tslib "^2.1.0"
safe-buffer@~5.2.0: safe-buffer@~5.2.0:
version "5.2.1" version "5.2.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"