[Boards: 3 / a / aco / adv / an / asp / b / biz / c / cgl / ck / cm / co / d / diy / e / fa / fit / g / gd / gif / h / hc / his / hm / hr / i / ic / int / jp / k / lgbt / lit / m / mlp / mu / n / news / o / out / p / po / pol / qa / r / r9k / s / s4s / sci / soc / sp / t / tg / toy / trash / trv / tv / u / v / vg / vp / vr / w / wg / wsg / wsr / x / y ] [Home]
4chanarchives logo
/dpt/ - Daily Programming Thread
Images are sometimes not shown due to bandwidth/network limitations. Refreshing the page usually helps.

You are currently reading a thread in /g/ - Technology

Thread replies: 255
Thread images: 31
File: ko.png (389 KB, 934x1000) Image search: [Google]
ko.png
389 KB, 934x1000
What are you working on, /g/?
>>
First for IF YOU DON'T KNOW C, GET OUT
>>
>>51965439
second for this
>>
Haskell
>pure functional, i.e. pure wankery
>significant whitespace
>slower than ocaml
>all libraries are of garbage quality, but there are many libraries
>wankery-exclusive documentation style
OCaml
>no parallelism >$CURRENT_YEAR
>very few libraries
>nazi-tier contribution control
>good documentation
SML
>few libraries
>several incompatible implementations
>not much documentation

Well, /g/?
>>
I'm learning C++ and reading Practical C++ Programming. When defining function bodies outside of a class, they're written as inline. It then talks about how you can define them inside the class, and that inline is not needed because functions declared inside a class are automatically declared inline.

In other tutorials i've seen, people don't define their member functions as inline. Also, from my limited understanding, inline should be used for only simple, small functions. Can anyone tell me why C++ class member functions are apparently, or should be, inline? Doesn't really say why in the book.
>>
>>51965439
Fifth for if you use C for anything whatsoever in 2015, almost 2016, GET THE FUCK OUT!
>>
>>51965460
LE WANKERY XD
>>
Does anyone know if 2015 GPUs still favor floats over doubles?
>>
>>51965461
If practical C++ really says that, then burn it and throw it at a hobo, it literally couldn't be more wrong.
>>
>>51965461
It doesn't really matter anymore since all decent compilers can do link-time full program inlining.

>>51965481
Yes. All hardware ever will probably have faster float arithmetic than double arithmetic.
>>
>>51965481
GPUs will never favor double over floats for the simple and obvious reason that 2 > 1. But hey, since you're such a genius, I bet you'll find a way to make 2 < 1 and then the opposite will be true XD
>>
File: iyY4Vnd.webm (906 KB, 640x360) Image search: [Google]
iyY4Vnd.webm
906 KB, 640x360
Ask your beloved programming literate anything.

>>51965460
>>slower than ocaml
Haskell GHC:                    0.454930841 seconds time elapsed
OCaml: 0.747779583 seconds time elapsed
Scala: 1.484613540 seconds time elapsed
Scheme Gambit: 1.932229635 seconds time elapsed
F# Mono: 4.429195035 seconds time elapsed
>>
>>51965481
Do you understand anything at all?

When performing vectorized operations, the smaller the data type, the more you can fit in a register. Doubles are twice as large as floats, so you can only perform half as many operations on them.
>>
>>51965530
>>>faster than ocaml
Haskell GHC:                    8349028490283490238409.454930841 seconds time elapsed
OCaml: 0.747779583 seconds time elapsed
Scala: 1.484613540 seconds time elapsed
Scheme Gambit: 1.932229635 seconds time elapsed
F# Mono: 4.429195035 seconds time elapsed
>>
>Hello, yes, I prefer if there is no way to know what a function's side effects may be without reading and understanding its implementation
>>
>>51965393
can you people help me with this? for some reason it doesn't work in chrome:
https://jsfiddle.net/m66tpc4c/1/
>>
>>51965578
So you'll like haskell, then!
>>
>>51965616
That's not a pro-Haskell quip, it's pro-purity

Haskell's notion of purity is pretty damn bad, doesn't even include proof of termination
>>
>>51965610
Post code in here, anon.
>>
Have you ever made money (for youself, not for a company) using open source software and your skills?
>>
File: rew.png (441 KB, 1048x587) Image search: [Google]
rew.png
441 KB, 1048x587
What music do you listen to (while programming), /g/?
>>
File: Cover.jpg (2 MB, 2000x2000) Image search: [Google]
Cover.jpg
2 MB, 2000x2000
>>51965674
Dark DnB or neurofunk, especially stuff from Virus, Blackout, and Eatbrain
>>
>>51965674
new retro, eve online, ost, the hacker freedom song, etc...

https://www.youtube.com/watch?v=c9cZSLfh7Xw
>>
File: 1446495891675.jpg (829 KB, 1600x2270) Image search: [Google]
1446495891675.jpg
829 KB, 1600x2270
>>51965674
Eurobeat
>>
>>51965674
I like outrun and the like.

>>51965707
you should try waveshaper one of these days.
>>
File: why.jpg (126 KB, 668x454) Image search: [Google]
why.jpg
126 KB, 668x454
I need a clue for my java tutorials homework (picrel). So far the code I came up with:

import java.util.*;

public class Main {
public static Person findInList(List<Person> list) {
Scanner sc = new Scanner(System.in);
System.out.print("Name: ");
String name = sc.next();
System.out.print("Year of birth: ");
int yearOfBirth = sc.nextInt();
Person wanted = new Person(name, yearOfBirth);
sc.close();
if(list.contains(wanted)) {
return wanted;
} else {
return null;
}
}

public static void main(String[] args) {
String name = "";
int yearOfBirth = 1;
List<Person> lst = new ArrayList<>();

Scanner sc = new Scanner(System.in);
while(yearOfBirth!=0) {
try {
System.out.print("Name: ");
name = sc.next();
System.out.print("Year of birth: ");
yearOfBirth = sc.nextInt();
Person prs = new Person(name, yearOfBirth);
if(yearOfBirth!=0) {
lst.add(prs);
}
}
catch (InputMismatchException exc) {
System.out.println("Wrong input!");
sc.nextLine();
}
}
sc.close();

System.out.println(lst);
}
}


and

public class Person {

private String name;
private int yearOfBirth;

public Person(String name, int yearOfBirth) {
this.name = name;
this.yearOfBirth = yearOfBirth;
}

@Override
public String toString() {
return "Name: " + name + " Born: " + yearOfBirth;
}
}


