IRC Logs for #io Friday, 2014-06-20

prologicor product I’m working on00:00
prologicI’d fire his ass quick smart00:00
prologicthe only real preventative measure IHMO of this kind of thing00:00
prologicis code review00:00
prologicbut with heartbleed (ssl) as we saw even things can still slip through the cracks00:00
robonerdor a lang that doesn't support data as code00:00
prologicand eopsnssl is written largely in C/C++00:01
prologicso type saftey didn’t save us there00:01
prologicyou keep saying that00:01
robonerdwell that was a poorly run project00:01
prologicbut that’s not an issue00:01
robonerddifferent class of bug00:01
prologicwhy would data as code be a problem?00:01
prologicit’s the other way around that’s the real issue00:01
prologicthings like eval(“1 + 2”)00:01
robonerdnot saying it's a problem as much as saying it opens the door to an entire class of problems00:01
prologicand syntax as a data structure00:01
prologicwhich is what Io is all about00:02
*** petr has quit IRC00:03
prologicsorry back00:09
robonerdsorry, working00:13
*** hashmal has quit IRC00:16
jerthe older i get, the less and less i like to even see these things possible00:16
jeri also want to require programmers to think before they type00:16
jerbut that's mostly to solve another issue that crops up in teams00:17
*** gatesphere has quit IRC00:17
prologicjer: I couldn’t agree more00:39
prologicI mostly feel teh same way00:40
prologicmy point (I believe) that I’m trying to make is one of discipline00:40
prologictype saftey is nice but it doesn’t save you necssarily00:40
prologicI basically feel that because of the web devleopment boom and softwre development boom in general that many programmers just shoudn’t have been programmers int eh first place00:41
prologicand should quit and go do something else00:41
prologicwe *should* think before we type00:41
robonerdthe point i was making about data as code had nothing to do with type safety00:41
prologicand have the kind of discipline that maens we develop **QUALITY** software00:41
prologicand not this rubbish that we often throw together and hope for the best00:41
robonerdsee the benefit to compiled langs is, once they are compiled, you can fuck with the data but you /cannot/ fuck with the program itself00:42
prologicrobonerd: no I was just curious about what you were saying about it :)00:42
robonerddata as code allows you to do that, which opens a huuuuge door 00:42
prologicI can fuck with the pgoram :)00:42
prologichexeditor fftw00:42
prologicremember the good ol days of assembler?00:42
robonerdheh, i'll rephrase: doesn't build in explicit support for00:42
prologicjer: I dunno about you per say (where you work, people you work with etc000:47
prologicbut lately my biggest gripe is the sheer lack of reuse00:47
prologicI work in an (soon to be ending) environment and organization where reuse is something of a msytical thing00:48
prologicwe just don’t to it :(00:48
prologicwe rehash teh same same sets of problems00:48
prologicreinvent the same sets of shitty wheels00:48
*** petr has joined #io01:03
jerprologic, i guess i've just been involved in way too many large OO projects01:24
prologicYeah well OO is great except when it isn't01:31
prologicwhich is probably most of the time01:31
jerfor a random bit of off topicness01:31
prologicyou woudln’t think a pickup truck could handle that kind of force put on it01:33
prologicand to help brake the plane geez01:33
robonerd<jer> prologic, i guess i've just been involved in way too many large OO projects <- to what?01:42
jerprologic, it's most probably fake01:43
jerrobonerd, what do you mean?01:44
robonerdwell, what did you mean with that01:44
robonerdinvolved in too many large oo projects... point?01:44
robonerdi missed the connection to your earlier chat :/01:44
jerrobonerd, it's been my experience that large OO projects tend to be riddled with more problems due to the baggage that typical ways of doing OO are done01:44
robonerdexample or two?01:44
jerso in our app, the quirky ios app01:45
jerour first screen, the shop list (list of products) is 4 levels deep vertically01:45
jerUIViewController -> QRKBaseViewController -> QRKBaseShopListViewController -> QRKShopListViewController01:45
jerand it really should be 5 deep01:45
jerit's to the point where we're actually redoing the app (splitting it into 3) so we can simplify some of the complexity in the codebase01:46
robonerdwhat's the fault of OO in there? i'm missing it01:46
jerrobonerd, technically it's not the fault of OO01:46
jerit just ends up almost always being a maintenance nightmare01:47
jeras much as people try and keep objects responsiblities encapsulated, there's always dependency bleed over01:48
jerand they're usually not handled in a way that is reusable01:48
robonerdyea definitely. what's the solution then?01:48
jeryet that's often touted as the reason to separate things01:48
jerrobonerd, convention01:48
jercodified and otherwise01:48
jeri'm a strong believer in lint-like tools, and stronger compilers01:48
robonerdyea i want a compiler like grumpy cat01:49
robonerdgumpy cat compiler... GCC!?01:49
prologicit’s the whole argument of vertical complexity vs. horizontal complexity01:52
prologicwhy I’m personally a fan of things like traits for example01:52
prologicthat facilitate horizontal complexity01:52
prologicbut even that can be abused01:52
prologictake zope.interfaces (basically java interfaces but for Python) for example01:53
prologicyou end up with a situation where you have so many adapters and interfaces that your call stack (if you have to debug it, which with poor docuentation you do) ends up being 60 deep01:53
prologictrying to juggle 60 odd things going on at once is hard even for the best of us01:53
prologicbut as jer said01:53
prologicnot a fault of OOP or Interfaces/Adapater pattern01:53
prologicpoor design maybe? lack of forethought?01:54
prologiccomplex software is *hard*01:54
jerbut honest to goodness, i'm even falling out of love with horizontal composition01:54
prologicbut we make it even harder for ourselves when we abuse things like OOP creating huge vertical stacks01:54
jerstill useful for dependencies, and adapters as you say01:54
robonerdyou were mr traits last year jer01:54
robonerdwhat do you have a boner for now?01:54
jerrobonerd, times change01:54
prologicit’s a difficulty problem to solve01:55
prologicwhich I don’t think there is a silver bullet for01:55
jerrobonerd, nothing, i've learned to be more pragmatic01:55
jermost things can be done with simple functions01:55
robonerdresign youreslf to everything sucking?01:55
prologicsame :)01:55
jersimple functions are also easy to compose in their own right01:55
prologicwhat I’m a big fan of lately is FP01:55
prologicrobonerd: everythiing always sucks :)01:55
jerand injecting a dependency into a function is as easy as passing an argument01:55
prologicsome more or some less than others01:55
jerprologic, indeed01:55
prologiconce you realize that you’ll be a better devloper :)01:55
prologicjer: I wrote these code samples up as a comparision of OOP vs. Interfaces/Adapters vs. Component/Event(s)
prologicI think (IHMO) it illustrates the points we’re making here01:57
prologicand the differeing approaches01:57
prologicand problems we try to solve with them01:57
prologicsometimes I think we just don’t pick the right tool for the job and just tend to use our facourite hammer to drive nails into everything :)01:58
jerwhen i work in C++, i tend to use a lot more horizontal composition than when i'm working in objc... though in objc, i do quite a lot as well01:59
jeri really wish i could use ML, Haskell, or a plethora of other languages that'd be nice to write production code in01:59
prologicI tend to favour two approaches to software complexity01:59
prologicFP (of course)01:59
prologicand Component/Event-driven designs02:00
prologicwhere systems and/or smaller components talk to each other02:00
prologici.e: hozizontal composition02:00
prologicto a point :)02:00
prologicproblem is as I said above there is no perfect solution02:00
prologiceven with horizontal composition like in zope.interface (Python) you can get really huge call stacks :(02:00
jerprologic, sure, it's like when building an airplane02:06
jerfat body means smaller wings, smaller wings mean less maneuverable02:06
prologicso back to design and forethought02:07
prologicif we designed and built buildings the way some of us write software02:07
prologicbuildings would collapse and hurt people02:07
jerfor sure02:08
jerbut in the end, we need to approach writing software as a trust contract not just with the business that wants it, but also with their customers who will use it02:08
pdurbinthe business and customers just want something that works :)02:09
jerbut more often than not, we give them something we think works02:09
jerand we're quick to blame users02:10
jeror to blame businesses02:10
jerwhen at the end of the day, what we CAN control is the work WE produce02:10
prologicwe don’t spend enough time with the business and customers02:10
prologicnutting out the details02:10
prologicrushing to code or cots makes us look silly02:10
jerand yeah, you can't forsee all eventualities02:10
jerno more than a bridge builder can forsee that someone would, 100 years from now, be moving an office building across the bridge02:11
prologicrobonerd is right too though02:11
prologicbusinesses and users need to understand the complexities and slow down02:11
prologicand reduce their expectations a bit02:11
jerbut they won't02:11
jerthey have no reason to02:11
prologicin my experience there is not enough value and emphasis placed on the costs and compleixties of software devleopment02:11
pdurbinI agree we should listen but see also: "we interviewed hundreds of users and turned all their suggestions into features" :)02:11
prologicsome tend to thin it’s either all magical or really trivial02:11
jerdev team X who tells them to slow down will be replaced with dev team Y who says they can go at breakneck speeds to spec02:11
jerwe're in a world that rewards incomplete products02:12
jerthe "MVP"02:12
prologicI refer to my earlier comment re buildings and falling down ;)02:12
pdurbinisn't the unix way small tools that do one thing well?02:12
jerpdurbin, black boxes02:13
jerthat you can wire up to one another02:13
pdurbinbut each small tool is not incomplete02:13
jerpdurbin, didn't say it was02:13
jerbut even in the unix world htere's ample evidence of people not doing things in the unix way02:14
jerconsider find(1)02:14
prologicor systemd02:14
jeryeah, lots of examples02:14
prologicthe unix philosohpy is great02:14
prologicpity we don’t follow it very well at times02:14
jermy first day with swift, i implemented the unix pipeline, because it's awesome.02:15
prologicin my experience businesses/customers/users tend to want to see the UI before it even functions02:15
jerwwdc keynote day02:15
prologicwhich is fine, except that the software deisgn/architecture thent ends to be driven by the non-functioniing UI02:15
jerprologic, impedance mismatch02:15
robonerdhow's you implement the unix pipeline in swift jer?02:15
prologiche implemtned pipes :)02:16
jerrobonerd, well consider a function as a program, pipe the output to the input02:16
prologicI knew it :)02:16
jerone sec, code02:16
jeroperator infix >>> { associativity left precedence 140 }02:17
jerfunc >>><T, U>(lhs: T, rhs: T -> U) -> U { return rhs(lhs)02:17
jerthat's it02:17
robonerdthat's swift?02:17
robonerdwhat does that shit mean?02:18
robonerdT U etc02:18
jerdefines an operator, then a function with the name of the operator working on two types, T and U (doesn't matter what it does)02:18
jerthe left hand side is a simple type T, the right hand side is a function that takes a T as an argument and outputs a U02:18
jerthen in the function body we call the right hand side, with the left hand side as the argument02:18
jerso consider usage:02:18
jer"hello" >>> capitalize >>> makeSentence >>> println02:18
jerI'd expect that to print "Hello."02:19
jerto the screen02:19
jerand it does assuming you have all those functions to do what you'd expect02:19
robonerdhow does the pipeline model work if the output and input aren't all the same data?02:20
robonerdlike if some function takes in number, puts out text, and next function in pipeline takes number puts out text too, you're passing a number out to a text in02:20
jeri've also got a split and merge function to spin off jobs in separate threads and bring them back to one02:20
jerrobonerd, sure02:20
jerso consider02:20
jer42 >>> asString >>> println02:20
jerasString takes an int, and outputs a string02:21
jerprintln takes a string and outputs to the screen02:21
jermy split function actually takes the left hand side and outputs a tuple02:21
jeri.e., 02:21
jer42 >>> split02:21
jerreturns (42, 42)02:22
jeri also have another one that works in reverse02:24
jertkaes a function on the lhs and outputs a value02:24
jeroperator infix <<< { associativity right precedence 140 }02:24
jerfunc <<<<T, U>(lhs: T -> U, rhs: T) -> U { return lhs(rhs)02:24
jerso in my first example02:25
jerprintln <<< makeSentence <<< capitalize <<< "hello"02:25
jerdoes the same thing as02:25
jer"hello" >>> capitalize >>> makeSentence >>> println02:25
prologicyou are heavily influecned by Io :)02:25
prologiceven with Swift and iOS :)02:25
jersimple names =]02:26
jermy list of wants is pretty simple02:26
prologicthey are?02:26
jerunobtrusive syntax (subjective) -- proper closures, sum types, robust pattern matching, clean semantics02:27
jera good module system would be nice too02:27
jeras well as some form of type classes / interfaces with assoiciated types02:27
jeri.e., type generic interfaces02:28
prologicit’s a shame you can’t really define pipelines so elegantly in Python such as what you’ve just descibed here02:29
prologicthe data model doesn’t really allow for this02:29
prologicoop et all02:29
jerthe solution is messaging02:31
prologicala circuits :)02:31
jerwhere the output object is the receiver of something else02:31
jerthe implicit parameter02:31
prologicin any case yeah you basically have to define a set of classes and objects that behave this way and help facilitate this kind of behavior (pipelines)02:32
jeri like functions02:33
jeryou can do anything with functions02:33
jerfor instance, a module system is merely a function returning a tuple of other functions; the name of those functions correspond to their position in the tuple -- yeah it's crude, but it works.02:34
prologiclook at JavaScript for example02:35
prologicit is basically just functions02:35
jernot the example i was hoping for but yeah =]02:35
prologicsure it has a prototype inheritence chain02:36
prologicbut everything you do with it are based around functions02:36
*** robonerd has quit IRC02:36
*** robonerd has joined #io02:37
*** robonerd has quit IRC02:37
*** robonerd has joined #io02:37
*** stapler has joined #io02:46
prologichi stapler 02:48
prologicyou missed all the good bits :)02:48
staplerzip lining!02:50
robonerdstapler does that mean you did long rails of cocaine?02:52
staplerhahahah. no.02:52
stapleractual zip linjng02:52
robonerdsure, sure :)02:52
staplerprologic, timestamps?02:53
staplernever mind.02:54
prologicyeah last 2 days :)02:59
prologictoday and yesterday’s logs :)03:00
stapleri really would love to use Io for real stuff03:04
prologicnothing stopping you :)03:16
staplerprologic, the ecosystem is a little dead03:23
stapleri wouldnt mind writing a web framework or utilities though03:23
*** stapler has quit IRC03:24
prologicyes well there’s that03:39
*** TheMonkey has joined #io03:46
*** stapler has joined #io05:46
staplerthe next thing I'll work on is standalone executables05:53
*** pchalupa has joined #io06:20
*** petr has quit IRC07:07
*** petr has joined #io07:08
*** hashmal has joined #io07:50
robonerdstapler how does that work in theory? standalone executables08:19
*** xjiujiu has joined #io08:42
*** noTHD has quit IRC08:44
*** hashmal has quit IRC09:02
*** ijon_ has joined #io10:53
*** pchalupa has quit IRC10:55
*** petr has quit IRC11:16
*** petr has joined #io11:17
*** noTHD has joined #io11:46
*** levitation[A] has quit IRC13:59
*** levitation[A] has joined #io14:06
*** ijon_ has quit IRC14:16
*** ijon_ has joined #io14:18
*** pchalupa has joined #io15:13
staplerrobonerd: see srlua, py2exe15:18
*** xjiujiu has quit IRC15:19
*** stapler1 has joined #io16:12
*** stapler has quit IRC16:12
*** stapler has joined #io16:13
*** stapler1 has quit IRC16:13
*** stapler1 has joined #io16:13
*** stapler2 has joined #io16:15
*** stapler1 has quit IRC16:15
*** stapler1 has joined #io16:15
*** stapler has quit IRC16:17
*** stapler2 has quit IRC16:20
*** stapler has joined #io16:21
*** stapler1 has quit IRC16:21
*** stapler1 has joined #io16:21
*** stapler has quit IRC16:26
*** stapler1 has quit IRC16:27
*** TheMonkey has joined #io16:29
*** noTHD has quit IRC16:33
*** robonerd has quit IRC16:34
*** robonerd has joined #io16:35
*** noTHD has joined #io16:37
*** noTHD has quit IRC16:45
*** ijon_ has quit IRC17:19
*** ijon_ has joined #io17:19
*** ijon_ has quit IRC17:21
*** ijon_ has joined #io17:22
*** ijon_ has quit IRC17:40
*** ijon_ has joined #io17:46
*** robonerd has quit IRC17:53
*** robonerd has joined #io17:54
*** ijon_ has quit IRC18:11
*** noTHD has joined #io18:36
*** z10n has joined #io20:38
z10nummm smashthestack we have a major problem a big issue with your server20:39
robonerdwhat's the issue z10n ?20:42
z10nall right robonerd you when you cd into the dir after you passed level1 instead of getting the password i got this.... hold this you have to see20:43
z10n┌␊┴␊┌1@␋⎺:/$ 20:43
z10nand a bunch of other jibber jibber20:43
z10n i am going to copy my whole terminal session into a file for you to see20:44
z10nall right i got the file of half of the session  should i log off 20:47
z10nof the server20:47
*** levitation[A] has quit IRC21:01
z10nabout this error i emailed this to smashthestack21:02
z10ni'm logging off  see the rest of you latter going to opensecuritytraning :D21:03
*** z10n has left #io ()21:03
*** levitation[A] has joined #io21:07
*** stapler has joined #io21:14
staplerrobonerd, he's talking about a game21:18
staplerone of the servers is named Io.21:18
jercan't believe that's still around21:41
jeri played smashthestack before i got into working on io -- and i first worked on io in october 200321:42
*** stapler has quit IRC21:48
*** petr has quit IRC22:04
*** petr has joined #io22:08
*** petr has quit IRC22:17
*** petr has joined #io22:44
*** petr has quit IRC22:49
*** levitation[A] has quit IRC23:01
*** levitation[A] has joined #io23:07
*** petr has joined #io23:19
*** robonerd has quit IRC23:41
*** robonerd has joined #io23:49
*** stapler has joined #io23:55
stapler oh23:55
*** levitation[A] has quit IRC23:57

Generated by 2.11.0 by Marius Gedminas - find it at!