Skip to content

Instantly share code, notes, and snippets.

View mtrunkat's full-sized avatar
💻
Hiding behind the keyboard

Marek Trunkát mtrunkat

💻
Hiding behind the keyboard
View GitHub Profile
@mtrunkat
mtrunkat / waitforstring.sh
Last active December 27, 2016 13:55
Bash function that waits for string to appear in file.
#!/bin/bash
# Waits for string $2 to appear in the file $1.
# Meanwhile it is printing output of the file $1.
# If err or ERR string is find in the file $1 then exits with error code 1.
# Example use:
# waitforstring /var/log/myapp.log "MongoDB started"
function waitforstring {
local LAST_LINE=1
local READ_LOG
@mtrunkat
mtrunkat / docker-host-ip.sh
Created January 9, 2017 19:23
Get IP address of host machine from docker container
#!/bin/bash
/sbin/ip route|awk '/default/ { print $3 }'
@mtrunkat
mtrunkat / daemon.sh
Last active June 12, 2017 20:05
Run bash script forever with CRON with concurrency 1
#!/bin/bash
# Original: http://bencane.com/2015/09/22/preventing-duplicate-cron-job-executions/
#
# This script executes ./cmd_loop.sh and save process ID (PID) in file ./forever.pid.
# Everytime it's executed it checks for PID in ./forever.pid and if process is still
# running then exists with nonzero code. Otherwise it executes ./cmd_loop.sh.
PIDFILE=./forever.pid
@mtrunkat
mtrunkat / main.js
Created April 5, 2018 13:21
Hacker News crawler using Apify SDK (PuppeteerCrawler and RequestQueue classes)
const Apify = require('apify');
Apify.main(async () => {
// Get queue and enqueue first url.
const requestQueue = await Apify.openRequestQueue();
const enqueue = async url => requestQueue.addRequest(new Apify.Request({ url }));
await enqueue('https://news.ycombinator.com/');
// Create crawler.
const crawler = new Apify.PuppeteerCrawler({
const express = require('express');
const { APIFY_CONTAINER_PORT, APIFY_CONTAINER_URL } = process.env;
const app = express()
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(APIFY_CONTAINER_PORT, () => {
@mtrunkat
mtrunkat / openssl-to-pem.sh
Last active March 5, 2020 12:04
Conversion pf p12 certificate to public and private pem key
# Get private key
openssl pkcs12 -in yourP12File.pfx -nocerts -out privateKey.pem
# Get public key
openssl pkcs12 -in yourP12File.pfx -clcerts -nokeys -out publicCert.pem
function pageFunction(context) {
var $ = context.jQuery
var posts = $('.athing').toArray(); // All posts as array of DOM elements
var $moreLink = $('.morelink'); // Link to next page
// If crawler is scraping 2nd, 3rd, ... page then
// context.request.referrer.pageFunctionResult contains
// result from previous pages.
var prevResult = context.request.referrer
? context.request.referrer.pageFunctionResult
[{
"https://github.com/apas/athena": 100,
"https://github.com/achillesrasquinha/bulbea": 99,
"https://keratin.tech": 98,
"https://github.com/dhruvio/js_express-parser-combinators": 97,
"https://www.pagedash.com/": 96,
"https://github.com/monostream/tifig": 95,
"https://javalin.io/news/javalin-1.0.0-stable.html": 94,
"http://www.goodoldweb.com/": 93,
"http://vuemc.io": 92,
function pageFunction(context) {
var $ = context.jQuery;
// All h4 headings containing date - <h4>2016-11-24</h4>
var headings = $('.page-content h4');
// All descriptions - <ul><li>General: ...</li>...</ul>
var lists = $('.page-content ul');
// Iterate thru all release notes
var result = [];
for (var i = 0; i < headings.length; i ++) {
<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
<channel>
<title>Apifier_Release_Notes</title>
<link>...</link>
<description>...</description>
<generator>Apifier - Crawler #1</generator>
<lastBuildDate>Sun, 06 Sep 2009 16:20:00 UTC</lastBuildDate>
<item>