Should the HashSet creator be in the main function or after it? Eclipse shows a shitload of errors in both situations and I can't figure this out by googling.
>>
>>51965498
>All hardware
But it's already not the case for CPUs.

>>51965504
>>51965542
>Le ironic reply
CPUs made most floats perform worse with the switch to x64, it's entirely dependant on what the hardware manufacturers decide to do with the architecture, so stop acting like faggots. If a GPU manufacturer decided to put only x64 registers, a higher ratio of DP FPUs to SP FPUs, and have no instructions that take multiple inputs from the same register it would be the case easily. In a case of a mix of these conditions you'd have to analize where the bottleneck is (lack of fpus, amount of datta allocable, on registers, etc)
I'm not familiar with GPU hardware or microcode as to make this call, and I doubt you guys have such a clear understanding either, I'm asking for someone who either has hardware data or benchmarks.
>>
>>51965460
Haskell. There are many fantastic haskell libraries, and pure wankery is actually really fun and productive. Haskell even supports imperative-style if you really want it:
testStack :: Stack Int ()
testStack = do
push 1
push 2
push 3
three <- pop
push 4
pop
push 5
push three

Which is translated via syntactic sugar to a wankery implementation. Plus, parallelism is painless once you enter the realm of pure functionalism.
>>
>>51965674
Sludge
>>
>>51965812
simd float is faster (2 to 3x more operations/second)
>>
>>51965812
>talking about floating-point arithmetic performance without talking about SIMD
Kill yourself.
>>
>>51965674
None. I find it distracting, though sometimes I put on over-the-ear headphones with nothing playing to block out ambient noise. I just focus better when it's very quiet.
>>
>>51965674
I have porn playing in the background
>>
File: check-if-defined-javascript.png (21 KB, 684x228) Image search: [Google]
check-if-defined-javascript.png
21 KB, 684x228
im reading about object oriented programming with javascripot on mozilla website.

i dont get whats in the picture. As far as i know, which isn't very far, logical operators can be used like this.

var answer = isthistrue || is this true ;

and then it returns a boolean value. But in the image where does the boolean value go.
Basically, in lower level terms how does this line of code work????
>>
>>51965674
https://youtu.be/XsZKrctSDaw
or
https://youtu.be/QpDn4-Na5co
or
https://youtu.be/bwl0zuMpPOM
>>
>>51965834
shit I haven't listened to Acid Bath for years, i don't listen to metal much anymore but that was a good album
>>
>>51965873
It's the same logic, just not limited to booleans. The value of x || y is x if x is a "truthy" value, or y otherwise. So for objects, it's x if x is not null and y otherwise.
>>
>>51965873
It's basically working like this:
var MYAPP = (MYAPP ? MYAPP : {});


Which basically boils down to:
set variable MYAPP to MYAPP if MYAPP exists, otherwise set it to empty list/dictionary/whatever the fuck {} means in JS.
>>
>>51965481
the vast majority, if not all, of the consumer grade GPUs favor floats.
But there are now some GPUs that have double precision that are used for scientif computing instead of being used to graphic stuff. See the Tesla/Fermi GPUs fron NVIDIA
>>
>>51965837
>>51965839
I mentioned simd, architectures may only support on type and then waste time doing a conversion from double to float. Or your use case may not have a bottleneck on data transfter as you only use few registers alternatively. It's all relative.
Hence, why I ask for actual benchmarks if anyone has them.
>>
File: phonesystemhackercreep.jpg (52 KB, 970x546) Image search: [Google]
phonesystemhackercreep.jpg
52 KB, 970x546
>>51965674
Psytrance - https://www.youtube.com/watch?v=C_uNmmgQliM

>sport sunglasses
>fingerless leather gloves
>leather coat
>no syntax highlight
>green code
>black background
>look mom I'm a hacker
>>
>>51965907
{} is an empty object.
>>
>>51965812
Congrats, you're clinically retarded!
>>
>>51965930
Well, GPUs use SIMD for everything so the answer is that floats will be faster.
>>
>>51965873
JavaScipt's || and && operators do not really return booleans. Here's how it goes:
1. For A || B, if A is truthy, returns A. Otherwise, returns B - if B is truthy, || will be truthy.
2. For A && B, is A is falsy, returns false. Otherwise, returns B - is B is truthy, && will be truthy.
In the example on the screenshot, an object is always truthy. So doing SomeObject || {} will return SomeObject if the variable was already declared & assigned (so effectively doing nothing), or an empty object otherwise (so effectively initialising the var with an empty object that we can append our methods to).
>>
>>51965873
>>51965958
>>
File: 1444836591112.png (39 KB, 566x361) Image search: [Google]
1444836591112.png
39 KB, 566x361
>>51965674
2hu
>>
>>51965460
I chose SML over OCaml because of MLton and what I consider to be much more readable syntax. That said, good luck working with Unicode text in SML.

I'd say, wait for 1ML (http://www.mpi-sws.org/~rossberg/1ml/). Try out Swift and Scala in the meanwhile.
>>
>>51965674

