G
ö
K
M
E
N
G
ö
K
S
E
L
GJD
<
P
R
O
J
E
C
T
S
>
LGZPWOLFNEEMUWNDDRHESLILTQ
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
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.
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
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.
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
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
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
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.
Rst Text editor for Linux, Windows and macOS in Qt4
I was using Pebble watch for a long time and there were no watchface with sweeping motion, so I build my own one.
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ı
OpenSuse’s sysinfo:/ kioslave port for Pardus, later on my implementation has been used by various KDE distros as well.
Package management tool of Pardus
System service Management GUI for Pardus, it uses COMAR backend
Network Management GUI for Pardus, it uses COMAR backend
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.
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.
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.
It’s an text summary engine for a query based search engines.
Fstab file editor UI
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.
A set of Python modules to get metadata information for given packages (can run remote or local)
PHP & XML based presentation engine
Simple example for learning Python Qt4 and MySQL