welcome
photos
talks
projects

Rope

Based on the microservice framework Kite that we've developed for Koding, I've designed and implemented the initial version of Rope family which provides an easy setup RPC subsystem across browsers and nodes developed w/ Node.JS, Go or Python.

Rope introduces a new kind of Kite registry and provides bi-directional calls between Rope nodes which can be written in Go, Python or JS for Node.js and modern browsers.

Rope homepage is also a node in the system that provides a bird's eye view to the whole registry. I've implemented the homepage with kd.js and the kd-dia components which I was very excited about while developing.

You can try the experimental version from rope.live

Once you open rope.live you can create a new node in another browser tab by loading the same page or, after installing the @rope/node package from npm registry you can create a new node with following:

const { Rope } = require('@rope/node');

var math = new Rope('math', {
  add(num1, num2, callback) {
    callback(null, num1 + num2);
  }
});

Which will create a new Rope node named math and will export add method over it. Where any other node in the registry can make a call to this node's add method with required parameters from a browser or an application in Go, Python or Node.js

In JavaScript;

const { Rope } = require('@rope/node');

var calc = new Rope('calculator');
var result = await calc.tell('run', {method: 'add', args: [1,2]});

Where result will be 3. Since there might be multiple nodes which provides same method, Rope Server will choose one of them and get the result from it.

You can checkout the Rope organization for the examples and node libraries from github.com/ropelive

ropelive

Hodext

Named after great person Hodor, Hodext is my clipboard manager based on Electron. It has a simple design similar to Alfred on macOS. And comes up when you press Alt+Space:

You can navigate on items by using arrow keys or Ctrl+J for down Ctrl+K for up. Enter will paste the selected content to the previous active window. You can also choose to update current clipboard content without pasting it by using Ctrl+Enter shortcut instead. And for sure you can filter your clipboard by just typing some characters as you wish, which will filter the list based on the content and the application name which content is copied from. If you change focus to another window or hit Esc or Ctrl+C this will hide Hodext. While window is visible you can use Command+Q to quit.

It has theme support which reflects macOS theme selection, if you use Dark Menu Bar you will see it like in the previous screenshot, otherwise it will match with menu bar's white color scheme.

By default it ignores sensitive information like things you've copied from 1Password or any concealed data will not end up in Hodext's list. But if you would like to remove an entry you can use Ctrl+Backspace on the active item.

gokmen/hodext

Yeager

Simple router implementation w/http handler for Crystal, named after "Router Man" - William Yeager. It supports basic router requirements with speed.

While the Yeager::Router provides a basic router functionality, Yeager::App aims to provide similar interface with Express.js on top of Yeager::Router and built-in HTTP module.

An example app can be written as below; If you've used Express.js before transition will be simple.

require "yeager"

# Create the app
app = Yeager::App.new

# Add a glob handler to call before everything else
# will print "A new visit!" for each request
app.get "*" do |req, res, continue|
  puts "A new visit!"
  continue.call
end

# Add GET handler for "/" to response back with "Hello world!"
app.get "/" do |req, res|
  res.send "Hello world!"
end

# Redirect GET requests to "/google" to https://google.com
app.get "/google" do |req, res|
  res.redirect "https://google.com"
end

# Response with JSON on GET requests to "/json"
app.get "/json" do |req, res|
  res.status(200).json({"Hello" => "world!"})
end

# Add another GET handler for "/:user"
# which will render "Hello yeager!" for "/yeager" route
app.get "/:user" do |req, res|
  res.send "Hello #{req.params["user"]}!"
end

# Enable CORS
app.use do |req, res, continue|
  res.headers.add "Access-Control-Allow-Origin", "*"
  continue.call
end

# Start the app on port 3000
app.listen 3000 do
  print "Example app listening on 0.0.0.0:3000!"
end

gokmen/yeager

CoffeePad

CoffeePad provides live compile for CoffeeScript to JavaScript or vice-versa with hints. I've built it with Koding's Framework kd.js, uses CodeMirror as editor and CoffeeScript's browser compiler.

It can be used as Chrome extension or a single page application from coffeepad.rocks. It keeps everyting in localStorage even in Chrome extension, which means there is no server dependency. Everything happens in your browser.

gokmen/coffeepad

asyon Türkçe değil

In Turkish (which is my mother tounge) there are some weird usages of some English words (they might be derived from some other language to English as well) which are, most of the time relying on converting -ion to -asyon and keeping the first part of the word as in Turkish; application becomes aplikasyon which is not correct and adds some new words to the language which has no meaning at all. I'm trying to show alternatives that can be used instead of these made up words. Which are most of the times in Turkish or at least derived from other languages with a meaning.

In a single page application with wildcard domain support one can share a word with a direct link like; aplik.asyonturkcedegil.com

