Hacker Newsnew | past | comments | ask | show | jobs | submit | gioscarab's commentslogin

To be clear, the word "human" is used determine who can use the software because I am convinced that, when a company, institution, organization or corporation is created, it has its own intelligence, means and interests that go beyond and above the interests of human beings.

Many are scared of the singularity, thinking that general artificial intelligence out of human control is the greatest threat for humanity.

I am convinced that the greatest threat for humanity is more probably just a corporation operating to achieve its own interests.


A one man company consulting another would apply the software for commercial purposes. Commercial use is not comtemplated by the license. The one man company should contact me and buy a different license.

I am not sure about: >"This is my project, you can use it if you want. If you want a patch added, pay me. If you want support, pay me."

Because if you are an experimenter asking for a patch I could be also interested in, that could help the project in any way, I could consider doing it for free as part of effort required to develop the project.


The idea is, let experimenters tinker with it and help you develop your idea, while at the same time exclude companies, institutions, organizations and corporations. If the software is interesting for them they can contact the copyright holder to buy a different license.

Instead of giving away for free our work to entities that may work against our own interests, we give it away for free only to people like us.


Hobby clubs? Nonprofit organizations?

It's a difficult space and there's reasons there's so many options already. Not that it isn't worth further effort, and more options are often useful.


Hobby clubs could not use it because they are an organization, members of the club could use it because they are individuals playing with their hobby. Non-profit organizations could not use it.

I must say often non-profit organizations even if not producing money have strong conflicts of interest.


> It needs to supports, out of the box, cloud connected or wifi enabled (wireless lan connected) devices. When the physical layer of devices in the home don’t offer Wireless connectivity, hardware communication modules needs to be adopted to bridge the existing connectivity.

The protocol the OP wishes for exists already, it is called PJON: https://github.com/gioblu/PJON


Until it ultimately relies on Amazon S3 and a commercial network provider all the effort to obtain "decentralization" looks wasted. I hope IPFS will someday run on top of protocols like PJON ( https://github.com/gioblu/PJON ). Decentralization and democratization of networking will happen from the lower end, when the network infrastructure will be ours, and we will not be forced to pay multiple corporations to temporarily store our data or get it from one end to the other. Then, IPFS may have sense.

In my opinion we should:

1. Specify new data link and network standards for decentralized networking over private and decentralized networks

2. Build the networks

3. Start to think about high level stuff like IPFS


broken


PJON supports mesh networking too, it is open-source and free to use, check it out: https://github.com/gioblu/PJON

its address space may be beneficial (more flexible, lower overhead) for many use cases.


BIPLAN: https://github.com/gioblu/BIPLAN is a programming language, which comes with its own virtual machine and its compiler. It is really simple and it is an early protototype, although benchmarking it looks astonishingly quicker than other interpreted programming languages like python. How can be 3 orders of magnitude quicker than python? O_O


It seems likely you're measuring something other than what you intended to measure, like the start-up time of the Python interpreter, time to byte-compile Python source, etc. fib(40) itself runs in 1.1us/loop on this Ryzen 3700X running Debian Buster and Python 3.7.3, excluding start-up costs using timeit:

    python3 -mtimeit -s"
    def fib(x):
        a = 0
        b = 1
        for i in range(x):
            a, b = a+b, a
        return a

    assert fib(40) == 102334155
    " "fib(40)"
Even this takes only 3.5ms on the "task clock", counting all interpreter start-up time, bytecode compilation, etc:

    perf stat python -S -c "
    def fib(x):
        a = 0
        b = 1
        for i in range(x):
            a, b = a+b, a
        return a

    assert fib(40) == 102334155
    "
(oops, that example changed to python2.7; python3.5 is a bit slower at 9ms)


Also, give fib(48) a try. Python will switch to bigint, but (https://github.com/gioblu/BIPLAN/blob/master/documentation/n...):

BIPLAN supports only one numeric variable type that is by default int32_t

So, fib(48) will overflow, and probably will return a negative number.

Preferring to give the right answer over giving an answer fast is one of the design decisions Python made.

There also is the unconventional choice to use a global array to store variables, leading to “BIPLAN supports a maximum amount of 116 global variables”. I don’t think changing that to make it growable will affect speed much, though.


Well, Python is not known for its speed (even among established interpreted languages), and a couple of design choices make it have a pretty heavy overhead.

Still, a toy language focusing on a particular benchmark can most likely easily beat any other high-level language.


>Still, a toy language...

Not sure what is the effective definition of "toy language".

>...focusing on a particular benchmark can most likely easily beat any other high-level language.

I was just curious to understand the performance difference so I have tried fib(40) on both BIPLAN and python side.

How can python be THAT slow? It is a huge waste of energy and people's time.


Thinking about it more in detail, functions require the parentheses to show where the call ends. I obviously could count the number of expected parameters as function is defined, but that leaves room for error, and a creepy syntax,

ie: sum 2, multiply 2, 2, 2

for which function is the last parameter for?

You are right about the function names, I am not forced to use the camel form which I do not love, it could be serial_write or even serial write


This is Polish Notation, and it does not have this problem as long as you don't allow variadic functions. If functions always consume the same number of arguments, it's no problem at all.

This is basically how concatenative stack-based languages do it, although by convention they put the arguments before the function call. (Reverse Polish Notation) In Forth, your example would be written one of the following two ways, depending on whether multiply() or sum() is consuming the extra 2:

2 2 2 * 2 + +

> 8

2 2 2 * * 2 +

> 10

Also valid would be:

2 2 2 * 2 +

> 2 6

where the left-most 2 is not consumed, but rather is left in place.


Any of you would help me to run it on Windows/Linux? I would need some help with the system calls


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: