teleren/devto huggingface dataset:
Scheduled triggers using JFrog Pipelines
Tags: scheduledtriggers, cicd, devops, cron
Published: 2020-04-15 10:02:18

Jfrog Pipelines support automatic triggers through webhooks, REST API based triggers, as well as manual triggers through the UI.
[Jfrog Pipelines](https://www.jfrog.com/confluence/display/CICD/Welcome+to+JFrog+Pipelines) also provides you the ability to schedule a Pipeline to be triggered at specific date/times, or at a recurring interval.

You can use the `cronTrigger` resource of JFrog Pipelines to achieve the functionality scheduled triggers in your workflow.

Before starting I would like to quickly tell you about JFrog Pipelines key concepts which would help you understand this better.

Concept | Description
------------ | -------------
Pipeline | It is a collection of interconnected serial or parallel steps required to achieve an outcome
Steps | Steps are the executable units of your pipelines that can execute any DevOps activity
Integrations | Integrations contain credentials to third-part tools/services such as AWS, slack, Github, etc.,
Resources | Resources contain information required to execute steps
Run | Run is an instance of pipeline execution 

### CronTrigger Resource
`cronTrigger` resource provides cron-like functionality. It is used to trigger a build in a cron-like manner.
You can define the resource in your yaml config file as: 
```yaml
- name: cron                 #friendly name to remember
  type: CronTrigger
  configuration: 
    interval: "*/2 * * * *"  #follows the standard Cron format
```
This resource can be used as an inputResource to a step in pipeline as follows:

```yaml
steps:          
      - name: bash_1
        type: Bash
        configuration:
          inputResources:
            - name: github
            - name: cron        #created CronTrigger resource name
        execution:
          onExecute:
            - echo "executing bash step."
```

If the CronTrigger typed resource is given as Input to a step then it gets triggered at the recurring interval or at a specific date as depends on what you configure in `interval`.
A new run will be created every time the step is triggered.
In my example, this `bash_1` step will be triggered by `cron` resource in every 2 minutes as shown in the below screenshot:
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/onc1a1x5wo1rd3h8xavm.png)

You can also schedule to trigger this on a particular day by just updating the `interval` in the resource definition as per cron syntax.

Hope this helps. :)
How many requests can the 4-cores server that run PHP app take at the same time?
Tags: php, discuss, webdev
Published: 2020-04-15 09:57:46

---
title: How many requests can the 4-cores server that run PHP app take at the same time?
published: true
description: 
tags: php,discuss,linux,webdev
---

If you have a server with 4-cores and 8GB ram, how many requests can this server take at the same time and how many child processes you can run on it?
I'm taking about PHP and if you are running a PHP application there.
CSharp When to use properties
Tags: csharp, beginners
Published: 2020-04-15 09:32:23

First at all, i started to learn C# a few days ago, at the moment i’m in the “Set/Get” Chapter. So every new thing that comes in my tutorial i try to apply it on my small application. Even tho if i do not understand the concepts i go the alternative places and look for suggestions, which is not this case.

I tought that maybe in the Class Calculator i could add a set and get so i do not have to declare the num1, num2 variables on each method? (Sumar, Restar, Division, Multiplicacion)

