Register a SA Forums Account here!
JOINING THE SA FORUMS WILL REMOVE THIS BIG AD, THE ANNOYING UNDERLINED ADS, AND STUPID INTERSTITIAL ADS!!!

You can: log in, read the tech support FAQ, or request your lost password. This dumb message (and those ads) will appear on every screen until you register! Get rid of this crap by registering your own SA Forums Account and joining roughly 150,000 Goons, for the one-time price of $9.95! We charge money because it costs us money per month for bills, and since we don't believe in showing ads to our users, we try to make the money back through forum registrations.
 
  • Post
  • Reply
Janitor Prime
Jan 22, 2004

PC LOAD LETTER

What da fuck does that mean

Fun Shoe
I'm going to push back on you two fuckers and say USE NETBEANS instead, eclipse sucks and while I've been using InteliJ for 3 months I'm still not sure it's better than NetBeans.

Seriously it doesn't matter, they all will suite your needs so pick one based on any arbitrary criteria you like (looks or ease of installation) and just go with it. NetBeans WYSIWYG is dope

Adbot
ADBOT LOVES YOU

Janitor Prime
Jan 22, 2004

PC LOAD LETTER

What da fuck does that mean

Fun Shoe

hooah posted:

I'm not sure; I don't think I have any other JARs just sitting around. Do you have an example?

http://sourceforge.net/projects/portecle/

Janitor Prime
Jan 22, 2004

PC LOAD LETTER

What da fuck does that mean

Fun Shoe
I'm not sure what you are struggling with, you could just put the zip file in another folder. Your code wasn't too clear why it wouldn't work, but you should clean it up anyway if you have access to Java 7. Sorry no compiler to check if this works, but here are all the relevant API's http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html

