diff --git a/src/App.vue b/src/App.vue
index ad5ea6c..29363f0 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -19,23 +19,15 @@ import SkillPicker from './components/SkillPicker.vue';
Home,
Timeline,
SkillPicker,
- }
+ },
})
export default class App extends Vue {
private selected: tID|null = null;
- private mounted() {
- const picker = this.$refs.picker as SkillPicker;
- if( picker == null ){
- return;
- }
- picker.select(tID.Vue, false);
- }
-
// skill picker selection -> filters the timeline
protected onPick(id: tID|null) {
const timeline = this.$refs.timeline as Timeline;
- if( timeline == null ){
+ if ( timeline == null ) {
return;
}
timeline.filter(id);
@@ -44,12 +36,20 @@ export default class App extends Vue {
// skill picked from the timeline -> select on the skill picker
protected onPicked(id: tID) {
const picker = this.$refs.picker as SkillPicker;
- if( picker == null ){
+ if ( picker == null ) {
return;
}
picker.select(id, false);
}
+ private mounted() {
+ const picker = this.$refs.picker as SkillPicker;
+ if ( picker == null ) {
+ return;
+ }
+ picker.select(tID.Vue, false);
+ }
+
}
diff --git a/src/components/Home.vue b/src/components/Home.vue
index 3c83478..c6a31de 100644
--- a/src/components/Home.vue
+++ b/src/components/Home.vue
@@ -37,64 +37,63 @@
diff --git a/src/components/SkillCard.vue b/src/components/SkillCard.vue
index c287dcf..15e7c44 100644
--- a/src/components/SkillCard.vue
+++ b/src/components/SkillCard.vue
@@ -8,65 +8,64 @@
diff --git a/src/components/SkillPicker.vue b/src/components/SkillPicker.vue
index b536c9b..c78e476 100644
--- a/src/components/SkillPicker.vue
+++ b/src/components/SkillPicker.vue
@@ -47,139 +47,138 @@
diff --git a/src/components/Timeline.vue b/src/components/Timeline.vue
index 7e7558e..4ca6760 100644
--- a/src/components/Timeline.vue
+++ b/src/components/Timeline.vue
@@ -82,110 +82,110 @@
diff --git a/src/model/projects.ts b/src/model/projects.ts
index bf5179a..b00f1ee 100644
--- a/src/model/projects.ts
+++ b/src/model/projects.ts
@@ -56,7 +56,7 @@ export const Projects: Project[] = [
stopped_at: new Date(2022, 11, 1),
info: 'TODO',
source: null, doc: null,
- commits: 1260+90 + 41+1 + 12+1 + 14,
+ commits: 1260 + 90 + 41 + 1 + 12 + 1 + 14,
},
{
diff --git a/src/model/skills.ts b/src/model/skills.ts
index d64d72a..ea6ab36 100644
--- a/src/model/skills.ts
+++ b/src/model/skills.ts
@@ -62,21 +62,21 @@ export const Skills: tSkills = {
link: 'https://mariadb.org',
icon: 'skills/mariadb.svg',
tags: ['web', 'storage'],
- info: "I started using mysql then MariaDB as my first introduction to SQL, mostly when I started learning web with PHP. I now prefer using postgreSQL instead as it tends to be more robust and performant overall.",
+ info: 'I started using mysql then MariaDB as my first introduction to SQL, mostly when I started learning web with PHP. I now prefer using postgreSQL instead as it tends to be more robust and performant overall.',
},
[tID.Postgres]: {
name: 'PostgreSQL',
link: 'https://postgresql.org',
icon: 'skills/postgres.svg',
tags: ['web', 'storage'],
- info: "My main choice of dbms when using sql orfor relational databases. Had some experience with it mainly with go services with docker.",
+ info: 'My main choice of dbms when using sql orfor relational databases. Had some experience with it mainly with go services with docker.',
},
[tID.Mongo]: {
name: 'MongoDB',
link: 'https://mongodb.com',
icon: 'skills/mongo.svg',
tags: ['web', 'storage'],
- info: "I learned it during my Master's degree. I used advanced Mongo with schema validation and complex filter requests. I find this technology really interesting over SQL, but I find classical relational databases are easier to comprehend and I am more used to it.",
+ info: 'I learned it during my Master\'s degree. I used advanced Mongo with schema validation and complex filter requests. I find this technology really interesting over SQL, but I find classical relational databases are easier to comprehend and I am more used to it.',
},
[tID.Vue]: {
@@ -84,35 +84,35 @@ export const Skills: tSkills = {
link: 'https://vuejs.org',
icon: 'skills/vue.svg',
tags: ['web', 'UI'],
- info: "I started learning Vue (.js) back in 2016, and never stopped practicing since then for personal and professional projects. I view it as a better alternative than angular which provides you with a strict framework that can lack flexibility among teams and projects.
Vue makes it your responsability to properly structure your project which I like to take care of myself, as it tends to provide a better workflow adjusted for every project.
It is my top choice when considering a web framework for rendering pages.",
+ info: 'I started learning Vue (.js) back in 2016, and never stopped practicing since then for personal and professional projects. I view it as a better alternative than angular which provides you with a strict framework that can lack flexibility among teams and projects.
Vue makes it your responsability to properly structure your project which I like to take care of myself, as it tends to provide a better workflow adjusted for every project.
It is my top choice when considering a web framework for rendering pages.',
},
[tID.Angular]: {
name: 'Angular (7+)',
link: 'https://angular.io',
icon: 'skills/angular.svg',
tags: ['web', 'UI'],
- info: "I used it only once to break it apart in a R&D project. I had to \"hack\" it in order to inject services and components on-the-fly.
You had a kind of App store where you could install modules. The Angular-powered website would inject new navigation menus, pages and services according to the modules you had installed.
I do not like Angular, as I think Vue.js does a better job achieving the same goal with a cleaner API, and does not force you to embrace the Angular/Google way of coding and organizing things."
+ info: 'I used it only once to break it apart in a R&D project. I had to "hack" it in order to inject services and components on-the-fly.
You had a kind of App store where you could install modules. The Angular-powered website would inject new navigation menus, pages and services according to the modules you had installed.
I do not like Angular, as I think Vue.js does a better job achieving the same goal with a cleaner API, and does not force you to embrace the Angular/Google way of coding and organizing things.',
},
[tID.Parcel]: {
name: 'Parcel',
link: 'https://parceljs.org/',
icon: 'skills/parcel.svg',
tags: ['web'],
- info: "I used it often back in my Master's Degree period along with PHP backends. It allows to get away from webpack which I find overly complicated and a major point of failure for most frontends.
I haven't used it in a while but would highly consider it as it has no real prerequisite.",
+ info: 'I used it often back in my Master\'s Degree period along with PHP backends. It allows to get away from webpack which I find overly complicated and a major point of failure for most frontends.
I haven\'t used it in a while but would highly consider it as it has no real prerequisite.',
},
[tID.Cordova]: {
name: 'Apache Cordova',
link: 'https://cordova.apache.org/',
icon: 'skills/cordova.svg',
tags: ['system', 'web', 'mobile'],
- info: "I used it often to transform single-page applications into android, iOS or desktop apps at low cost. I haven't needed this kind of software for a while, it might now be favorable to use Capacitor or other \"alternatives\".",
+ info: 'I used it often to transform single-page applications into android, iOS or desktop apps at low cost. I haven\'t needed this kind of software for a while, it might now be favorable to use Capacitor or other "alternatives".',
},
[tID.Webpack]: {
name: 'Webpack',
link: 'https://webpack.js.org/',
icon: 'skills/webpack.svg',
tags: ['web'],
- info: "... I used it a lot because it is often required. But I hate that it is so complex that most users use it without understanding what is really does. I avoid it whenever possible, the issue can be transposed to node_modules and the whole node ecosystem.",
+ info: '... I used it a lot because it is often required. But I hate that it is so complex that most users use it without understanding what is really does. I avoid it whenever possible, the issue can be transposed to node_modules and the whole node ecosystem.',
},
[tID.WebGL]: {
@@ -120,21 +120,21 @@ export const Skills: tSkills = {
link: 'https://www.khronos.org/webgl/',
icon: null,
tags: ['web'],
- info: "I used it during my graduation years, the potential is great but I need to find a time to explore what's new.",
+ info: 'I used it during my graduation years, the potential is great but I need to find a time to explore what\'s new.',
},
[tID.AudioAPI]: {
name: 'Audio API',
link: 'https://webaudio.github.io/web-audio-api/',
icon: null,
tags: ['web'],
- info: "I used it mainly to build a discord clone (audio and video full-duplex streaming) as a school project. I also tried the Fourier transform to build nice graphics (c.f. Soundcloud) but have not succeeded at the time.",
+ info: 'I used it mainly to build a discord clone (audio and video full-duplex streaming) as a school project. I also tried the Fourier transform to build nice graphics (c.f. Soundcloud) but have not succeeded at the time.',
},
[tID.Websocket]: {
name: 'Websocket',
link: 'https://tools.ietf.org/html/rfc6455',
icon: null,
tags: ['web', 'networking', 'IoT'],
- info: "I use them whenever possible to avoid the classical expensive polling.
I also created my own websocket client & server implementation in Go following nothing but the RFC for learning purposes.
I've used, designed and implemented websocket communications among personal and professional projects.",
+ info: 'I use them whenever possible to avoid the classical expensive polling.
I also created my own websocket client & server implementation in Go following nothing but the RFC for learning purposes.
I\'ve used, designed and implemented websocket communications among personal and professional projects.',
},
[tID.Docker]: {
@@ -142,42 +142,42 @@ export const Skills: tSkills = {
link: 'https://docker.com',
icon: 'skills/docker.svg',
tags: ['web', 'system'],
- info: "I am using it for a while now. Most of my go projects use it as it costs no memory for your executable (multi-stage build from scratch) and allows for isolation and a better control over the running environment. I am learning docker a bit more every time I use it. It is often coupled with docker-compose in my projects.",
+ info: 'I am using it for a while now. Most of my go projects use it as it costs no memory for your executable (multi-stage build from scratch) and allows for isolation and a better control over the running environment. I am learning docker a bit more every time I use it. It is often coupled with docker-compose in my projects.',
},
[tID.Bash]: {
name: 'bash',
link: 'https://www.gnu.org/software/bash/',
icon: null,
tags: ['system'],
- info: "Felt in love with GNU/linux and its ecosystem a while back (was 14yo back then) and I've never stopped. I'm often the linux/bash guy of the team.
I use it extensively to automate anything a human can do as it avoids a lot of mistakes in most workflows.",
+ info: 'Felt in love with GNU/linux and its ecosystem a while back (was 14yo back then) and I\'ve never stopped. I\'m often the linux/bash guy of the team.
I use it extensively to automate anything a human can do as it avoids a lot of mistakes in most workflows.',
},
[tID.Linux]: {
name: 'GNU/Linux',
link: 'https://www.linux.org',
icon: 'skills/linux.svg',
tags: ['system'],
- info: "Felt in love with GNU/linux and its ecosystem a while back (was 14yo back then) and I've never stopped.
Linux has been my main OS choice since then. I stepped through Ubuntu, Debian, Manjaro, Elementary, Tails (live), and I am now on Solus for a few years.",
+ info: 'Felt in love with GNU/linux and its ecosystem a while back (was 14yo back then) and I\'ve never stopped.
Linux has been my main OS choice since then. I stepped through Ubuntu, Debian, Manjaro, Elementary, Tails (live), and I am now on Solus for a few years.',
},
[tID.Systemd]: {
name: 'systemd',
link: 'https://freedesktop.org/wiki/Software/systemd/',
icon: null,
tags: ['system'],
- info: "",
+ info: '',
},
[tID.Git]: {
name: 'Git',
link: 'https://git-scm.com/',
icon: 'skills/git.svg',
tags: ['system', 'organization'],
- info: "",
+ info: '',
},
[tID.Rpm]: {
name: 'RPM packaging',
link: 'https://rpm.org/',
icon: null,
tags: ['system'],
- info: "",
+ info: '',
},
[tID.RaspBerry]: {
@@ -185,14 +185,14 @@ export const Skills: tSkills = {
link: 'https://raspberrypi.org',
icon: 'skills/raspberry.svg',
tags: ['system', 'IoT'],
- info: "",
+ info: '',
},
[tID.Arduino]: {
name: 'Arduino',
link: 'https://arduino.cc',
icon: 'skills/arduino.svg',
tags: ['system', 'IoT'],
- info: "",
+ info: '',
},
[tID.Php]: {
@@ -200,70 +200,70 @@ export const Skills: tSkills = {
link: 'https://www.php.net',
icon: 'skills/php.svg',
tags: ['language', 'web', 'IoT'],
- info: "",
+ info: '',
},
[tID.Html]: {
name: 'HTML5',
link: 'https://www.w3.org/standards/webdesign/htmlcss',
icon: 'skills/html.svg',
tags: ['language', 'web', 'UI'],
- info: "",
+ info: '',
},
[tID.Css]: {
name: 'CSS3',
link: 'https://www.w3.org/standards/webdesign/htmlcss',
icon: 'skills/css.svg',
tags: ['language', 'web', 'UI'],
- info: "",
+ info: '',
},
[tID.Js]: {
name: 'Javascript',
link: 'http://www.ecma-international.org/publications-and-standards/standards/ecma-262/',
icon: 'skills/js.svg',
tags: ['language', 'web', 'UI'],
- info: "",
+ info: '',
},
[tID.Ajax]: {
name: 'AJAX',
link: 'https://www.w3schools.com/xml/ajax_intro.asp',
icon: null,
tags: ['web', 'networking'],
- info: "",
+ info: '',
},
[tID.Ts]: {
name: 'Typescript',
link: 'https://www.typescript.org/',
icon: 'skills/ts.svg',
tags: ['language', 'web', 'UI'],
- info: "",
+ info: '',
},
[tID.C]: {
name: 'C (lang)',
link: 'https://www.open-std.org/jtc1/sc22/wg14/',
icon: 'skills/c.svg',
tags: ['language', 'system'],
- info: "",
+ info: '',
},
[tID.Cpp]: {
name: 'C++',
link: 'https://isocpp.org/',
icon: 'skills/cpp.svg',
tags: ['language', 'system'],
- info: "",
+ info: '',
},
[tID.Python]: {
name: 'Python',
link: 'https://python.org/',
icon: 'skills/python.svg',
tags: ['language', 'system'],
- info: "",
+ info: '',
},
[tID.Go]: {
name: 'Go (lang)',
link: 'https://go.dev',
icon: 'skills/go.svg',
tags: ['language', 'system', 'IoT', 'networking'],
- info: "",
+ info: '',
},
[tID.Qt]: {
@@ -271,7 +271,7 @@ export const Skills: tSkills = {
link: 'https://qt.io',
icon: 'skills/qt.svg',
tags: ['language', 'system', 'IoT', 'networking'],
- info: "",
+ info: '',
},
[tID.OpenSource]: {
@@ -279,104 +279,104 @@ export const Skills: tSkills = {
link: 'https://opensource.org/',
icon: null,
tags: ['human'],
- info: "",
+ info: '',
},
[tID.Electronics]: {
name: 'Electronics',
link: 'https://en.wikipedia.org/wiki/Electronics',
icon: 'skills/electronics.svg',
tags: ['other', 'IoT'],
- info: "",
+ info: '',
},
[tID.Web]: {
name: 'Web',
link: 'https://en.wikipedia.org/wiki/World_Wide_Web',
icon: null,
tags: ['web'],
- info: "",
+ info: '',
},
[tID.Rest]: {
name: 'REST',
link: 'https://en.wikipedia.org/wiki/Representational_state_transfer',
icon: null,
tags: ['web', 'networking'],
- info: "",
+ info: '',
},
[tID.Crypto]: {
name: 'Security/crypto',
link: 'https://en.wikipedia.org/wiki/Cryptography',
icon: 'skills/security.svg',
tags: ['system', 'networking'],
- info: "",
+ info: '',
},
[tID.ImageProcessing]: {
name: 'Image processing',
link: 'https://en.wikipedia.org/wiki/Digital_image_processing',
icon: 'skills/image-processing.svg',
tags: ['system'],
- info: "",
+ info: '',
},
[tID.AI]: {
name: 'Artificial Intelligence',
link: 'https://en.wikipedia.org/wiki/Artificial_intelligence',
icon: null,
tags: ['other'],
- info: "",
+ info: '',
},
[tID.DeepLearning]: {
name: 'Deep Learning',
link: 'https://en.wikipedia.org/wiki/Deep_learning',
icon: null,
tags: ['other'],
- info: "",
+ info: '',
},
[tID.NeuralNetwork]: {
name: 'Neural Networks',
link: 'https://en.wikipedia.org/wiki/Artificial_neural_network',
icon: null,
tags: ['other'],
- info: "",
+ info: '',
},
[tID.Opti]: {
name: 'Program optimization',
link: 'https://en.wikipedia.org/wiki/Program_optimization',
icon: 'skills/opti.svg',
tags: ['system', 'networking'],
- info: "",
+ info: '',
},
[tID.Sockets]: {
name: 'Sockets',
link: 'https://en.wikipedia.org/wiki/Computer_network_programming',
icon: null,
tags: ['system', 'networking', 'IoT', 'web'],
- info: "",
+ info: '',
},
[tID.Concurrency]: {
name: 'Concurrency',
link: 'https://en.wikipedia.org/wiki/Concurrent_computing',
icon: null,
tags: ['system', 'networking'],
- info: "",
+ info: '',
},
[tID.UIUX]: {
name: 'UI/UX',
link: 'https://en.wikipedia.org/wiki/UX',
icon: null,
tags: ['system', 'web', 'IoT'],
- info: "",
+ info: '',
},
[tID.Inkscape]: {
name: 'Inkscape',
link: 'https://inkscape.org/',
icon: 'skills/inkscape.svg',
tags: ['UI', 'web', 'organization'],
- info: "",
+ info: '',
},
[tID.RnD]: {
name: 'R&D',
link: 'https://en.wikipedia.org/wiki/R&D',
icon: null,
tags: ['organization'],
- info: "",
+ info: '',
},
};
diff --git a/src/service/projects.ts b/src/service/projects.ts
index a39bb21..5a07b15 100644
--- a/src/service/projects.ts
+++ b/src/service/projects.ts
@@ -6,10 +6,10 @@ import { tID } from '@/model/skills';
export function bySkill(skill: tID): Project[] {
const filtered: Project[] = [];
- for( const proj of Projects ){
- if( proj.skills.indexOf(skill) >= 0 ){
+ for ( const proj of Projects ) {
+ if ( proj.skills.indexOf(skill) >= 0 ) {
filtered.push(proj);
}
}
return filtered;
-}
\ No newline at end of file
+}
diff --git a/src/service/scroller.ts b/src/service/scroller.ts
index d3498bf..0ebf0b3 100644
--- a/src/service/scroller.ts
+++ b/src/service/scroller.ts
@@ -10,14 +10,14 @@ const SCROLL_MS_STEP = 5;
export function go(id: string, offset: number|undefined): void {
// find item with id
const item = document.querySelector(`#${id}`) as HTMLElement;
- if( item == null ){
+ if ( item == null ) {
console.warn(`item with id '${id}' not found`);
return;
}
// get item absolute y coordinates
let targety = absY(item, 0);
- if( offset != null ){
+ if ( offset != null ) {
targety += offset;
}
@@ -25,13 +25,13 @@ export function go(id: string, offset: number|undefined): void {
const step = (targety - document.body.scrollTop) / (SCROLL_MS / SCROLL_MS_STEP);
scroll_interval = setInterval(
() => smooth_scroll(targety, step),
- SCROLL_MS_STEP
+ SCROLL_MS_STEP,
);
}
function absY(item: HTMLElement|null, children_y: number): number {
- if( item == null || item == document.body ){
+ if ( item == null || item == document.body ) {
return children_y;
}
return absY(item.parentElement, children_y + item.offsetTop);
@@ -47,11 +47,11 @@ function smooth_scroll(target: number, step: number) {
// moving down & reached bottom or target -> stop
const downLimit = ( step > 0 && (cur >= max || cur >= target) );
- if( upLimit || downLimit ){
+ if ( upLimit || downLimit ) {
clearInterval(scroll_interval);
document.body.scroll(0, target);
- return
+ return;
}
document.body.scroll(0, cur + step);
-}
\ No newline at end of file
+}
diff --git a/src/service/skills.ts b/src/service/skills.ts
index 8a106e4..ecc9859 100644
--- a/src/service/skills.ts
+++ b/src/service/skills.ts
@@ -1,67 +1,67 @@
import { tID, Skills, tSkill } from '@/model/skills';
-let available_cache: tID[]|null = null;
-let tags_cache: string[]|null = null;
+let availCache: tID[]|null = null;
+let tagsCache: string[]|null = null;
// returns available skill ids.
export function available(): tID[] {
- if( available_cache != null ){
- return available_cache;
+ if ( availCache != null ) {
+ return availCache;
}
- available_cache = [];
- for( const str_id in Skills ){
- const id = str2ID(str_id)
- if( id == null ){
+ availCache = [];
+ for ( const sid in Skills ) {
+ const id = str2ID(sid);
+ if ( id == null ) {
continue;
}
- available_cache.push(id);
+ availCache.push(id);
}
- return available_cache;
+ return availCache;
}
// returns the list of ids filtered by a tag. Skills NOT featuring the provided
// tag are filtered out of the list.
export function filtered(tag: string): tID[] {
- if( available_cache == null ){
+ if ( availCache == null ) {
available();
}
- const filtered = [];
- for( const id of available_cache! ){
+ const remain = [];
+ for ( const id of availCache! ) {
const skill = get(id);
- if( skill == null ){
+ if ( skill == null ) {
continue;
}
- if( skill.tags.indexOf(tag) >= 0 ){
- filtered.push(id);
+ if ( skill.tags.indexOf(tag) >= 0 ) {
+ remain.push(id);
continue;
}
}
- return filtered;
+ return remain;
}
// returns available tags used among skills
export function tags(): string[] {
- if( tags_cache != null ){
- return tags_cache;
+ if ( tagsCache != null ) {
+ return tagsCache;
}
- tags_cache = [];
- for( const skill of Object.values(Skills) ){
- for( const tag of skill.tags ){
- if( tags_cache.indexOf(tag) < 0 ){
- tags_cache.push(tag);
+ tagsCache = [];
+ for ( const skill of Object.values(Skills) ) {
+ for ( const tag of skill.tags ) {
+ if ( tagsCache.indexOf(tag) < 0 ) {
+ tagsCache.push(tag);
}
}
}
- return tags_cache;
+ return tagsCache;
}
// returns a skill from its id
export function get(id: tID): tSkill|null {
- if( Skills[id] == undefined ){
+ if ( Skills[id] === undefined ) {
return null;
}
return Skills[id];
@@ -69,9 +69,9 @@ export function get(id: tID): tSkill|null {
// converts a string to a skill id
export function str2ID(str: string): tID|null {
- const id = parseInt(str) as tID;
- if( Skills[id] == undefined ){
+ const id = parseInt(str, 10) as tID;
+ if ( Skills[id] === undefined ) {
return null;
}
return id;
-}
\ No newline at end of file
+}
diff --git a/src/service/typewriter.ts b/src/service/typewriter.ts
index 14206cf..2664a01 100644
--- a/src/service/typewriter.ts
+++ b/src/service/typewriter.ts
@@ -1,9 +1,9 @@
export class TypeWriter {
- private target: HTMLElement;
- private display: string|null;
- private html: string|null;
+ private target: HTMLElement;
+ private display: string|null = null;
+ private html: string|null = null;
- constructor(target: HTMLElement){
+ constructor(target: HTMLElement) {
this.target = target;
}
@@ -12,34 +12,34 @@ export class TypeWriter {
this.html = this.target.innerHTML;
this.display = this.target.style.display;
this.target.innerHTML = '';
- if( hide ){
+ if ( hide ) {
this.target.style.display = 'none';
}
}
- public animate(duration_ms: number) {
- if( this.html == null || this.display == null ){
- console.warn("[typewriter] init must be called first ; doing it anyway");
+ public animate(msDuration: number) {
+ if ( this.html == null || this.display == null ) {
+ console.warn('[typewriter] init must be called first ; doing it anyway');
this.init();
}
- const size = this.html!.length;
- const letter_ms = duration_ms / size;
+ const size = this.html!.length;
+ const msLetter = msDuration / size;
this.target.style.display = this.display!;
- for( let i = 0, l = this.html!.length ; i < l ; i++ ){
+ for ( let i = 0, l = this.html!.length ; i < l ; i++ ) {
setTimeout(
() => {
- ((i: number) => {
- this.target.innerHTML = this.html!.substring(0, i+1);
+ ((x: number) => {
+ this.target.innerHTML = this.html!.substring(0, x + 1);
})(i);
},
- i*letter_ms);
+ i * msLetter);
}
}
-};
+}