Skip to content

Commit

Permalink
feat(blog): add all files
Browse files Browse the repository at this point in the history
add files to go live
  • Loading branch information
maltequast committed Jun 9, 2022
1 parent 272db8a commit 8437416
Show file tree
Hide file tree
Showing 120 changed files with 56,881 additions and 99 deletions.
16 changes: 16 additions & 0 deletions 404.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
---
layout: default
title: 404
hide-in-nav: true
description: "Sorry, this page does not exist :("
header-img: "img/404-bg.jpg"
permalink: /404.html
---


<!-- Page Header -->
{% include intro-header.html type="page" short='true' %}

<script>
document.body.classList.add('page-fullscreen');
</script>
1 change: 1 addition & 0 deletions CNAME
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
maltequast.de
73 changes: 73 additions & 0 deletions Gruntfile.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
module.exports = function(grunt) {

// Project configuration.
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
uglify: {
main: {
src: 'js/<%= pkg.name %>.js',
dest: 'js/<%= pkg.name %>.min.js'
}
},
less: {
expanded: {
options: {
paths: ["css"]
},
files: {
"css/<%= pkg.name %>.css": "less/<%= pkg.name %>.less"
}
},
minified: {
options: {
paths: ["css"],
cleancss: true
},
files: {
"css/<%= pkg.name %>.min.css": "less/<%= pkg.name %>.less"
}
}
},
banner: '/*!\n' +
' * <%= pkg.title %> v<%= pkg.version %> (<%= pkg.homepage %>)\n' +
' * Copyright <%= grunt.template.today("yyyy") %> <%= pkg.author %>\n' +
' */\n',
usebanner: {
dist: {
options: {
position: 'top',
banner: '<%= banner %>'
},
files: {
src: ['css/<%= pkg.name %>.css', 'css/<%= pkg.name %>.min.css', 'js/<%= pkg.name %>.min.js']
}
}
},
watch: {
scripts: {
files: ['js/<%= pkg.name %>.js'],
tasks: ['uglify'],
options: {
spawn: false,
},
},
less: {
files: ['less/*.less'],
tasks: ['less'],
options: {
spawn: false,
}
},
},
});

// Load the plugins.
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-less');
grunt.loadNpmTasks('grunt-banner');
grunt.loadNpmTasks('grunt-contrib-watch');

// Default task(s).
grunt.registerTask('default', ['uglify', 'less', 'usebanner']);

};
54 changes: 54 additions & 0 deletions Rakefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
require "rubygems"
require 'rake'
require 'yaml'
require 'time'

SOURCE = "."
CONFIG = {
'version' => "12.3.2",
'themes' => File.join(SOURCE, "_includes", "themes"),
'layouts' => File.join(SOURCE, "_layouts"),
'posts' => File.join(SOURCE, "_posts"),
'post_ext' => "md",
'theme_package_version' => "0.1.0"
}

# Usage: rake post title="A Title" subtitle="A sub title"
desc "Begin a new post in #{CONFIG['posts']}"
task :post do
abort("rake aborted: '#{CONFIG['posts']}' directory not found.") unless FileTest.directory?(CONFIG['posts'])
title = ENV["title"] || "new-post"
subtitle = ENV["subtitle"] || "This is a subtitle"
slug = title.downcase.strip.gsub(' ', '-').gsub(/[^\w-]/, '')
begin
date = (ENV['date'] ? Time.parse(ENV['date']) : Time.now).strftime('%Y-%m-%d')
rescue Exception => e
puts "Error - date format must be YYYY-MM-DD, please check you typed it correctly!"
exit -1
end
filename = File.join(CONFIG['posts'], "#{date}-#{slug}.#{CONFIG['post_ext']}")
if File.exist?(filename)
abort("rake aborted!") if ask("#{filename} already exists. Do you want to overwrite?", ['y', 'n']) == 'n'
end

puts "Creating new post: #{filename}"
open(filename, 'w') do |post|
post.puts "---"
post.puts "layout: post"
post.puts "title: \"#{title.gsub(/-/,' ')}\""
post.puts "subtitle: \"#{subtitle.gsub(/-/,' ')}\""
post.puts "date: #{date}"
post.puts "author: \"Hux\""
post.puts "header-img: \"img/post-bg-2015.jpg\""
post.puts "tags: []"
post.puts "---"
end
end # task :post

desc "Launch preview environment"
task :preview do
system "jekyll --auto --server"
end # task :preview