All my weaboo stuff, as normal.
>>
>>51965960
It would still depend on the amount of spfpus vs dpfpus in the cases where your bottleneck isn't data transfer.
>>
>>51965473
>what is high-performance networking
>what is embedded
>what is not being retarded
>>
>>51965963
>truthy
>falsy
>>
With HLSL, is it possible to "create" planes(or vector graphics in general) by using the texture coordinates of the screen and transforming them into world space? I tried once myself already but it didn't work as well as I thought it would; I think it's because the screen coordinates are technically transformed by the view matrix already(so the usual world>view>projection doesn't work) but I'm not sure.

Or are there simpler ways to create shadeable geometry just from math in HLSL? For instance, how would you go about drawing a circle on the x,y plane without loading any actual 3d model?
>>
>use my editor as it is, and hardcode the game logic.
>develop it, spend a shit ton of effort into making it into a proper engine only I'll use
what do /dpt/?
>>
File: 1385792865025.png (304 KB, 722x768) Image search: [Google]
1385792865025.png
304 KB, 722x768
How do I learn JS, /dpt/?
>>
>>51966153
Do this: https://en.wikipedia.org/wiki/Minimum_viable_product. (If you want to actually sip your game, that is.)
>>
>>51966153
Don't overengineer. You'll never finish it.
>>
>>51966175
a good start would be reading tutorials and writing things in javascript instead of posting here
>>
>>51966122
I don't know shit about direct3D, but in GLSL's pixel shader:
>Or are there simpler ways to create shadeable geometry just from math in HLSL? For instance, how would you go about drawing a circle on the x,y plane without loading any actual 3d model?
You take the fragment x,y, find the distance of it to some coordinate and use a step function that returns 1 if it's less than length, 0 otherwise, then frag_color = result * color;

If you don't mind learning it all for GLSL here's an online tutorial: https://www.shadertoy.com/view/Md23DV
Mercury also recently published this api for signed distance functions on glsl if you want something more advanced but easy to use http://mercury.sexy/hg_sdf/
>>
>>51966153
Depends on how many times you'll change the game logic.
>>
>>51965907
>>51965895
merci peeps, i get it now
>>
>>51965812
>>51965930
benchmarks is not needed since the official cpu/gpu specs admit that fp64 operations/second is lesser than fp32 in theory so there no chance of fp64 being faster in practice.

http://www.geeks3d.com/20140305/amd-radeon-and-nvidia-geforce-fp32-fp64-gflops-table-computing/
http://www.anandtech.com/show/7711/floating-point-peak-performance-of-kaveri-and-other-recent-amd-and-intel-chips
>>
>>51966248
Thanks broski for being someone actually helpful, a table is also fine.
There's seems to be huge differences between models, it goes from 1/2 all the way to 1/32 in the worst cases.
>>
>>51965674
Youtube "feint snake eyes", then I let youtube autoplay the next songs from monstercat.
>>
>>51965812
>CPUs made most floats perform worse with the switch to x64,
wut?
What cpu did that?
>>
>>51965530
F# confirmed for being shit.
>>
>>51966414
The non-SIMD parts of x86 FPUs now do everything at a precision of 80 bits. So it's even a bit cheaper to use doubles since it's not "as far" to convert there and back.

But again, if you cared at all about floating-point performance you'd be using SIMD, where smaller will always be faster than larger.
>>
>>51965559
>not 0 seconds because haskell doesn't have sideeffects
>>
I'm doing Advent of Code day nineteen, in Python, trying to wrap my brain around how to make all the different replacements.

Anyone else doing Advent of Code?
>>
>>51965759
Jesus Christ don't import all of Java.util if you aren't even using it
>>
>>51965616
Okay explain me what kind of side-effect the following signature describes
main :: IO () 
>>
>>51966536
Could be anything. So now you know that it isn't safe to do concurrently, isn't safe to reorder, isn't safe to skip, etc.
>>
>>51966453
>The non-SIMD parts of x86 FPUs now do everything at a precision of 80 bits.
That's configurable with fpu control words.
>So it's even a bit cheaper to use doubles since it's not "as far" to convert there and back.
No, FLD with 32 or 64 bit operand has the same instruction latency - but of course 64 bits requires twice the memory bandwidth so it will be slower to load lots of them.
>>
>>51966524
Only the relevant code is used in the resulting bytecode so it. Makes no difference
>>
File: maxresdefault.jpg (131 KB, 800x800) Image search: [Google]
maxresdefault.jpg
131 KB, 800x800
>>51965834
Mah nigga
>>
>>51966586
>it isn't safe to do concurrently
Not always.
>isn't safe to reorder
Not always.
>isn't safe to skip
Not always.
>>
>>51966636
Well, you have to assume that, anyways.

Whereas in most languages, you have to always assume that for any function, except if you know its implementation and the implementation of any function it calls, and it never changes.
>>
>>51966102
Stop using deprecated languages, faggot. C++ is a billion steps up from C. Forth or lisp can do all that.
>>
>>51966524
>>51966594
Any idea about the problem though?
>>
>>51966665
>C++ is a billion steps up from C
lol
> Forth or lisp can do all that.
loooooool
>>
>>51965674
This guy gets it >>51965713
>>
File: async_test.png (92 KB, 982x648) Image search: [Google]
async_test.png
92 KB, 982x648
Wrote a lazy concurrent image downloader to test out clojure's core.async. It's actually pretty easy to use once you get used to it.
>>
>>51966728
>I willingly glide across a sea of knowledge using my ignorance as a shield against it!
>>
            PERFORM 100 TIMES

DIVIDE 3 INTO I GIVING X REMAINDER R3
DIVIDE 5 INTO I GIVING X REMAINDER R5
IF R3 EQUALS 0 AND R5 EQUALS 0
DISPLAY "FIZZBUZZ"
ELSE IF R3 EQUALS 0
DISPLAY "FIZZ"
DISPLAY I
ELSE IF R5 EQUALS 0
DISPLAY "BUZZ"
DISPLAY I
ELSE
DISPLAY I
END-IF

COMPUTE I = I + 1

END-PERFORM

Why does I stop increasing after the first FIZZ?
>>
>>51966767
These coloured parentheses look really good.
>>
>>51966798
That's some mighty projection.
>>
>>51966767
which part is the concurrent part?
>>
>>51966665
>C++ is a billion steps up from C

Actually, my dear, if you knew about operators in C/C++, you'd know that it was only plus one.
>>
>>51966798
Most Lispers usually do.
>>
what should I make in C?

I'm just a beginner moving away from java
>>
>>51967087
A kernel
>>
>>51967087
Garbage collector.
>>
>>51967087
first, implement all the features of java
>>
>>51966665
>C++ is a billion steps up from C

In terms of complexity without corresponding payoff, yes.

There's a reason C++ is no longer the dominant application development language. You have to be a language lawyer just to get things running reasonably, and you'll never be very productive.

Here's my theory: people like C++ (and, in many applications, C) because they don't like doing real work. They'd rather dick around with reading language specifications and coming up with ludicrously contrived, clever ways of doing things.

Meanwhile, the "idiot" using Visual Basic, C#, or Ruby has delivered real value to businesses.

But the neckbeard gets to lean back in his racing car office chair and congratulate himself on a job well done. Meanwhile, the company he works for is sinking like the titanic because they're not creating value fast enough.
>>
>>51965963
holy shit, I had no idea this is a thing in JS... FFS
>>
>>51967118
>>51967033
>>51967021
>>51966877
What's wrong, didn't drink enough cmen? Is that why you're so cranky? Can't spell cuck without C!
>>
>>51967087
>I'm just a beginner moving away from java

Move right back to Java, you fool. What, do you not want to be employed or something?

The only thing you should be doing in C is implementing classic data structures to fully understand how they really work. Then, write things like device drivers and operating system kernels. Maybe do some embedded programming. Outside of that, there really isn't much reason to be programming in C, contrary to what the /g/ wannabe alpha-nerd types say.
>>
>>51967140
kuk
>>
>>51965674
I used to listen to classical music, now I listen to mixes of techno or house. I was much more productive when I listened to classical music though, and the diversity of sound was very interesting.

Are you bros allowed to listen to music at work? The last place I worked at my boss played /mu/-core for everyone on some speakers he had. It made it hard to focus sometimes.
>>
>>51967056
>>51967075
>effectively, a truthy/falsy short circuit and/or means that with an and, the first "falsy" value is returned
if MYAPP is undefined, it will return undefined, becaused MYAPP is the first falsy value encountered in the short circuit
if MYAPP isn't undefined, {} would be returned
a truthy/falsy and is not what you want, you want to return the first truthy value, not the first falsy one
>>
This is what REAL HACKERS do IRL:
https://www.youtube.com/watch?v=aZJM-iIpbqc

https://www.youtube.com/watch?v=Zi-CCXh-0ck

https://www.youtube.com/watch?v=Xf5q6wCyD_A
>>
>>51967118
>Here's my theory: people like C++ (and, in many applications, C) because they don't like doing real work. They'd rather dick around with reading language specifications and coming up with ludicrously contrived, clever ways of doing things.
This is the same problem as Lisp and Haskell, which were designed for "ludicrously contrived, clever ways of doing things."
>>
>>51966175
Make a simple homepage for yourself with it. If you want a book to study from, Essential JavaScript is good.
>>
>>51967189
Come back when you're no longer in middleschool, kid.
>>
>>51967168
I was for my summer internship, but that's because the only people with me from my team were the other interns, my boss was at another site. Though I don't think he'd really care either.
>>
>>51967171
Oh ok, i completely understand now thanks again
>>
File: 1450369221617.png (80 KB, 694x732) Image search: [Google]
1450369221617.png
80 KB, 694x732
>>51965393
>>
>>51967238
Are the numbers ints?
>>
>>51965393
Refactoring my code to prepare for

https://github.com/apple/swift-evolution/blob/master/proposals/0007-remove-c-style-for-loops.md

and

https://github.com/apple/swift-evolution/blob/master/proposals/0003-remove-var-parameters-patterns.md
>>
>>51967254
>not using a language that supports fractions
>>
>>51967259
How do you feel about Swift 2.0 as a whole?
>>
Sized types are an interesting approach to termination checking. Now, to figure out how to apply them to "native" values like unsigned integers.
>>
What would you guys want in a simple bug tracker?
>>
>>51966995
The go blocks run as processes in a thread pool. There's basically a producer-consumer thing going on: several workers wait for links to download, while load-image-urls sends links to the workers as they become available. -main looks synchronous, but create-download-workers and load-image-urls don't block since they aren't being run in the main thread.
>>
>>51967302
2.0? It's a lot better than 1.2. Although I don't really use the error handling that they introduced. I'd rather keep to using an Either type and optionals.

do {
let a = try someFunctionThatCanThrow()
} catch {

}
>>
>>51967188
When does he have time to watch anime?
>>
>>51967171
So why does
var x = "test" && "tests" return the string "tests" when i print variable x to the console
>>
>>51967311
Termination checking is a meme.
Is something that terminates in 1 googol steps any more useful than something that doesn't terminate?
>>
>>51967390
Because the value of x && y is x if x is falsy, and y otherwise.

>>51967407
It's not a meme when you're working with proofs. Without termination checking, you can prove any proposition you want, like this:
foo : P == NP
foo = foo
>>
>>51967352
Yeah, personally I find the error handling to not be very useful given that optionals exist in the language and you can pretty well cover your bases with them. I guess I could see where it would be useful if you were using 3rd party data for a web app or something.
>>
    private void look() {
moveall();
String lookLeft = "", lookRight = "", lookUp = "", lookDown = "";
if (simplePlacement[x_pos-1][y_pos] != null)
lookLeft = "to your left is " + simplePlacement[x_pos-1][y_pos];
if (simplePlacement[x_pos+1][y_pos] != null)
lookRight = "to your right is " + simplePlacement[x_pos+1][y_pos];
if (simplePlacement[x_pos][y_pos-1] != null)
lookUp = "above your position is " + simplePlacement[x_pos][y_pos-1];
if (simplePlacement[x_pos][y_pos+1] != null)
lookDown = "below your position is " + simplePlacement[x_pos][y_pos+1];
if (lookLeft != null) //fugg
textOutput[0] = lookLeft + "," + lookRight + "," + lookUp + "," + lookDown + ".";
//textOutput should be whichever values are valid separated by commas. Like lookLeft, lookUp could be a good output.
//obviously the commas fuck the appearance up but they can't be really appended unless you check everything every time
lookLeft = null;
lookRight = null;
lookUp = null;
lookDown = null;
}


can someone help me with this implementation? I don't understand how to cull the commas I don't want
>>
>>51967390
because there is no falsy value
test and tests are both truthy, only the empty string is falsy
with an and, if there are no falsy value, the last value is returned as truthy value, because the and would return true, so it can just return the last value as a replacement
with an or, if there is no truthy value, the last value is returned as falsy value, because the or would return false, so it can just return the last value as a replacement
it's just like a normal and/or, just that it returns the value it stopped short circuiting at instead of true/false because the value is already truthy/falsy
>>
>>51965674

Hans Zimmer
>>
>>51965759
You should be able to create HashSet<Person>s in main() just like you made a List<Person>
>>
How long until Java dies off?
>>
>>51967599

2100
>>
>>51967140
Can't spell Pythonfaggot without Python.
>>
>>51967472
A really simple fix could be using a new line instead of commas, but that'd end up looking goofy. Since you're checking if each value is null already, I'd break up the text output into more than one statement to make it easier to implement a "If lookLeft =! null, print leftLookOutput" or something like that.
>>
>>51965674
who /dubtechno/ here?
>>
>YFW programming literate is the same person as benchmark-fag is the same person as /g/ programming library-fag

it's like someone with multiple personality disorder and all of them are autistic faggots
>>
>>51967238
Retard edition:
#include <iostream>
#include <algorithm>

int main() {
std::vector<double> i {1, 2, 3, 4};
double avg = std::accumulate(i.cbegin(), i.cend(),
std::make_pair(0,0.0), [](auto p, double el)
{
int newCount = p.first + 1;
return std::make_pair(newCount, ((p.second * p.first) + el) / newCount);
}).second;
std::cout << avg;
return 0;
}
>>
>>51967238
(define (average lst)
(/ (foldr + 0 lst) (foldr (lambda (x y) (+ 1 y)) 0 lst)))
>>
>>51967669
could you point out the lambda
>>
>>51967087
A linked list or heap for starters so you get a hang of how things are done.
>>
>>51967711
[](auto p, double el)
{
int newCount = p.first + 1;
return std::make_pair(newCount, ((p.second * p.first) + el) / newCount);
}

This is benchmark-anon tier code, but I did what the question asked.
>>
>>51965393
this
@echo off
set /p _ssid_=enter ssid & echo.
set /p _password_=enter password (8 char minimum) & echo

netsh wlan set hostednetwork mode=allow ssid=%_ssid_% key=%_password_%

netsh wlan start hostednetwork
netsh wlan show hostednetwork
pause..
netsh wlan stop hostednetwork
>>
>>51967238
average xs = let
(sum, length) = foldr (\x -> (+ x) &&& (+ 1)) (0, 0) xs
in sum / length
>>
>>51965674

D͚̼E̛͇A̪̗͙̬̜T̨̹̟͉̪̬͍̘H̴̘͈̰̖͕͚ͅ ̙̪GṚ̪͖I͏̰̲P̟͕̹͓̳̤{̵̹͕̺S̩͙̗̞̻̞͙ ͏̗̝

D͚̼E̛͇A̪̗͙̬̜T̨̹̟͉̪̬͍̘H̴̘͈̰̖͕͚ͅ ̙̪GṚ̪͖I͏̰̲P̟͕̹͓̳̤{̵̹͕̺S̩͙̗̞̻̞͙ ͏̗̝

D͚̼E̛͇A̪̗͙̬̜T̨̹̟͉̪̬͍̘H̴̘͈̰̖͕͚ͅ ̙̪GṚ̪͖I͏̰̲P̟͕̹͓̳̤{̵̹͕̺S̩͙̗̞̻̞͙ ͏̗̝
>>
File: 1443208186259.jpg (104 KB, 960x960) Image search: [Google]
1443208186259.jpg
104 KB, 960x960
>>51965393

Chess engine in JavaFX

upto 3k lines of code now
>>
>>51967756
Even better:
average = uncurry (/) . foldr (\x -> (+ x) &&& (+ 1)) (0, 0)
>>
>>51967637
me

musicforprogramming.net is good, too
>>
>>51967238
Why would you use lambdas to do this? They're inherently less efficient for this purpose. All of the solutions so far use logical leaps to get across the fact that this isn't an operation that is made more efficient with the use of foreach.
>>
File: tomoko lite uses thinkpaddu.png (984 KB, 1920x1080) Image search: [Google]
tomoko lite uses thinkpaddu.png
984 KB, 1920x1080
>>51967087
A stack implemented as a singly linked linked list.
>>
>>51967766
He he
>>
>>51967328
Ability to track bugs.
>>
>>51967804
you got it senpai
>>
>>51967607
Fugg :D
>>
>>51967788
see>>51967697
Its a pretty useful if you dont use builtin list functions for the sum and length.
>>
>>51967766
YUHH!
>>
File: 1408572151020.gif (792 KB, 400x223) Image search: [Google]
1408572151020.gif
792 KB, 400x223
>>51967816
It should also be able to track moths.
>>
>>51967788
I wouldn't say they're inherently less efficient, it's just there's pretty much always a nicer way to do it than with a recursion scheme like foldr and a lambda. I guess the benefit of doing it that way is that it works for any foldable type.
>>
There's absolutely nothing wrong with writing system("ffmpeg.exe"+param.c.str()); is there
That's an actual line of code I just wrote because I'm a lazy cunt who knows all his programming from reading a few online courses
>>
>>51967872
>writing non-portable code
>>
>>51967872
>string+string
>>
I have a question,
What are the differences between lazy evaluation and what SICP calls normal-order evaluation?
>>
>>51967872
There is absolutely something wrong with doing that instead of just using libffmpeg.
>>
>>51967828
>if you dont use builtin list functions for the sum and length.

Not him, but to me that does seem like a logical leap to me, unless built-in sum and length don't satisfy you for some reason.
>>
>>51967377
>wanting to have an inkling of a life
for what reason
>>
>>51967887
exactly what it sounds like. the value is evaluated only when its actually used.
>>
I need to test for users I'd to see if they fall within a certain range, for simplicity lets say 1 to 100. If a user put in 002 then that would fall within the range but is not a valid user id, what could I do to handle this. Getting the leftmost or rightmost wont work because then 300 would evaluate to 3
>>
>>51967904
Not every language has a built in sum. Or maybe you have to use a language your boss made that doesnt support it. Being reliant on built in functions is pretty bad taste. Especially because with lambda expression, youre probably working in a functional environment so using for just shows you dont know what youre doing.
>>
>>51967887
Lazy evaluation means that nothing is evaluated until pattern matched upon, passed to a primitive/foreign function, etc. although typically languages with laziness also allow you to force evaluations manually for optimization purposes.

It's sort of a generalization of short circuiting. You can think of this logical AND function as being definitionally short circuited since the second parameter isn't pattern matched:
and : Bool -> Bool -> Bool
and False x = x
and True _ = True
>>
>>51967950
If you think about it, invalid ids all start with 0, and all valid ids dont start with 0. Start there.
>>
How do I find a general formula for the number of segments in a grid ?
For example, a grid of 2x2 is made of 4 segments, 3x3 is 12.

For 3x3 and above, I wrote this:
n = 3 * (w - 1) * (h - 1)

n is the number of segments, w and h are the width and height of the grid.
It works for any w and h >= 3. But with 2x2, it gives 3 which's wrong.
How do I generalize it to handle 2 ?
>>
>>51967156
C is a good first language to learn fully as a first language.

>quite simple and straightforward syntax
>relatively small
>indepth use of memory management and pointers (something that 99% of programmers struggle with)
>virtually every modern language is influenced by C and bears a resemblance to it, both in syntax and how functions work

In learning C, not only are you learning things that are almost untouched in other languages, but you are setting a groundwork that makes adopting other languages far more achievable, as you'll have a sense of familiarity with all of them.

Definitely not the best overall language to use for most projects. Not by a longshot. But it's definitely one of the top languages to learn and absorb.

Getting it out of the way is a very wise idea. However, if one isn't interested in being as versatile a programmer as possible, then it's probably not necessary. Impatient aspiring application developers can go straight to Java or Python, but they won't ever unlearn the habits that comes with that choice.
>>
>>51968000
Oops, that's logical OR. But you get the idea.
>>
Any idea how I can make this code (which I'm not even sure will give me the correct answer) faster? Too fucking slow.

import re

key = {}
with open('input.txt') as f:
for line in f.readlines():
try:
k, v = re.findall(r'([a-zA-Z]+) => ([a-zA-Z]+)', line)[0] # WTF
if k not in key:
key[k] = [v]
else:
key[k].append(v)
except (IndexError, ValueError):
if line:
starter_molecule = line
molecules = set()
for k, v in key.items():
key_len = len(key)
i = 0
for mol in v:
while i < len(starter_molecule):
tmp = starter_molecule[i:]
pos = tmp.find(mol)
if pos >= 0:
molecules.add(starter_molecule[:pos] + mol + starter_molecule[pos+key_len:])
i = pos+key_len
else:
break
print(len(molecules))


It's Python.
>>
>>51968005
Why bother? Just make a special case.
>>
>>51968027
Start by using actual variable names. Jesus christ
>>
>>51968027
readlines is bad for large files for starters, it loads the whole file into memory.
>>
>>51968038
I have time on my hands.
>>
document.write("MIN_VALUE: " + Number.MIN_VALUE + "<br>MAX_VALUE: " + Number.MAX_VALUE);


>MIN_VALUE: 5e-324
>MAX_VALUE: 1.7976931348623157e+308

How are these numbers, /g/? I don't understand. What does the "e" mean? Pls explain.
>>
>>51968087
Scientific notation, with radix e (~2.718).
>>
>>51968087
>>51968107
Wait, never mind. "e" means 10 for some reason when used this way. God knows why.
>>
File: 2014-04-10-14.00.36-1000x750.jpg (118 KB, 1000x750) Image search: [Google]
2014-04-10-14.00.36-1000x750.jpg
118 KB, 1000x750
ALRIGHT YOU BUCH OF FUCKING WORTHLESS WANNABES

PICK UP YOUR FAVOURITE ALGORITHMS BOOK, CHOOSE A RANDOM ALGORITHM OR DATA STRUCTURE AND IMPLEMENT IT IN YOUR FAVOURITE LANGUAGE AND POST YOUR SOLUTION HERE

NO FUCKING EXCUSES
>>
>>51968136
It kinda sucks writing out 1e308.
>>
how come unitykids on agdg have more progress than dpt who only has to shown stupid hello worlds.
>>
>>51968151

But I already did this earlier in the week.
>>
>>51968005
Found it:
n = 2 * w * h - w - h

Works with w or h == 2.
>>
File: facebook toad.png (108 KB, 500x500) Image search: [Google]
facebook toad.png
108 KB, 500x500
>relational algebra projection corresponds to SQL SELECT
>relational algebra selection corresponds to SQL WHERE
>>
im learning mit-scheme, hows everyones holiday so far?
>>
>>51968259
>bind is SelectMany
>>
>>51965674
http://a.pomf.cat/srkghc.webm
>>
>>51968151
>Implying I do boring pointless work for no reason
>>
>>51968151
>algorithm

*sings*
"Climate change is pertinent. The polar bears, it's hurtin' em. The fossil fuels, we're burnin' em. The world will end, not certain when."

Just a random Al Gore Rhythm.
>>
File: 1431471048976.png (63 KB, 217x338) Image search: [Google]
1431471048976.png
63 KB, 217x338
I just finished my first project. It took me quite a while but it's a useful tool that a huge modding community has needed for a very long time.

I've been adding features and repairing bugs all day.

Nobody even cares.

What do I do /dpt/? How do I cope with peoples utter disdain for a unique, relatively robust and well designed tool?
>>
>>51968265
just why? There are so many good scheme implementations, why did you pick that one?
Just go with Guile, Racket, Chick Scheme, Chez Scheme or Chibi Scheme ffs
https://wingolog.org/archives/2013/01/07/an-opinionated-guide-to-scheme-implementations
>>
>>51968311
>confirmed that you make pointless posts instead of doing actual work
>>
>>51968265

I'm thinking of learning C# on edx over the holidays.Anyone taken it yet?
>>
>>51968329
It's Sunday man.
>>
>>51968325
Should have learnt to analize markets before doing anything.
>>
>>51968341
At least spend Sunday doing "pointless work" instead of making pointless posts.

Anon's Tip Of The Day #43
>>
>>51968362
Pft, no.
>>
>>51968325
should have charged for it, that's when it's worth it

as a wise man once said, "If you're good at something, never do it for free"
>>
>>51968353
The market is most certainly there, I just don't know how to make it visible enough to more of my target audience.
>>
>>51968401
It's my first ever project, I'm neither competent enough nor confident enough to charge money for what internally is a sub-par product.

The modding community relies on the free nature of things, so I was happy to do it for free.
>>
>>51967887
Normal-order will reduce redexes inside a lambda abstraction (i.e. function body). Call-by-name will not. Lazy evaluation (call-by-need) will share inner expressions from before the function is applied to after, if it has no free variables, so it will reduce it sometimes.

Both normal-order and lazy evaluation are nonstrict evaluation orders, because you can have functions that terminate even when applied to nonterminating values
>>
>>51968420
>The modding community
did you add enough memes?
>>
>>51968402
Find wherever it hangs out and make a post.
Use tags on tumblr and twitter.
Etc.
>>
File: sds.png (210 KB, 640x360) Image search: [Google]
sds.png
210 KB, 640x360
>>51968107
>>51968136
So if I'm understanding this correctly:

document.write(Math.pow(5 * 10, -324) == 5e-324);


Should say true? But it doesn't. It says false. How come?
>>
>>51968325
something similar happened to me, but in other context... and with no target community. I just did it, and now I don't even know what people think of my website
not having feedback is really demotivating :(
>>
>>51968427
For example, take expression (using Haskell lambda syntax)
(\x y -> y x) ((\z -> z) q)


Under strict evaluation:
(\x y -> y x) ((\z -> z) q)
(\x y -> y x) q
(\y -> y q)


Under normal order:
(\x y -> y x) ((\z -> z) q)
(\y -> y ((\z -> z) q))
(\y -> y q)


Lazy eval:
(\x y -> y x) ((\z -> z) q)
(\y -> y ((\z -> z) q))


And then it will stay like this, until it's applied in some way that will allow (\z -> z) q to be reduced. Then q will replace that expression.
>>
>>51968532
Check https://en.wikipedia.org/wiki/Evaluation_strategy#Non-strict_evaluation for more info
>>
>>51968480
>document.write

harmful
>>
File: Laughing-Frog-Man.jpg (25 KB, 400x386) Image search: [Google]
Laughing-Frog-Man.jpg
25 KB, 400x386
>>51968325
Just make things you want to use, anon.

Why do you even care what other people think? It's not like you're trying to make money.

Are you looking for praise or something?
>>
>>51965460
>OCaml
>>no parallelism >$CURRENT_YEAR
The garbage collector in Ocaml (which makes Ocaml very fast) sort of prevents it from being used for concurrency. I doubt they are going to redesign Ocaml just to handle concurrency. And desu its a waste of time to make a big deal out of it because we already have Erlang/Elixir that comes with the OTP. The OTP is basically an operating system that handles huge hierarchys of processes with processes that are purpose built just to manage other processes. I think its unreasonable to ever expect that Ocaml could ever have something like an OTP of its own because statically typed compiled languages just dont lend themselves to the dynamic nature of large scale server networking.
tl:dr if you are serious about concurrency, just learn Erlang/Elixir and stop waiting for Haskell or Ocaml to ever come up with something equal
>>
File: abstract feel.jpg (46 KB, 680x684) Image search: [Google]
abstract feel.jpg
46 KB, 680x684
>>51968564
Yes.
>>
>>51968027
>Python
>fast
>>
File: lol.png (201 KB, 1440x900) Image search: [Google]
lol.png
201 KB, 1440x900
>>51968325
pretty much this.
>>51968564
I've made this tool that will help me a lot because I needed it.
>>
>>51968027
>What does the => do?
>>
>>51968027
That's disgusting mate. Have my slightly less disgusting code:
import copy
data=open("Advent19.txt").read().split("\n")

lines=[]
strings=set()
for i in data[:-2]:
lines.append(i.split(" => "))
string=data[-1]

for c,i in enumerate(lines):
currStr=[]
for d,j in enumerate(string):
if len(i[0])==1:
if i[0]==j:
newStr=copy.deepcopy(currStr)
newStr.append(i[1])
newStr.append(string[d+1:])
strings.add("".join(copy.deepcopy(newStr)))
elif len(i[0])==2 and d!=len(string)-1:
if i[0]==string[d]+string[d+1]:
newStr=copy.deepcopy(currStr)
newStr.append(i[1])
newStr.append(string[d+2:])
strings.add("".join(copy.deepcopy(newStr)))
currStr.append(j)
print len(strings)
>>
>>51968400
Okay then. At least throw a rock at a homeless person or kick a child in the shin.
>>
>>51968656
I made this - http://www.nexusmods.com/fallout4/mods/6441/

I thought people would have a use for it, and initially feedback was good and loads of interest. Then it immediately died out due to lack of visibility. I can't think of what else I could do to hit more of my target audience.

Initially I wanted to do it because I had an idea of how it would work in my head and needed a project to work on to get into programming, some more feedback and higher user numbers would've really helped the feeling of accomplishment but it is what it is.
>>
wew
>>
>>51968657
It compares for equality or greater than.
>>
>>51968709
seems more like a problem of marketing.

just show it to where people gather (forums, reddit, facebook).
>>
File: 1315907201.92635185.jpg (105 KB, 1280x720) Image search: [Google]
1315907201.92635185.jpg
105 KB, 1280x720
>>51968480
Why does "Math.pow(5 * 10, -324);" equal 0, /g/?

But 5e-324 is the lowest valid number that is greater than 0 in JavaScript? I just want to understand why.

/g/ pls.
>>
>>51968709
- You don't have a description
- Ask on related forums for input
>>
>>51968544
Nice, thanks for the explanation.
Just another thing, I have never used Haskell, could you explain why lazy evaluation evaluation is so important in Haskell (Haskellers seem very proud of it)?
>>
>>51968761
Because they're not even close to the same thing.

5 * 10^-324 =/= 50^-324

The latter is much smaller, and therefore ends up being represented as 0.
>>
>>51968793
Because it allows you to work with infinite lists.
>>
I'm working on a R project for university, i have to analyze different time series
in the second task i have to use an AR(p) model with p= 0..14 and then use BIC to find the best "p"
I understand what these models are but i dont know how to use it in R correctly
for AIC I used:
 AIC1=c(1:12)
for(i in 0:14)
{AIC1[i+1]=arima(Yt1, order=c(i, 0, 0))$aic}

of course i cant use $bic, for the ARMA(p, q) model we used a formula for BIC, but it doesnt work for AR and i have no idea how to change it
>>
>>51968027
Which can be shortened to:
import copy
data=open("Advent19.txt").read().split("\n")

lines=[]
strings=set()
for i in data[:-2]:
lines.append(i.split(" => "))
string=data[-1]

for c,i in enumerate(lines):
currStr=[]
for d,j in enumerate(string):
p=len(i[0])
if d!=len(string)-(p-1) and i[0]==string[d:d+p]:
newStr=copy.deepcopy(currStr)
newStr.append(i[1])
newStr.append(string[d+p:])
strings.add("".join(copy.deepcopy(newStr)))
currStr.append(j)
print len(strings)


>>51968734
It doesn't, plus it's used for the regex
>>
>>51968480
jesus christ didn't you people have physics in middle school or something?
XeY == X * (10^Y)
>>
>>51968682
kill yourself
>>
>>51968905
for what purpose?
>>
>>51968795
>>51968863
I think I'm starting to get it now:

5 * Math.pow(10, -324);


Should equal 5e-324? Right? But it still equals 0.
>>
>>51968983
Probably some issue with floating-point error in the way pow() is implemented.
>>
>>51968814
So? What are they useful For?
Sorry, but I'm really really new to Haskell, I'm willing to learn and maybe I'll read some book then but now I'm just gathering some basic knowledge...
>>
>>51968833
And my cheeky analysis-based solution to Day 19 part 2:
from re import findall
data=open("Advent19.txt").read().split("\n")[-1]
p=len(findall("[A-Z]",data))
q, r=data.count("Rn"), data.count("Y")
print p-2*(q+r)-1
>>
File: mq9TXAl.png (536 KB, 1237x896) Image search: [Google]
mq9TXAl.png
536 KB, 1237x896
>>51968781
Yes I do, what are you on about?
>>
Trying to figure out how to use optparse in python and failing miserably. It's not splitting my arguments at all.

parser = optparse.OptionParser('usage%prog' +\
"-H <target host> -p <target port>")
parser.add_option('-H', dest='host', type='string', help='target host')
parser.add_option('-p', dest='port', type='string', \
help='port(s) separated by comma')

(options, args) = parser.parse_args()
host = options.host
ports = str(options.port).split(', ')
>>
>>51969018
Take calculating the Fibonacci sequence. If you define them as an infinite list, you get O(n) complexity and memoization for free.
fibs :: [Int]
fibs = 0 : 1 : zipWith (+) fibs (tail fibs)


Laziness is also great for constraint solving problems, since you can "compute" the next set of incremental solutions without actually doing anything until each solution is needed. It also completely rids the language of stack overflow issues.
>>
I feel like I'll be laughed off /g/ for this

I learn programming languages in my free time, and from what I've seen, the easiest way to learn SQL is from codeacademy.

I already know python, c++, and a little java, is SQL worth it? Majoring in CS btw
>>
>>51968826
bumb
>>
>>51968709
I'd change the name to FOMODmaker or something
>>
>>51969120
>is SQL worth it?
pretty much most jobs will require some knowledge on it, because most systems will operate on a database
>>
>>51969120
I'm kind of in the same boat. Never got around to learning it besides a few times.
It's probably definitely worth it if you're ever going to work with databases or even networking.
If you have nothing else to do in your freetime why not pick it up?
>>
>>51967238
apply { list { set x 0 ; lmap x $list { incr sum $x } ; return $sum } } [ struct::list iota 100 ]
>>
>>51969120
>I already know python, c++, and a little java

I don't think you can say you already know these languages to a satisfactory level.
>>
>>51968327
i only picked that because of the sicp lectures, thanks ill get started on guile or racket.
>>
>>51969137
I considered it but "simple" was the key here. The whole creation of a FOMOD installer is a manual, slow trial-and-error task without this tool.
>>
I am working on adding LLVM IR support to my brainfuck compiler.

My problem now is that I want to reassign the data pointer variable, and the straightforward way
%ptr = i8* something
%ptr = add i8* something, 1

Does not work because the IR has to be in SSA form. The suggested solution to this from http://llvm.org/docs/tutorial/LangImpl7.html involves a bunch of alloca and load and store, but that would honestly be ridiculous. It would mean an extra load for every single instruction, and while I'm sure the compiler may be able to get rid of this I simply don't want to have to do a bunch of shit with i8**s and such for something that should be much more straightforward

The other option is to change the name of ptr each time I modify it which would honestly be easier but the IR output would be even more unreadable than it already is.

Anyone have experience with LLVM and know how to go about this? It seems like the second option is the one to go with but it just feels disgusting.
>>
I implemented a stack in C using pointers just for fun. Nice and simple.

Now I have to do a queue and I'm not sure how to do it with pointers since a dequeue will take the element off of the front and move everything. Not sure how to do this with C. Should I use linked lists?
>>
>>51969120
SQL is very important to know, yes.
Nearly all applications I've written make use of an SQL database.
>>
>>51969202
You don't compile to LLVM by outputting an IR file. You use the LLVM library.
>>
>>51969245
Either a linked list or a circular buffer.
>>
>>51969107
Interesting, thanks.
>>
>>51969245

hash
>>
>>51967168
>Are you bros allowed to listen to music at work?

I've always listened to music at work. Not over speakers generally, though, almost always using headphones. I can't imagine trying to sit at work all day without music.

I've found that almost anything vocal makes me unproductive. Shitty house and techno music is best for concentration, though I'd be embarrassed to have others find out I'm listening to it. Classical has always just put me to sleep.
>>
>>51967189
>This is the same problem as Lisp and Haskell, which were designed for "ludicrously contrived, clever ways of doing things."

I would agree, except that those languages were created to be exactly what they are.

C++ grew out of a fairly contained addition to C. Then it got crazier and crazier. The worst part about C++? The whole "how do I do X?" "Well, you can do it in all kinds of ways, because C++ gives you all the options!" "Okay, so how do I do a finally block in my exception handler?" "Oh, you can't do that. It's the RAII way or the highway, bub".

Then you end up at template metaprogramming, preprocessor assertions, and crazy WTL stuff like:
class MyDialog : CDialog<MyDialog>


seemingly circular inheritance. It's brilliant, and horrifying.

(i.e. your class derives from a parent, but you supply your parent as a template parameter to the parent. This allows really efficient handling of, for example, Windows messages, without using polymorphism. But I'd rather do the vtable lookup than deal with this horror show, which is why it's practically dead now)
>>
>>51969297
kill yourself

>>51969280
this
>>
Trying to start, quick question: Python, Perl, Java or some C varient
>>
>there is a guy responsible for servers that argues they are crashing because of wrong clients/people trying to compile on their own
and he is my friend, what would you guys do if someone is not as competent but responsible for a big part of the project you are working on? and he is your friend.

honestly his job is forced on him and I don't envy it. I would take it but I have no idea how to approach him or my boss
>>
>>51969454
if you have to ask, python
>>
>>51969105
anyone see anything obviously wrong with this?
I'd like to be able to run my program like:
"program -H 127.0.0.1 -p 20, 23, 24"
but it cuts off and only takes port 20, not 23 or 24.
Thread replies: 255
Thread images: 31

banner
banner
[Boards: 3 / a / aco / adv / an / asp / b / biz / c / cgl / ck / cm / co / d / diy / e / fa / fit / g / gd / gif / h / hc / his / hm / hr / i / ic / int / jp / k / lgbt / lit / m / mlp / mu / n / news / o / out / p / po / pol / qa / r / r9k / s / s4s / sci / soc / sp / t / tg / toy / trash / trv / tv / u / v / vg / vp / vr / w / wg / wsg / wsr / x / y] [Home]

All trademarks and copyrights on this page are owned by their respective parties. Images uploaded are the responsibility of the Poster. Comments are owned by the Poster.
If a post contains personal/copyrighted/illegal content you can contact me at [email protected] with that post and thread number and it will be removed as soon as possible.
DMCA Content Takedown via dmca.com
All images are hosted on imgur.com, send takedown notices to them.
This is a 4chan archive - all of the content originated from them. If you need IP information for a Poster - you need to contact them. This website shows only archived content.