code:
    Path inputPath = FileSystems.getDefault().getPath(loc, "dir", endFileExt + ".xml");
    Path outputPath = FileSystems.getDefault().getPath(loc, "dir", endFileExt + ".zip");
    try(ZipOutputStream zos = new ZipOutputStream(Files.newOutputStream(outputPath)){  
        ZipEntry ze = new ZipEntry(inputPath.toString());
        zos.putNextEntry(ze);
        Files.copy(inputPath, zos);
        zos.closeEntry();
    } catch (IOException e){
       //do something with IO
    }

Janitor Prime
Jan 22, 2004

PC LOAD LETTER

What da fuck does that mean

Fun Shoe

Volguus posted:

SOAP is bloated, it is XML after all. But the big advantage of SOAP is that you can write the contract between the server and the client as an XML. That is not, of course, human readable for a marketing person, but any developer should be able to read XML. While JSON, the contract is some document stored somewhere, which may or may not get updated with time.
Now, there are efforts to define JSON-schema and such, but I am not aware how followed those specifications are since it's an "after the fact" addition. The free-form of JSON is what attracted developers to it in the first place, the kind of developers who do not know the advantages of having a strict specification on how data has to look and behave when communicating between two computers.

And even for those developers who have trouble reading XML, the code that implements the specification is usually generated, and what a developer has to deal with is an interface with clearly defined methods for either accepting calls or making them. Surely reading code cannot be so hard for people.

Being able to read the schema isn't a substitute for actually having documentation, it's a trap lots of SOAP users fall into whereas it has to be willfully ignored by JSON services. Also SOAP is more than just a data exchange format in XML, it specifies end points, transport protocols, security and more.

If you just want an efficient exchange format with a schema consider using something like protocol buffers.

Janitor Prime
Jan 22, 2004

PC LOAD LETTER

What da fuck does that mean

Fun Shoe

Volguus posted:

Actually it can be. There is no reason not to document the schema (WSDL supports documentation) and then generate document/web page/whatever from that. There's no reason for it to be spread in 100 places. That's 99 more places that need to be updated when time comes.

And protocol buffers? :(. There are better and more efficient ways, really (msgpack for example).

I'm sure there are by now but I haven't kept up with them in a few years and protobufs had enough tooling at the time to actually be useful.

Janitor Prime
Jan 22, 2004

PC LOAD LETTER

What da fuck does that mean

Fun Shoe

Ekster posted:

I'm fairly new to programming and after having programmed mostly in C and a little C++ I'm now getting into Java. With C/C++ I like using a text editor for the actual coding (Sublime) and a simple batch file for the compiler. I use Visual Studio for debugging.

For Java I'm doing the same thing, but I was wondering which IDE has the best visual debugger. I've been googling around but I couldn't find anything specific on this. I don't really care about any other features at the moment.

The debugging features in all 3 are very similar, try each of them and whichever UI doesn't disgust you wins

Janitor Prime
Jan 22, 2004

PC LOAD LETTER

What da fuck does that mean

Fun Shoe
Any certificate fuckrey should be done using Portecle so that you have an easier interface into what's going on. As for the http client the site has a bunch of useful examples on how to use it, but I'm not aware of any recent tutorials for it.

Janitor Prime
Jan 22, 2004

PC LOAD LETTER

What da fuck does that mean

Fun Shoe
Sorry if I come off as a dick.

You're code is butt ugly because it doesn't follow standard Java conventions. http://www.oracle.com/technetwork/java/codeconvtoc-136057.html

Sin #1: the class name doesn't start with a capital letter. It made me wince reading your code
#2 the variable names you've chosen don't tell me anything about what they represent. h and h1 don't mean anything to me. The reason you'll see everyone use i is because it's shorthand for iterator, but that's not an invitation to use h, j and k as other variable names in your code!
#3 all of your comments are just telling me what the code does which I can understand from just looking at the code, comments should tell me why they are doing something or not be present. The most useless was //begin subtract function, I mean come on I already know that from looking at the function name!

Ignoring the above, your logic is deeply flawed. For example in the equals method you continue iterating after you've determined that the two numbers are not equal and the variable may or may not reset itself to true or false. Effectively the loop is only comparing the last element in the array, which is obviously incorrect.

The first plan of attack is finding the known error cases that make your program break and begin debugging your code with that as input. You can do this naively by adding System.out.println statements in your code until you find the faulty place where it's breaking and have that aha moment. This is a good skill in general because on shittier platforms this is all you have, but once you get the hang of it you'll want to actually use a debugger and step through your code. Java IDE's have the best visual debuggers so it's worth learning to use an IDE just for that.

Janitor Prime
Jan 22, 2004

PC LOAD LETTER

What da fuck does that mean

Fun Shoe

Sistergodiva posted:

Also feel free to call out any uglyness in the code, not totally sure I am following standards and best practices.

The easy way to fix it is by hitting ctrl-shift-f in your IDE and let it autoformat for you. Some even have the option to do it whenever you save the file which makes it even easier, but your coworkers will hate you since all your git diffs will have so many white space changes unrelated to your code lol

Janitor Prime
Jan 22, 2004

PC LOAD LETTER

What da fuck does that mean

Fun Shoe

Zaphod42 posted:

Your coworkers should all be using the same autoformat configuration as you are, so that if their files are changed at all by CTRL+SHIFT+F then they're wrong and should know better! :colbert:

Most IDEs let you save the configurations for formatting to .xml and then everybody else can load up the same :)

If I see code in my repo that has the wrong whitespace, I'm gonna format that poo poo and check it back in and you're gonna deal with it.

Agreed but I'm dealing with a codebase that's 6 years old and only gets looked at occasionally

Janitor Prime
Jan 22, 2004

PC LOAD LETTER

What da fuck does that mean

Fun Shoe

Kuule hain nussivan posted:

I've been trying to fiddle around with the File class, but I'm having some trouble with the file path, most likely since it's in the resources folder of a Maven project. I'll try some more and see if I can find the correct one, rather than having to resort to some getClass().getResource() stuff

No that's actually the right way to do it, if you plan on bundling all those files inside of your jar. The files api is meant for when you're dealing with directories outside of your jar. I don't know what your use case is, but if you can avoid listing the directory in jar and just know upfront what resource you wan then you should be able to use the Yourclass.class.getResourceAsStream("/myfile") method. You can then pass on the stream to whatever code you're using to parse the files. If you have to traverse the jar directory then this post should help http://stackoverflow.com/a/28057735/102483

Janitor Prime
Jan 22, 2004

PC LOAD LETTER

What da fuck does that mean

Fun Shoe
The free version is just fine for Jaba

Janitor Prime
Jan 22, 2004

PC LOAD LETTER

What da fuck does that mean

Fun Shoe

Barnyard Protein posted:

My intro to programming book was "C++ for You++" circa 1998, between now and then is a blur, the only java book i can remember reading is "effective java", read that imo

That's not a good intro book, it's a very good book after you think you'v learned the language

Janitor Prime
Jan 22, 2004

PC LOAD LETTER

What da fuck does that mean

Fun Shoe

casual poster posted:

Holy crap it worked! Thanks a lot you two!

Go back and read the error the message the compiler was giving your before and see if it makes sense to you now.

Janitor Prime
Jan 22, 2004

PC LOAD LETTER

What da fuck does that mean

Fun Shoe

FateFree posted:

JSPs are supposed to mix Html with jsp tags and EL expressions, not Java code. And I love Jsps!

This x1000 otherwise you just end up with PHP on Java :barf:

Janitor Prime
Jan 22, 2004

PC LOAD LETTER

What da fuck does that mean

Fun Shoe

Sagacity posted:

This is the main reason we use it as well. It's fine generating a bunch of code when you're first building it, but it's SO EASY to forget stuff when you're adding a field later.

Just chiming in to say that @Data is the best thing ever, POJOs with none of the boilerplate and free toString, Equals and HashCode, that get updated as I add or remove fields, sign me the gently caress up.

Janitor Prime
Jan 22, 2004

PC LOAD LETTER

What da fuck does that mean

Fun Shoe

jtxdriggers posted:

Exactly, and in order to test internal methods at all, you need to expose the implementation, not the interface.

Good test setup:

code:
private SomeService someService;

@Before
public void setup() {
    someService = new SomeServiceImpl();
}
Bad test setup:

code:
private SomeServiceImpl someService; // Red flag

@Before
public void setup() {
    someService = new SomeServiceImpl();
}
Generally the conversation goes something like this:

Why does your test declare the class instead of the interface?
"So I could test a method that the class contains but the interface doesn't expose."
So then why isn't that method in another testable interface that can be injected as a dependency?
"Because it seemed like it wasn't important enough to justify its own interface and implementation."
Well if it's important enough to test here, then it's important enough to refactor out.

I disagree a little, some internal methods exist because they are helpers that mutate the internal state of the object and complex enough to warrant unit tests. It doesn't make sense to expose them in a public interface or think that their implementations can be interchanged using DI. I think using the package-private scope in Java is a reasonable way to expose those methods to your tests while not exposing them as part of the public interface.

Janitor Prime
Jan 22, 2004

PC LOAD LETTER

What da fuck does that mean

Fun Shoe

Boz0r posted:

I've been assigned to a Java EE project that noone really knows in-depth. How do I find out if we're using Struts 1 or 2?

You check the version in the pom.xml lol j/k you're probably stuck in some ant hell if it's Java EE.

Hopefully it's a jar somewhere with the version number in the name and they didn't uncompress it into your project. Also you can simply check the imports, Struts 2 use a different package org.apache.struts2 vs org.apache.struts

Janitor Prime
Jan 22, 2004

PC LOAD LETTER

What da fuck does that mean

Fun Shoe

Gravity Pike posted:

I'd say that Google's Guava, Apache Commons, and JodaTime are the libraries that everyone is using and you should too.

I'm glad that Java 8 made a large part of those libraries redundant and we can start removing them from our dependency graphs.

Janitor Prime fucked around with this message at 15:16 on Mar 24, 2016

Janitor Prime
Jan 22, 2004

PC LOAD LETTER

What da fuck does that mean

Fun Shoe

Zaphod42 posted:

However, if you do something like

inventory.add(Bob);

Then all other references to that List would see the change, with the new Bob object in the list, because you haven't changed the reference, you've modified the internal state of the object. (Its just in this case, a List, the internal state itself can be references to other objects)
You could also do things like

inventory.remove(Bob);

And other references would see that the List inventory had its internal reference to Bob removed.

I want to expand on this part a bit more because it's where everything you're studying starts to become relevant, interesting, and really loving hard :q: See what the JavaDoc for ArrayList has to say about modifying a list while other threads have a reference to it.

quote:

Note that this implementation is not synchronized. If multiple threads access an ArrayList instance concurrently, and at least one of the threads modifies the list structurally, it must be synchronized externally. (A structural modification is any operation that adds or deletes one or more elements, or explicitly resizes the backing array; merely setting the value of an element is not a structural modification.) This is typically accomplished by synchronizing on some object that naturally encapsulates the list. If no such object exists, the list should be "wrapped" using the Collections.synchronizedList method. This is best done at creation time, to prevent accidental unsynchronized access to the list:

List list = Collections.synchronizedList(new ArrayList(...));

The iterators returned by this class's iterator and listIterator methods are fail-fast: if the list is structurally modified at any time after the iterator is created, in any way except through the iterator's own remove or add methods, the iterator will throw a ConcurrentModificationException. Thus, in the face of concurrent modification, the iterator fails quickly and cleanly, rather than risking arbitrary, non-deterministic behavior at an undetermined time in the future.

What this means is that if one thread is iterating over the list and another thread calls add or remove then the first thread will throw that ConcurrentModificationException.

Janitor Prime fucked around with this message at 19:41 on Apr 26, 2016

Janitor Prime
Jan 22, 2004

PC LOAD LETTER

What da fuck does that mean

Fun Shoe

Zaphod42 posted:

code:
bar == foo; // I have no idea whether this will return true or false
I doubt that the compiler would recognize that the string literals were the same and point them to the same object, even if that shouldn't really cause any problems because strings are immutable. So I would figure false if this was asked of me in an interview or something, but its worth testing. You never know what voodoo they snuck into the compiler, poo poo's smart.

It's called String interning

quote:

The JVM performs some trickery while instantiating string literals to increase performance and decrease memory overhead. To cut down the number of String objects created in the JVM, the String class keeps a pool of strings. Each time your code declares a string literal, the JVM checks the string literal pool first. If the string already exists in the pool, a reference to the pooled instance returns. If the string does not exist in the pool, a new String object instantiates, then is placed in the pool.
How big the pool is varies by JVM/platform but it's something it already does.

Janitor Prime
Jan 22, 2004

PC LOAD LETTER

What da fuck does that mean

Fun Shoe
I recommend you use Spring Boot since that will get you a built in web server that will be easier to maintain than trying to setup it all up from scratch. Also you can use as much or as little of the Spring framework to glue together your bootstrap frontend and the database backend as you feel comfortable with.

Janitor Prime
Jan 22, 2004

PC LOAD LETTER

What da fuck does that mean

Fun Shoe

Adventure Pigeon posted:

I'll give this a look, thanks for the advice.

I was also wondering, given your statements about how allowing direct access to the database on the network, much less the web, is a bad idea, what is the best way to set up my database?

I was already planning on having a system along the lines of Client <----> Server <----> Database, since I don't want anyone directly accessing the database, but I don't know all that much in terms of how to physically set that up.

That's typically how it's down. You'll want to only allow external connections to the database from your webserver and setup it's own username/password to login to the database. Although if it's small enough then you might get away with just setting up the webserver and the db on the same physical server until you need to start scaling them. As to the how that varies from db to db, postgres lets you setup accounts and access control in the pg_hba.conf file.

Janitor Prime
Jan 22, 2004

PC LOAD LETTER

What da fuck does that mean

Fun Shoe
Where did you import it? usually you'll want to import it into your JRE installations truststore, or provide another truststore with the correct certificates.

Also if you have multiple JREs/JDKs installed then your program might be running with one that you didn't import the cert into.

Janitor Prime
Jan 22, 2004

PC LOAD LETTER

What da fuck does that mean

Fun Shoe

scissorman posted:

Yeah, that's pretty much it.

I took another look at Spring and managed to make the dependency injection work by calling autowire for my servlet manually.
It would probably be better to use the Spring DispatcherServlet but our web.xml is currently a bit of a mess due to the various libraries we use and not that easy to convert.

Are there any best practices I should follow when annotating my classes for Spring?

There is a standard set of annotations like @Inject instead of depending on Spring's @Autowire which is more enterprisey because you could then change your DI framework to something like google juice in the future with minimal change. But that just feels like a bunch of people huffing their own farts when a global find/replace would be just as easy to change frameworks if you really wanted to.

Janitor Prime
Jan 22, 2004

PC LOAD LETTER

What da fuck does that mean

Fun Shoe

Ornithology posted:

Does anyone know of a good resource for learning how to create a Spring Web MVC project using Maven? The documentation for this seems to be all over the place and either doesn't correspond to the newest versions or is vague and has unexplained differences in file structure.

I even downloaded the Spring Tool Suite IDE to see if it would help, but it looks like it doesn't even have a way to create an empty Web MVC project.
Instead, I tried using this project provided in the spring.io documentation files as a starting point (https://github.com/spring-guides/gs-serving-web-content/tree/master/complete). However, for some reason it is missing important files like web.xml. I can't find any declaration of a view resolver anywhere and if I try to return jsp pages instead of html then I end up with 404 or 500 errors. I then found this sample project (https://github.com/spring-projects/spring-mvc-showcase) which looked more promising as it includes many more basic features and actually has important files/folders like web.xml and WEB-INF. However, when I try to run the project there's like 50 errors about missing files or incorrect references.... fun.

Anyway, if someone can suggest a guide or point me to a basic project structure diagram or something, I'd really appreciate the help. Bonus points for the same, but for Hibernate.

Look at Spring Boot guides should get you rolling

Janitor Prime
Jan 22, 2004

PC LOAD LETTER

What da fuck does that mean

Fun Shoe

geeves posted:

I've never really sought a reason to go beyond Log4J - I used SLF4J in a handful of projects because they were already there, but never really noticed any different at all between the two. Granted it was all basic logging. But Nobody has ever said, you're missing out because SLF4J does THIS!

I think the biggest feature of SLF4J is the placeholders in the log messages which log4j and java.util.logging lack. Also it really makes it easy to bridge all the other weird poo poo that other dependencies need and force them to your final destination logger of choice.

I have a project that included libs which have hard transitive dependencies on JCL, JBoss Logging, Log4j, Log4j2 and SLF4J, it would be a nightmare to manage if it wasn't for the SLF4J facades. I was able to stub out all that bullshit in my POM, provide the facades to satisfy their runtime requirements and have it all just go to my logback implementation through SLF4J, it owns.

Janitor Prime
Jan 22, 2004

PC LOAD LETTER

What da fuck does that mean

Fun Shoe

Wheany posted:

But why?

Because he hates having an external dependency on maven :shrug:

Janitor Prime
Jan 22, 2004

PC LOAD LETTER

What da fuck does that mean

Fun Shoe
Yeah log4j2 is the new hotness and it's quite nice. I just have the infrastructure tied around logback and I need a new project to migrate to log4j2 since it is actually better like HFX mentioned and it's license is more flexible in management's point of view (LGPL vs Apache).

Janitor Prime
Jan 22, 2004

PC LOAD LETTER

What da fuck does that mean

Fun Shoe
I believe that you can unit test the newer technologies which you can't really do with JSPs, but I still use JSP :shrug:

Janitor Prime
Jan 22, 2004

PC LOAD LETTER

What da fuck does that mean

Fun Shoe

venutolo posted:

Thanks. I was hoping not to have to do separate Jenkins jobs for different branches.

lol I have like 50 Jenkins jobs, one for each release branch.

Janitor Prime
Jan 22, 2004

PC LOAD LETTER

What da fuck does that mean

Fun Shoe

geeves posted:

Thank you for that reply. We actually did install Artifactory for this jar (and about 20 others) that have no MVN equivalent. I'll do the later mvn commands you suggested when the next developer tests this out (or I'll blow away my local mvn repo on the machine which I had trouble with and start from scratch again).

Does Gradle handle weird things like this any better?

Like everything, it makes it's own tradeoffs and stupid loving decisions.

Janitor Prime
Jan 22, 2004

PC LOAD LETTER

What da fuck does that mean

Fun Shoe
In its raw binary format. Maybe it's json representation if inserting into postgres jsonb column and querying it

Janitor Prime
Jan 22, 2004

PC LOAD LETTER

What da fuck does that mean

Fun Shoe

BabyFur Denny posted:

I was wondering for half a day why my UnitTests don't log to console..
turns out one of the cached packages sets the warning level of the root logger to WARN.
For some reason it was part of the classpath, and when it loaded that log4j.xml it ignored my log4j.properties settings.
https://github.com/linkedin/rest.li/blob/master/generator/src/main/resources/log4j.xml
This is not exactly a good practice for published packages, right? Is there anything I can do to prevent that from happening?

It sounds like you're using version 1 of the log4j library. Under version 2 according to this page https://logging.apache.org/log4j/2.x/manual/configuration.html
you're properties file should have priority over the xml file. Version 2 has the useful feature of allowing for the log4j2-test.properties to be loaded first, thereby allowing you to control what logging config gets used for your unit tests. I use Maven so by putting that file in src/test/resources everything Just Works™.

As for that library, it's very bad practice to ship a logging configuration file. Raise a bug on their tracker. They should be putting stuff like that in their src/test/resources folder instead src/main/resources.

Janitor Prime
Jan 22, 2004

PC LOAD LETTER

What da fuck does that mean

Fun Shoe

Paul MaudDib posted:

And yes, Maven dependency resolution is all the fun of Windows 95 dependency hell teleported to the year 2018. Enjoy such features as: trying to find an intermediate version which is compatible between two incompatible versions of a library which occupy the same namespace. That would be funny if it weren't something that occurred pretty much all the time in random minor libraries. If it were safe to depend on random library authors to keep their code up to date with all the latest libraries, it wouldn't have been a problem with Windows 95 either. Not everything can be sourced from Apache Commons.

I've been doing python dev recently and the whole reason that virtualenv is a thing is to basically create segregated pythonpaths for each project since you can't have multiple versions of the same library installed in the system. Even then I still routinely run into this dll shitshow with pip where a version of dependency A is pulled in that is incompatible with the version that dependency B wants to use and I have to manually search and hope that the old versions of dep A are still on pypi and that there is one that will satisfy everything's needs.

I'm genuinely curious what mainstream language has tools that handle this correctly for you?

On a side note I work with big legacy java projects that pull in lots of old lovely dependencies and haven't run into this problem nearly as much as you would make it seem. I feel like Java libraries take better care to not break backwards compatibility by changing their APIs so that you can still pull in newer versions and have them just work with older dependencies. I've mostly seen major version jumps that break backwards compatibility move things into different packages so that old 1.x versions can live side by side with the newer classes and avoid conflicts for clients that haven't updated to most recent versions. See HttpClient 3.X vs 4.X

Janitor Prime fucked around with this message at 21:46 on Feb 14, 2018

Janitor Prime
Jan 22, 2004

PC LOAD LETTER

What da fuck does that mean

Fun Shoe

HFX posted:

If there is one, I haven't seen it. It would be kind of a nightmare as you could find yourself having to specify the version of each call you make and then have that versioning baked in forever. As to the item about SimpleDateFormat, I cannot see any valid reason that they haven't replaced the internals with a thread safe version.

At least they finally provided that in another class
Java 8 DateTimeFormatter

Janitor Prime
Jan 22, 2004

PC LOAD LETTER

What da fuck does that mean

Fun Shoe
I watched that talk, but it didn't seem to address what you are claiming about handling multiple versions. So I kept reading and could find nothing related to that.

Finally I found this stack overflow post that has a good discussion about it:
https://stackoverflow.com/questions/45283886/using-different-versions-of-dependencies-in-separated-java-platform-modules

It seems like a solution is doable with the new module system using the concept of layers, but it doesn't sound like any of the tools are supporting that yet.

Janitor Prime
Jan 22, 2004

PC LOAD LETTER

What da fuck does that mean

Fun Shoe
Also I don't know poo poo about JBoss but as with any framework that uses Aspects you gotta make sure the aspects are being loaded, that it's inserting them into your class, and that you are calling the aspected version of your class instead of the original one. Also one more caveat, a lot of aspect frameworks use something like cgilib which requires your method to not be marked as final, otherwise it cannot insert the aspects into it.

FYI Volguus's explanation was just educational, I've never run into any implementation that was that hosed up and dumb so don't start blaming JBoss right away.

Janitor Prime fucked around with this message at 00:37 on Aug 2, 2018

Janitor Prime
Jan 22, 2004

PC LOAD LETTER

What da fuck does that mean

Fun Shoe
Check which jars are on the classpath you're trying to run with. Those dependencies are marked as testCompile so it will only be used when running test classes with the test classpath. Your IDE should set and use the test classpath when you run a class that's in the Test packages.

Adbot
ADBOT LOVES YOU

Janitor Prime
Jan 22, 2004

PC LOAD LETTER

What da fuck does that mean

Fun Shoe
Sometimes it make sense to create a utility class for testing that helps you create complicated objects so that it's not the same 10 lines copied and pasted in each test case, but that doesn't sound like what's going on. Tell him to piss off

  • 1
  • 2
  • 3
  • 4
  • 5
  • Post
  • Reply