How to use Clarity smart contract language to define functions and data maps

Clarity includes defines and native functions for creating user-defined functions.


define and define-public functions
define-read-only functions
define-map functions for data
List operations and functions
Intra-contract calls

Reading from other smart contracts
 


define and define-public functions

Functions specified via define-public statements are public functions. Functions without these designations, simple define statements, are private functions. You can run a contract’s public functions directly via the clarity-cli execute command line directly or from other contracts. You can use the clarity eval or clarity eval_raw commands to evaluate private functions via the command line.

Public functions return a Response type result. If the function returns an ok type, then the function call is considered valid, and any changes made to the blockchain state will be materialized. If the function returns an err type, it is considered invalid, and has no effect on the smart contract’s state.

For example, consider two functions, foo.A and bar.B where the foo.A function calls bar.B, the table below shows the data materialization that results from the possible combination of return values:

 
 
 
Defining of constants and functions are allowed for simplifying code using a define statement. However, these are purely syntactic. If a definition cannot be inlined, the contract is rejected as illegal. These definitions are also private, in that functions defined this way may only be called by other functions defined in the given smart contract.
 
 
 
 
define-read-only functions

Functions specified via define-read-only statements are public. Unlike functions created by define-public, functions created with define-read-only may return any type. However, define-read-only statements cannot perform state mutations. Any attempts to modify contract state by these functions or functions called by these functions result in an error.
 
 
 
define-map functions for data

Data within a smart contract’s data-space is stored within maps. These stores relate a typed-tuple to another typed-tuple (almost like a typed key-value store). As opposed to a table data structure, a map only associates a given key with exactly one value. A smart contract defines the data schema of a data map with the define-map function.
 
 
(define-map map-name ((key-name-0 key-type-0) ...) ((val-name-0 val-type-0) ...))


