1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

Benjamin Arnold - Team Lead / Programmer

Discussion in 'Meet the Devs' started by Benjamin, Feb 17, 2014.

  1. Benjamin

    Benjamin Lead Developer

    • Dev Leader
    Though, maybe I could do a low-key livestream for you guys? I probably wouldn't put the video on youtube since It wouldn't be very interesting. Maybe on UI development or something? Not saying I will, just want to know your opinions.
  2. ColdFuseon

    ColdFuseon Lost in Space

    • Contributor
    I would be there. That would be interesting.
    Benjamin likes this.
  3. Thomas988

    Thomas988 Back Into Space

    • Member
    I have to totally agree with what ColdFuseon said. I would love to see the development process in action.
    Benjamin likes this.
  4. joppiesaus

    joppiesaus Infamous Space-Octopus

    • Member
    I like watching/listening streams while I do other stuff at my computer, it's satisfying while you're working and I don't know why. It doesn't matter if it's really interesting or not, because usually the not-interesting parts are sometimes interesting too.
    Benjamin likes this.
  5. Benjamin

    Benjamin Lead Developer

    • Dev Leader
    Ok I will definitely consider doing a livestream soon-ish, though it won't be any time within the next two weeks since graduation and family stuff is happening. Also, I updated the post since it wasn't a very good explanation of me.
    ColdFuseon likes this.
  6. Arctic

    Arctic Giant Robot Advocate

    • Tester
    The only real men's language is assembly
    NeonSturm likes this.
  7. joppiesaus

    joppiesaus Infamous Space-Octopus

    • Member
    Code:
    11000011 10101011 01001001 01101110 01100100 01100101 01100101 01100100 00101110 00100100 11000010 10111010 00000010 00000001 11000010 10110100 11000011 10001101 00100001 11000010 10110100 00100000 11000011 10001101 00010110 11000011 10000011 
    (This actually works. Try converting it to ASCII, save it as an COM, and executing it in DOS)
    NeonSturm likes this.
  8. Arctic

    Arctic Giant Robot Advocate

    • Tester
    Nice try, what's it do
  9. joppiesaus

    joppiesaus Infamous Space-Octopus

    • Member
    It prints "Indeed."
  10. Danarkivus-2

    Danarkivus-2 Back Into Space

    • Member
    test confirmed no nasties virus,
  11. NeonSturm

    NeonSturm Back Into Space

    • Member
    You got a nice chance at the time you started development.

    I've got my first PC with 15 (for on average a half or quarter hour a day for programming), internet access with 19, Linux with 21 and lacked proper IDE tools most of the time.
    Now I know PHP, Java(+Script), a little bit C++ and shaders but no way to connect all this knowledge.

    I like to mentally reverse-engineer games (nobody can track that :))
    and pretend that Proprietary Software steals us the opportunity to A: gain own ideas or B: extend on these ideas and C: steals us our motivation for creating awesome work by telling us others have done greater things and you never get paid for the little you can do :(


    I see flaws in many systems.
    • Java doesn't inherit static functions like methods (confusing behaviour).
    • PHP has a confusing syntax for example for "array = explode( string delimiter, string str )" while other functions have the important object as first parameter.
    • C++ already gets slow by inheriting other structs and has many other flaws according to Jonathan Blow on YouTube.
    • GIMP lacks essential tools for editing files with many tiles in a table-form, tiles in general...
    • Blender and GIMP lack proper coordinate-point snapping for perfect vertex / pixel placement.
    • ...
    Sometimes I think I have to re-program the wheel and get tired of all the bugs, inconsistencies, proprietary -thus unmodifiable- software or hardly accessible functions.


    And I am very curious about the opinion of others to these topics, if I can manage to explain them properly.

    Have you guys seen Jonathan Blow's YouTube rampage about C++?

    I am very happy about this now as Microsoft bought Mine-Craft.
    NeonSturm, May 13, 2015
    Last edited by NeonSturm; at May 13, 2015
    #51
  12. joppiesaus

    joppiesaus Infamous Space-Octopus

    • Member
    • Java? People still use Java?
      Java is not a lot wrong with, it's just the way it does things.
      Now serious, Java is some cool stuff, but too bad it doesn't run correctly in browsers anymore. You can make cool stuff in Java easialy, but I think soon the days of the Java business empire will be over.
    • PHP is probably the worst language I've ever programmed in. Why? Because the fundamental things are very broken in PHP. Error reporting sucks(seriously, who understands it), it's half-object oriented(you have a whole mess of stupid function names always included and sometimes it's an object), confusing syntax in classes(not $var, but var $var), it's slow and it runs on servers(never a good thing), you need a full path for directories but not for files, inconsistency in functions, undefined and null are not types - everything needs to be checked with functions, and a whole other mess)
      But it's easy to write stuff in, and very easy to break and look 1 hour to your errors and still don't understand what you've done wrong. I've a general stereotypical dislike for people who think PHP is great while it's the only language is they programmed in and constantly bragging about that kind of stuff.
    • Inheriting other structs?
    • JavaScript is almost a language with the freedom of speech. There are almost no rules, and some things suck about it, for me it's the small errors which take you hours to fix part.
    • So, I've got an tip for you, not any language seems to be made for what it needs todo. Just like every OS. Flee to your dark attic, write your own OS in x64 assembly and you can live satisfying again.
    joppiesaus, May 13, 2015
    Last edited by joppiesaus; at May 13, 2015
    #52
    NeonSturm likes this.
  13. NeonSturm

    NeonSturm Back Into Space

    • Member
    • I know the issues with Java. I can't DL anything and have it work, due to signing failure.
      • A digital restriction management which punishes for being a beginner to signing stuff -- like Apple's iOS and MS's Windows both force updates and auto-delete content (music from amazone (iTunes) or just older Win/iOS versions)
    • I agree with you fully about PHP, but it is easy to start with as you can use any type as array keys and it was the first language I've used which had foreach and now it even has traits (effectively multi-inheritance). With php, you can very easily mix HTML and code and that's a big +.
    • I really like Haskell, but can't get it working - it required huge effort for the simplest 2D and multi-file examples.
    • C++ has the issue that it requires semicolons (mostly annoying) instead of simple end-lines and it also requires header files (annoying if you are used to PHP and Java).
    He complained that the "virtual tables" are slow.
    I like many of his concepts and »just perhaps« it's the programming language I search for.

    I have my own project running, using an optimized "string-neuronal" network design, but I haven't much motivators which support me.
    • Dictionary Level 0 contains an empty pattern - its the root.
      • Level 1 matches matching sub-strings (mostly A, E, i, o, u, ...) -- like a hierachical lookup table.
        • Level 4-6 is where it starts getting interesting. A lower-level entry might only have 1 member!
        • Thus L4-6 can be under-run (known A.b.b.a+don, got Abba+do)
        • or over-run (known A.b.b.a+don, got Abba+doned)
        • The string-neuron reacts to the bias of previous matches and current non-matches and splits into two - one for each case.
        • The memory controller now handles the temporary or permanent existence and the scope of this string-neuron.
    Each neuron has some sort of a favourite list of connections, each tagged for a certain strategy.
    The brain has a number of strategies.

    Connection-priority, limits. ( Shortest | Sum of joined-path lengths | favourite priority ),
    limited by how much iteration and recursion you desire and can afford and how many results you already have.​
    Used for suggesting code fixes, an interactive documentation and dictionary --doc reference...
    An indexed database for multiple purposes.​

    Also an IDE-plugin where you enter parameters and result pairs and it generates the function out of the pieces you provide and some suggested you accept.


    Code-file = documentation?
    There is a definition of contexts with entries. Each entry hooks into the lookup table (char, next-char, previous context, next context)

    You can define relations between variables and have various functions of changing one, or groups of them simultaneously.

    You can link variables of different modules (a module is a class-variable holding another object) to one memory cell with syntax sugar.
    If both classes handle the relation and get the same results, it shall be optimized for the greater good!​
    If you access this in a module, you access the module itself, then the element holding it.
    Element( has TreeNode, has Physics ) and (Physics)Physics.[TreeNode]parent -> Physics, if you desire this result.

    It should also make it a lot easier to implement
    • Structs of Arrays (SoA :)), not Arrays of Structs
    • Inter-thread-variables
    • Injecting an event handler code into the event code to circumvent the call-overhead
    • Functions handling streams of data without a function call for each dataset
    • Having the main object name at beginning of a line (not float varname, but varname: float =default)
    • Mixing code with comments and defining local aliases
      • @y classY .high_number
      • @z classZ .low_number
      • a = 'freaking 'awesome y + 'annoying z
    • named multiple return values
      • fn :: class (args) -> fn: class, bool success
    • named parameter groups with shared type and stream-flow direction for better readability.
      • distance :: infix | postfix :)int << pos1(x y) (pos2: x y) ) -> distance: int, bool success
      • distance x1 y1, x2, y2
      • distance (pos2: x y) pos1(x y)
      • (stream: pos1) >>distance<< (stream: pos2)
      • (distance >> stream :int) << distance << (pos1, pos2)
      • return success: (bool success << distance)

    What would you like more: pos1 or pos2? I guess pos2 is more readable because it clearly shows what belongs together.
    also having labels inline and "arrows" pointing the flow of data between streams is important as streams lose entries while yielding content.

    Perhaps a variable should be specially marked and just like a stream yields one item but doesn't loose it.​

    Summary (less technically)
    Combine that with lazy-functions which only trigger when you request their result before changing another result-adjusting parameter, you get a whole new world of optimizations.
    1 function call per 16 (stream) variables? No problem.
    Streams of variables to feed a function until either is empty? Re-use your functions for variables.
    Iterate through an array? Just provide a "stream this objects inside an array" to the function from the left side (feeds the first variable, or a default "object" variable if defined as a method)
    You want the most important thing at the beginning of a line (unlike: type varname as in Java+C++) and you do not want to write any code twice if it's more complicated than a function call yet want the performance from a loop optimized for handling this code without individual calls.

    You want to handle network, event and multi-thread data and languages don't make it easy for you.
    You want to handle each data-set in a way that you can compile the whole code to a shader language to use the GPU's power, if there are enough elements.

    And as a newbie you don't want to write hard-to-read crazy pointer stuff except in the declaration.
    But as a pro, you also want to have the language only garbage-collect variables for areas that do not handle garbage collection themselves.​
    NeonSturm, May 13, 2015
    Last edited by NeonSturm; at May 13, 2015
    #53
  14. Benjamin

    Benjamin Lead Developer

    • Dev Leader
    I actually like semicolons since it allows me to stack multiple statements on a single line or have one statement that spans multiple lines, which can be useful in some cases. As for the overhead of vtable lookups for virtual functions, that's not really even an issue. The overhead is small, and as long as you aren't doing tens of thousands of virtual calls per frame you aren't going to even notice it in a real time application. There are other design patterns that have better performance like ECS (entity component system) that we use for things where virtual functions would induce measurable overhead, not to mention ECS is just cleaner and easier to work with than inheritance for game objects. Virtual functions are useful for interfaces and APIs where performance isn't much of a concern.
    joppiesaus likes this.
  15. joppiesaus

    joppiesaus Infamous Space-Octopus

    • Member
    When I first launched C++ and it threw an error at me because I didn't pre-define the function, I was like "What's this ridiculousness"?
    But then later I found it very handy instead. Functions simply need to be defined when you're calling them(a paradigm), and it's great because you can't get collision easily and it's for the compiler very easy to generate assembly code. At an designers perspective, they give you a good little map of what you're making, which is great so you actually know what you're doing and don't see the mistakes when you "design" the class.
    I'm not sure if I'm clear, and I don't really know how to put it, but I prefer it much more over things PHP does instead - even thought it's more work.

    Also I find your way of thinking and describing things very unique. Sometimes it's hard to get, and sometimes I just completely don't agree, but that's OK.

    --> Exactly what I thought.
    NeonSturm likes this.
  16. NeonSturm

    NeonSturm Back Into Space

    • Member

    Semicolons may still be used to separate, but they shouldn't be required.
    You could use a single underscore separated by white-space at the beginning of each new line to indicate you want to continue the previous.
    This also separates it from following code and avoids confusion with blocks (or single command blocks from if-else statements in languages where the braces are not required for a single statement)

    Sometimes I would like a dump-my-mind into a text editor function.
    There are a few keys that are very inaccessible on German keyboards and using the English layout is not always desirable.
    Unfun-Fact : At least German keyboards were designed in a way that you can't use it too fast because of the old mechanical typewriters.


    "/" for example is one of the most difficult keys to get your fingers on, because it is Shift+7.
    "{}" these braces are at (right of space)AltGr+70, and you will have to make another acrobatic.
    "[]" Are at AltGr+89
    ";" Semicolons are not as bad, but similar - right to "M" with shift -- and it often happens that I write the last letter of a previous variable in upper case because of this.

    Python, shell-scripts and visual basic are far less annoying as they don't require these keys as often.

    Keyboards are a curse of programmers with non-US keyboards!
    And the code languages a weapon to give the US an advantage over others in the coding race to copyright hold ;)
    If you would open a keyboard-selling shop where everybody can design their own keyboard layout and also get a keyboard-layout installation script for common linux distributions, I would be your very first customer (or maybe the second after yourself) :)
    Instead there are some confusing things like the difference between pointers, references and the multiplication-operator :p

    I think D, jai and others aren't there for no reason and C# is too MS-exclusive.

    You shouldn't judge a language too how easy it is for the compiler, after all you could write Zeroes and Ones if it weren't made to serve us humans.
    NeonSturm, May 13, 2015
    Last edited by NeonSturm; at May 13, 2015
    #56
  17. joppiesaus

    joppiesaus Infamous Space-Octopus

    • Member
    Buy an original US keyboard and make the prints on the keyboard invisible. You'll soon be happy.

    Inconsitency in programming languages is never a good thing. Especially for beginners. Humans are extremely bad at logic, and to keep things clear in your mind you want to use the least rules and the strictest rules. I make way less errors in C++ then in javascript or PHP.

    The confusing things between pointers an stuff, is very handy. Pointers and normal objects are very different things. You can see it's a pointer easily, and you should, because they do different stuff. Especially in languages with header files.
    Again, it makes thinking for the human easier so it's better to focus on other things.
Similar Threads: Benjamin Arnold
Forum Title Date
Meet the Devs Josh Arnold - Lead Sound/Music Designer Feb 18, 2014

Share This Page