gokmen/asyonturkcedegil

Konstraints

Constraint checker for node.js and browser to validate given target with provided rules. With konstraints you can make sure that your objects will fit in your requirements.

konstraints = require 'konstraints'

target  =
  foo   :
    bar : 42
  baz   :
    one : 1
    two : 2

rules   = [
  { $typeof: 'object' }
  { $keys: [ 'foo', 'baz' ] }
  { 'foo': { $keys: [ 'bar' ] } }
  {
    'foo.bar': [
      { $eq: 42 }
      { $lt: 44 }
    ]
  }
  { 'baz': { $length: 2 } }
  { 'baz.*': { $gt: 0 } }
]

res = konstraints target, rules, log: yes

will generate following output:

✓ type of given object is 'object'
✓ all keys of given object are allowed
✓ all keys of foo are allowed
✓ foo.bar is equal to 42
✓ foo.bar is less than 44
✓ length of baz is 2
✓ baz.one is greater than 0
✓ baz.two is greater than 0

✓ ALL PASSED!

You can also try it in your browser from runkit/konstraints

gokmen/konstraints

hcl-to-json

HCL to JSON converter for JS applications.

HCL (HashiCorp Configuration Language) is a configuration language built by HashiCorp. The goal of HCL is to build a structured configuration language that is both human and machine friendly for use with command-line tools, but specifically targeted towards DevOps tools, servers, etc.

hcltojson = require 'hcltojson'

hcltojson """

foo "bar" {
  baz = 123
  tex = ["one", "two"]
  mon "test" {
    lar = "bar"
  }
}

"""

will return following JSON object:

{
  "foo": {
    "bar": {
      "baz": 123,
      "tex": [
        "one",
        "two"
      ],
      "mon": {
        "test": {
          "lar": "bar"
        }
      }
    }
  }
}

You can also try it in your browser from runkit/hcl-to-json

gokmen/hcl-to-json

kd.js Generator

Yeoman generator that scaffolds out a kd.js web project for kd.js framework that we built Koding with it. This webpage is also built with kd.js and the kd-generator. You can find my detailed post about it on here.

gokmen/generator-kd.js

Rasta

Rst Text editor for Linux, Windows and macOS in Qt4

gokmen/Rasta

Istanbul Watchface for Pebble Time

I was using Pebble watch for a long time and there were no watchface with sweeping motion, so I build my own one.

gokmen/istanbul

YALI

Installer of Pardus Operating System, I've re-designed and implemented it in Qt4 after Pardus 2007 release (it was implemented in Qt3 at that time), developed a graphical user interface for file system management and partioning from scratch. The name is coming from "Yet Another Linux Installer" and it means waterside mansion in Turkish. The version I've created was in use with some more additions until the last release of Pardus. And it's still in use by some other distros. wikipedia/yalı

uludag/yali

Sysinfo for Pardus

OpenSuse’s sysinfo:/ kioslave port for Pardus, later on my implementation has been used by various KDE distros as well.

uludag/kde/sysinfo

Package Manager

Package management tool of Pardus

uludag/kde/package-manager

Service-Manager

System service Management GUI for Pardus, it uses COMAR backend

uludag/kde/service-manager

Network-Manager

Network Management GUI for Pardus, it uses COMAR backend

uludag/kde/network-manager

PDS

Pardus Desktop Services, series of widget to build Qt Application which runs on multiple desktops (Kde, Gnome, Xfce, Enlightenment etc.) also provides an animation framework.

gokmen/pds

SigmaNI Test Suite

I've designed and implemented an interface for SigmaNI library which provides a test environment for the full spec of the library. It was written in C++ with Qt4 on Windows.

Reach The Peak

A motion controlled action game with a medieval theme. Reach the Peak gives the player a chance to dodge through obstacles while grabbing some expensive looking souvenirs. Real time analysis of depth sensor data enabled the system to pinpoint players location, so the gamer can control his character via his movements and be the controller. At the end of each session the software finds the players face, and captures the moment of triumph or well.. a defeat.

Kontext

It’s an text summary engine for a query based search engines.

kontext

Disk-Manager

Fstab file editor UI

uludag/kde/disk-manager

Nuf

Nuf is an easy way to manage simple home pages, it supports Markdown syntax and provides basic template support. It uses bootstrap as default template which is based on Twitter's bootstrap CSS. And written in PHP. No DB required.

gokmen/Nuf

AppInfo

A set of Python modules to get metadata information for given packages (can run remote or local)

uludag/appinfo

Sunum

PHP & XML based presentation engine

projeler/sunum

Py-PhoneBook

Simple example for learning Python Qt4 and MySQL

py-phonebook

GöKMENGöKSEL GJD < PROJECTS > LGZPWOLFNEEMUWNDDRHESLILTQF