Clarity contracts can only call the define-map function in the top-level of the smart-contract (similar to define. This function accepts a name for the map, and a definition of the structure of the key and value types. Each of these is a list of (name, type) pairs. Types are either the values 'principal, 'integer, 'bool or the output of one of the hash calls which is an n-byte fixed-length buffer.

To support the use of named fields in keys and values, Clarity allows the construction of tuples using a function (tuple ((key0 expr0) (key1 expr1) ...)), for example:
 
(tuple (name "blockstack") (id 1337))


This allows for creating named tuples on the fly, which is useful for data maps where the keys and values are themselves named tuples. To access a named value of a given tuple, the function (get #name tuple) will return that item from the tuple.

The define-map interface, as described, disallows range-queries and queries-by-prefix on data maps. Within a smart contract function, you cannot iterate over an entire map. Values in a given mapping are set or fetched using the following functions:
 
 

 
 
Data maps make reasoning about functions easier. By inspecting a given function definition, it is clear which maps will be modified and, even within those maps, which keys are affected by a given invocation. Also, the interface of data maps ensures that the return types of map operations are fixed length; Fixed length returns is a requirement for static analysis of a contract’s runtime, costs, and other properties.
 
List operations and functions

Lists may be multi-dimensional. However, note that runtime admission checks on typed function-parameters and data-map functions like set-entry! are charged based on the maximal size of the multi-dimensional list.

You can call filter map and fold functions with user-defined functions (that is, functions defined with (define ...), (define-read-only ...), or (define-public ...)) or simple, native functions (for example, +, -, not).
 
 
Intra-contract calls
 
A smart contract may call functions from other smart contracts using a (contract-call!) function:
(contract-call! contract-name function-name arg0 arg1 ...)


This function accepts a function name and the smart contract’s name as input. For example, to call the function token-transfer in the smart contract, you would use:
 
(contract-call! tokens token-transfer burn-address name-price))



For intra-contract calls dynamic dispatch is not supported. When a contract is launched, any contracts it depends on (calls) must exist. Additionally, no cycles may exist in the call graph of a smart contract. This prevents recursion (and re-entrancy bugs. A static analysis of the call graph detects such structures and they are rejected by the network.

A smart contract may not modify other smart contracts’ data directly; it can read data stored in those smart contracts’ maps. This read ability does not alter any confidentiality guarantees of Clarity. All data in a smart contract is inherently public, andis readable through querying the underlying database in any case.
 
 
Reading from other smart contracts

To read another contract’s data, use (fetch-contract-entry) function. This behaves identically to (fetch-entry), though it accepts a contract principal as an argument in addition to the map name:
 
(fetch-contract-entry
'contract-name
'map-name
'key-tuple) ;; value tuple or none


 
For example, you could do this:
 
 
(fetch-contract-entry
names
name-map
1) ;;returns owner principal of name


Just as with the (contract-call) function, the map name and contract principal arguments must be constants, specified at the time of publishing.

Finally, and importantly, the tx-sender variable does not change during inter-contract calls. This means that if a transaction invokes a function in a given smart contract, that function is able to make calls into other smart contracts on your behalf. This enables a wide variety of applications, but it comes with some dangers for users of smart contracts. However, the static analysis guarantees of Clarity allow clients to know a priori which functions a given smart contract will ever call. Good clients should always warn users about any potential side effects of a given transaction.
 
Continue Read »
Clarity includes defines and native functions for creating user-defined functions.


define and define-public functions
define-read-only functions
define-map functions for data
List operations and functions
Intra-contract calls

Reading from other smart contracts
 


define and define-public functions

Functions specified via define-public statements are public functions. Functions without these designations, simple define statements, are private functions. You can run a contract’s public functions directly via the clarity-cli execute command line directly or from other contracts. You can use the clarity eval or clarity eval_raw commands to evaluate private functions via the command line.

Public functions return a Response type result. If the function returns an ok type, then the function call is considered valid, and any changes made to the blockchain state will be materialized. If the function returns an err type, it is considered invalid, and has no effect on the smart contract’s state.

For example, consider two functions, foo.A and bar.B where the foo.A function calls bar.B, the table below shows the data materialization that results from the possible combination of return values:

 
 
 
Defining of constants and functions are allowed for simplifying code using a define statement. However, these are purely syntactic. If a definition cannot be inlined, the contract is rejected as illegal. These definitions are also private, in that functions defined this way may only be called by other functions defined in the given smart contract.
 
 
 
 
define-read-only functions

Functions specified via define-read-only statements are public. Unlike functions created by define-public, functions created with define-read-only may return any type. However, define-read-only statements cannot perform state mutations. Any attempts to modify contract state by these functions or functions called by these functions result in an error.
 
 
 
define-map functions for data

Data within a smart contract’s data-space is stored within maps. These stores relate a typed-tuple to another typed-tuple (almost like a typed key-value store). As opposed to a table data structure, a map only associates a given key with exactly one value. A smart contract defines the data schema of a data map with the define-map function.
 
 
(define-map map-name ((key-name-0 key-type-0) ...) ((val-name-0 val-type-0) ...))


Clarity contracts can only call the define-map function in the top-level of the smart-contract (similar to define. This function accepts a name for the map, and a definition of the structure of the key and value types. Each of these is a list of (name, type) pairs. Types are either the values 'principal, 'integer, 'bool or the output of one of the hash calls which is an n-byte fixed-length buffer.

To support the use of named fields in keys and values, Clarity allows the construction of tuples using a function (tuple ((key0 expr0) (key1 expr1) ...)), for example:
 
(tuple (name "blockstack") (id 1337))


This allows for creating named tuples on the fly, which is useful for data maps where the keys and values are themselves named tuples. To access a named value of a given tuple, the function (get #name tuple) will return that item from the tuple.

The define-map interface, as described, disallows range-queries and queries-by-prefix on data maps. Within a smart contract function, you cannot iterate over an entire map. Values in a given mapping are set or fetched using the following functions:
 
 

 
 
Data maps make reasoning about functions easier. By inspecting a given function definition, it is clear which maps will be modified and, even within those maps, which keys are affected by a given invocation. Also, the interface of data maps ensures that the return types of map operations are fixed length; Fixed length returns is a requirement for static analysis of a contract’s runtime, costs, and other properties.
 
List operations and functions

Lists may be multi-dimensional. However, note that runtime admission checks on typed function-parameters and data-map functions like set-entry! are charged based on the maximal size of the multi-dimensional list.

You can call filter map and fold functions with user-defined functions (that is, functions defined with (define ...), (define-read-only ...), or (define-public ...)) or simple, native functions (for example, +, -, not).
 
 
Intra-contract calls
 
A smart contract may call functions from other smart contracts using a (contract-call!) function:
(contract-call! contract-name function-name arg0 arg1 ...)


This function accepts a function name and the smart contract’s name as input. For example, to call the function token-transfer in the smart contract, you would use:
 
(contract-call! tokens token-transfer burn-address name-price))



For intra-contract calls dynamic dispatch is not supported. When a contract is launched, any contracts it depends on (calls) must exist. Additionally, no cycles may exist in the call graph of a smart contract. This prevents recursion (and re-entrancy bugs. A static analysis of the call graph detects such structures and they are rejected by the network.

A smart contract may not modify other smart contracts’ data directly; it can read data stored in those smart contracts’ maps. This read ability does not alter any confidentiality guarantees of Clarity. All data in a smart contract is inherently public, andis readable through querying the underlying database in any case.
 
 
Reading from other smart contracts

To read another contract’s data, use (fetch-contract-entry) function. This behaves identically to (fetch-entry), though it accepts a contract principal as an argument in addition to the map name:
 
(fetch-contract-entry
'contract-name
'map-name
'key-tuple) ;; value tuple or none


 
For example, you could do this:
 
 
(fetch-contract-entry
names
name-map
1) ;;returns owner principal of name


Just as with the (contract-call) function, the map name and contract principal arguments must be constants, specified at the time of publishing.

Finally, and importantly, the tx-sender variable does not change during inter-contract calls. This means that if a transaction invokes a function in a given smart contract, that function is able to make calls into other smart contracts on your behalf. This enables a wide variety of applications, but it comes with some dangers for users of smart contracts. However, the static analysis guarantees of Clarity allow clients to know a priori which functions a given smart contract will ever call. Good clients should always warn users about any potential side effects of a given transaction.
  Collapse Read »

Principals-a Clarity (smart contract language for blockstack dapps)native type

Principals are a Clarity native type that represents a spending entity. This section discusses principals and how they are used in the Clarity.
 
Principals and tx-sender
 
A principal is represented by a public-key hash or multi-signature Stacks address. Assets in Clarity and the Stacks blockchain are “owned” by objects of the principal type; put another way, principal object types may own an asset.

A given principal operates on its assets by issuing a signed transaction on the Stacks blockchain. A Clarity contract can use a globally defined tx-sender variable to obtain the current principal.

The following user-defined function transfers an asset, in this case, tokens, between two principals:
 
(define (transfer! (sender principal) (recipient principal) (amount int))
(if (and
(not (eq? sender recipient))
(debit-balance! sender amount)
(credit-balance! recipient amount))
'true
'false))

 
 
The principal’s signature is not checked by the smart contract, but by the virtual machine.
 
Smart contracts as principals
 
Smart contracts themselves are principals and are represented by the smart contract’s identifier. You create the identifier when you launch the contract, for example, the contract identifier here is hanomine.
 

clarity-cli launch hanomine /data/hano.clar /data/db
 
A smart contract may use the special variable contract-name to refer to its own principal.

To allow smart contracts to operate on assets it owns, smart contracts may use the special (as-contract expr) function. This function executes the expression (passed as an argument) with the tx-sender set to the contract’s principal, rather than the current sender. The as-contract function returns the value of the provided expression.

For example, a smart contract that implements something like a “token faucet” could be implemented as so:
 
 
(define-public (claim-from-faucet)
(if (is-none? (fetch-entry claimed-before (tuple (sender tx-sender))))
(let ((requester tx-sender)) ;; set a local variable requester = tx-sender
(begin
(insert-entry! claimed-before (tuple (sender requester)) (tuple (claimed 'true)))
(as-contract (stacks-transfer! requester 1)))))
(err 1))

In this example, the public function claim-from-faucet:
 
 
  • Checks if the sender has claimed from the faucet before.
  • Assigns the tx sender to a requester variable.
  • Adds an entry to the tracking map.
  • Uses as-contract to send 1 microstack


Contract writers can use the primitive function is-contract? to determine whether a given principal corresponds to a smart contract.

Unlike other principals, there is no private key associated with a smart contract. As it lacks a private key, a Clarity smart contract cannot broadcast a signed transaction on the blockchain.
 
 
Continue Read »
Principals are a Clarity native type that represents a spending entity. This section discusses principals and how they are used in the Clarity.
 
Principals and tx-sender
 
A principal is represented by a public-key hash or multi-signature Stacks address. Assets in Clarity and the Stacks blockchain are “owned” by objects of the principal type; put another way, principal object types may own an asset.

A given principal operates on its assets by issuing a signed transaction on the Stacks blockchain. A Clarity contract can use a globally defined tx-sender variable to obtain the current principal.

The following user-defined function transfers an asset, in this case, tokens, between two principals:
 
(define (transfer! (sender principal) (recipient principal) (amount int))
(if (and
(not (eq? sender recipient))
(debit-balance! sender amount)
(credit-balance! recipient amount))
'true
'false))

 
 
The principal’s signature is not checked by the smart contract, but by the virtual machine.
 
Smart contracts as principals
 
Smart contracts themselves are principals and are represented by the smart contract’s identifier. You create the identifier when you launch the contract, for example, the contract identifier here is hanomine.
 

clarity-cli launch hanomine /data/hano.clar /data/db
 
A smart contract may use the special variable contract-name to refer to its own principal.

To allow smart contracts to operate on assets it owns, smart contracts may use the special (as-contract expr) function. This function executes the expression (passed as an argument) with the tx-sender set to the contract’s principal, rather than the current sender. The as-contract function returns the value of the provided expression.

For example, a smart contract that implements something like a “token faucet” could be implemented as so:
 
 
(define-public (claim-from-faucet)
(if (is-none? (fetch-entry claimed-before (tuple (sender tx-sender))))
(let ((requester tx-sender)) ;; set a local variable requester = tx-sender
(begin
(insert-entry! claimed-before (tuple (sender requester)) (tuple (claimed 'true)))
(as-contract (stacks-transfer! requester 1)))))
(err 1))

In this example, the public function claim-from-faucet:
 
 
  • Checks if the sender has claimed from the faucet before.
  • Assigns the tx sender to a requester variable.
  • Adds an entry to the tracking map.
  • Uses as-contract to send 1 microstack


Contract writers can use the primitive function is-contract? to determine whether a given principal corresponds to a smart contract.

Unlike other principals, there is no private key associated with a smart contract. As it lacks a private key, a Clarity smart contract cannot broadcast a signed transaction on the blockchain.
 
  Collapse Read »

Clarity-Blockstack smart contract language tutorials and docs

Clarity is Blockstack’s smart contracting language for use with the Stacks blockchain. Clarity supports programmatic control over digital assets within the Stacks blockchain (for example, BNS names, Stacks tokens, and so forth). This section discusses the following topics:


Who should use smart contracts?
Language and program design
The coding environment
Basic building blocks of Clarity contracts
hello-world example
Language rules and limitations


 
Who should use smart contracts?
 
 
You can use Clarity to write standalone contracts or to write contracts that are part of decentralized applications (DApps) you write with the blockstack.js library. Smart contracts allow two parties to exchange anything of value (money, property, shares), in an automated, auditable, and secure way without the services of a middleman. Nick Szabo introduced the canonical metaphor for smart contracts, a vending machine.

In Nick Szabo’s metaphor, the vending machine is the smart contract. The buyer and machine owner are the two parties. A vending machine executes a set of hard-coded actions when the buyer engages with it. The machine displays the items and their prices. A buyer enters money into the machine which determines if the amount fails to mee, meets, or exceeds an item’s price. Based on the amount, the machine asks for more money, dispenses an item, or dispenses and item and change.

Not every application requires smart contracts. If you are not sure or are new to smart contracts concepts, you should read ]a good general explanation of smart contracts[/url] before working with Clarity.
 
 
Language and program design
 
Clarity differs from most other smart contract languages in two essential ways:
 
  • The language is not intended to be compiled.
  • The language is not Turing complete.

 
These differences allow for static analysis of programs to determine properties like runtime cost and data usage.

A Clarity smart contract is composed of two parts — a data-space and a set of functions. Only the associated smart contract may modify its corresponding data-space on the blockchain. Functions are private unless they are defined as public functions. Users call smart contracts’ public functions by broadcasting a transaction on the blockchain which invokes the public function.

Contracts can also call public functions from other smart contracts. The ability to do a static analysis of a smart contract allows a user to determine dependency between contracts.
 
 
The coding environment
 
Clarity is a list processing (LISP) language, as such it is not compiled. Omitting compilation prevents the possibility of error or bugs introduced at the compiler level. You can write Clarity smart contract programs on any operating system with a text editor. You can use any editor you are comfortable with such as Atom, Vim, or even Notepad. The Clarity files you create with an editor have a .clar extension.

Clarity is in pre-release and does not yet directly interact with the live Stacks blockchain. For the pre-release period you need a test environment to run Clarity contracts. Blockstack provides a Docker image called clarity-developer-preview that you can use or you can build a test environment locally from code. Either the Docker image or a local environment is sufficient for testing Clarity programming for standalone contracts.

You use the clarity-cli command line to check, launch, and execute standalone Clarity contracts. You can use this same command line to create simulate mining Stacks and inspecting a blockchain.

Blockstack expects that some decentralized applications (DApp) will want to make use of Clarity contracts as part of their applications. For this purpose, you should use the Clarity SDK, also in pre-release. The SDK is a development environment, testing framework, and deployment tool. It provides a library for safe interactions with Clarity contracts from a DApp written with the blockstack.js library.
 
 
Basic building blocks of Clarity contracts
 
 
The basic building blocks of Clarity are atoms and lists. An atom is a number or string of contiguous characters. Some examples of atoms:
 
  • token-sender
  • 10000
  • SZ2J6ZY48GV1EZ5V2V5RB9MP66SW86PYKKQ9H6DPR

 
Atoms can be native functions, user-defined functions, variables, and values that appear in a program. Functions that mutate data by convention terminate with an ! exclamation point, for example the insert-entry! function.
 
A list is a sequences of atoms enclosed with () parentheses. Lists can contain other lists. Some examples of lists are:
 
  • (get-block-info time 10)
  • (and 'true 'false)
  • (is-none (get id (fetch-entry names-map (tuple (name \"blockstack\")))))

 
You can add comments to your Clarity contracts using ;; (double semi-colons). Both standalone and inline comments are supported.
 

;; Transfers tokens to a specified principal (define-public (transfer (recipient principal) (amount int)) (transfer! tx-sender recipient amount)) ;; returns: boolean
 
You use the clarity-cli command to check and launch a Clarity (.clar) program.
 
hello-world example
 
 
The easiest program to run in any language is a hello world program. In Clarity, you can write this hello-world.clar program.
(begin 
(print "hello world"))

This program defines a single hello-world expression that is excuted when the contract launches. The begin is a native Clarity function that evaluates the expressions input to it and returns the value of the last expression. Here there is a single print expression. Both the begin and the print are enclosed in ()parentheses.

For the pre-release, the Blockstack test environment includes the clarity-cli command for interacting with the contract and SQLite to support the data space. You create a SQLLite database to hold data related to Clarity contracts. This database simulates the blockchain by recording the contract activity.

You can’t run even an a hello-world program without first initializing a Clarity contract’s data space within the database. You can use the clarity-cli initialize command to set up the database.
 
clarity-cli initialize /data/db

 
This command initializes the db database which resides in the /data directory of the container. You can name the database anything you like, the name db is not required. You can use SQLite to query this database:
 
sqlite> .open db
sqlite> .tables
contracts maps_table type_analysis_table
data_table simmed_block_table
sqlite>

After you initialize the contract’s data space, you can check a Clarity program for problems.
 
clarity-cli check ./hello.clar /data/db

As the name implies, the check ensures the contract definition passes a type check; passing programs will returns an exit code of 0 (zero). Once a contract passes a check, you launch it.
 
root@4224dd95b5f5:/data# clarity-cli launch hello ./hello.clar /data/db
Buffer(BuffData { data: [104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100] })
Contract initialized!

 
Because Clarity does not support simple strings, it stores the hello world string in a buffer. Printing out that string displays the ASCII representation for each character. You can see the record of this contract’s launch in the corresponding database:
 
sqlite> select * from contracts;
1|hello|{"contract_context":{"name":"hello","variables":{},"functions":{}}}
sqlite> select * from type_analysis_table;
1|hello|{"private_function_types":{},"variable_types":{},"public_function_types":{},"read_only_function_types":{},"map_types":{}}
sqlite>

 
Language rules and limitations
 
 
The Clarity smart contract has the following limitations:
 
 
  • The only atomic types are booleans, integers, fixed length buffers, and principals
  • Recursion is illegal and there is no lambda function.
  • Looping may only be performed via map, filter, or fold
  • There is support for lists of the atomic types, however, the only variable length lists in the language appear as function inputs; There is no support for list operations like append or join.
  • Variables are created via let binding and there is no support for mutating functions like set.

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Continue Read »
Clarity is Blockstack’s smart contracting language for use with the Stacks blockchain. Clarity supports programmatic control over digital assets within the Stacks blockchain (for example, BNS names, Stacks tokens, and so forth). This section discusses the following topics:


Who should use smart contracts?
Language and program design
The coding environment
Basic building blocks of Clarity contracts
hello-world example
Language rules and limitations


 
Who should use smart contracts?
 
 
You can use Clarity to write standalone contracts or to write contracts that are part of decentralized applications (DApps) you write with the blockstack.js library. Smart contracts allow two parties to exchange anything of value (money, property, shares), in an automated, auditable, and secure way without the services of a middleman. Nick Szabo introduced the canonical metaphor for smart contracts, a vending machine.

In Nick Szabo’s metaphor, the vending machine is the smart contract. The buyer and machine owner are the two parties. A vending machine executes a set of hard-coded actions when the buyer engages with it. The machine displays the items and their prices. A buyer enters money into the machine which determines if the amount fails to mee, meets, or exceeds an item’s price. Based on the amount, the machine asks for more money, dispenses an item, or dispenses and item and change.

Not every application requires smart contracts. If you are not sure or are new to smart contracts concepts, you should read ]a good general explanation of smart contracts[/url] before working with Clarity.
 
 
Language and program design
 
Clarity differs from most other smart contract languages in two essential ways:
 
  • The language is not intended to be compiled.
  • The language is not Turing complete.

 
These differences allow for static analysis of programs to determine properties like runtime cost and data usage.

A Clarity smart contract is composed of two parts — a data-space and a set of functions. Only the associated smart contract may modify its corresponding data-space on the blockchain. Functions are private unless they are defined as public functions. Users call smart contracts’ public functions by broadcasting a transaction on the blockchain which invokes the public function.

Contracts can also call public functions from other smart contracts. The ability to do a static analysis of a smart contract allows a user to determine dependency between contracts.
 
 
The coding environment
 
Clarity is a list processing (LISP) language, as such it is not compiled. Omitting compilation prevents the possibility of error or bugs introduced at the compiler level. You can write Clarity smart contract programs on any operating system with a text editor. You can use any editor you are comfortable with such as Atom, Vim, or even Notepad. The Clarity files you create with an editor have a .clar extension.

Clarity is in pre-release and does not yet directly interact with the live Stacks blockchain. For the pre-release period you need a test environment to run Clarity contracts. Blockstack provides a Docker image called clarity-developer-preview that you can use or you can build a test environment locally from code. Either the Docker image or a local environment is sufficient for testing Clarity programming for standalone contracts.

You use the clarity-cli command line to check, launch, and execute standalone Clarity contracts. You can use this same command line to create simulate mining Stacks and inspecting a blockchain.

Blockstack expects that some decentralized applications (DApp) will want to make use of Clarity contracts as part of their applications. For this purpose, you should use the Clarity SDK, also in pre-release. The SDK is a development environment, testing framework, and deployment tool. It provides a library for safe interactions with Clarity contracts from a DApp written with the blockstack.js library.
 
 
Basic building blocks of Clarity contracts
 
 
The basic building blocks of Clarity are atoms and lists. An atom is a number or string of contiguous characters. Some examples of atoms:
 
  • token-sender
  • 10000
  • SZ2J6ZY48GV1EZ5V2V5RB9MP66SW86PYKKQ9H6DPR

 
Atoms can be native functions, user-defined functions, variables, and values that appear in a program. Functions that mutate data by convention terminate with an ! exclamation point, for example the insert-entry! function.
 
A list is a sequences of atoms enclosed with () parentheses. Lists can contain other lists. Some examples of lists are:
 
  • (get-block-info time 10)
  • (and 'true 'false)
  • (is-none (get id (fetch-entry names-map (tuple (name \"blockstack\")))))

 
You can add comments to your Clarity contracts using ;; (double semi-colons). Both standalone and inline comments are supported.
 

;; Transfers tokens to a specified principal (define-public (transfer (recipient principal) (amount int)) (transfer! tx-sender recipient amount)) ;; returns: boolean
 
You use the clarity-cli command to check and launch a Clarity (.clar) program.
 
hello-world example
 
 
The easiest program to run in any language is a hello world program. In Clarity, you can write this hello-world.clar program.
(begin 
(print "hello world"))

This program defines a single hello-world expression that is excuted when the contract launches. The begin is a native Clarity function that evaluates the expressions input to it and returns the value of the last expression. Here there is a single print expression. Both the begin and the print are enclosed in ()parentheses.

For the pre-release, the Blockstack test environment includes the clarity-cli command for interacting with the contract and SQLite to support the data space. You create a SQLLite database to hold data related to Clarity contracts. This database simulates the blockchain by recording the contract activity.

You can’t run even an a hello-world program without first initializing a Clarity contract’s data space within the database. You can use the clarity-cli initialize command to set up the database.
 
clarity-cli initialize /data/db

 
This command initializes the db database which resides in the /data directory of the container. You can name the database anything you like, the name db is not required. You can use SQLite to query this database:
 
sqlite> .open db
sqlite> .tables
contracts maps_table type_analysis_table
data_table simmed_block_table
sqlite>

After you initialize the contract’s data space, you can check a Clarity program for problems.
 
clarity-cli check ./hello.clar /data/db

As the name implies, the check ensures the contract definition passes a type check; passing programs will returns an exit code of 0 (zero). Once a contract passes a check, you launch it.
 
root@4224dd95b5f5:/data# clarity-cli launch hello ./hello.clar /data/db
Buffer(BuffData { data: [104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100] })
Contract initialized!

 
Because Clarity does not support simple strings, it stores the hello world string in a buffer. Printing out that string displays the ASCII representation for each character. You can see the record of this contract’s launch in the corresponding database:
 
sqlite> select * from contracts;
1|hello|{"contract_context":{"name":"hello","variables":{},"functions":{}}}
sqlite> select * from type_analysis_table;
1|hello|{"private_function_types":{},"variable_types":{},"public_function_types":{},"read_only_function_types":{},"map_types":{}}
sqlite>

 
Language rules and limitations
 
 
The Clarity smart contract has the following limitations:
 
 
  • The only atomic types are booleans, integers, fixed length buffers, and principals
  • Recursion is illegal and there is no lambda function.
  • Looping may only be performed via map, filter, or fold
  • There is support for lists of the atomic types, however, the only variable length lists in the language appear as function inputs; There is no support for list operations like append or join.
  • Variables are created via let binding and there is no support for mutating functions like set.

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  Collapse Read »

How to configure a Gaiahub on Amazon EC2,step by step tutorial

 
 
 
This teaches you how to run a Gaia hub on Amazon EC2. Amazon EC2 is an affordable and convenient cloud computing provider. This example uses Amazon EC2 together with an EB3 instance for file storage.
 


Prerequisites you need
Task 1: Launch an EC2 instance
Task 2: Test your Gaia server
Task 3: Configure a domain name
AWS hub tips and tricks

SSH into the Host
Displaying the docker services
Locations of key files
Restart services and reload certificates


 
 
Prerequisites you need
 
This procedure uses Amazon AWS to choose and configure an Amazon Machine Image (AMI) running a Gaia service. For this reason, you should have an AWS account on the Amazon AWS free tier, personal account, or corporate account. These instructions assume you are using a free tier account.

These instructions assume you have already created a free domain through the freenom service. If you have another domain, you can use that instead.

Finally, setting up the SSL certificates on your EC2 instance requires you to use the terminal command line on your workstation. Make sure you have the watch command installed using the which command.
$ which watch
/usr/local/bin/watch
If watch is not located, install it on your workstation.
 
 
Task 1: Launch an EC2 instance
 
1.Visit the AWS Free Tier page and choose Sign in to the Console.
 

 
 
 
2. Make sure your region is set to one close to you.
 

 
 
 
 
3.  Under Build a solution choose Launch a virtual machine.

The system opens the EC2 dashboard.

4.  Enter Blockstack Gaia in the search bar.

5.  The system finds AMIs in the Marketplace and the Community.

Choose Community AMIs.

The system displays the available Gaia hub images.
 
 
 
 
6. Select the most recent version of the image.

Each image name has this format:

blockstack-gaia_hub-STORAGETYPE-VERSION-hvm - ami-BUILDTAG

So, the blockstack-gaia_hub-ephemeral-0001.0.1-hvm - ami-0425cf8c91bb2d331image uses ephemeral storage, is at version 0001.0.1 and has the 0425cf8c91bb2d331 tag.

You can choose an image that uses ephemeral or EBS storage. The ephemeral storage is very small but free. Only choose this if you plan to test or use a personal hub. Otherwise, choose the AMI for elastic block storage (EBS).

After you select an image, the system displays Step 2: Choose an Instance Type page.
 
 

 
 
7.  Select t2.micro and choose Next: Configure Instance Details.
 
 
To configure instance details, do the following:

1. Select a VPC.

A default VPC is created with a free tier account. You can use this default VPC. Or you can choose another VPC. If you choose another VPC, ensure the Subnetvalue is set to a subnet reachable by a public IP.
Important: If you're using a private subnet, you should attach an elastic IP (EIP) to the VM. This EIP allows you to reboot the instance without worrying whether the address will reset. To attach an IP, press allocate new address and follow the instructions to attach the EIP to your new EC2 instance.

 
2. Set Protect against accidental termination.

If you terminate a Gaia instance, you lose all the data associated with it. Protection adds an extra step to terminating your Gaia instance.

3. Open the Advanced Details.

At this point, you are going to configure environment variables for your instance.

4. Paste the following into the Advanced Details.
{
"ignition": { "version": "2.2.0" },
"storage": {
"files": [{
"filesystem": "root",
"path": "/etc/environment",
"mode": 420,
"contents": {
"source": "data:application/octet-stream,API_KEY%3D<KEYPHRASE>%0ADOMAIN%3D<DOMAIN_NAME_VALUE>%0ASTAGING%3D<STAGING_VALUE>"
}
}]
}
}

5.  Replace the following values in the JSON.
 
 
VALUE DESCRIPTION
<KEYPHRASE> A phrase to pass when using the hub admin. For example, hubba is a fun key phrase.
<DOMAIN_NAME_VALUE> Your hub's domain name. For example, maryhub.mlis the domain name in this example.
<STAGING_VALUE>

Indicates what type of SSL to create, testing (`1`) or production (`0`). Set testing if you want to test without worrying about rate limiting. A testing cerificate is not secure.

For this tutorial, use production (`0`).
 
6.Check your Advanced Details they should look similar to the following:
{
"ignition": { "version": "2.2.0" },
"storage": {
"files": [{
"filesystem": "root",
"path": "/etc/environment",
"mode": 420,
"contents": {
"source": "data:application/octet-stream,API_KEY%3Dhubba%0ADOMAIN%3Dmaryhub.ml%0ASTAGING%3D0"
}
}]
}
}

 
 
At this point, you have configured your instance details.
 
8. Choose Next: Add Storage.
 

 
 
 
 
The storage is set according to the AMI you selected.

9. Choose Next: Add tags.

10. Add a Key of purpose with the Value gaia.
 
 
 11. Choose Next: Configure Security Group.

12. Create a security group with the following three types:
 
 
 
屏幕快照_2019-06-26_下午8.39_.06_.png


 13. Choose Review and Launch.

The system may warn you that the selection is not free tier eligible. You can ignore this for now.

14. Press Launch.

The system prompts you for a key pair.

15. Select Create a new keypair or Choose an existing key pair.

16. Select Launch Instances.
The system launches your instance.
 

 
During the launch process the machine starts and runs some initial setup processes. These processes take a few minutes depending on the network, typically launching does not take more than 10 minutes. While this is happening the instance Status Checks reflect the Initializing status.
 

 
 
 
 Task 2: Test your Gaia server
 
 
Now, you are ready to test your Gaia server and make sure it is up and running.

1.Visit the AWS Free Tier page and choose Sign in to the Console.

 
 
2. Choose All services > EC2.

The system displays the EC2 Dashboard.
 

 
 
3. Select Running Instances.

The system displays your running instances.

4. Locate your recently launched Gaia server.

Make sure the instance shows as running and Status Checks are complete. Completed status checks ensures the Gaia processes and service were started.

5. Select the Description tab.
 

 
 
 
 
 
6. Locate the IPv4 Public IP value.

7. Copy the IP and paste it in your browser.

You should see a message that your connection is not private.
8. Press Advanced.
  
 
9. Choose to proceed.

10. Extend the IP with the PUBLIC_IP/hub_info tag like so.
 You should see a response from your Gaia hub!

 
 
 
 
At this point, you should see a Not secure message in the browser. That’s because you haven’t yet enabled SSL certification. While HTTPS is not required simple to run the hub services, Blockstack will only connect to a hub and write to its storage over a valid HTTPS connection.
 
 
 
 
 
 
  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  
 
 
 
 
 
 
 
 
Continue Read »
 
 
 
This teaches you how to run a Gaia hub on Amazon EC2. Amazon EC2 is an affordable and convenient cloud computing provider. This example uses Amazon EC2 together with an EB3 instance for file storage.
 


Prerequisites you need
Task 1: Launch an EC2 instance
Task 2: Test your Gaia server
Task 3: Configure a domain name
AWS hub tips and tricks

SSH into the Host
Displaying the docker services
Locations of key files
Restart services and reload certificates


 
 
Prerequisites you need
 
This procedure uses Amazon AWS to choose and configure an Amazon Machine Image (AMI) running a Gaia service. For this reason, you should have an AWS account on the Amazon AWS free tier, personal account, or corporate account. These instructions assume you are using a free tier account.

These instructions assume you have already created a free domain through the freenom service. If you have another domain, you can use that instead.

Finally, setting up the SSL certificates on your EC2 instance requires you to use the terminal command line on your workstation. Make sure you have the watch command installed using the which command.
$ which watch
/usr/local/bin/watch
If watch is not located, install it on your workstation.
 
 
Task 1: Launch an EC2 instance
 
1.Visit the AWS Free Tier page and choose Sign in to the Console.
 

 
 
 
2. Make sure your region is set to one close to you.
 

 
 
 
 
3.  Under Build a solution choose Launch a virtual machine.

The system opens the EC2 dashboard.

4.  Enter Blockstack Gaia in the search bar.

5.  The system finds AMIs in the Marketplace and the Community.

Choose Community AMIs.

The system displays the available Gaia hub images.
 
 
 
 
6. Select the most recent version of the image.

Each image name has this format:

blockstack-gaia_hub-STORAGETYPE-VERSION-hvm - ami-BUILDTAG

So, the blockstack-gaia_hub-ephemeral-0001.0.1-hvm - ami-0425cf8c91bb2d331image uses ephemeral storage, is at version 0001.0.1 and has the 0425cf8c91bb2d331 tag.

You can choose an image that uses ephemeral or EBS storage. The ephemeral storage is very small but free. Only choose this if you plan to test or use a personal hub. Otherwise, choose the AMI for elastic block storage (EBS).

After you select an image, the system displays Step 2: Choose an Instance Type page.
 
 

 
 
7.  Select t2.micro and choose Next: Configure Instance Details.
 
 
To configure instance details, do the following:

1. Select a VPC.

A default VPC is created with a free tier account. You can use this default VPC. Or you can choose another VPC. If you choose another VPC, ensure the Subnetvalue is set to a subnet reachable by a public IP.
Important: If you're using a private subnet, you should attach an elastic IP (EIP) to the VM. This EIP allows you to reboot the instance without worrying whether the address will reset. To attach an IP, press allocate new address and follow the instructions to attach the EIP to your new EC2 instance.

 
2. Set Protect against accidental termination.

If you terminate a Gaia instance, you lose all the data associated with it. Protection adds an extra step to terminating your Gaia instance.

3. Open the Advanced Details.

At this point, you are going to configure environment variables for your instance.

4. Paste the following into the Advanced Details.
{
"ignition": { "version": "2.2.0" },
"storage": {
"files": [{
"filesystem": "root",
"path": "/etc/environment",
"mode": 420,
"contents": {
"source": "data:application/octet-stream,API_KEY%3D<KEYPHRASE>%0ADOMAIN%3D<DOMAIN_NAME_VALUE>%0ASTAGING%3D<STAGING_VALUE>"
}
}]
}
}

5.  Replace the following values in the JSON.
 
 
VALUE DESCRIPTION
<KEYPHRASE> A phrase to pass when using the hub admin. For example, hubba is a fun key phrase.
<DOMAIN_NAME_VALUE> Your hub's domain name. For example, maryhub.mlis the domain name in this example.
<STAGING_VALUE>

Indicates what type of SSL to create, testing (`1`) or production (`0`). Set testing if you want to test without worrying about rate limiting. A testing cerificate is not secure.

For this tutorial, use production (`0`).
 
6.Check your Advanced Details they should look similar to the following:
{
"ignition": { "version": "2.2.0" },
"storage": {
"files": [{
"filesystem": "root",
"path": "/etc/environment",
"mode": 420,
"contents": {
"source": "data:application/octet-stream,API_KEY%3Dhubba%0ADOMAIN%3Dmaryhub.ml%0ASTAGING%3D0"
}
}]
}
}

 
 
At this point, you have configured your instance details.
 
8. Choose Next: Add Storage.
 

 
 
 
 
The storage is set according to the AMI you selected.

9. Choose Next: Add tags.

10. Add a Key of purpose with the Value gaia.
 
 
 11. Choose Next: Configure Security Group.

12. Create a security group with the following three types:
 
 
 
屏幕快照_2019-06-26_下午8.39_.06_.png


 13. Choose Review and Launch.

The system may warn you that the selection is not free tier eligible. You can ignore this for now.

14. Press Launch.

The system prompts you for a key pair.

15. Select Create a new keypair or Choose an existing key pair.

16. Select Launch Instances.
The system launches your instance.
 

 
During the launch process the machine starts and runs some initial setup processes. These processes take a few minutes depending on the network, typically launching does not take more than 10 minutes. While this is happening the instance Status Checks reflect the Initializing status.
 

 
 
 
 Task 2: Test your Gaia server
 
 
Now, you are ready to test your Gaia server and make sure it is up and running.

1.Visit the AWS Free Tier page and choose Sign in to the Console.

 
 
2. Choose All services > EC2.

The system displays the EC2 Dashboard.
 

 
 
3. Select Running Instances.

The system displays your running instances.

4. Locate your recently launched Gaia server.

Make sure the instance shows as running and Status Checks are complete. Completed status checks ensures the Gaia processes and service were started.

5. Select the Description tab.
 

 
 
 
 
 
6. Locate the IPv4 Public IP value.

7. Copy the IP and paste it in your browser.

You should see a message that your connection is not private.
8. Press Advanced.
  
 
9. Choose to proceed.

10. Extend the IP with the PUBLIC_IP/hub_info tag like so.
 You should see a response from your Gaia hub!

 
 
 
 
At this point, you should see a Not secure message in the browser. That’s because you haven’t yet enabled SSL certification. While HTTPS is not required simple to run the hub services, Blockstack will only connect to a hub and write to its storage over a valid HTTPS connection.
 
 
 
 
 
 
  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  
 
 
 
 
 
 
 
  Collapse Read »

How Gaiahub Storage write and read

Once a user authenticates and a DApp obtains authentication, the application interacts with Gaia through the blockstack.js library. There are two simple methods for working with data in Gaia hub: the putFile() and getFile() methods. This section goes into greater detail about the methods, how they interact with a hub, and how to use them.
 
Write-to and Read-from URL Guarantees
 
 
Gaia is built on a driver model that supports many storage services. So, with very few lines of code, you can interact with providers on Amazon S3, Dropbox, and so forth. The simple getFile and putFile interfaces are kept simple because Blockstack assumes and wants to encourage a community of open-source-data-management libraries.

The performance and simplicity-oriented guarantee of the Gaia specification is that when an application submits a write-to  URL, the application is guaranteed to be able to read from the https://myreads.com/foo/bar URL. Note that, while the prefix in the write-to url (for example,myhub.service.org/store) and the read-from URL (https://myreads.com) are different, the foo/bar suffixes are the same.Consistent, identical suffixes allow an application to know exactly where a written file can be read from, given the read prefix. The Gaia service defines a hub_info endpoint to obtain that read prefix:]https://myhub.service.org/store/foo/bar URL, the application is guaranteed to be able to read from the https://myreads.com/foo/bar URL. Note that, while the prefix in the write-to url (for example,myhub.service.org/store) and the read-from URL (https://myreads.com) are different, the foo/bar suffixes are the same.Consistent, identical suffixes allow an application to know exactly where a written file can be read from, given the read prefix. The Gaia service defines a hub_info endpoint to obtain that read prefix:[/url]
 
GET /hub_info/

The endpoint returns a JSON object with a read_url_prefix, for example, if my service returns:
 
{ ...,
"read_url_prefix": "[url=https://myservice.org/read/"]https://myservice.org/read/"[/url]
}
The data be read with this getFile() and this address:
[url=https://myservice.org/read/1DHvWDj834zPAkwMhpXdYbCYh4PomwQfzz/0/profile.json]https://myservice.org/read/1DH ... .json[/url] 


The application is guaranteed that the profile is written with putFile() this request address:
 
[url=https://myservice.org/store/1DHvWDj834zPAkwMhpXdYbCYh4PomwQfzz/0/profile.json]https://myservice.org/store/1D ... .json[/url]

 
 
When you use the putFile() method it takes the user data and POSTs it to the user’s Gaia storage hub. The data POSTs directly to the hub, the blockchain is not used and no data is stored there. The limit on file upload is currently 25mb.
 
Address-based access-control
 
Access control in a Gaia storage hub is performed on a per-address basis. Writes to URLs /store/<address>/<file> are allowed only if the writer can demonstrate that they control that address. This is achieved via the authentication token which is a message signed by the private key associated with that address. The message itself is a challenge text, returned via the /hub_info/ endpoint.
 
Continue Read »
Once a user authenticates and a DApp obtains authentication, the application interacts with Gaia through the blockstack.js library. There are two simple methods for working with data in Gaia hub: the putFile() and getFile() methods. This section goes into greater detail about the methods, how they interact with a hub, and how to use them.
 
Write-to and Read-from URL Guarantees
 
 
Gaia is built on a driver model that supports many storage services. So, with very few lines of code, you can interact with providers on Amazon S3, Dropbox, and so forth. The simple getFile and putFile interfaces are kept simple because Blockstack assumes and wants to encourage a community of open-source-data-management libraries.

The performance and simplicity-oriented guarantee of the Gaia specification is that when an application submits a write-to  URL, the application is guaranteed to be able to read from the https://myreads.com/foo/bar URL. Note that, while the prefix in the write-to url (for example,myhub.service.org/store) and the read-from URL (https://myreads.com) are different, the foo/bar suffixes are the same.Consistent, identical suffixes allow an application to know exactly where a written file can be read from, given the read prefix. The Gaia service defines a hub_info endpoint to obtain that read prefix:]https://myhub.service.org/store/foo/bar URL, the application is guaranteed to be able to read from the https://myreads.com/foo/bar URL. Note that, while the prefix in the write-to url (for example,myhub.service.org/store) and the read-from URL (https://myreads.com) are different, the foo/bar suffixes are the same.Consistent, identical suffixes allow an application to know exactly where a written file can be read from, given the read prefix. The Gaia service defines a hub_info endpoint to obtain that read prefix:[/url]
 
GET /hub_info/

The endpoint returns a JSON object with a read_url_prefix, for example, if my service returns:
 
{ ...,
"read_url_prefix": "[url=https://myservice.org/read/"]https://myservice.org/read/"[/url]
}
The data be read with this getFile() and this address:
[url=https://myservice.org/read/1DHvWDj834zPAkwMhpXdYbCYh4PomwQfzz/0/profile.json]https://myservice.org/read/1DH ... .json[/url] 


The application is guaranteed that the profile is written with putFile() this request address:
 
[url=https://myservice.org/store/1DHvWDj834zPAkwMhpXdYbCYh4PomwQfzz/0/profile.json]https://myservice.org/store/1D ... .json[/url]

 
 
When you use the putFile() method it takes the user data and POSTs it to the user’s Gaia storage hub. The data POSTs directly to the hub, the blockchain is not used and no data is stored there. The limit on file upload is currently 25mb.
 
Address-based access-control
 
Access control in a Gaia storage hub is performed on a per-address basis. Writes to URLs /store/<address>/<file> are allowed only if the writer can demonstrate that they control that address. This is achieved via the authentication token which is a message signed by the private key associated with that address. The message itself is a challenge text, returned via the /hub_info/ endpoint.
  Collapse Read »

How to understand blockstack Authentication and Gaia

Blockstack authentication is a bearer token-based authentication system. From an app user’s perspective, login similar to third-party authentication techniques that they’re familiar with. For an app developer, the flow is unlike the typical client-server flow of centralized sign-in services such as OAuth. With Blockstack the authentication flow happens entirely client-side.
In this section, you get an overview of the authentication system and learn how Gaia fits into it.
 
Authentication and Gaia
 
A decentralized application (DApp) and the Blockstack Browser communicate during the authentication flow by passing back and forth two tokens. The requesting application sends the Blockstack Browser an authRequest token. Once a user approves a sign-in, the Blockstack Browser responds to the application with an authResponse token. These tokens are JSON Web Tokens, and they are passed via URL query strings.

When a user chooses to “Sign in with Blockstack” on your DApp, the redirectToSignIn()method sends the user to the Blockstack Browser. The browser responds with an authentication token and an app private key.
 

The app private key is application-specific. It is generated from the user’s identity address private key using the appDomain as input. This key is deterministic, meaning that for a given Blockstack ID and domain name, the same private key is generated each time. The app private key is securely shared with the app on each authentication and encrypted by the Blockstack Browser. The key serves three functions, it:
 
 
  • is used to create the credentials that give an app access to the Gaia hub storage bucket for that specific app
  • is used in the end-to-end encryption of files stored for the app on the user’s Gaia hub
  • serves as a cryptographic secret that apps can use to perform other cryptographic functions


When an application writes to a Gaia hub, the authentication token, key, and the data are passed to the Gaia hub.
 
 

 
The token ensures the DApp has the authorization to write to the hub on the user’s behalf.
 
 
 
 
Continue Read »
Blockstack authentication is a bearer token-based authentication system. From an app user’s perspective, login similar to third-party authentication techniques that they’re familiar with. For an app developer, the flow is unlike the typical client-server flow of centralized sign-in services such as OAuth. With Blockstack the authentication flow happens entirely client-side.
In this section, you get an overview of the authentication system and learn how Gaia fits into it.
 
Authentication and Gaia
 
A decentralized application (DApp) and the Blockstack Browser communicate during the authentication flow by passing back and forth two tokens. The requesting application sends the Blockstack Browser an authRequest token. Once a user approves a sign-in, the Blockstack Browser responds to the application with an authResponse token. These tokens are JSON Web Tokens, and they are passed via URL query strings.

When a user chooses to “Sign in with Blockstack” on your DApp, the redirectToSignIn()method sends the user to the Blockstack Browser. The browser responds with an authentication token and an app private key.
 

The app private key is application-specific. It is generated from the user’s identity address private key using the appDomain as input. This key is deterministic, meaning that for a given Blockstack ID and domain name, the same private key is generated each time. The app private key is securely shared with the app on each authentication and encrypted by the Blockstack Browser. The key serves three functions, it:
 
 
  • is used to create the credentials that give an app access to the Gaia hub storage bucket for that specific app
  • is used in the end-to-end encryption of files stored for the app on the user’s Gaia hub
  • serves as a cryptographic secret that apps can use to perform other cryptographic functions


When an application writes to a Gaia hub, the authentication token, key, and the data are passed to the Gaia hub.
 
 

 
The token ensures the DApp has the authorization to write to the hub on the user’s behalf.
 
 
 
  Collapse Read »

how gaiahub work as a decentralized storage architecture

The Blockstack Network stores application data using a storage system called Gaia. Transactional metadata is stored on the Blockstack blockchain and user application data is stored in Gaia storage. Storing data off of the blockchain ensures that Blockstack applications can provide users with high performance and high availability for data reads and writes without introducing central trust parties.
 


Understand Gaia in the Blockstack architecture
User control or how is Gaia decentralized?
Understand data storage
Gaia versus other storage systems


 
Understand Gaia in the Blockstack architecture
 

 
 
 Blockchains require consensus among large numbers of people, so they can be slow. Additionally, a blockchain is not designed to hold a lot of data. This means using a blockchain for every bit of data a user might write and store is expensive. For example, imagine if an application were storing every tweet in the chain.
 
Blockstack addresses blockchain performance problems using a layered approach. At the base of the system is a blockchain and the Blockstack Naming System (BNS). The blockchain governs ownership of names (identities) in the system, names such as domain names, usernames, and application names.
 
Names in Blockstack correspond to routing data in the OSI stack. The routing data is stored in the Atlas Peer Network, the second layer. Every core node that joins the Blockstack Network is able to obtain an entire copy of this routing data. Blockstack uses the routing data to associate names (usernames, domains, and application names) with a particular storage location.
 
The final layer is the Gaia Storage System. A Gaia system consists of a hub service and storage resource on a cloud software provider such as Azure, DigitalOcean, Amazon EC2, and so forth. Typically the compute resource and the storage resource belong to same cloud vendor. Gaia currently has driver support for S3 and Azure Blob Storage, but the driver model allows for other backend support as well.
 
Because Gaia stores application and user data off the blockchain, a Blockstack DApp is typically more performant than DApps created on other blockchains. Moreover, users choose where their data lives, and Gaia enables applications to access that user data via a uniform API. When the user logs in, the authentication process gives the application the URL of a Gaia hub, which then writes to storage on behalf of that user.
 
User control or how is Gaia decentralized?
 
 
A Gaia hub runs as a service which writes to data storage. The hub service writes to data storage by requiring a valid authentication token from a requestor. Typically, the hub service runs on a compute resource and the storage itself on separate, dedicated storage resource. Typically, both resources belong to the same cloud computing provider.
 
 

 
 
 Gaia’s approach to decentralization focuses on user control of data and its storage. If a user can choose which Gaia hub provider to use, then that choice is all the decentralization required to enable user-controlled applications.
The control of user data lies in the way that user data is accessed. When an application fetches a file data.txt for a given user alice.id, the lookup will follow these steps:
 
1. Fetch the zonefile for alice.id.
2. Read her profile URL from her zonefile.
3. Fetch Alice’s profile.
4. Verify that the profile is signed by alice.id’s key
5. Read the gaiaHubUrl (e.g. https://gaia.alice.org/) out of the profile
6. Fetch the file from https://gaia.alice.org/data.txt.
 
Because alice.id has access to her zonefile, she can change where her profile is stored. For example, she may do this if the current profile’s service or storage is compromised. To change where her profile is stored, she changes her Gaia hub URL to another Gaia hub URL from another hub provider. If Alice has sufficient compute and storage resources herself, she may run her own Gaia Storage System and bypass a commercial Gaia hub provider all together.
 
Note: Users with existing identities cannot yet migrate their data from one hub to another.

Applications writing directly on behalf of Alice do not need to perform a lookup. Instead, the Blockstack authentication flow provides Alice’s chosen application root URL to the application. This authentication flow is also within Alice’s control because Alice’s browser must generate the authentication response.
 
Understand data storage
 
A Gaia hub stores the written data exactly as given. It offers minimal guarantees about the data. It does not ensure that data is validly formatted, contains valid signatures, or is encrypted. Rather, the design philosophy is that these concerns are client-side concerns.

Client libraries (such as blockstack.js) are capable of providing these guarantees. Blockstack used a liberal definition of the end-to-end principle to guide this design decision.
 
 
 
 

 
 
Continue Read »
The Blockstack Network stores application data using a storage system called Gaia. Transactional metadata is stored on the Blockstack blockchain and user application data is stored in Gaia storage. Storing data off of the blockchain ensures that Blockstack applications can provide users with high performance and high availability for data reads and writes without introducing central trust parties.
 


Understand Gaia in the Blockstack architecture
User control or how is Gaia decentralized?
Understand data storage
Gaia versus other storage systems


 
Understand Gaia in the Blockstack architecture
 

 
 
 Blockchains require consensus among large numbers of people, so they can be slow. Additionally, a blockchain is not designed to hold a lot of data. This means using a blockchain for every bit of data a user might write and store is expensive. For example, imagine if an application were storing every tweet in the chain.
 
Blockstack addresses blockchain performance problems using a layered approach. At the base of the system is a blockchain and the Blockstack Naming System (BNS). The blockchain governs ownership of names (identities) in the system, names such as domain names, usernames, and application names.
 
Names in Blockstack correspond to routing data in the OSI stack. The routing data is stored in the Atlas Peer Network, the second layer. Every core node that joins the Blockstack Network is able to obtain an entire copy of this routing data. Blockstack uses the routing data to associate names (usernames, domains, and application names) with a particular storage location.
 
The final layer is the Gaia Storage System. A Gaia system consists of a hub service and storage resource on a cloud software provider such as Azure, DigitalOcean, Amazon EC2, and so forth. Typically the compute resource and the storage resource belong to same cloud vendor. Gaia currently has driver support for S3 and Azure Blob Storage, but the driver model allows for other backend support as well.
 
Because Gaia stores application and user data off the blockchain, a Blockstack DApp is typically more performant than DApps created on other blockchains. Moreover, users choose where their data lives, and Gaia enables applications to access that user data via a uniform API. When the user logs in, the authentication process gives the application the URL of a Gaia hub, which then writes to storage on behalf of that user.
 
User control or how is Gaia decentralized?
 
 
A Gaia hub runs as a service which writes to data storage. The hub service writes to data storage by requiring a valid authentication token from a requestor. Typically, the hub service runs on a compute resource and the storage itself on separate, dedicated storage resource. Typically, both resources belong to the same cloud computing provider.
 
 

 
 
 Gaia’s approach to decentralization focuses on user control of data and its storage. If a user can choose which Gaia hub provider to use, then that choice is all the decentralization required to enable user-controlled applications.
The control of user data lies in the way that user data is accessed. When an application fetches a file data.txt for a given user alice.id, the lookup will follow these steps:
 
1. Fetch the zonefile for alice.id.
2. Read her profile URL from her zonefile.
3. Fetch Alice’s profile.
4. Verify that the profile is signed by alice.id’s key
5. Read the gaiaHubUrl (e.g. https://gaia.alice.org/) out of the profile
6. Fetch the file from https://gaia.alice.org/data.txt.
 
Because alice.id has access to her zonefile, she can change where her profile is stored. For example, she may do this if the current profile’s service or storage is compromised. To change where her profile is stored, she changes her Gaia hub URL to another Gaia hub URL from another hub provider. If Alice has sufficient compute and storage resources herself, she may run her own Gaia Storage System and bypass a commercial Gaia hub provider all together.
 
Note: Users with existing identities cannot yet migrate their data from one hub to another.

Applications writing directly on behalf of Alice do not need to perform a lookup. Instead, the Blockstack authentication flow provides Alice’s chosen application root URL to the application. This authentication flow is also within Alice’s control because Alice’s browser must generate the authentication response.
 
Understand data storage
 
A Gaia hub stores the written data exactly as given. It offers minimal guarantees about the data. It does not ensure that data is validly formatted, contains valid signatures, or is encrypted. Rather, the design philosophy is that these concerns are client-side concerns.

Client libraries (such as blockstack.js) are capable of providing these guarantees. Blockstack used a liberal definition of the end-to-end principle to guide this design decision.
 
 
 
 

 
  Collapse Read »

What is blockstack decentralized computing?

Decentralized computing has these attributes:
 
  • Personal keys for a digital life. Users will have keys that unlock all their software interactions, email, subscriptions, and social. These keys are in users’ hands and under their control similar to physical keys (in some cases they are physical). Corporations no longer create or manage these keys.

 
  • Security is a first-class concern. Users want systems that protect both their identity and the data associated with that identity — health, application, and relationships.

 
  • Convenient and auditable. Applications will be readily available as cloud applications are today but will be written with open protocols and code that allow them to be audited.

 
  • Innovation focused. The code and data in a decentralized computing lacks corporate and other boundaries, as a result, a global workforce can easily contribute and benefit from them.

 
 
Blockstack technology is a shift in how people use software, create it, and benefit from the internet. It puts people back in control of the computing systems that manage today’s world.
 
Continue Read »
Decentralized computing has these attributes:
 
  • Personal keys for a digital life. Users will have keys that unlock all their software interactions, email, subscriptions, and social. These keys are in users’ hands and under their control similar to physical keys (in some cases they are physical). Corporations no longer create or manage these keys.

 
  • Security is a first-class concern. Users want systems that protect both their identity and the data associated with that identity — health, application, and relationships.

 
  • Convenient and auditable. Applications will be readily available as cloud applications are today but will be written with open protocols and code that allow them to be audited.

 
  • Innovation focused. The code and data in a decentralized computing lacks corporate and other boundaries, as a result, a global workforce can easily contribute and benefit from them.

 
 
Blockstack technology is a shift in how people use software, create it, and benefit from the internet. It puts people back in control of the computing systems that manage today’s world.
  Collapse Read »

The tutorial docs on how to run a Blockstack Core Node

Before doing anything, you should configure your Blockstack Core node.
 
$ blockstack-core configure

 It is safe to accept all defaults. It will generate some configuration state in ~/.blockstack-server/.
Because each Blockstack Core node maintains a full copy of the network state locally, it will need to synchronize its state with the Bitcoin blockchain when it starts for the first time. This can take days. To overcome this, we run some "fast-sync" servers that will serve a new Blockstack Core node a recent snapshot of the network state. Fast-sync only takes a few minutes.
To start up a Blockstack Core node from a snapshot, you should run
 
$ blockstack-core --debug fast_sync

 By default, it will pull a snapshot from http://fast-sync.blockstack.org/snapshot.bsk and use a built-in public key to verify its authenticity. It will populate your ~/.blockstack-server/ directory with a recent snapshot of the network state (less than 24 hours old).
To start your Blockstack Core node, you should run
 
$ blockstack-core --debug start

 
This will start a Blockstack Core node in the background. We recommend passing the --debug flag so you will receive verbose output, which will help diagnose any problems you may have.
 You can find the node's log in ~/.blockstack-server/blockstack-server.log.

 
Continue Read »
Before doing anything, you should configure your Blockstack Core node.
 
$ blockstack-core configure

 It is safe to accept all defaults. It will generate some configuration state in ~/.blockstack-server/.
Because each Blockstack Core node maintains a full copy of the network state locally, it will need to synchronize its state with the Bitcoin blockchain when it starts for the first time. This can take days. To overcome this, we run some "fast-sync" servers that will serve a new Blockstack Core node a recent snapshot of the network state. Fast-sync only takes a few minutes.
To start up a Blockstack Core node from a snapshot, you should run
 
$ blockstack-core --debug fast_sync

 By default, it will pull a snapshot from http://fast-sync.blockstack.org/snapshot.bsk and use a built-in public key to verify its authenticity. It will populate your ~/.blockstack-server/ directory with a recent snapshot of the network state (less than 24 hours old).
To start your Blockstack Core node, you should run
 
$ blockstack-core --debug start

 
This will start a Blockstack Core node in the background. We recommend passing the --debug flag so you will receive verbose output, which will help diagnose any problems you may have.
 You can find the node's log in ~/.blockstack-server/blockstack-server.log.

  Collapse Read »

How to Install Blockstack Core on your local computer step by step

There are three supported methods to install Blockstack Core:
 
  • source
  • pip
  • docker

 
Install from Source:
 Before installing Blockstack Core from source, you will need to install libffi-dev and libssl-dev. Mac and Linux users can usually grab these packages from their respective package managers.
Once these dependencies are installed, you can install Blockstack Core from source via the included setup.py script, as follows:
 
$ git clone [url=https://github.com/blockstack/blockstack-core]https://github.com/blockstack/blockstack-core[/url]
$ cd blockstack-core
$ python2 ./setup.py build
$ sudo python2 ./setup.py install

 You can also use a virtualenv to install Blockstack Core in a non-system directory.
Install with pip:
 NOTE: Using pip is only supported for stable releases (i.e. master).
Blockstack is built against Python 2.7. You should use pip2 if you have it instead of pip. If you do not have pip2, you should verify that your pip is configured for Python 2.
 
On Mac:
 
# Install blockstack
$ pip install blockstack --upgrade
 
 
On CentOS 7 & RHEL:
 
# Install dependencies
$ yum install epel-release
$ yum install python-pip python-devel openssl-devel libffi-devel rng-tools gmp-devel zlib-devel

# Install blockstack
$ sudo pip install blockstack --upgrade

 
You will need to open ports TCP:6264 and TCP:6270. If you have trouble starting blockstack-core, you can try disabling SELinux and/or firewalld as follows:
 
# Disable SELinux
$ setenforce 0
$ sed -i --follow-symlinks 's/^SELINUX=.*/SELINUX=disabled/g' /etc/sysconfig/selinux && cat /etc/sysconfig/selinux
# Stop firewalld
$ systemctl stop firewalld && systemctl disable firewalld
 
 
On Debian & Ubuntu:
 # Install dependancies
$ sudo apt-get update && sudo apt-get install -y python-pip python-dev libssl-dev libffi-dev rng-tools libgmp3-dev
$ sudo pip install pyparsing


# Install blockstack
$ sudo pip install blockstack --upgrade

Install with docker:
 NOTE: Using docker is only supported for stable releases (i.e. master).
Another way to run blockstack-core is through docker. We provide per-commit image builds of this repository that are available on quay.io.
 
$ git clone [email protected]:blockstack/blockstack-core.git
$ cd blockstack-core
$ docker build -t blockstack-core:master .
 
# create directory to store Blockstack Core state
 
$ export BLOCKSTACK_DIR="/var/blockstack-core-data"
$ mkdir -p "$BLOCKSTACK_DIR"
$ docker run \
-v $BLOCKSTACK_DIR:/root/.blockstack-server \
-p 6264:6264 \
-p 6270:6270 \
blockstack-core:master

 
 These commands will fast-sync and run a Blockstack Core node in about 10 minutes. The state for the Blockstack Core node will be stored to $BLOCKSTACK_DIR. You can see the node's logs with docker logs -f or with tail -f "$BLOCKSTACK_DIR/blockstack-server.log".
Notes:
* This method is currently only fully supported on Linux.
* You will need sudo access to run the above scripts, and/or be a member of the docker group.
* You can run more than one instance of this setup per host. Allow at least 1 CPU core for each container
* To configure a different bitcoind node, you must edit your blockstack-server.ini file before running the ./docker-tools.sh init-* commands. After init-* has been run you must edit the data/core/server/blockstack-server.ini to change those settings.

 
Continue Read »
There are three supported methods to install Blockstack Core:
 
  • source
  • pip
  • docker

 
Install from Source:
 Before installing Blockstack Core from source, you will need to install libffi-dev and libssl-dev. Mac and Linux users can usually grab these packages from their respective package managers.
Once these dependencies are installed, you can install Blockstack Core from source via the included setup.py script, as follows:
 
$ git clone [url=https://github.com/blockstack/blockstack-core]https://github.com/blockstack/blockstack-core[/url]
$ cd blockstack-core
$ python2 ./setup.py build
$ sudo python2 ./setup.py install

 You can also use a virtualenv to install Blockstack Core in a non-system directory.
Install with pip:
 NOTE: Using pip is only supported for stable releases (i.e. master).
Blockstack is built against Python 2.7. You should use pip2 if you have it instead of pip. If you do not have pip2, you should verify that your pip is configured for Python 2.
 
On Mac:
 
# Install blockstack
$ pip install blockstack --upgrade
 
 
On CentOS 7 & RHEL:
 
# Install dependencies
$ yum install epel-release
$ yum install python-pip python-devel openssl-devel libffi-devel rng-tools gmp-devel zlib-devel

# Install blockstack
$ sudo pip install blockstack --upgrade

 
You will need to open ports TCP:6264 and TCP:6270. If you have trouble starting blockstack-core, you can try disabling SELinux and/or firewalld as follows:
 
# Disable SELinux
$ setenforce 0
$ sed -i --follow-symlinks 's/^SELINUX=.*/SELINUX=disabled/g' /etc/sysconfig/selinux && cat /etc/sysconfig/selinux
# Stop firewalld
$ systemctl stop firewalld && systemctl disable firewalld
 
 
On Debian & Ubuntu:
 # Install dependancies
$ sudo apt-get update && sudo apt-get install -y python-pip python-dev libssl-dev libffi-dev rng-tools libgmp3-dev
$ sudo pip install pyparsing


# Install blockstack
$ sudo pip install blockstack --upgrade

Install with docker:
 NOTE: Using docker is only supported for stable releases (i.e. master).
Another way to run blockstack-core is through docker. We provide per-commit image builds of this repository that are available on quay.io.
 
$ git clone [email protected]:blockstack/blockstack-core.git
$ cd blockstack-core
$ docker build -t blockstack-core:master .
 
# create directory to store Blockstack Core state
 
$ export BLOCKSTACK_DIR="/var/blockstack-core-data"
$ mkdir -p "$BLOCKSTACK_DIR"
$ docker run \
-v $BLOCKSTACK_DIR:/root/.blockstack-server \
-p 6264:6264 \
-p 6270:6270 \
blockstack-core:master

 
 These commands will fast-sync and run a Blockstack Core node in about 10 minutes. The state for the Blockstack Core node will be stored to $BLOCKSTACK_DIR. You can see the node's logs with docker logs -f or with tail -f "$BLOCKSTACK_DIR/blockstack-server.log".
Notes:
* This method is currently only fully supported on Linux.
* You will need sudo access to run the above scripts, and/or be a member of the docker group.
* You can run more than one instance of this setup per host. Allow at least 1 CPU core for each container
* To configure a different bitcoind node, you must edit your blockstack-server.ini file before running the ./docker-tools.sh init-* commands. After init-* has been run you must edit the data/core/server/blockstack-server.ini to change those settings.

  Collapse Read »

Blockusign- Secure Document Signing & Verification Powered by Blockchain

 

 
 
New Features:

(1) Import pdf's from Graphite Docs
(2) Save Digital Signatures to the Blockchain
(3) Verify signature on chain (Proof of Document Signing).
 
Blockusign official website:  https://blockusign.co
github https://github.com/ntheile/blockusign
 
how to use Blockusign? we have video tutorial now !
 
 


 
 
 
 
 
 
Continue Read »
 

 
 
New Features:

(1) Import pdf's from Graphite Docs
(2) Save Digital Signatures to the Blockchain
(3) Verify signature on chain (Proof of Document Signing).
 
Blockusign official website:  https://blockusign.co
github https://github.com/ntheile/blockusign
 
how to use Blockusign? we have video tutorial now !
 
 


 
 
 
 
 
  Collapse Read »

"Airbnb-style" also can be used for transporters in South Africa, the startup GetTruck make the booking time can be between 10 minutes to 2 hours.

Q1: Hi, Shailen, What's your education background, what were you working on before this startup gettruck.co.za. What's your work experience, Can you introduce your business to our users?

Back in 2017 i studied audio engineering, it was a 3 years course but i decided to drop out of college to pursue GetTruck full-time. 
I have very limited work experience, you can say GetTruck was my first job.

GetTruck is an online platform that aims to help clients who relocating homes find reliable transporters without the hassle of paperwork

Q2: How did you get into the transportation and programming world? How did that happen?

I have always had an interest in computing, i taught myself programming back in high school and fell in love with it ever since.

My father owns a transportation company called Mr Cheap Transport which deals with home removals and about 4 years back the company took a massive dip in revenue. That was all due to the digital disruption. 

GetTruck was a concept in order to solve most these issues within Mr Cheap Transport, basically i took the concept and made it reality by building the initial prototype.
Basically, i grew up in the industry and i understand how tough the transportation industry really is.

Q3:  What experience or idea inspires you to get started with gettruck.co.za and what does this mean to your potential users in South Africa? 

Growing up in the industry, very little people actually know how much effort goes into moving a home or flat. There are so many moving parts to it such as having a good workforce, quality drivers and so forth. 

There are a ton of home removals companies out there but a large majority of them don’t have any trained workforce and in some cases untrained drivers.

I am inspired to change this throughout the industry by providing those things to transporting companies and as well as providing excellent transporters to our clients.

Q4: How  GetTruck works? What are the services you can offer on your website? How did you find users who wanna buy your services? Why did drivers and transporters willing to use your services? How can you make transportation costs lower than before?

GetTruck works by a client who wants to move home or flat coming to the site and filling out our form. What we do is then send that move request to our network of transporters who are closest to the client’s area and they provide a quote on that move. The client will automatically receive the transporters quote.

They can choose to accept the quote and pay the booking fee online, once payment is confirmed, they will receive a calendar event and the transporter profile with full details. Both remain anonymous until booking is confirmed through payment.

Due to the nature of this, the booking time can be between 10 minutes to 2 hours. Depending on the network of transporting companies. Keep in mind that the industry average is 1 - 2 days, we have managed to bring that process down to an average of 30 minutes.




Q5: What are your thoughts on the current state of online transportation services in South Africa? How can your services help users?


Their are a few services that attempt to do an Uber-style home removals service but their are a few key issues with that model.
Instead of disrupting the industry, we intend on taking what exists and make it more manageable and formal. 



Q6:  How did you find your co-founders and employees? What's the story of how you set up your team?

At this point, my father is also a founder as he has a lot more experience with the industry. I am jumped on board to get the project rolling. So now it is mostly just myself that is working on growing the company as my father is way to busy working on an exit strategy for Mr Cheap Transport, so that he can work full time on GetTruck.
 





Q7: When you guys began to build this startup, What were the difficulties your team faced and how did you guys fix them?


There was a lot of confusion between my father and i between which model do we go for. A more Uber-style one or more of a Airbnb-style one. Personally i think this was the biggest challenge but at the end i made a convincing argument on why the Airbnb-style was a better fit at this point.


Q8: How did you get initial money to start the business? Did you raise some investment from angel investors like other companies?


We are actually self-funded. I don’t truly believe in the whole “funding-is-requirement” idea that the startup world makes it seem.


Q9: How did you attract new users to your website and scale your business?   What are the useful and practical operation methods you can share?

We do a lot of email marketing and we recently launched GetTruck News where users can read all about what’s happening at GetTruck.
We also do ads on Facebook, Google and so forth


Q10: How can you get drivers and transporters to your platform? How can you fix transaction disputes? Can you recommend one successful user example from your website? What did he get after he used your services? What is the link to it? 

The payment process is a very tricky area. We just add a markup to the transporter’s quote and the client pays us the markup in order to process the quote. Once paid the client and transporter receives the balance of what needs to be paid.


Q11: How did you grow your revenue? What's the story behind how you got your first revenue from clients?


Pretty simple, the selling point of GetTruck is that we get you a reliable transporter to move your home/flat goods without any hassle. Users love this, they absolutely dislike paperwork and want a quick and easy solution, so this fits into how we market to them



Q12: What is the advice do you have for newcomers who want to get into the area?


Focus on the customer, as you not dealing with their furniture. Items that they hold dear, if you show their goods as much love and care as they would. You will succeed in so many areas that transporting companies fail


Q13: What're your goals for your business?  Why do those goals are important for you?

Like i mentioned earlier, we intend on formalizing the industry. This is the end goal of GetTruck/ 


Q14: How do you keep learning? Where do you go to learn more?

I learn something new everyday. Being the CTO, i have to keep up with what’s happening in the tech space. I attend a large amount of meetup, i run a co-working space as well as i work a lot on open-source projects. I host the Vue.js in Cape Town meetup and do part-time lecturing on programming

I would say that meetups are the most important thing if you really want to connect with people and the understand the industry.







Q15: What's your biggest surprise over the last three, four years in the internet industry where you have been working? What happened that you didn't expect?

The internet is a massive place, their are so many things going on but the biggest surprise is just how big of a community the software space is! The software industry probably has the biggest community in the world and i am honored to be apart of it.
 





Q16: What's your plan for your business in the next months? What's your business roadmap for next year?

We intend on focusing on building revenue and make the client UX as smooth as possible, so a a lot of progressive enhancement 

Q17: Where can we know more official info about you and your companies?

We are still working on a transporter portal, but you can find out what’s happening at GetTruck News which is our very own blogging platform.





 
Continue Read »
Q1: Hi, Shailen, What's your education background, what were you working on before this startup gettruck.co.za. What's your work experience, Can you introduce your business to our users?

Back in 2017 i studied audio engineering, it was a 3 years course but i decided to drop out of college to pursue GetTruck full-time. 
I have very limited work experience, you can say GetTruck was my first job.

GetTruck is an online platform that aims to help clients who relocating homes find reliable transporters without the hassle of paperwork

Q2: How did you get into the transportation and programming world? How did that happen?

I have always had an interest in computing, i taught myself programming back in high school and fell in love with it ever since.

My father owns a transportation company called Mr Cheap Transport which deals with home removals and about 4 years back the company took a massive dip in revenue. That was all due to the digital disruption. 

GetTruck was a concept in order to solve most these issues within Mr Cheap Transport, basically i took the concept and made it reality by building the initial prototype.
Basically, i grew up in the industry and i understand how tough the transportation industry really is.

Q3:  What experience or idea inspires you to get started with gettruck.co.za and what does this mean to your potential users in South Africa? 

Growing up in the industry, very little people actually know how much effort goes into moving a home or flat. There are so many moving parts to it such as having a good workforce, quality drivers and so forth. 

There are a ton of home removals companies out there but a large majority of them don’t have any trained workforce and in some cases untrained drivers.

I am inspired to change this throughout the industry by providing those things to transporting companies and as well as providing excellent transporters to our clients.

Q4: How  GetTruck works? What are the services you can offer on your website? How did you find users who wanna buy your services? Why did drivers and transporters willing to use your services? How can you make transportation costs lower than before?

GetTruck works by a client who wants to move home or flat coming to the site and filling out our form. What we do is then send that move request to our network of transporters who are closest to the client’s area and they provide a quote on that move. The client will automatically receive the transporters quote.

They can choose to accept the quote and pay the booking fee online, once payment is confirmed, they will receive a calendar event and the transporter profile with full details. Both remain anonymous until booking is confirmed through payment.

Due to the nature of this, the booking time can be between 10 minutes to 2 hours. Depending on the network of transporting companies. Keep in mind that the industry average is 1 - 2 days, we have managed to bring that process down to an average of 30 minutes.




Q5: What are your thoughts on the current state of online transportation services in South Africa? How can your services help users?


Their are a few services that attempt to do an Uber-style home removals service but their are a few key issues with that model.
Instead of disrupting the industry, we intend on taking what exists and make it more manageable and formal. 



Q6:  How did you find your co-founders and employees? What's the story of how you set up your team?

At this point, my father is also a founder as he has a lot more experience with the industry. I am jumped on board to get the project rolling. So now it is mostly just myself that is working on growing the company as my father is way to busy working on an exit strategy for Mr Cheap Transport, so that he can work full time on GetTruck.
 





Q7: When you guys began to build this startup, What were the difficulties your team faced and how did you guys fix them?


There was a lot of confusion between my father and i between which model do we go for. A more Uber-style one or more of a Airbnb-style one. Personally i think this was the biggest challenge but at the end i made a convincing argument on why the Airbnb-style was a better fit at this point.


Q8: How did you get initial money to start the business? Did you raise some investment from angel investors like other companies?


We are actually self-funded. I don’t truly believe in the whole “funding-is-requirement” idea that the startup world makes it seem.


Q9: How did you attract new users to your website and scale your business?   What are the useful and practical operation methods you can share?

We do a lot of email marketing and we recently launched GetTruck News where users can read all about what’s happening at GetTruck.
We also do ads on Facebook, Google and so forth


Q10: How can you get drivers and transporters to your platform? How can you fix transaction disputes? Can you recommend one successful user example from your website? What did he get after he used your services? What is the link to it? 

The payment process is a very tricky area. We just add a markup to the transporter’s quote and the client pays us the markup in order to process the quote. Once paid the client and transporter receives the balance of what needs to be paid.


Q11: How did you grow your revenue? What's the story behind how you got your first revenue from clients?


Pretty simple, the selling point of GetTruck is that we get you a reliable transporter to move your home/flat goods without any hassle. Users love this, they absolutely dislike paperwork and want a quick and easy solution, so this fits into how we market to them



Q12: What is the advice do you have for newcomers who want to get into the area?


Focus on the customer, as you not dealing with their furniture. Items that they hold dear, if you show their goods as much love and care as they would. You will succeed in so many areas that transporting companies fail


Q13: What're your goals for your business?  Why do those goals are important for you?

Like i mentioned earlier, we intend on formalizing the industry. This is the end goal of GetTruck/ 


Q14: How do you keep learning? Where do you go to learn more?

I learn something new everyday. Being the CTO, i have to keep up with what’s happening in the tech space. I attend a large amount of meetup, i run a co-working space as well as i work a lot on open-source projects. I host the Vue.js in Cape Town meetup and do part-time lecturing on programming

I would say that meetups are the most important thing if you really want to connect with people and the understand the industry.







Q15: What's your biggest surprise over the last three, four years in the internet industry where you have been working? What happened that you didn't expect?

The internet is a massive place, their are so many things going on but the biggest surprise is just how big of a community the software space is! The software industry probably has the biggest community in the world and i am honored to be apart of it.
 





Q16: What's your plan for your business in the next months? What's your business roadmap for next year?

We intend on focusing on building revenue and make the client UX as smooth as possible, so a a lot of progressive enhancement 

Q17: Where can we know more official info about you and your companies?

We are still working on a transporter portal, but you can find out what’s happening at GetTruck News which is our very own blogging platform.





  Collapse Read »

Graphite Publishing is a decentralized blogging platform with full site design in addition to authoring tools.


 
 
 
 
What the  founder said:


My name is Justin Hunter and I'm the creator of Graphite Publishing. This app was a fun little side project that extended from my main work as the founder of Graphite, a decentralized and encrypted productivity suite.

I've told this story a million times, but it's always worth telling again , I did not grow up wanting to be a developer. I grew up wanting to be a writer. I started blogging when I was young, wrote short fiction, wrote novels. I received my MFA in creative writing. And about the time I was finishing my graduate program, I started worrying about where I was storing my writing (Google Docs at the time). So I set out to build a system where I could experience the same convenience as Google Docs, but know that I actually owned my data, not Google. Graphite Publishing is an extension of that same desire.

Sure, you can self-host a WordPress or Ghost blog, but in the end, you are still relying on the security of the hosting provider you choose. If there is a breach, you in-progress content (whether you ever intended to publish it or not) would be available to the world. With Graphite Publishing, your in-progress content is encrypted with encryption keys that you, and you alone, own. You can choose to use the free, default storage or you can connect your own storage hub for your content. In either case, if the hub you are using is ever breached, you in-progress content is still secure because it's encrypted and only you can decrypt it.

Ok, enough about that! Let's talk features. Here's what you get with Graphite Publishing:

 
  • Rich text editor for your blog posts (with full HTML editing if you want to get fancy with your designs)
  • Focus mode allows you to enter a full-screen view with no toolbar and just your words
  • Night mode gives you a dark background for those nights of peacefully writing
  • An HTML editor for designing your site and your blog posts for a truly custom experience
  • Encryption of everything until you publish it and say the world can see it
  • Custom back-end branding including your account name or logo instead of a Graphite Publishing logo
  • Decentralized identity anchored to the bitcoin blockchain (but don't worry, it's not complex and happens behind the scenes)
  • True ownership of your content (like owning a house instead of renting)


This is still very much a beta product, but I hope you'll give it a shot and provide feedback. There are sure to be bugs and there is a lot on the roadmap including:
 
  • Team publications
  • Custom domains
  • Integrations (both inbound and out)

 
 
Graphite Publishing official website:      https://publishing.graphitedocs.com/
github :     https://github.com/Graphite-Do ... shing
Continue Read »

 
 
 
 
What the  founder said:


My name is Justin Hunter and I'm the creator of Graphite Publishing. This app was a fun little side project that extended from my main work as the founder of Graphite, a decentralized and encrypted productivity suite.

I've told this story a million times, but it's always worth telling again , I did not grow up wanting to be a developer. I grew up wanting to be a writer. I started blogging when I was young, wrote short fiction, wrote novels. I received my MFA in creative writing. And about the time I was finishing my graduate program, I started worrying about where I was storing my writing (Google Docs at the time). So I set out to build a system where I could experience the same convenience as Google Docs, but know that I actually owned my data, not Google. Graphite Publishing is an extension of that same desire.

Sure, you can self-host a WordPress or Ghost blog, but in the end, you are still relying on the security of the hosting provider you choose. If there is a breach, you in-progress content (whether you ever intended to publish it or not) would be available to the world. With Graphite Publishing, your in-progress content is encrypted with encryption keys that you, and you alone, own. You can choose to use the free, default storage or you can connect your own storage hub for your content. In either case, if the hub you are using is ever breached, you in-progress content is still secure because it's encrypted and only you can decrypt it.

Ok, enough about that! Let's talk features. Here's what you get with Graphite Publishing:

 
  • Rich text editor for your blog posts (with full HTML editing if you want to get fancy with your designs)
  • Focus mode allows you to enter a full-screen view with no toolbar and just your words
  • Night mode gives you a dark background for those nights of peacefully writing
  • An HTML editor for designing your site and your blog posts for a truly custom experience
  • Encryption of everything until you publish it and say the world can see it
  • Custom back-end branding including your account name or logo instead of a Graphite Publishing logo
  • Decentralized identity anchored to the bitcoin blockchain (but don't worry, it's not complex and happens behind the scenes)
  • True ownership of your content (like owning a house instead of renting)


This is still very much a beta product, but I hope you'll give it a shot and provide feedback. There are sure to be bugs and there is a lot on the roadmap including:
 
  • Team publications
  • Custom domains
  • Integrations (both inbound and out)

 
 
Graphite Publishing official website:      https://publishing.graphitedocs.com/
github :     https://github.com/Graphite-Do ... shing Collapse Read »

Blockvault - Decentralized password manager for teams on Blockstack

 

 
 
 
What the  founder said:


You're now wondering what makes BLOCKVAULT different from all the other password managers?

The short answer is: it's enhanced by the power of Blockstack.


Blockstack is a suit of tools to build DApps that offers 3 major advantages: Authentication, Encryption and Distributed Storage. On the Blockstack ecosystem users keep a single universal identity (a combination of username and key) registered directly on Bitcoin’s blockchain. All data associated with that identity stays with it, this means applications or central authorities do not keep or control access to your data. On top of that, users decide where to store their data and which applications can read or write to your.




This makes BLOCKVAULT:
  • Secure: the app runs exclusively on your device (client-side). There are no central servers that can be hacked or breached.
  • Decentralized: you control where your data is hosted. We do not store or replicate user data.
  • Encrypted: your data is end-to-end encrypted with keys that only you hold.
  • Shareable: be sure that only you and your teammates have access to your passwords and logins.



Give it a try and fire away any questions you may have in the comments.
 
Blockvault official website:  https://blockvault.site/
Continue Read »
 

 
 
 
What the  founder said:


You're now wondering what makes BLOCKVAULT different from all the other password managers?

The short answer is: it's enhanced by the power of Blockstack.


Blockstack is a suit of tools to build DApps that offers 3 major advantages: Authentication, Encryption and Distributed Storage. On the Blockstack ecosystem users keep a single universal identity (a combination of username and key) registered directly on Bitcoin’s blockchain. All data associated with that identity stays with it, this means applications or central authorities do not keep or control access to your data. On top of that, users decide where to store their data and which applications can read or write to your.




This makes BLOCKVAULT:
  • Secure: the app runs exclusively on your device (client-side). There are no central servers that can be hacked or breached.
  • Decentralized: you control where your data is hosted. We do not store or replicate user data.
  • Encrypted: your data is end-to-end encrypted with keys that only you hold.
  • Shareable: be sure that only you and your teammates have access to your passwords and logins.



Give it a try and fire away any questions you may have in the comments.
 
Blockvault official website:  https://blockvault.site/ Collapse Read »

Encrypt My Photos-End-to-End Encrypted Photo Storage


 

 
 
 
 
 
Encrypt My Photos official website: https://encryptmyphotos.com/
github: https://github.com/Pierre-Gilles/encryptmyphotos
 
 
Key Features

Drag & Drop your pictures to upload them
End-To-End Encryption thanks to Blockstack technology
Delete all files if you want to reset your account


Stack

Encrypt My Photos is fully open-source and use open-source dependencies:

Blockstack for authentication and storage.
Preact as front-end library. It's a tiny version of React with the same API.
Preact-router for app routing.
immutability-helper to mutate a copy of data without changing the original source




FAQ
 
  • What is Encrypt My Photos


Encrypt my Photos is an app which allows you to store pictures in the cloud (like Google Photos), but in a privacy-friendly and decentralized way thanks to Blockstack technology.
 
  • Can I delete my data


Yes. If you wish to start again and clean your account, you can wipe all pictures stored.
 
  • How much storage can I use


We use Blockstack Gaia storage to store files, so there is no limit in the amount of pictures you can upload. It's unlimited!
 
  • Is it really free


Yes! Encrypt My Photos is sponsored by Blockstack App Mining challenge, therefore we don't charge our user and the app remains free to use!
 
  • Why do I need to create a Blockstack account


As we use Blockstack technology to store pictures, you need to create an account on their platform to use Gaia storage. You can read more on their website about how their technology works.
 
  • What is different from Google Photos or other alternative


Both products allows users to store pictures online, but our technology is completely different. We respect the privacy of our users by encrypting their picture before storing them online. It means that if you store pictures in our app, you and only you will be able to see them. We won't even know that you are storing pictures on our platform, because we don't have any centralized database.
Continue Read »

 

 
 
 
 
 
Encrypt My Photos official website: https://encryptmyphotos.com/
github: https://github.com/Pierre-Gilles/encryptmyphotos
 
 
Key Features

Drag & Drop your pictures to upload them
End-To-End Encryption thanks to Blockstack technology
Delete all files if you want to reset your account


Stack

Encrypt My Photos is fully open-source and use open-source dependencies:

Blockstack for authentication and storage.
Preact as front-end library. It's a tiny version of React with the same API.
Preact-router for app routing.
immutability-helper to mutate a copy of data without changing the original source




FAQ
 
  • What is Encrypt My Photos


Encrypt my Photos is an app which allows you to store pictures in the cloud (like Google Photos), but in a privacy-friendly and decentralized way thanks to Blockstack technology.
 
  • Can I delete my data


Yes. If you wish to start again and clean your account, you can wipe all pictures stored.
 
  • How much storage can I use


We use Blockstack Gaia storage to store files, so there is no limit in the amount of pictures you can upload. It's unlimited!
 
  • Is it really free


Yes! Encrypt My Photos is sponsored by Blockstack App Mining challenge, therefore we don't charge our user and the app remains free to use!
 
  • Why do I need to create a Blockstack account


As we use Blockstack technology to store pictures, you need to create an account on their platform to use Gaia storage. You can read more on their website about how their technology works.
 
  • What is different from Google Photos or other alternative


Both products allows users to store pictures online, but our technology is completely different. We respect the privacy of our users by encrypting their picture before storing them online. It means that if you store pictures in our app, you and only you will be able to see them. We won't even know that you are storing pictures on our platform, because we don't have any centralized database. Collapse Read »

Sigle -A beautiful, decentralized and open source blog maker

 

 

 

 
 
 
 
Sigle is free to use and open source, it allows you to create beautiful and decentralized blogs. We built it with blockstack so it means that you own your data, we only rely on Gaia for the storage so you can decide to use the default blocktack storage or run your own storage (S3, Dropbox and more).

When you create a draft the story is private, it means that only you can decrypt it and other people can't see it. If you decide to publish it will be stored decrypted so you can share the link and everybody will be able to see it!

A lot of new features are coming in the next weeks :

- New themes
- Improved experience
- More settings
- SEO
- And more!


Since it's an open source project if you want to propose a new feature or report a bug feel free to open an issue on our github
 
Sigle official website: https://www.sigle.io/
github: https://github.com/pradel/sigle
 
 
 
Continue Read »
 

 

 

 
 
 
 
Sigle is free to use and open source, it allows you to create beautiful and decentralized blogs. We built it with blockstack so it means that you own your data, we only rely on Gaia for the storage so you can decide to use the default blocktack storage or run your own storage (S3, Dropbox and more).

When you create a draft the story is private, it means that only you can decrypt it and other people can't see it. If you decide to publish it will be stored decrypted so you can share the link and everybody will be able to see it!

A lot of new features are coming in the next weeks :

- New themes
- Improved experience
- More settings
- SEO
- And more!


Since it's an open source project if you want to propose a new feature or report a bug feel free to open an issue on our github
 
Sigle official website: https://www.sigle.io/
github: https://github.com/pradel/sigle
 
 
  Collapse Read »

Lannister- Encrypted personal wealth manager and financial planner

 


 
 
 
Here are the founder said: what Lannister is and why we built it.
 
  • Inspiration


We started building Lannister because we needed a way to keep track of our holdings both in crypto and fiat (banks, deposits, savings, etc). It was also fundamental to have security and privacy in mind. No central server that could compromise our identity and financial data.
 
  • What it does


Lannister allows anyone to keep track of their holdings, follow its progress and easily analyze their distribution. It's simple to use for anyone who wants to take control of their financial life.
 
  • Unique features


Convenient: crypto and fiat, all-in-one place (supporting now 12 fiat and 2 crypto currencies with more to come)

Secure: runs locally on your phone, supports biometric access, optionally syncs with secure end-to-end encryption and decentralized storage via Blockstack infrastructure

Open: completely open-source (.)[/url]
 
  • Platforms


We're building Lannister for iOS and web, though only iOS is available at the moment. Both platforms will be able to sync information via Blockstack's infrastructure and keep information securely stored.

Android is also coming in the next months.

 
  • Future plans

 
Besides releasing a web version, here's a list of some of the features we're planning:

- Predictions
- Retrospective analysis
- Financial goals and recommendations

Take a look at our roadmap to know more about these: https://github.com/orgs/lanniste...
 
  • Syncing with Blockstack. Why


Blockstack offers a suite of tools that allows users to have a single universal identity (a combination of username and key) registered directly on Bitcoin’s blockchain. All data associated with that identity stays with it, meaning applications or central authorities do not keep or control access to their data. All files on Blockstack are stored encrypted with users identity key. Data is end-to-end encrypted with this key that only the user holds and therefore it is impossible to decrypt the information stored in each file.
 
  • Final considerations:



We believe that users should have each day more control over their identity and data. In traditional applications the information and authentication system is closed behind companies’ servers. Today, we're beginning to have a set of tools at our disposal that makes it possible for users to still access their data anywhere without compromising their privacy and security.

With Lannister we're providing a way for users to access and manage all their financial data, in a platform they can trust, that is open-source and secure.


Give it a try and fire away any questions you may have in the comments.
 
 Lannister official website: https://lannister.capital/
github :  https://github.com/lannister-capital
 
 
 
 
 
 
Continue Read »
 


 
 
 
Here are the founder said: what Lannister is and why we built it.
 
  • Inspiration


We started building Lannister because we needed a way to keep track of our holdings both in crypto and fiat (banks, deposits, savings, etc). It was also fundamental to have security and privacy in mind. No central server that could compromise our identity and financial data.
 
  • What it does


Lannister allows anyone to keep track of their holdings, follow its progress and easily analyze their distribution. It's simple to use for anyone who wants to take control of their financial life.
 
  • Unique features


Convenient: crypto and fiat, all-in-one place (supporting now 12 fiat and 2 crypto currencies with more to come)

Secure: runs locally on your phone, supports biometric access, optionally syncs with secure end-to-end encryption and decentralized storage via Blockstack infrastructure

Open: completely open-source (.)[/url]
 
  • Platforms


We're building Lannister for iOS and web, though only iOS is available at the moment. Both platforms will be able to sync information via Blockstack's infrastructure and keep information securely stored.

Android is also coming in the next months.

 
  • Future plans

 
Besides releasing a web version, here's a list of some of the features we're planning:

- Predictions
- Retrospective analysis
- Financial goals and recommendations

Take a look at our roadmap to know more about these: https://github.com/orgs/lanniste...
 
  • Syncing with Blockstack. Why


Blockstack offers a suite of tools that allows users to have a single universal identity (a combination of username and key) registered directly on Bitcoin’s blockchain. All data associated with that identity stays with it, meaning applications or central authorities do not keep or control access to their data. All files on Blockstack are stored encrypted with users identity key. Data is end-to-end encrypted with this key that only the user holds and therefore it is impossible to decrypt the information stored in each file.
 
  • Final considerations:



We believe that users should have each day more control over their identity and data. In traditional applications the information and authentication system is closed behind companies’ servers. Today, we're beginning to have a set of tools at our disposal that makes it possible for users to still access their data anywhere without compromising their privacy and security.

With Lannister we're providing a way for users to access and manage all their financial data, in a platform they can trust, that is open-source and secure.


Give it a try and fire away any questions you may have in the comments.
 
 Lannister official website: https://lannister.capital/
github :  https://github.com/lannister-capital
 
 
 
 
 
  Collapse Read »

BlackHole File Transfer- faster than dropbox! Blockchain-based file transfer. Designed for everyday use.

 

 
BlackHole 1.0 , a platform for fast and private file transfer that works over blockchain technology.

As we keep hearing about data breach news of big companies like Dropbox or WhatsApp, it is harder for us to keep trusting them with our file and personal data, and it made us think about finding a better way. We think the best way to keep data secure is not having them in the first place. That’s why we choose the server-less solution, in other word, blockchain.

The most challenging part for us was designing a blockchain app that doesn't look like a blockchain app! We wanted to make the transition from centralized to decentralized solution as smoothly as possible. That is where Blockstack comes in to help us with a secure and decentralized authentication service, working on Bitcoin blockchain.

BlackHole is a fully native app – no clunky Node.js –; as a result, it has so much less system usage (10MB of ram!) and great user experience. Being native also provides multiple layers of encryption with excellent performance. BlackHole lives in your menu bar and lets you send files with only one click.

Your shared file split into parts, encrypt, and then upload to a random hub of your choice. It gives you a private share link that plays the role of a key. No one can access the file without this link. Unlike traditional centralized services, BlackHole doesn't know about who, whom, what, and where the file shared! That’s the reason we name it BlackHole

Here is where BlackHole shines:

Secure as Crypto Money. Blockchain ,plus industry-standard AES CBC with 256 bits key ,plus PKCS7 padding pattern.

Data streaming. No need to waste time on uploading progress, links are generated and shareable instantly, and receiver can also see how uploading goes!

Designed for everyday use. Press Command/Ctrl + B on any file or folder, you now have a private share link in your clipboard. Hold the Shift key while doing this, and add your defined password as extra protection. If you are a mouse guy, you can drag-n-drop one or more files at the same time into the BlackHole tray icon as an alternative way.

Transfer compression. With the smart compressor along with multipart upload, it can save up to 90% of transfer time.

BlackHole is available for Windows and Mac, and more is on the way. Also, to hold our security claim, we released the source as open to anyone. Take a look at it in GitHub link.
 
official website:  https://blackhole.run
 
github source code: https://github.com/blackholeorganization 
 
Q&A:
  • What is BlackHole How much does it cost

 
 BlackHole is a file transfer application built on top of blockchain for the new internet. You can share any super security file with ease and be sure the data is yours forever. You can use BlackHole for free, with no storage or bandwidth limit, but for files bigger than 512 MB, there is an upcoming PLUS plan. You can signup for PLUS plan news here.
 
  •  How is BlackHole for everyday use

 
No need to organize files before sending, select any number of file or folders then upload them right from where they are with Cmd+B (or Ctrl+B if you are on Windows). Alternatively, you can drag-and-drop a file on the tray icon.
  •  Why does decentralization matter

 

Centralization often means providers are gaining access to your data without you knowing or approving. Decentralization makes that impossible. Read more about it here.
  • Where are my uploaded files


BlackHole encrypt the files and then send them to a random hub in your chooses provider. It came with a free unlimited provider, thanks to Blockstack, but you can change it to your own if you want. No matter what provider you are using, all the files will be encrypted anyway.
  • How do you protect my personal information

 
BlackHole operates a transparent, secure system based on IPFS and the blockchain. No matter what provider you are using, BlackHole will always encrypt everything using ECIES and AES256. It can only be decrypted by the specific receiving user's private key. And the code base is an open source project hosted on GitHub. You can check it out here.
 
  • How can I transfer a file with password protection

 
Press Cmd+Shift+B (or Ctrl+Shift+B if you are on Windows) on any selected file, then BlackHole will pop up and be waiting for your password. Alternatively, you can hold shift and drag-and-drop a file on the tray icon.
Continue Read »
 

 
BlackHole 1.0 , a platform for fast and private file transfer that works over blockchain technology.

As we keep hearing about data breach news of big companies like Dropbox or WhatsApp, it is harder for us to keep trusting them with our file and personal data, and it made us think about finding a better way. We think the best way to keep data secure is not having them in the first place. That’s why we choose the server-less solution, in other word, blockchain.

The most challenging part for us was designing a blockchain app that doesn't look like a blockchain app! We wanted to make the transition from centralized to decentralized solution as smoothly as possible. That is where Blockstack comes in to help us with a secure and decentralized authentication service, working on Bitcoin blockchain.

BlackHole is a fully native app – no clunky Node.js –; as a result, it has so much less system usage (10MB of ram!) and great user experience. Being native also provides multiple layers of encryption with excellent performance. BlackHole lives in your menu bar and lets you send files with only one click.

Your shared file split into parts, encrypt, and then upload to a random hub of your choice. It gives you a private share link that plays the role of a key. No one can access the file without this link. Unlike traditional centralized services, BlackHole doesn't know about who, whom, what, and where the file shared! That’s the reason we name it BlackHole

Here is where BlackHole shines:

Secure as Crypto Money. Blockchain ,plus industry-standard AES CBC with 256 bits key ,plus PKCS7 padding pattern.

Data streaming. No need to waste time on uploading progress, links are generated and shareable instantly, and receiver can also see how uploading goes!

Designed for everyday use. Press Command/Ctrl + B on any file or folder, you now have a private share link in your clipboard. Hold the Shift key while doing this, and add your defined password as extra protection. If you are a mouse guy, you can drag-n-drop one or more files at the same time into the BlackHole tray icon as an alternative way.

Transfer compression. With the smart compressor along with multipart upload, it can save up to 90% of transfer time.

BlackHole is available for Windows and Mac, and more is on the way. Also, to hold our security claim, we released the source as open to anyone. Take a look at it in GitHub link.
 
official website:  https://blackhole.run
 
github source code: https://github.com/blackholeorganization 
 
Q&A:
  • What is BlackHole How much does it cost

 
 BlackHole is a file transfer application built on top of blockchain for the new internet. You can share any super security file with ease and be sure the data is yours forever. You can use BlackHole for free, with no storage or bandwidth limit, but for files bigger than 512 MB, there is an upcoming PLUS plan. You can signup for PLUS plan news here.
 
  •  How is BlackHole for everyday use

 
No need to organize files before sending, select any number of file or folders then upload them right from where they are with Cmd+B (or Ctrl+B if you are on Windows). Alternatively, you can drag-and-drop a file on the tray icon.
  •  Why does decentralization matter

 

Centralization often means providers are gaining access to your data without you knowing or approving. Decentralization makes that impossible. Read more about it here.
  • Where are my uploaded files


BlackHole encrypt the files and then send them to a random hub in your chooses provider. It came with a free unlimited provider, thanks to Blockstack, but you can change it to your own if you want. No matter what provider you are using, all the files will be encrypted anyway.
  • How do you protect my personal information

 
BlackHole operates a transparent, secure system based on IPFS and the blockchain. No matter what provider you are using, BlackHole will always encrypt everything using ECIES and AES256. It can only be decrypted by the specific receiving user's private key. And the code base is an open source project hosted on GitHub. You can check it out here.
 
  • How can I transfer a file with password protection

 
Press Cmd+Shift+B (or Ctrl+Shift+B if you are on Windows) on any selected file, then BlackHole will pop up and be waiting for your password. Alternatively, you can hold shift and drag-and-drop a file on the tray icon. Collapse Read »

Forms.id is a simple, privacy-focused alternative to tools like Google Forms and Typeform.




 
 
 
 
 
 
Forms.id is a simple, privacy-focused alternative to tools like Google Forms and Typeform. Users no longer have to risk sharing their data with a centralized service and can ensure that the privacy of both the creator and the respondent is upheld.
 
Forms.id was built because owner was displeased with the business model of large software organizations : the sale of private, user data. Every piece of data that passes through Google's tools is a piece of data that can be sold or used to control and/or affect your attention. It is time for users to regain control of their data by using software that values them. Forms.id is powered by Blockstack, a technology stack that assists in just that. The tool allows users to create simple forms and surveys that can be shared with a simple link. All responses are encrypted and only the owner of the form can decrypt and view the data. Data can currently be exported to an Excel file.
 
 
official website:  https://forms.id/
 
 
Is this your app or product? ]Claim it now.[/url]
Continue Read »



 
 
 
 
 
 
Forms.id is a simple, privacy-focused alternative to tools like Google Forms and Typeform. Users no longer have to risk sharing their data with a centralized service and can ensure that the privacy of both the creator and the respondent is upheld.
 
Forms.id was built because owner was displeased with the business model of large software organizations : the sale of private, user data. Every piece of data that passes through Google's tools is a piece of data that can be sold or used to control and/or affect your attention. It is time for users to regain control of their data by using software that values them. Forms.id is powered by Blockstack, a technology stack that assists in just that. The tool allows users to create simple forms and surveys that can be shared with a simple link. All responses are encrypted and only the owner of the form can decrypt and view the data. Data can currently be exported to an Excel file.
 
 
official website:  https://forms.id/
 
 
Is this your app or product? ]Claim it now.[/url] Collapse Read »

My Portfolio Show: Farm Shop Project-farmlink

 

 
Project description:
 
I set up cakephp project in github, update mysql database, Debug and fix login error.http://shop.wmfarmlink.com/ 
 
 
Contant me:

Name: Miheretab Alemu Woldesenbet (Mr.)
Address:  Postal Code = 27413   Addis Ababa, Ethiopia
Email: [email protected]
My linkedin: https://www.linkedin.com/in/mi ... 08854


About me:

I have 9+ years of experience in web development, mobile development application. I have done many works with PHP and Java for web application especially with different MVC framework like CakePHP, Grails, Laravel, Ruby on Rails, CodeIgniter, Zend, Symfony, Yii and different CMS like concrete5, moodle, modX. I am highly experienced in any MVC Framework even with different programming languages. I am also internationally certified on Java. I have done android game application and android home widget application in Java.

I have experience with many programming language like Python especially Pylons and Django web application, Ruby especially Ruby on Rails web application, Java with Grails including script languages such as ajax, json, javascript, xml, rss, xslt and flex for active script language and with content management systems. I have been using sql server, mysql, oracle, mongodb and sqlite3 for database.

I have participated on National and International project. I have masters on Software Engineering.


Employment history:

  • Software Engineer | KAISEN LTD   August 2015 - November 2015     I worked CakePHP web application job here. 

 
  • Software Engineer | Apposit    July 2012 - April 2013     I worked as Software Engineer there, my main work was to develop web and mobile applications especially using Grails and Android. I have added some... more 

 
  • Programmer | Transport Minister   January 2012 - July 2012    My main work was to develop application and to test the application which is done by other Company. I have worked Library system using CakePHP which I have added as my portfolio here. I have also participated in national project which is developed for Transport Minister of Ethiopia          

 
Education:
  •  Master of Computer Applications (M.C.A.), Software Engineering | HiLCoE (High Level Computer Education) 2011 - 2013        
  • Bachelor of Engineering (B.Eng.), Computer engineering | Addis Ababa University    2005 - 2009

Continue Read »
 

 
Project description:
 
I set up cakephp project in github, update mysql database, Debug and fix login error.http://shop.wmfarmlink.com/ 
 
 
Contant me:

Name: Miheretab Alemu Woldesenbet (Mr.)
Address:  Postal Code = 27413   Addis Ababa, Ethiopia
Email: [email protected]
My linkedin: https://www.linkedin.com/in/mi ... 08854


About me:

I have 9+ years of experience in web development, mobile development application. I have done many works with PHP and Java for web application especially with different MVC framework like CakePHP, Grails, Laravel, Ruby on Rails, CodeIgniter, Zend, Symfony, Yii and different CMS like concrete5, moodle, modX. I am highly experienced in any MVC Framework even with different programming languages. I am also internationally certified on Java. I have done android game application and android home widget application in Java.

I have experience with many programming language like Python especially Pylons and Django web application, Ruby especially Ruby on Rails web application, Java with Grails including script languages such as ajax, json, javascript, xml, rss, xslt and flex for active script language and with content management systems. I have been using sql server, mysql, oracle, mongodb and sqlite3 for database.

I have participated on National and International project. I have masters on Software Engineering.


Employment history:

  • Software Engineer | KAISEN LTD   August 2015 - November 2015     I worked CakePHP web application job here. 

 
  • Software Engineer | Apposit    July 2012 - April 2013     I worked as Software Engineer there, my main work was to develop web and mobile applications especially using Grails and Android. I have added some... more 

 
  • Programmer | Transport Minister   January 2012 - July 2012    My main work was to develop application and to test the application which is done by other Company. I have worked Library system using CakePHP which I have added as my portfolio here. I have also participated in national project which is developed for Transport Minister of Ethiopia          

 
Education:
  •  Master of Computer Applications (M.C.A.), Software Engineering | HiLCoE (High Level Computer Education) 2011 - 2013        
  • Bachelor of Engineering (B.Eng.), Computer engineering | Addis Ababa University    2005 - 2009

Collapse Read »

Masijala (Ubandani)

 


 
 
Masijala - Baada ya Mzee Komeo kuzungushwa muda mrefu na Karani kuhusu faili lake aamua kuchukua hatua stahiki... Kijiji Studios present - Masijala
Continue Read »
 


 
 
Masijala - Baada ya Mzee Komeo kuzungushwa muda mrefu na Karani kuhusu faili lake aamua kuchukua hatua stahiki... Kijiji Studios present - Masijala Collapse Read »

How to send messages/emails or send tickets to Africalocals.com team?

There are two ways you can send messages/emails or send tickets to Africalocals.com team.Generally , you would get responses in 24 hours.
 
1. If you wanna your issues are showed on pulicly, you can use this method.
go to https://africalocals.com/%3F/p ... Bteam   And do it like this image  says.
 

 
 
 
 
2. If you wanna submit an issue ticket or send a private message to us, you can use this method
go to https://africalocals.com/%3F/p ... Bteam
and do it like this image says.
 

 
 
3. You can also send messages/email to our founder(he may cannot gives his responses in 24 hours), his page and private page address as follows:
 
 
https://africalocals.com/?/people/Sulayman
 
 
 
Continue Read »
There are two ways you can send messages/emails or send tickets to Africalocals.com team.Generally , you would get responses in 24 hours.
 
1. If you wanna your issues are showed on pulicly, you can use this method.
go to https://africalocals.com/%3F/p ... Bteam   And do it like this image  says.
 

 
 
 
 
2. If you wanna submit an issue ticket or send a private message to us, you can use this method
go to https://africalocals.com/%3F/p ... Bteam
and do it like this image says.
 

 
 
3. You can also send messages/email to our founder(he may cannot gives his responses in 24 hours), his page and private page address as follows:
 
 
https://africalocals.com/?/people/Sulayman
 
 
  Collapse Read »

I'm The Definition Of Beauty & Brain!

 



 
 
Virtue Grace Youtube Channel

https://www.youtube.com/channel/UC2lA...

Follow My Man Behind The Camera On Instagram

Maqfos

Subscribe & Be Part of the Wodemaya Family

https://www.youtube.com/user/MrGhanaBaby




My Website:

https://aiyawodemaya.com/




Donate & Support Me On Go Fund Me:

https://www.gofundme.com/africa-to-th...




Donate & Support the Channel on Patreon:

https://www.patreon.com/wode_maya




Donate and Support me on Paypal:

https://www.paypal.me/wodemaiya




Follow me on Instagram:

https://www.instagram.com/mrghanababy/




Like My Facebook page:

https://www.facebook.com/Wodemaya99/
Continue Read »
 



 
 
Virtue Grace Youtube Channel

https://www.youtube.com/channel/UC2lA...

Follow My Man Behind The Camera On Instagram

Maqfos

Subscribe & Be Part of the Wodemaya Family

https://www.youtube.com/user/MrGhanaBaby




My Website:

https://aiyawodemaya.com/




Donate & Support Me On Go Fund Me:

https://www.gofundme.com/africa-to-th...




Donate & Support the Channel on Patreon:

https://www.patreon.com/wode_maya




Donate and Support me on Paypal:

https://www.paypal.me/wodemaiya




Follow me on Instagram:

https://www.instagram.com/mrghanababy/




Like My Facebook page:

https://www.facebook.com/Wodemaya99/ Collapse Read »

I Kissed The CenterPoint Of Nigeria

 


 
 
Virtue Grace Youtube Channel

https://www.youtube.com/channel/UC2lA...

Follow My Man Behind The Camera On Instagram

Maqfos

Subscribe & Be Part of the Wodemaya Family

https://www.youtube.com/user/MrGhanaBaby




My Website:

https://aiyawodemaya.com/




Donate & Support Me On Go Fund Me:

https://www.gofundme.com/africa-to-th...




Donate & Support the Channel on Patreon:

https://www.patreon.com/wode_maya




Donate and Support me on Paypal:

https://www.paypal.me/wodemaiya




Follow me on Instagram:

https://www.instagram.com/mrghanababy/




Like My Facebook page:

https://www.facebook.com/Wodemaya99/
Continue Read »
 


 
 
Virtue Grace Youtube Channel

https://www.youtube.com/channel/UC2lA...

Follow My Man Behind The Camera On Instagram

Maqfos

Subscribe & Be Part of the Wodemaya Family

https://www.youtube.com/user/MrGhanaBaby




My Website:

https://aiyawodemaya.com/




Donate & Support Me On Go Fund Me:

https://www.gofundme.com/africa-to-th...




Donate & Support the Channel on Patreon:

https://www.patreon.com/wode_maya




Donate and Support me on Paypal:

https://www.paypal.me/wodemaiya




Follow me on Instagram:

https://www.instagram.com/mrghanababy/




Like My Facebook page:

https://www.facebook.com/Wodemaya99/ Collapse Read »

Why I Started The Africa To The World On ''Nigeria Radio''

 


 
 
 
 
Virtue Grace Youtube Channel

https://www.youtube.com/channel/UC2lA...

Follow My Man Behind The Camera On Instagram

Maqfos

Subscribe & Be Part of the Wodemaya Family

https://www.youtube.com/user/MrGhanaBaby




My Website:

https://aiyawodemaya.com/




Donate & Support Me On Go Fund Me:

https://www.gofundme.com/africa-to-th...




Donate & Support the Channel on Patreon:

https://www.patreon.com/wode_maya




Donate and Support me on Paypal:

https://www.paypal.me/wodemaiya




Follow me on Instagram:

https://www.instagram.com/mrghanababy/




Like My Facebook page:

https://www.facebook.com/Wodemaya99/
 
Continue Read »
 


 
 
 
 
Virtue Grace Youtube Channel

https://www.youtube.com/channel/UC2lA...

Follow My Man Behind The Camera On Instagram

Maqfos

Subscribe & Be Part of the Wodemaya Family

https://www.youtube.com/user/MrGhanaBaby




My Website:

https://aiyawodemaya.com/




Donate & Support Me On Go Fund Me:

https://www.gofundme.com/africa-to-th...




Donate & Support the Channel on Patreon:

https://www.patreon.com/wode_maya




Donate and Support me on Paypal:

https://www.paypal.me/wodemaiya




Follow me on Instagram:

https://www.instagram.com/mrghanababy/




Like My Facebook page:

https://www.facebook.com/Wodemaya99/
  Collapse Read »

Luxury Homes In Nigeria

 
 


 
 
 
 
Virtue Grace Youtube Channel

https://www.youtube.com/channel/UC2lA...

Follow My Man Behind The Camera On Instagram

Maqfos

Subscribe & Be Part of the Wodemaya Family

https://www.youtube.com/user/MrGhanaBaby




My Website:

https://aiyawodemaya.com/

Donate & Support Me On Go Fund Me:

https://www.gofundme.com/africa-to-th...


Donate & Support the Channel on Patreon:

https://www.patreon.com/wode_maya

Donate and Support me on Paypal:

https://www.paypal.me/wodemaiya

Follow me on Instagram:

https://www.instagram.com/mrghanababy/


Like My Facebook page:

https://www.facebook.com/Wodemaya99/
Continue Read »
 
 


 
 
 
 
Virtue Grace Youtube Channel

https://www.youtube.com/channel/UC2lA...

Follow My Man Behind The Camera On Instagram

Maqfos

Subscribe & Be Part of the Wodemaya Family

https://www.youtube.com/user/MrGhanaBaby




My Website:

https://aiyawodemaya.com/

Donate & Support Me On Go Fund Me:

https://www.gofundme.com/africa-to-th...


Donate & Support the Channel on Patreon:

https://www.patreon.com/wode_maya

Donate and Support me on Paypal:

https://www.paypal.me/wodemaiya

Follow me on Instagram:

https://www.instagram.com/mrghanababy/


Like My Facebook page:

https://www.facebook.com/Wodemaya99/ Collapse Read »

Gear Browser - Web Browser for Geek(Inspect and debug easily on mobile)

 
ios version Screenshots:


 
 Gear is a powerful web browser lets you enjoy the simple, fast, secure, well-designed and exclusive browsing experience.



Experience First:

Dark Mode - The well-optimized mode for reading content in darkness

Full Screen Mode - The true full screen without distribution for browsing content

Speed - Blocking ads and insignificant scripts for highly loading speed

Web Customization - Customizing the site with the way you wanted




Gear Pro - Development on Mobile:

Upgrade to Gear Pro to unlock the power of development. Including those powerful features:

- Elements Inspector
- Source Code Viewer
- Dedicated Site Settings
- Advanced Information Viewer
- Color Picker
- Site Console
- Site Images List
- Markdown and JSON Viewer
- Full Screen Snapshot
- Customize JavaScript and CSS
- Themed Code Editor
- And more coming up…



Gear Pro is enabled via an auto-renewing subscription



- Monthly Subscription: The duration of every period of the subscription is 1 month, including one week free trial.
- Semi-annually Subscription: The duration of every period of the subscription is 6 months, including one month free trial.
- Yearly Subscription: The duration of every period of the subscription is 1 year, including one month free trial.

------

After the free trial the subscription automatically renews for the subscription price per month unless it is cancelled at least 24 hours before the end of the trial period. Your Apple ID account will be charged for renewal with 24 hours before the end of the trial period. You can manage and cancel your subscriptions by going to your account settings on the App Store.

All subscriptions can be cancelled at any time

Payment will be charged to iTunes Account at confirmation of purchase

Subscription automatically renews unless auto-renew is turned off at least 24-hours before the end of the current period

Account will be charged for renewal within 24-hours prior to the end of the current period, and identify the cost of the renewal
Subscriptions may be managed by the user and auto-renewal may be turned off by going to the user’s Account Settings after purchase

Any unused portion of a free trial period, if offered, will be forfeited when the user purchases a subscription to that publication, where applicable.

------

If you have any recommendations for Gear, please let us know.

Our official website: https://gear4.app
Privacy Policy: https://gear4.app/privacy.html
Terms of Service: https://gear4.app/tos.html
]Download from App Store[/url]
 
 
Continue Read »
 
ios version Screenshots:


 
 Gear is a powerful web browser lets you enjoy the simple, fast, secure, well-designed and exclusive browsing experience.



Experience First:

Dark Mode - The well-optimized mode for reading content in darkness

Full Screen Mode - The true full screen without distribution for browsing content

Speed - Blocking ads and insignificant scripts for highly loading speed

Web Customization - Customizing the site with the way you wanted




Gear Pro - Development on Mobile:

Upgrade to Gear Pro to unlock the power of development. Including those powerful features:

- Elements Inspector
- Source Code Viewer
- Dedicated Site Settings
- Advanced Information Viewer
- Color Picker
- Site Console
- Site Images List
- Markdown and JSON Viewer
- Full Screen Snapshot
- Customize JavaScript and CSS
- Themed Code Editor
- And more coming up…



Gear Pro is enabled via an auto-renewing subscription



- Monthly Subscription: The duration of every period of the subscription is 1 month, including one week free trial.
- Semi-annually Subscription: The duration of every period of the subscription is 6 months, including one month free trial.
- Yearly Subscription: The duration of every period of the subscription is 1 year, including one month free trial.

------

After the free trial the subscription automatically renews for the subscription price per month unless it is cancelled at least 24 hours before the end of the trial period. Your Apple ID account will be charged for renewal with 24 hours before the end of the trial period. You can manage and cancel your subscriptions by going to your account settings on the App Store.

All subscriptions can be cancelled at any time

Payment will be charged to iTunes Account at confirmation of purchase

Subscription automatically renews unless auto-renew is turned off at least 24-hours before the end of the current period

Account will be charged for renewal within 24-hours prior to the end of the current period, and identify the cost of the renewal
Subscriptions may be managed by the user and auto-renewal may be turned off by going to the user’s Account Settings after purchase

Any unused portion of a free trial period, if offered, will be forfeited when the user purchases a subscription to that publication, where applicable.

------

If you have any recommendations for Gear, please let us know.

Our official website: https://gear4.app
Privacy Policy: https://gear4.app/privacy.html
Terms of Service: https://gear4.app/tos.html
]Download from App Store[/url]
 
  Collapse Read »

My Portfolio Show: Moving two concrete5 website to other server



 
Moving cmbatour.com and cmbaonline.org from one server to the other.
http://cmbatour.com 
 
 
 
 
Contant me:

Name: Miheretab Alemu Woldesenbet (Mr.)
Address:  Postal Code = 27413   Addis Ababa, Ethiopia
Email: [email protected]
My linkedin: https://www.linkedin.com/in/mi ... 08854


About me:

I have 9+ years of experience in web development, mobile development application. I have done many works with PHP and Java for web application especially with different MVC framework like CakePHP, Grails, Laravel, Ruby on Rails, CodeIgniter, Zend, Symfony, Yii and different CMS like concrete5, moodle, modX. I am highly experienced in any MVC Framework even with different programming languages. I am also internationally certified on Java. I have done android game application and android home widget application in Java.

I have experience with many programming language like Python especially Pylons and Django web application, Ruby especially Ruby on Rails web application, Java with Grails including script languages such as ajax, json, javascript, xml, rss, xslt and flex for active script language and with content management systems. I have been using sql server, mysql, oracle, mongodb and sqlite3 for database.

I have participated on National and International project. I have masters on Software Engineering.


Employment history:

 
  • Software Engineer | KAISEN LTD   August 2015 - November 2015     I worked CakePHP web application job here. 
  • Software Engineer | Apposit    July 2012 - April 2013     I worked as Software Engineer there, my main work was to develop web and mobile applications especially using Grails and Android. I have added some... more 
  • Programmer | Transport Minister   January 2012 - July 2012    My main work was to develop application and to test the application which is done by other Company. I have worked Library system using CakePHP which I have added as my portfolio here. I have also participated in national project which is developed for Transport Minister of Ethiopia          

 
Education:
 
  • Master of Computer Applications (M.C.A.), Software Engineering | HiLCoE (High Level Computer Education) 2011 - 2013        
  • Bachelor of Engineering (B.Eng.), Computer engineering | Addis Ababa University    2005 - 2009

Continue Read »


 
Moving cmbatour.com and cmbaonline.org from one server to the other.
http://cmbatour.com 
 
 
 
 
Contant me:

Name: Miheretab Alemu Woldesenbet (Mr.)
Address:  Postal Code = 27413   Addis Ababa, Ethiopia
Email: [email protected]
My linkedin: https://www.linkedin.com/in/mi ... 08854


About me:

I have 9+ years of experience in web development, mobile development application. I have done many works with PHP and Java for web application especially with different MVC framework like CakePHP, Grails, Laravel, Ruby on Rails, CodeIgniter, Zend, Symfony, Yii and different CMS like concrete5, moodle, modX. I am highly experienced in any MVC Framework even with different programming languages. I am also internationally certified on Java. I have done android game application and android home widget application in Java.

I have experience with many programming language like Python especially Pylons and Django web application, Ruby especially Ruby on Rails web application, Java with Grails including script languages such as ajax, json, javascript, xml, rss, xslt and flex for active script language and with content management systems. I have been using sql server, mysql, oracle, mongodb and sqlite3 for database.

I have participated on National and International project. I have masters on Software Engineering.


Employment history:

 
  • Software Engineer | KAISEN LTD   August 2015 - November 2015     I worked CakePHP web application job here. 
  • Software Engineer | Apposit    July 2012 - April 2013     I worked as Software Engineer there, my main work was to develop web and mobile applications especially using Grails and Android. I have added some... more 
  • Programmer | Transport Minister   January 2012 - July 2012    My main work was to develop application and to test the application which is done by other Company. I have worked Library system using CakePHP which I have added as my portfolio here. I have also participated in national project which is developed for Transport Minister of Ethiopia          

 
Education:
 
  • Master of Computer Applications (M.C.A.), Software Engineering | HiLCoE (High Level Computer Education) 2011 - 2013        
  • Bachelor of Engineering (B.Eng.), Computer engineering | Addis Ababa University    2005 - 2009

Collapse Read »

My Portfolio Show:It is health care web application done in ruby on rails, fullcalendar, ...


 
 

It is health care web application done in ruby on rails, fullcalendar, ...
http://ownerhealth.herokuapp.com

 
 Contant me:

Name: Miheretab Alemu Woldesenbet (Mr.)
Address:  Postal Code = 27413   Addis Ababa, Ethiopia
Email: [email protected]
My linkedin: https://www.linkedin.com/in/mi ... 08854


About me:

I have 9+ years of experience in web development, mobile development application. I have done many works with PHP and Java for web application especially with different MVC framework like CakePHP, Grails, Laravel, Ruby on Rails, CodeIgniter, Zend, Symfony, Yii and different CMS like concrete5, moodle, modX. I am highly experienced in any MVC Framework even with different programming languages. I am also internationally certified on Java. I have done android game application and android home widget application in Java.

I have experience with many programming language like Python especially Pylons and Django web application, Ruby especially Ruby on Rails web application, Java with Grails including script languages such as ajax, json, javascript, xml, rss, xslt and flex for active script language and with content management systems. I have been using sql server, mysql, oracle, mongodb and sqlite3 for database.

I have participated on National and International project. I have masters on Software Engineering.


Employment history:
 
 
  • Software Engineer | KAISEN LTD   August 2015 - November 2015     I worked CakePHP web application job here. 
  • Software Engineer | Apposit    July 2012 - April 2013     I worked as Software Engineer there, my main work was to develop web and mobile applications especially using Grails and Android. I have added some... more 
  • Programmer | Transport Minister   January 2012 - July 2012    My main work was to develop application and to test the application which is done by other Company. I have worked Library system using CakePHP which I have added as my portfolio here. I have also participated in national project which is developed for Transport Minister of Ethiopia          

 
Education:
 
  • Master of Computer Applications (M.C.A.), Software Engineering | HiLCoE (High Level Computer Education) 2011 - 2013
  • Bachelor of Engineering (B.Eng.), Computer engineering | Addis Ababa University    2005 - 2009

 
 
 
 
 
 
 
Continue Read »

 
 

It is health care web application done in ruby on rails, fullcalendar, ...
http://ownerhealth.herokuapp.com

 
 Contant me:

Name: Miheretab Alemu Woldesenbet (Mr.)
Address:  Postal Code = 27413   Addis Ababa, Ethiopia
Email: [email protected]
My linkedin: https://www.linkedin.com/in/mi ... 08854


About me:

I have 9+ years of experience in web development, mobile development application. I have done many works with PHP and Java for web application especially with different MVC framework like CakePHP, Grails, Laravel, Ruby on Rails, CodeIgniter, Zend, Symfony, Yii and different CMS like concrete5, moodle, modX. I am highly experienced in any MVC Framework even with different programming languages. I am also internationally certified on Java. I have done android game application and android home widget application in Java.

I have experience with many programming language like Python especially Pylons and Django web application, Ruby especially Ruby on Rails web application, Java with Grails including script languages such as ajax, json, javascript, xml, rss, xslt and flex for active script language and with content management systems. I have been using sql server, mysql, oracle, mongodb and sqlite3 for database.

I have participated on National and International project. I have masters on Software Engineering.


Employment history:
 
 
  • Software Engineer | KAISEN LTD   August 2015 - November 2015     I worked CakePHP web application job here. 
  • Software Engineer | Apposit    July 2012 - April 2013     I worked as Software Engineer there, my main work was to develop web and mobile applications especially using Grails and Android. I have added some... more 
  • Programmer | Transport Minister   January 2012 - July 2012    My main work was to develop application and to test the application which is done by other Company. I have worked Library system using CakePHP which I have added as my portfolio here. I have also participated in national project which is developed for Transport Minister of Ethiopia          

 
Education:
 
  • Master of Computer Applications (M.C.A.), Software Engineering | HiLCoE (High Level Computer Education) 2011 - 2013
  • Bachelor of Engineering (B.Eng.), Computer engineering | Addis Ababa University    2005 - 2009

 
 
 
 
 
 
  Collapse Read »

My Portfolio Show: ThumbUp-My client wants a profile API endpoint to grab data and also update profile data.

 
 
 

 
 
My client wants a profile API endpoint to grab data and also update profile data. I have done the API development for both get and put request using Laravel that includes text and file uploading in API.
 
 
 
Contant me:

Name: Miheretab Alemu Woldesenbet (Mr.)
Address:  Postal Code = 27413   Addis Ababa, Ethiopia
Email: [email protected]
My linkedin: https://www.linkedin.com/in/mi ... 08854


About me:

I have 9+ years of experience in web development, mobile development application. I have done many works with PHP and Java for web application especially with different MVC framework like CakePHP, Grails, Laravel, Ruby on Rails, CodeIgniter, Zend, Symfony, Yii and different CMS like concrete5, moodle, modX. I am highly experienced in any MVC Framework even with different programming languages. I am also internationally certified on Java. I have done android game application and android home widget application in Java.

I have experience with many programming language like Python especially Pylons and Django web application, Ruby especially Ruby on Rails web application, Java with Grails including script languages such as ajax, json, javascript, xml, rss, xslt and flex for active script language and with content management systems. I have been using sql server, mysql, oracle, mongodb and sqlite3 for database.

I have participated on National and International project. I have masters on Software Engineering.


Employment history:
  • Software Engineer | KAISEN LTD   August 2015 - November 2015     I worked CakePHP web application job here. 
  • Software Engineer | Apposit    July 2012 - April 2013     I worked as Software Engineer there, my main work was to develop web and mobile applications especially using Grails and Android. I have added some... more 
  • Programmer | Transport Minister   January 2012 - July 2012    My main work was to develop application and to test the application which is done by other Company. I have worked Library system using CakePHP which I have added as my portfolio here. I have also participated in national project which is developed for Transport Minister of Ethiopia         

 
Education:
 
  • Master of Computer Applications (M.C.A.), Software Engineering | HiLCoE (High Level Computer Education) 2011 - 2013
  • Bachelor of Engineering (B.Eng.), Computer engineering | Addis Ababa University    2005 - 2009

Continue Read »
 
 
 

 
 
My client wants a profile API endpoint to grab data and also update profile data. I have done the API development for both get and put request using Laravel that includes text and file uploading in API.
 
 
 
Contant me:

Name: Miheretab Alemu Woldesenbet (Mr.)
Address:  Postal Code = 27413   Addis Ababa, Ethiopia
Email: [email protected]
My linkedin: https://www.linkedin.com/in/mi ... 08854


About me:

I have 9+ years of experience in web development, mobile development application. I have done many works with PHP and Java for web application especially with different MVC framework like CakePHP, Grails, Laravel, Ruby on Rails, CodeIgniter, Zend, Symfony, Yii and different CMS like concrete5, moodle, modX. I am highly experienced in any MVC Framework even with different programming languages. I am also internationally certified on Java. I have done android game application and android home widget application in Java.

I have experience with many programming language like Python especially Pylons and Django web application, Ruby especially Ruby on Rails web application, Java with Grails including script languages such as ajax, json, javascript, xml, rss, xslt and flex for active script language and with content management systems. I have been using sql server, mysql, oracle, mongodb and sqlite3 for database.

I have participated on National and International project. I have masters on Software Engineering.


Employment history:
  • Software Engineer | KAISEN LTD   August 2015 - November 2015     I worked CakePHP web application job here. 
  • Software Engineer | Apposit    July 2012 - April 2013     I worked as Software Engineer there, my main work was to develop web and mobile applications especially using Grails and Android. I have added some... more 
  • Programmer | Transport Minister   January 2012 - July 2012    My main work was to develop application and to test the application which is done by other Company. I have worked Library system using CakePHP which I have added as my portfolio here. I have also participated in national project which is developed for Transport Minister of Ethiopia         

 
Education:
 
  • Master of Computer Applications (M.C.A.), Software Engineering | HiLCoE (High Level Computer Education) 2011 - 2013
  • Bachelor of Engineering (B.Eng.), Computer engineering | Addis Ababa University    2005 - 2009

Collapse Read »