class Calculo
{

public static void Suma()
{

    int num1, num2 = 0;
    Console.Write(" Ingrese el primer numero que quiere sumar: ");
    num1 = Convert.ToInt32(Console.ReadLine());
    Console.Write(" Ingrese el segundo numero que quiere sumar: ");
    num2 = Convert.ToInt32(Console.ReadLine());
    Console.WriteLine(" Resultado es:   " + (num1 + num2));
}

public static void Resta()
{

    int num1, num2 = 0;
    Console.Write(" Ingrese el primer numero que quiere restar: ");
    num1 = Convert.ToInt32(Console.ReadLine());
    Console.Write(" Ingrese el segundo numero que quiere restar: ");
    num2 = Convert.ToInt32(Console.ReadLine());
    Console.WriteLine(" Resultado es: " + (num1 - num2));
}

public static void Division()
{

    int num1, num2 = 0;
    Console.Write(" Ingrese el primer numero que quiere Dividir: ");
    num1 = Convert.ToInt32(Console.ReadLine());
    Console.Write(" Ingrese el segundo numero que quiere Dividir: ");
    num2 = Convert.ToInt32(Console.ReadLine());
    Console.WriteLine(" Resultado es: " + (num1 / num2));
}

public static void Multiplicacion()
 {

    int num1, num2 = 0;
    Console.Write(" Ingrese el primer numero que quiere multiplicar: ");
    num1 = Convert.ToInt32(Console.ReadLine());
    Console.Write(" Ingrese el segundo numero que quiere multiplicar: ");
    num2 = Convert.ToInt32(Console.ReadLine());
    Console.WriteLine(" Resultado es: " + (num1 * num2));
}
}
Thank you!
React Summit Remote Edition 17 April 2020
Tags: reactsummit, react, conference, remote
Published: 2020-04-15 10:13:07

---
title: React Summit Remote Edition 17 April 2020
published: true
date: 2020-04-15 09:08:39 UTC
tags: ReactSummit, react, conference, remote
canonical_url: https://www.panayiotisgeorgiou.net/react-summit-remote-edition-17-april-2020/
cover_image: https://dev-to-uploads.s3.amazonaws.com/i/tm3cu4kncgn90tt3lfo9.png
---