#Load custom rake scripts
Dir['_rake/*.rake'].each { |r| load r }
4 changes: 2 additions & 2 deletions _config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
title: Maltes ML Blog
SEOTitle: Maltes ML Blog | Maltes Blog
header-img: img/about-bg.jpg
email: [email protected]
email: [email protected]
description: "Maltes Blog | Machine Learning, Automation, MLOps, Python | Datadrivers"
keyword: "Machine Learning, Deep Learning, Pytest, Python, Automation, Cloud"
url: "https://malte.quast.de" # your host, for absolute URL
Expand Down Expand Up @@ -76,7 +76,7 @@ kramdown:

# Sidebar settings
sidebar: true # whether or not using Sidebar.
sidebar-about-description: "Always asking myself - What's the key to success as a Data Scientist?"
sidebar-about-description: "Data Scientist on the way to automate ML"
sidebar-avatar: https://avatars.githubusercontent.com/u/40795540?s=400&u=61b6b9370a6d0c1b9bd11eaa47ce8a1ec4c51d8c&v=4 # use absolute URL, seeing it's used in both `/` and `/about/`


Expand Down
46 changes: 46 additions & 0 deletions _includes/about/en.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
I am a Malte, a Senior Data Scientist with a focus on computer vision and time series analysis.
I am also very interested in MLOps and enjoy getting my hands dirty with code. I have started and ran my own business,
so I have a lot of experience working on innovative projects. In addition to all this, I studied business administration
in University, so I have a strong foundation in the basics of business.

## Recent Projects

---
July 2022 - Present | Senior Data Scientist | Datadrivers GmbH

[5] Working on Recommender Systems in the AWS Cloud. Mainly focusing on the use of Amazon SageMaker and AWS Glue for
postprocessing tasks.

---
May 2021 - June 2022 | Data Scientist | Datadrivers GmbH

[4] We have developed a temporal
fusion transformer, which is used for multivariate time series analysis and demand quantity prediction.
This project was a great experience for me, due to the size of the data and the fact how to create a
data driven pipeline with PubSub, Dataflow and Tensorflow.

---
January 2020 - June 2022 | Data Scientist | Datadrivers GmbH

[3] In a recent project with 60,000 product descriptions that I have processed through a full spacy data pipeline,
including GCP Cloud Run jobs. I
have also developed an Annoy Index for similarity scores and processed these data to a Streamlit application.

[3] I have 40,000 images that I have processed through a full data pipeline, including GCP, Tensorflow, and Dataflow.
Additionally to this setup I have used a pretrained MobileNetV2 and Streamlit applications as the WebUI.

[2] In this project, we have used a Thompson Sampler (Multi armed bandit) to automate the frequency of ads for a
Google Cloud Platform customer. We built a model that predicts which ads frequency will be most effective for a given customer, then used
Airflow to run the model on Google's infrastructure. The end result was a significant increase in ad click-through rates and an overall
improvement in customer satisfaction.


---
Before January 2020 | Data Analytics Consultant | Datadrivers GmbH

[1] During this time I deepened my knowledge in the field of neural networks. A wide variety of technologies and
libraries were used to achieve this goal. Using GPUs, various problems could be solved and optimized using PyTorch and
Tensorflow.
Additionally I have created several Datawarehouse projects in the Cloud and on-prem.
A larger selection of projects can be found in the Github repository.

Empty file added _includes/about/zh.md
Empty file.
7 changes: 7 additions & 0 deletions _includes/ads.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- first shot -->
<ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6487568398225121" data-ad-slot="4814308751"
data-ad-format="auto" data-full-width-responsive="true"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
28 changes: 28 additions & 0 deletions _includes/featured-tags.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
{% comment %}
@param {boolean} bottom - bottom will render <hr>
{% endcomment %}

{% if site.featured-tags %}
<section>
{% if include.bottom %}
<hr class="hidden-sm hidden-xs">
{% endif %}
<h5><a href="{{'/archive/' | prepend: site.baseurl }}">FEATURED TAGS</a></h5>
<div class="tags">
{% capture tags %}
{% comment %}
there must be no space between for and if otherwise this tricky sort won't work.
url_encode/decode is for escaping otherwise extra <a> will get generated
but it will break sort...
{% endcomment %}
{% for tag in site.tags %}{% if tag[1].size > site.featured-condition-size %}
<a data-sort="{{ site.posts.size | minus: tag[1].size | prepend: '0000' | slice: -4, 4 }}"
href="{{ site.baseurl }}/archive/?tag={{ tag[0] | url_encode }}"
title="{{ tag[0] }}"
rel="{{ tag[1].size }}">{{ tag[0] }}</a>__SEPARATOR__
{% endif %}{% endfor %}
{% endcapture %}
{{ tags | split:'__SEPARATOR__' | sort }}
</div>
</section>
{% endif %}
9 changes: 9 additions & 0 deletions _includes/friends.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{% if site.friends %}
<hr>
<h5>FRIENDS</h5>
<ul class="list-inline">
{% for friend in site.friends %}
<li><a href="{{friend.href}}">{{friend.title}}</a></li>
{% endfor %}
</ul>
{% endif %}
110 changes: 110 additions & 0 deletions _includes/intro-header.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
{% comment %}
@param {string} type - 'page' | 'post' | 'keynote'
@param {boolean} short
{% endcomment %}

{% if include.type == 'post' %}
<style type="text/css">
header.intro-header{
position: relative;
background-image: url('{{ site.baseurl }}/{% if page.header-img %}{{ page.header-img }}{% else %}{{ site.header-img }}{% endif %}');
background: {{ page.header-bg-css }};
}

{% if page.header-mask %}
header.intro-header .header-mask{
width: 100%;
height: 100%;
position: absolute;
background: rgba(0,0,0, {{ page.header-mask }});
}
{% endif %}
</style>
{% if page.header-style == 'text' %}
<header class="intro-header style-text" >
{% else %}
<header class="intro-header" >
{% endif %}
<div class="header-mask"></div>
{% if page.header-img-credit %}
<div class="header-img-credit">
Image by <a href="//{{page.header-img-credit-href}}">{{page.header-img-credit}}</a>
</div>
{% endif %}
<div class="container">
<div class="row">
<div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
<div class="post-heading">
<div class="tags">
{% for tag in page.tags %}
<a class="tag" href="{{ site.baseurl }}/archive/?tag={{ tag | url_encode }}" title="{{ tag }}">{{ tag }}</a>
{% endfor %}
</div>
<h1>{{ page.title }}</h1>
{% comment %} always create a h2 for keeping the margin {% endcomment %}
<h2 class="subheading">{{ page.subtitle }}</h2>
<span class="meta">Posted by {% if page.author %}{{ page.author }}{% else %}{{ site.title }}{% endif %} on {{ page.date | date: "%B %-d, %Y" }}</span>
</div>
</div>
</div>
</div>
</header>
{% endif %}

{% if include.type == 'keynote' %}
<style type="text/css">
header.intro-header{
height: 500px;
overflow: hidden;
}
header.intro-header .container{
visibility: hidden;
}
header iframe{
width: 100%;
height: 100%;
border: 0;
}
</style>
<header class="intro-header" >
<iframe src="{{page.iframe}}"></iframe>
<!-- keep for SEO -->
<div class="container">
<div class="row">
<div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
<div class="post-heading">
<div class="tags">
{% for tag in page.tags %}
<a class="tag" href="{{ site.baseurl }}/archive/?tag={{ tag | url_encode }}" title="{{ tag }}">{{ tag }}</a>
{% endfor %}
</div>
<h1>{{ page.title }}</h1>
{% comment %} always create a h2 for keeping the margin {% endcomment %}
<h2 class="subheading">{{ page.subtitle }}</h2>
<span class="meta">Posted by {% if page.author %}{{ page.author }}{% else %}{{ site.title }}{% endif %}
on {{ page.date | date: "%B %-d, %Y" }}</span>
</div>
</div>
</div>
</div>
</header>
{% endif %}

{% if include.type == 'page' %}
<header class="intro-header" style="background-image: url('{{ site.baseurl }}/{% if page.header-img %}{{ page.header-img }}{% else %}{{ site.header-img }}{% endif %}')">
<div class="container">
<div class="row">
<div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
{% if include.short %}
<div class="site-heading" id="tag-heading">
{% else %}
<div class="site-heading">
{% endif %}
<h1>{% if page.title %}{{ page.title }}{% else %}{{ site.title }}{% endif %}</h1>
<span class="subheading">{{ page.description }}</span>
</div>
</div>
</div>
</div>
</header>
{% endif %}
20 changes: 20 additions & 0 deletions _includes/mathjax_support.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
TeX: {
equationNumbers: {
autoNumber: "AMS"
}
},
SVG: {
scale: 90
},
tex2jax: {
inlineMath: [ ['$','$'] ],
displayMath: [ ['$$','$$'] ],
processEscapes: true,
}
});
</script>
<script type="text/javascript"
src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS-MML_SVG">
</script>
Loading

0 comments on commit 8437416

Please sign in to comment.