[ReactSummit](https://reactsummit.com/) is back with a [Remote Edition](https://remote.reactsummit.com) happening on Apr 17. Streams of both talk tracks will be accessible for free! 😉 Are you ready for React Summit Remote Edition 17 April 2020 ?


Attend a two-track conference on all things React, gathering international Front-end and Full-stack engineers in the cloud. To help you stay up-to-date on the latest React tech, we’re coming back with a new remote gig on April 17, 2020. Mark your calendars for the biggest virtual event for the React community.

[**React Summit Remote Edition**](https://remote.reactsummit.com/)

Next to the main conference talks with React (Native) pros, be prepared for an awesome MC and a number of virtual networking rooms focusing on multiple tech topics, interactive entertainment, and engaging challenges for all participants.

**Figure out your [schedule](https://remote.reactsummit.com/?mc_cid=0d1980205f&mc_eid=13cce32a38#schedule)**  
Talks and all other activities are available for full-access attendees.

[Follow me on Instagram](https://www.instagram.com/panayiotisgeorgiou)

### Don’t miss out

[React Amsterdam 2019](https://www.panayiotisgeorgiou.net/react-amsterdam-2019/)

[React Amsterdam 2019 Talks](https://www.panayiotisgeorgiou.net/react-amsterdam-2019-watch-talks/)

<iframe type="text/html" width="1200" height="675" src="https://www.youtube.com/embed/rwUl-iRut78?version=3&amp;rel=1&amp;fs=1&amp;autohide=2&amp;showsearch=0&amp;showinfo=1&amp;iv_load_policy=1&amp;wmode=transparent" allowfullscreen="true" style="border:0;"></iframe>

**That’s it for now. **

If you liked this article, then please subscribe to my [YouTube Channel](https://www.youtube.com/c/PanayiotisGeorgiou?sub_confirmation=1) for video tutorials.

You can also find me on [Twitter](http://twitter.com/panay_georgiou) and [Facebook](https://www.facebook.com/panayiotisgeorgiou.net).

The post [React Summit Remote Edition 17 April 2020](https://www.panayiotisgeorgiou.net/react-summit-remote-edition-17-april-2020/) appeared first on [Panayiotis Georgiou](https://www.panayiotisgeorgiou.net).
Do Well What You Know Well + Twilio Hackathon Idea
Tags: devjournal, twiliohackathon, codenewbie, womenintech
Published: 2020-04-15 09:08:16

_This post was originally published on April 15, 2020 on [my blog](https://alexlsalt.github.io/blog)._

Spent yesterday following a tutorial for setting up Firebase as a backend database, and I'm *so* loving it! Every time I learn something new with code and web development, it simply blows my mind.

I think the most important thing as you're learning to code is the fact that simply being *aware* of what tools you have at your disposal will help you so incredibly much through solving any problems that pop up.

My plan for today is to finish up learning the ins and outs of Firebase/Firestore and then learn how to set up user authorization so that I can start implementing sign-up functionality on my app.

Oh - I guess I haven't mentioned the overall idea of it. Essentially, the app will be a tool that keeps people connected to their friends and loved ones with automated suggestions about who to contact on a certain day.

The user will create an account, create a list of all the individual people they want to be reminded to contact, as well as the frequency of desired reminders (i.e. once a week, twice a month, etc).

After I get the database structure organized and set up, I'll start to play around with hooking a Twilio API up to it. At this point, I think the simplest thing to do would be to enable SMS alerts for users.

Really, really, really excited about it.

And to end this post, here's some inspiration from the label of a really great bottle of wine we recently treated outselves to:


_BENE FACIT ID QUOD BENE MAT: You only do well what you know well_


Keep learning, keep doing. Fall in love with the process and it'll become a part of who you are.
03: User Interface and User experience 
Tags: ux
Published: 2020-04-15 08:59:54

###**Which way is your closest way to see the world?** 

1. Functionality VS Aesthetics
2. Developer VS Designer 

What else can we imagine? 



--- 
Nah, don't think it is a good idea to dive into a binary way, humans are more complicated than a computer, there is something beyond the frontend development part, and nowadays the user experience design and it is also related to front end development



--- 
#**User Experience?**
: (UX) is a person's emotions and attitudes about using a particular product, system or service. It includes the practical, experiential, affective, meaningful and valuable aspects of human–computer interaction and product ownership.



--- 
[Coding is everywhere](https://uxplanet.org/introduction-to-coding-for-ux-and-ui-designers-data-structures-and-objects-88eb219366c5)
🌈 Merge Sort & Quick Sort in 5 Languages
Tags: computerscience, go, javascript, cpp
Published: 2020-04-15 08:08:26

I am starting this new series wherein I analyse the code for algorithms in 5 languages: C++, Dart, Go, JavaScript and TypeScript. For this post, I'll be comparing two of the most popular sorting algorithms: Quick Sort and Merge Sort.

# Merge Sort
Merge sort is a divide and conquer algorithm. We divide the array into two sub-parts. Then we call `mergeSort` on both these sub-parts. This is the recursive step of merge sort. After this, we have two sorted arrays. We call the `merge` algorithm which converts these two sorted arrays into a single combined sorted array.

> Time Complexity: O(nlogn)
Space Complexity: O(n)

Code is in this [repo](https://github.com/godcrampy/5-languages/tree/master/merge-sort).

## C++
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/tbydts7l4mqdr44lso4s.png)

> If you find `foo[i++] = bar` weird, it's equivalent to `foo[i] = bar` followed by `i++`.

## Dart
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/cgxj9injymqd2pz3jdyh.png)

> `a ~/ b` returns and `int` on division (and not `double`).

## Go
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/l86q8d8awpknso4djv0s.png)

## JavaScript
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/jf2vcddcbaygbc8smpqr.png)

## TypeScript
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/hsdcruqba6ug15y5yefy.png)

# Quick Sort
Quick Sort is also a _divide and conquer_ algorithm. We first choose a `pivot` element. Then we divide the array in such a way that, elements smaller than `pivot` come before pivot and elements larger than `pivot` come later. Then we recursively call `quickSort` on each of the smaller sub-arrays.

> Time Complexity: O(nlogn)
Space Complexity: O(logn) [Due to recursive calls]

All the code in this [repo](https://github.com/godcrampy/5-languages/tree/master/quick-sort).

## C++
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/15rfzqsrg8ncxcnwm33y.png)

## Dart
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/94tbmw6nmww8goh1hvih.png)

## Go
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/f750l2zwry7vkbt7dh8n.png)

## JavaScript
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/adiou9th26be0u68iqxl.png)

## TypeScript
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/9p8uol41i4rrm9w1wgik.png)

🌈 Code for this series is in this [repo](https://github.com/godcrampy/5-languages/) (Star it!)
🌟 I made some [Cheat-Sheets](dev-cheats.surge.sh)
🚀 Find me on [Instagram](https://www.instagram.com/godcrampy/) | [Github](github.com/godcrampy) | [Twitter](twitter.com/godcrampy) | [Website](sahil.surge.sh)
😄 Have a wonderful day!
Your codebase is your garden
Tags: programming, cleancode, legacycode
Published: 2020-04-15 19:43:55

---
title: Your codebase is your garden
published: true
date: 2020-04-15 08:00:00 UTC
tags: programming, cleancode, legacycode
canonical_url: https://domenicoluciani.com/2020/04/15/your-codebase-is-your-garden.html
---

I always liked `your codebase is like a garden` metaphor, it says that writing software is like gardening, you have to take care of your garden in many ways and time to time you have to move plantings relative to each other, consider how to take advantage of the wind, rain and sunlight to help your plants to grow and have good health. Every day you have to monitor them and make adjustments as needed. Like your code. But how can we do it in practice becoming good gardeners? [Continue to read...](https://domenicoluciani.com/2020/04/15/your-codebase-is-your-garden.html)
Footprints of Success – Lessons learnt in adopting Digital Transformation
Tags: digitaltransformation, digitaltechnology, webdev, mobileapp
Published: 2020-04-15 07:58:16

Organizations that have successfully embraced Digital Transformation are well on their mark to reap the real benefits and RoI (Return on Investments). For every success story, however, there are many more perceived or real failures. It is equally good to know about lost wars and fallen heroes. Here’s how to make sure Digital Transformation earns a great reputation in your organization.

Three simple measures to validate your success with digital transformation:

1.	Enhanced customer engagement and experience at every touch points
2.	Smart workforce management
3.	Productivity/process optimization

Common Strategic failures:

•	Organizational resistance to design thinking
•	Leveraging wrong digital drivers and ambassadors
•	Big bang approach instead of keeping it small and simple with pilot projects and then moving rapidly
•	Aversion to emerging technologies and cloud offerings
•	Disconnect with Millennials – Social media and mobile devices
•	Top down push instead of bottom up stakeholder buy in Cultural resistance

The footprints:

Lives of great men all remind us
We can make our lives sublime,
And, departing, leave behind us
Footprints on the sands of time;
                         Henry Wadsworth Longfellow

The success patterns or footprints of digital transformation:

1.	Companies that digitally transform before their competition receive the benefits of first mover advantage and competitive edge and the culture that is inherited during transition is something that your competitor will not be able to copy or replicate.
2.	A better customer experience and engagement in the organization that is reflected in surveys and revenue.
3.	An enhanced brand reputation that helps in business sustainability
4.	Streamlined operations for efficient cost control
5.	Increase in sales that drives your topline
6.	Retention of customers – lesser cost of marketing and sales
7.	Improve management decisions – Data driven decisions
8.	Quick to market with rapid development of new products and services
9.	Design thinking – A company culture that encourages creativity and innovation.

OptiSol 5 steps digital transformation process:

We at OptiSol, have created a simple 5 steps digital transformation process for organizations that takes design thinking, organization cultural change, usage of technology, leveraging data and finding  means to measure success and RoI.
Can you create db table with Bitrix ORM?
Tags: bitrix, d7, orm, migration
Published: 2020-04-15 07:28:03

If you use bitrix CMS and cannot create a database table in migration using the built-in ORM (bitrix core d7), then here is my working php-code:
```php
$connection = Application::getConnection();

        try{
            $connection->createTable(
                'table_name',
                [
                    'id' => new Entity\IntegerField(
                        'id',
                        [
                            'column_name' => 'id'
                        ]
                    ),
                    'user_id' => new Entity\IntegerField(
                        'user_id',
                        [
                            'column_name' => 'user_id'
                        ]
                    ),
                    'type' => new Entity\StringField(
                        'type',
                        [
                            'column_name' => 'type'
                        ]
                    ),
                    'create_date' => new Entity\DatetimeField(
                        'create_date',
                        [
                            'column_name' => 'create_date'
                        ]
                    ),
                    'lots_count' => new Entity\IntegerField(
                        'lots_count',
                        [
                            'column_name' => 'lots_count'
                        ]
                    )
                ],
                ['id'],
                ['id']
            );
        }
        catch(\Exception $exception){
            echo $exception->getMessage();
        }
```
This is very bad. Why specify duplicate field names so many times?
Becouse, the method createTable() is far from perfect:
```php
public function createTable($tableName, $fields, $primary = array(), $autoincrement = array())
	{
		$sql = 'CREATE TABLE '.$this->getSqlHelper()->quote($tableName).' (';
		$sqlFields = array();

		foreach ($fields as $columnName => $field)
		{
			if (!($field instanceof ScalarField))
			{
				throw new ArgumentException(sprintf(
					'Field `%s` should be an Entity\ScalarField instance', $columnName
				));
			}

			$realColumnName = $field->getColumnName();

			$sqlFields[] = $this->getSqlHelper()->quote($realColumnName)
				. ' ' . $this->getSqlHelper()->getColumnTypeByField($field)
				. ' NOT NULL' // null for oracle if is not primary
				. (in_array($columnName, $autoincrement, true) ? ' AUTO_INCREMENT' : '')
			;
		}

		$sql .= join(', ', $sqlFields);

		if (!empty($primary))
		{
			foreach ($primary as &$primaryColumn)
			{
				$realColumnName = $fields[$primaryColumn]->getColumnName();
				$primaryColumn = $this->getSqlHelper()->quote($realColumnName);
			}

			$sql .= ', PRIMARY KEY('.join(', ', $primary).')';
		}

		$sql .= ')';

		if ($this->engine)
		{
			$sql .= ' Engine='.$this->engine;
		}

		$this->query($sql);
	}
```
Hi, I,m Robert Smith
Published: 2020-04-15 07:13:06

I'm Python Developer from India. I'm currently working as Odoo Python Developer for 3+ years at <a href="https://www.odooimplementation.com/">Odoo Implementation </a>Company. I'm trying hard to improve my skills and learn new technologies in python.

Github: <a href="https://github.com/robertsmith17">robertsmith17</a>

You can also follow me here: <a href="https://dev.to/robertsmith17">dev.to</a>

Nice to meet you.
Stop SQL Injection from .htaccess
Tags: linux, apache, nginx, php
Published: 2020-04-15 07:09:45

```
# Enable rewrite engine
RewriteEngine On

# Block suspicious request methods
RewriteCond %{REQUEST_METHOD} ^(HEAD|TRACE|DELETE|TRACK|DEBUG) [NC]

RewriteRule ^(.*)$ - [F,L]

# Block WP timthumb hack
RewriteCond %{REQUEST_URI} (timthumb\.php|phpthumb\.php|thumb\.php|thumbs\.php) [NC]

RewriteRule . - [S=1]

# Block suspicious user agents and requests
RewriteCond %{HTTP_USER_AGENT} (libwww-perl|wget|python|nikto|curl|scan|java|winhttp|clshttp|loader) [NC,OR]
RewriteCond %{HTTP_USER_AGENT} (<|>|'|%0A|%0D|%27|%3C|%3E|%00) [NC,OR]
RewriteCond %{HTTP_USER_AGENT} (;|<|>|'|"|\)|\(|%0A|%0D|%22|%27|%28|%3C|%3E|%00).*(libwww-perl|wget|python|nikto|curl|scan|java|winhttp|HTTrack|clshttp|archiver|loader|email|harvest|extract|grab|miner) [NC,OR]
RewriteCond %{THE_REQUEST} \?\ HTTP/ [NC,OR]
RewriteCond %{THE_REQUEST} \/\*\ HTTP/ [NC,OR]
RewriteCond %{THE_REQUEST} etc/passwd [NC,OR]
RewriteCond %{THE_REQUEST} cgi-bin [NC,OR]
RewriteCond %{THE_REQUEST} (%0A|%0D) [NC,OR]

# Block MySQL injections, RFI, base64, etc.
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=http:// [OR]
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=(\.\.//?)+ [OR]
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=/([a-z0-9_.]//?)+ [NC,OR]
RewriteCond %{QUERY_STRING} \=PHP[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} [NC,OR]
RewriteCond %{QUERY_STRING} (\.\./|\.\.) [OR]
RewriteCond %{QUERY_STRING} ftp\: [NC,OR]
RewriteCond %{QUERY_STRING} http\: [NC,OR]
RewriteCond %{QUERY_STRING} https\: [NC,OR]
RewriteCond %{QUERY_STRING} \=\|w\| [NC,OR]
RewriteCond %{QUERY_STRING} ^(.*)/self/(.*)$ [NC,OR]
RewriteCond %{QUERY_STRING} ^(.*)cPath=http://(.*)$ [NC,OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*iframe.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} (<|%3C)([^i]*i)+frame.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [NC,OR]
RewriteCond %{QUERY_STRING} base64_(en|de)code[^(]*\([^)]*\) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} ^.*(\[|\]|\(|\)|<|>).* [NC,OR]
RewriteCond %{QUERY_STRING} (NULL|OUTFILE|LOAD_FILE) [OR]
RewriteCond %{QUERY_STRING} (\./|\../|\.../)+(motd|etc|bin) [NC,OR]
RewriteCond %{QUERY_STRING} (localhost|loopback|127\.0\.0\.1) [NC,OR]
RewriteCond %{QUERY_STRING} (<|>|'|%0A|%0D|%27|%3C|%3E|%00) [NC,OR]
RewriteCond %{QUERY_STRING} concat[^\(]*\( [NC,OR]
RewriteCond %{QUERY_STRING} union([^s]*s)+elect [NC,OR]
RewriteCond %{QUERY_STRING} union([^a]*a)+ll([^s]*s)+elect [NC,OR]
RewriteCond %{QUERY_STRING} (;|<|>|'|"|\)|%0A|%0D|%22|%27|%3C|%3E|%00).*(/\*|union|select|insert|drop|delete|update|cast|create|char|convert|alter|declare|order|script|set|md5|benchmark|encode) [NC,OR]
RewriteCond %{QUERY_STRING} (sp_executesql) [NC]

RewriteRule ^(.*)$ - [F,L]

```
🌍Follow Along Links (CSS + JS) [YouTube LIVE]
Tags: css, tutorial, javascript, frontend
Published: 2020-04-15 07:00:59


⬇️ In this video: I'm going to code a simple page with a menu and some text. There are going to be plenty of links and I'll show you a beautiful trick on how to be more playful with your links :)

Codepen: https://codepen.io/EleftheriaBatsou 
Project: https://codepen.io/EleftheriaBatsou/pen/bGVdzrE?editors=0100
Gradient color: https://webgradients.com
Lorem Ipsum: https://www.lipsum.com
Video tutorial https://youtu.be/1v78Ex9wRmo

The inspiration for this project is coming by *Javascript30*

************************************

👋Hello, I' m Eleftheria, an app developer, master student, public speaker, and chocolate lover.

🍩Would you care about buying me a coffee? You can do it here: [paypal.me/eleftheriabatsou](paypal.me/eleftheriabatsou) but If you can't that's ok too!

**************************************

🙏It would be nice to subscribe to my [Youtube](https://www.youtube.com/c/EleftheriaBatsou) channel. It’s free and it helps to create more content.

🌈[Youtube](https://www.youtube.com/c/EleftheriaBatsou) | [Codepen](https://codepen.io/EleftheriaBatsou) | [GitHub](https://github.com/EleftheriaBatsou) | [Twitter](https://twitter.com/BatsouElef) | [Site](http://eleftheriabatsou.com/) | [Instagram](https://www.instagram.com/eleftheriabatsou/)