Options

using(PennyArcade.Forum){Threads.push(ProgrammingThread())}

145791063

Posts

  • Options
    lazerbeardlazerbeard Registered User regular
    edited January 2010
    How are you implementing your "zoom"

    that would make perfect sense if your zoom just scaled up the tiles, and you did something like

    width = width * zoomFactor;
    height = height* zoomFactor;

    because it is more than possible that your tiles look like
    (0,0)..........................(1,0)
    . .
    . .
    . .
    . .
    . .
    (0,1)..........................(1,1)

    An easy fix there if you have access to the tile's mesh is to just change the tile's model coords to be

    (-.5,-.5)..........................( .5,-.5)
    . .
    . .
    . .
    . .
    . .
    (-.5, .5)..........................( .5, .5)

    you could also correct by offsetting the position of the tile by half the scaled distance from the center of the screen. I have no clue what coordinate system you are operating in (do you have a world reference frame? Is everything local to the camera?[this is bad]) so I'd need more info to assist you further. If you are scaling all of the tiles individually to get a zoom this is most likely the cause of the problem though.

    It is easier to make the game in 3D, restrict one axis, and make the game on a plane, then use the camera's world -> view -> projection matrix to take care of your panning and zooming, zooming just entails moving the camera closer to the plane you made your game on (I usually use the z = 0 plane, because the camera usually looks along the z axis to start) if you are doing this, post your code. That ought to work.

    lazerbeard on
  • Options
    InfidelInfidel Heretic Registered User regular
    edited January 2010
    Yeah, as soon as you're doing zoom and rotation you're in 3d now, since that's translation and rotation of your camera along the Z axis.

    Infidel on
    OrokosPA.png
  • Options
    SeolSeol Registered User regular
    edited January 2010
    Infidel wrote: »
    Yeah, as soon as you're doing zoom and rotation you're in 3d now, since that's translation and rotation of your camera along the Z axis.
    Nonsense. I mean, that's a way of visualising it, sure, but zooms and rotations work fine in a 2d framework. Scales and rotations can be handled fine by 2x2 matrices.

    Seol on
  • Options
    InfidelInfidel Heretic Registered User regular
    edited January 2010
    Seol wrote: »
    Infidel wrote: »
    Yeah, as soon as you're doing zoom and rotation you're in 3d now, since that's translation and rotation of your camera along the Z axis.
    Nonsense. I mean, that's a way of visualising it, sure, but zooms and rotations work fine in a 2d framework. Scales and rotations can be handled fine by 2x2 matrices.

    Yes which is what he's doing, and his problem would be more apparent to him if he looks at it and follows 3d practice.

    What he is trying to do is moving the camera on the Z, and it's easier working with that than trying to manipulate the 2d projection of his 3d idea directly. A 2d locked camera and all the art being in one plane is actually really simple 3d stuff, 3d stuff in general is worth learning and a lot easier than people think. Because you then automatically know everything for 2d.

    Infidel on
    OrokosPA.png
  • Options
    lazerbeardlazerbeard Registered User regular
    edited January 2010
    scaling is possible with a 2x2 matrix
    [s, 0]
    [0, s]

    but zooming is not, you have to account for the shift in position resulting in moving the camera as well (think about zooming in on a tile whose left edge is in the center of the screen, and another tile whose left edge is near the left edge of the screen. When you zoom in on the center tile, the left edge will not move, but the tile toward the left edge will move away from the center, the farther away from the center, the faster it will move.

    This can be approximated in 2D, of course, by translating from the world reference frame to the camera's reference frame (so that (0,0) is in the center of the screen) then doing the scaling but all you're doing at that point is taking apart the 4D projection matrix you would have used if you had just done it in 3D.

    EDIT: doing it in 3D gets you some other benefits too, like free parallax ;)

    lazerbeard on
  • Options
    SeolSeol Registered User regular
    edited January 2010
    Infidel wrote: »
    Seol wrote: »
    Infidel wrote: »
    Yeah, as soon as you're doing zoom and rotation you're in 3d now, since that's translation and rotation of your camera along the Z axis.
    Nonsense. I mean, that's a way of visualising it, sure, but zooms and rotations work fine in a 2d framework. Scales and rotations can be handled fine by 2x2 matrices.
    Yes which is what he's doing, and his problem would be more apparent to him if he looks at it and follows 3d practice.

    What he is trying to do is moving the camera on the Z, and it's easier working with that than trying to manipulate the 2d projection of his 3d idea directly. A 2d locked camera and all the art being in one plane is actually really simple 3d stuff, 3d stuff in general is worth learning and a lot easier than people think. Because you then automatically know everything for 2d.
    What's 3d about his idea? From what I've read, it's entirely 2d, but includes zooming. That doesn't make it 3d, it makes it 2d with scaling, and that's trivial to implement in pure 2d once you know the tripping-up points.

    I'm not anti-3d, it's theory well worth knowing, but it's not necessary (or even appropriate) for this specific problem.
    scaling is possible with a 2x2 matrix
    [s, 0]
    [0, s]

    but zooming is not, you have to account for the shift in position resulting in moving the camera as well (think about zooming in on a tile whose left edge is in the center of the screen, and another tile whose left edge is near the left edge of the screen. When you zoom in on the center tile, the left edge will not move, but the tile toward the left edge will move away from the center, the farther away from the center, the faster it will move.

    This can be approximated in 2D, of course, but all you're doing at that point is taking apart the 4D projection matrix you would have used if you had just done it in 3D.
    This is where the translates come in: either use a translate, a 2x2, and another translate, or use affinetransforms which allows you to concatenate them into a single 3x3 transformation matrix (does XNA support these?). It's ridiculously straightforward in Java, but you have to learn how to use them properly.
    EDIT: doing it in 3D gets you some other benefits too, like free parallax ;)
    3d is vastly more capable at a lot of things (although parallax is hardly that tricky in 2d), but it's overkill for this specific problem.

    Seol on
  • Options
    InfidelInfidel Heretic Registered User regular
    edited January 2010
    No, it simplifies the problem. ;-) It really does.

    If you just "pull back the camera" everything works like magic just by translating the camera. Hacking up a solution to do this "in 2d" is more work and less benefit than doing it the way you're actually "doing things", projecting a view onto a 2d plane.

    edit: to clarify, you're just trying to take a shortcut and pre-simplify some of the 3d calculations that apply in this particular situation. There is no benefit to that as it can make things way harder to work with in the future and this is not an expensive operation. Just because you hide shit does not mean this is not a 3d problem, it most definitely is.

    Infidel on
    OrokosPA.png
  • Options
    ImperfectImperfect Toronto, Ontario, CanadaRegistered User regular
    edited January 2010
    The thread! It liiiiives! Many thanks for all the prompt responses. (Prompt-er than I had expected, frankly.)

    XNA is a pretty cool dude. You can change the scale and origin for the stuff you're drawing right in the SpriteBatch draw code, which is what I've been doing. For example, my first thought for fixing this stuff was changing the origin on my tiles (so they draw from -25 to +25 instead of 0 to 50).

    I'm really attached to "2d", in this case drawing stuff using XNA's SpriteBatch object. Apparently there's a neat little tool called SilverSprite, whereby you can make something in XNA that uses SpriteBatches to draw, then swap out all your "Microsoft.Framework.XNA" stuff to use "SilverSprite" and suddenly your shit runs in a browser, and I want to keep that option available.

    That said, I think I've figured it out. When doing my zooming, I figure out how much the screen has changed in "effective width" and offset my view by half that in the up and left directions. Seems to have it.

    Thanks for helping me think in this direction, though!

    Imperfect on
  • Options
    IdoruIdoru Registered User regular
    edited January 2010
    So, instead of making every display object in my entire project a movieclip (which accepts dynamic method calls much like Obj-C objects accept messages even if there is no associated method), I can pass around more generic DisplayObjects, cast them as IInterfaceName, and execute the method I want.

    How often do you do this? The player doesn't complain at runtime?

    Idoru on
    "We live on a placid island of ignorance in the midst of black seas of infinity, and it was not meant that we should voyage far…" -H.P. Lovecraft
  • Options
    lazerbeardlazerbeard Registered User regular
    edited January 2010
    Sorry, I got cut off due to my plane boarding a bit earlier than I expected. I was merely trying to illustrate that 2D or 3D, you can pull off the same effect, and in fact the 2D method is more or less the same math that goes into doing the 3D transform. They are really the same thing, it's just a matter of how you view it. I don't think working the problem in 3D is "overkill" more than personal preference, the two solutions are analogous.

    lazerbeard on
  • Options
    JasconiusJasconius sword criminal mad onlineRegistered User regular
    edited January 2010
    oh boy... anyone got a good site/page about UNIX shell scripting?

    I am about to enter a dark world.

    Jasconius on
  • Options
    xzzyxzzy Registered User regular
    edited January 2010
    Jasconius wrote: »
    oh boy... anyone got a good site/page about UNIX shell scripting?

    I am about to enter a dark world.

    Prepare for a syntax which makes absolutely zero sense.

    I've been a unix admin for 11 years now and it still feels alien. I understand why it is the way it is, but it so reliably rejects conventions from other languages, it takes a lot of effort to stay up to speed with it.

    xzzy on
  • Options
    clsCorwinclsCorwin Registered User regular
    edited January 2010
    So I got some questions here:

    I'm making a Battleship game for one of my classes, ad its going to be playable via network.

    Right now I'm thinking of having a Player class, with all the actions associated with. I'm just unsure how to deal with the objects interacting, considering I'll have 2 programs interacting with each other.

    Do I have a function within my Battleship.cpp to deal with the actions?

    Or, whats the best way to approach this, since I haven't done anything like this before.

    clsCorwin on
  • Options
    xzzyxzzy Registered User regular
    edited January 2010
    Trying to cram everything into a player class will probably end in tears. It'll work in the technical sense.. as in you're get the code to run and the game will be playable, but it'd be a pretty poor demonstration of OO style.

    A more logical setup might have you create a boat class, which you create copies of for each boat a player owns. You could still have a player class.. but it would be relatively simple. Store stuff like their name or their score and what team they're on. Then each boat object stores the team it belongs to, and with that set up you should have enough pieces to get the game to come together.

    xzzy on
  • Options
    JasconiusJasconius sword criminal mad onlineRegistered User regular
    edited January 2010
    everything that xzzy says is true.

    you create generic game piece objects, and you assign team values to them. a player can only control the pieces on his team.

    it's a technique that's been around for a loooooooong time.

    Jasconius on
  • Options
    PracticalProblemSolverPracticalProblemSolver Registered User regular
    edited January 2010
    clsCorwin wrote: »
    So I got some questions here:

    I'm making a Battleship game for one of my classes, ad its going to be playable via network.

    Right now I'm thinking of having a Player class, with all the actions associated with. I'm just unsure how to deal with the objects interacting, considering I'll have 2 programs interacting with each other.

    Do I have a function within my Battleship.cpp to deal with the actions?

    Or, whats the best way to approach this, since I haven't done anything like this before.

    do you have a framework that will handle things like the game loop, drawing and networking or do you have to create the whole thing from scratch?

    PracticalProblemSolver on
  • Options
    naengwennaengwen Registered User regular
    edited January 2010
    xzzy wrote: »
    Can you wrap the line that's causing the problem in a try/catch block?

    I know nothing about ASP, but that's the standard way of trapping errors. The other solution is to fix whatever's causing the error. ;)

    I wish it were that simple; unfortunately, the event involved seems to require that I let the exception go unhandled. To elaborate, this problem is centered around a page which makes use of the Ajax AsyncFileUpload Web Server Control, which has a few client and server side events attached to it (OnClientUploadComplete, OnUploadComplete, OnClientUploadError, etc). The code behind for the page right now has a point where, once the file has successfully been uploaded by the control, it's verified by a virus scanner and submitted to the database. If any threats are detected on the file, it returns the error and, if it were working properly, launch the client-side upload error event which modifies one of the labels on the page to display the associated error message. Otherwise, it continues to the client-side upload complete method which modifies a label on the screen to say the file's been uploaded.

    Here's where things start getting tricky: I haven't found any documentation which tells me how to use AsyncFileUpload's error event manually, so for right now i'm throwing an unhandled exception to trigger it. Yes, this is a bad idea, but searching for an alternative thus far has proven unfruitful. If any of you happen to know how I can fire the error event from my code behind and skip the exception, please lemme know how so I don't have to do this very stupid thing.

    Regardless, we still have the issue where an additional error notification is unnecessary for this page, and in the YSOD's case, incredibly unattractive. What i'm looking for is either a way to either suppress or, at least autocancel, the dialog box for that page so the user doesn't have to worry about it. At worst, get the "OK" button to redirect in such a way that the exception message is still shown (web.config's CustomError clears the exception message before the Client Upload Error event fires) and create a page which closes on Page Load.

    Worse comes to worst, we'll probably just get rid of the error dialog on that page and create a custom error page, but I believe that's reserved for the next phase of the project at the moment. If there's a way to do these things without radically rewriting the code, it would make me a little less envious of the dead whenever I'm using ASP.Net though.

    naengwen on
  • Options
    clsCorwinclsCorwin Registered User regular
    edited January 2010
    clsCorwin wrote: »
    So I got some questions here:

    I'm making a Battleship game for one of my classes, ad its going to be playable via network.

    Right now I'm thinking of having a Player class, with all the actions associated with. I'm just unsure how to deal with the objects interacting, considering I'll have 2 programs interacting with each other.

    Do I have a function within my Battleship.cpp to deal with the actions?

    Or, whats the best way to approach this, since I haven't done anything like this before.

    do you have a framework that will handle things like the game loop, drawing and networking or do you have to create the whole thing from scratch?

    I don't have anything right now and was just planning on doing it from scratch since I haven't done this before (which also means I hadn't considered that).

    .NET is out for frameworks though, this will end up running at school on OS X or Solaris.

    clsCorwin on
  • Options
    exisexis Registered User regular
    edited January 2010
    Hey all, I'm having some trouble dealing with JFrame's, and it's starting to drive me nuts. I must be missing something incredibly obvious, but I'm still pretty confused as to what the problem is.

    I have a singleton, 'ConfigSettings', which creates a couple of different GUI objects. The user picks their settings and everything is set in ConfigSettings. Everything works the first time around, but if I try and reinstantiate either of my GUI objects again, they're both inactive (no components are drawn, appears not to be repainting etc.).

    Both of my GUI objects are subclasses of JFrame. Here's my file selection class (I know I could have this inline, but it keeps ConfigSettings nice and tidy with all the GUI stuff pulled out):
    public class SelectFileGUI extends javax.swing.JFrame {
    	
    	private JFileChooser selectFile;
    
    	{
    		//Set Look & Feel
    		try {
    			javax.swing.UIManager.setLookAndFeel(javax.swing.UIManager.getSystemLookAndFeelClassName());
    		} catch(Exception e) {
    			e.printStackTrace();
    		}
    	}
    
    	public SelectFileGUI() {
    		super();
    		initGUI();
    	}
    	
    	private void initGUI() {
    		try {
    		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    		{
    			selectFile = new JFileChooser();
    			selectFile.setCurrentDirectory(new File(System.getProperty("user.dir")));
    			
    			getContentPane().add(getSelectFile(), BorderLayout.CENTER);
    			selectFile.setAcceptAllFileFilterUsed(false);
    			selectFile.addActionListener(new ActionListener() {
    				public void actionPerformed(ActionEvent evt) {
    					selectFileActionPerformed(evt);
    				}
    			});
    		}
    			pack();
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    	
    	private JFileChooser getSelectFile() {
    		return selectFile;
    	}
    	
    	private void selectFileActionPerformed(ActionEvent evt) {
    		File file = getSelectFile().getSelectedFile();
    		if(file != null) new XMLReader().readData(file);
    		ConfigSettings.getInstance().setReady(true);
    	}
    
    }
    
    ... and I can't see anything wrong in there. Here's how I'm instantiating it in ConfigSettings:
    private void selectFile() {
    		fileSelector = new SelectFileGUI();
    		fileSelector.setVisible(true);
    		// ... wait code ...
    		fileSelector.dispose();
    		// ...
    	}
    
    Now, like I said, ConfigSettings is a singleton. So it's the same static instance being used every time. The first instantiation is down through my main() method, as the app starts. Following attempts are from the display GUI, calling ConfigSettings.getInstance().selectSettings() - the basic idea is that I want to draw stuff and then let the user screw around with the existing settings. Thing is, I can call selectSettings() as many times as I want, from main() when the app starts, and the GUI loads fine. It's just that any call afterwards does nothing.

    So can anyone point out the embarrassingly straightforward reason this is happening?

    exis on
  • Options
    PracticalProblemSolverPracticalProblemSolver Registered User regular
    edited January 2010
    clsCorwin wrote: »
    I don't have anything right now and was just planning on doing it from scratch since I haven't done this before (which also means I hadn't considered that).

    .NET is out for frameworks though, this will end up running at school on OS X or Solaris.

    Are you stuck on c++ ?

    I highly recommend you get a good game engine to start with, you'll see a solid approach to the whole system and won't have to write everything from scratch. There's a few out there for mac, not sure if there's much for solaris though. That way you can stick to writing code for your game, not for your engine.

    For the basics of your game, here's how I would set it up:

    three states: setup, shooting and getting shot.

    two main game models(classes): board and ship

    edit: if you're doing this for a class, the it department should have a framework they regularly use, have you asked around?

    PracticalProblemSolver on
  • Options
    xzzyxzzy Registered User regular
    edited January 2010
    I'd actually suggest avoiding graphics entirely at this point. Just do a curses version of the game. It'll look ugly, but what it does is force you to focus on the game logic.. which is a lot more important. If you do have an intention to go to sprites or 3D at some point in the future, then be cautious to keep your rendering and gamestate code separate. This means when you get to that point, all you're doing is rewriting the rendering code.

    And if you haven't yet decided which platform the software needs to run on, I strongly suggest a scripting language like python. Solves a whole bunch of cross platform issues for you.

    xzzy on
  • Options
    JasconiusJasconius sword criminal mad onlineRegistered User regular
    edited January 2010
    Yeah. Or if you do it on OS X you can probably just use the cocoa controls as makeshift graphics.

    Unlike Winforms, which sucks for everything.

    Jasconius on
  • Options
    templewulftemplewulf The Team Chump USARegistered User regular
    edited January 2010
    I have a question for anybody familiar with wordpress. This might be less of a programming question than is customary, but there's some technical meat I promise!

    I have a wordpress site, and I was messing around with the custom meta data to display content ratings. I realized there was probably a plug-in to do what I wanted without involving post meta data. I looked into the two that seem currently active (flutter and magic fields), and I've read that both of those make database queries every time you reference a field. For three echo statements (plus one in the if condition) that's four queries for something I could get in one chunk and parse manually.

    Should I just roll up my own implementation, or am I just misusing these plug-ins?

    templewulf on
    Twitch.tv/FiercePunchStudios | PSN | Steam | Discord | SFV CFN: templewulf
  • Options
    InfidelInfidel Heretic Registered User regular
    edited January 2010
    It's probably so that they remain independent, which is a nice feature of plugins and intentional.

    The tradeoff naturally is efficiency.

    You could "fix" them, but then they're dependent on each other right? Once you are happy with the setup and things won't be changing much, you could go in and hack them up a bit to make them smarter, keeping in mind that you'll need to probably manually edit again if you change your setup.

    Infidel on
    OrokosPA.png
  • Options
    naengwennaengwen Registered User regular
    edited January 2010
    Why is it that whenever I post a programming problem and claim that Google couldn't solve my problem, my next search always has the answer i'm looking for?

    http://forums.asp.net/p/1481062/3456454.aspx

    To summarize,

    1) Create a hidden text field. (Tried this)
    <input type="hidden" value="" runat="server" id="errorText" />
    

    2) Modify your code-behind to give the hidden field the error message when the problem occurs. (Tried this, partially)
    public protected void OnComplete(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e){
         bool problem;
         ...
         if(problem)
              ScriptManager.RegisterStartupScript(this, this.GetType(), "upError", "top.$get('" + errorText.ClientID + "').value=\""+yourErrorMessageHere+"\";", true);
         ...
    }
    

    3) Modify your client-side OnComplete method to check the hidden field. (The missing stuff from step 2, plus one line here, was what made this not work when I tried a similar solution)
    function uploadComplete(sender, args) {
         ...
          var textError = $get("<%= errorText.ClientID %>").value;
          if (textError.length > 0) {
               sender._onError(textError); // I can raise the ClientUploadError event from JavaScript now, yayyy
               return;
         }  
         ...
    }
    

    naengwen on
  • Options
    clsCorwinclsCorwin Registered User regular
    edited January 2010
    xzzy wrote: »
    I'd actually suggest avoiding graphics entirely at this point. Just do a curses version of the game. It'll look ugly, but what it does is force you to focus on the game logic.. which is a lot more important. If you do have an intention to go to sprites or 3D at some point in the future, then be cautious to keep your rendering and gamestate code separate. This means when you get to that point, all you're doing is rewriting the rendering code.

    And if you haven't yet decided which platform the software needs to run on, I strongly suggest a scripting language like python. Solves a whole bunch of cross platform issues for you.

    Well, the teacher didn't specify any language per se, but hes a C++ guy through and through.

    Also, I was planning on staying in textland, unless I managed to finish everything and had time to spare, which is doubtful.

    clsCorwin on
  • Options
    JasconiusJasconius sword criminal mad onlineRegistered User regular
    edited January 2010
    It's going to be easier to write a game in Python if you aren't decently versed in C++.

    Python is such an easy language to pick up and the libraries have really flourished in the last 5 years, you can get a lot done.

    Jasconius on
  • Options
    clsCorwinclsCorwin Registered User regular
    edited January 2010
    I have both Python and C++ experience, but I want to use C++ for 2 reasons:

    1) This is a team project, and my partner has not had any Python experience whereas he is familiar with C++. (That and our text covers the socket API).

    2) After this is done I plan on translating this into C# and get some practice in there, figure it would be easier to do from C++.

    clsCorwin on
  • Options
    templewulftemplewulf The Team Chump USARegistered User regular
    edited January 2010
    Infidel wrote: »
    It's probably so that they remain independent, which is a nice feature of plugins and intentional.

    The tradeoff naturally is efficiency.

    You could "fix" them, but then they're dependent on each other right? Once you are happy with the setup and things won't be changing much, you could go in and hack them up a bit to make them smarter, keeping in mind that you'll need to probably manually edit again if you change your setup.

    I assume you're responding to me, but I'm not sure what you're getting at. Are you talking about the Flutter and Magic Fields plug-ins being dependent on each other? As far as I know, they're mutually exclusive and do the same thing. They're both forks of an earlier, inactive project.

    I was expecting it (either one) to behave more like get_post_custom(), which returns the whole array with one query. Now I have the implementation details of an array in my page, but so far I prefer that to doing a query every time I echo something.

    Or did you mean something different?

    templewulf on
    Twitch.tv/FiercePunchStudios | PSN | Steam | Discord | SFV CFN: templewulf
  • Options
    InfidelInfidel Heretic Registered User regular
    edited January 2010
    templewulf wrote: »
    Infidel wrote: »
    It's probably so that they remain independent, which is a nice feature of plugins and intentional.

    The tradeoff naturally is efficiency.

    You could "fix" them, but then they're dependent on each other right? Once you are happy with the setup and things won't be changing much, you could go in and hack them up a bit to make them smarter, keeping in mind that you'll need to probably manually edit again if you change your setup.

    I assume you're responding to me, but I'm not sure what you're getting at. Are you talking about the Flutter and Magic Fields plug-ins being dependent on each other? As far as I know, they're mutually exclusive and do the same thing. They're both forks of an earlier, inactive project.

    I was expecting it (either one) to behave more like get_post_custom(), which returns the whole array with one query. Now I have the implementation details of an array in my page, but so far I prefer that to doing a query every time I echo something.

    Or did you mean something different?

    Yes, without details it sounded to me like it was something where in multiple places it's doing a query, spitting out a value, but the query is the same or has all the data needed each time. It's redundant, but each echo is now not relying on another (the first) or requiring any persistence. It's a self contained tidbit.

    Which is of course not very efficient.

    So unless it's something trivially naive, like literally requerying four times in four lines back to back, it's not something "wrong" so much as a design choice. Maybe a poor one? I'm not looking at the code, I'm just offering a possible thought-line to why it could be like that.

    Infidel on
    OrokosPA.png
  • Options
    LoneIgadzraLoneIgadzra Registered User regular
    edited January 2010
    So what's the best revision control system these days? I was just going to use subversion because it seems relatively easy, but I've seen a lot of projects moving to git lately and was just wondering if anyone here had an opinion.

    Backstory: I'd really like to use the new PC I built as more of a development machine (currently my main "work" computer is a MacBook Pro, but it's slower than the PC and has a smaller screen) but I'm starting to realize this is just not going to happen unless I run some kind of revision control server on my laptop (which must remain the "main" machine for now since it is backed up by Time Machine) so I can keep everything synced up.

    Also, even if it's just me, making changes on one machine, I'm starting to see the value of tracking those changes and keeping old versions.

    LoneIgadzra on
  • Options
    ImperfectImperfect Toronto, Ontario, CanadaRegistered User regular
    edited January 2010
    Git is what all the cool kids use these days, but IMHO, Subversion is easier on the noggin', and if it's just you, you don't need all that fancy shit that Git does anyway.

    That said, if you don't yet know either, then either is a good choice. Just make sure you have a good interface to go with it, because command line is for chumps.

    Might I recommend SmartSVN? It is a for-pay client, but if you ignore its nagging for 30 days, it switches to "Foundation Version" which does 99.9% of what you need, and you can run the command line for that remaining .01% should you ever find yourself in a weird position.

    Imperfect on
  • Options
    LoneIgadzraLoneIgadzra Registered User regular
    edited January 2010
    Imperfect wrote: »
    Might I recommend SmartSVN? It is a for-pay client, but if you ignore its nagging for 30 days, it switches to "Foundation Version" which does 99.9% of what you need, and you can run the command line for that remaining .01% should you ever find yourself in a weird position.

    Looks good, but seems to be a Java application and I am forced to ask, once again, why the OS X JRE uses font smoothing designed for CRT's even though Apple hasn't sold a damn CRT in years. Shit gives me a headache.

    LoneIgadzra on
  • Options
    JasconiusJasconius sword criminal mad onlineRegistered User regular
    edited January 2010
    SVN supports binary files. GIT, based on everything I have read, does not (at least as well).

    SVN is probably more geared for a single developer. GIT is designed around branching. It doesn't make much sense to branch a lot if you're the only dude working on a project.

    SVN is bigger and slower, GIT is smaller and faster.

    I use SVN, there are more SVN clients available than GIT clients, and a lot of very tasty SVN hosting services.

    If I were working on a project with say, 5 or more other people where merging were central to the workflow (because, say, we were all working on the same few files at a time), I'd try GIT, but for solo projects, I can't see much argument against SVN.

    Jasconius on
  • Options
    ImperfectImperfect Toronto, Ontario, CanadaRegistered User regular
    edited January 2010
    Imperfect wrote: »
    Might I recommend SmartSVN? It is a for-pay client, but if you ignore its nagging for 30 days, it switches to "Foundation Version" which does 99.9% of what you need, and you can run the command line for that remaining .01% should you ever find yourself in a weird position.

    Looks good, but seems to be a Java application and I am forced to ask, once again, why the OS X JRE uses font smoothing designed for CRT's even though Apple hasn't sold a damn CRT in years. Shit gives me a headache.

    Because this is Java, and all things Java require you to jam your head up your ass sideways before you make a descision, especially if you're designing Java itself.

    I use it on a Mac at work (and Windows at home (and used it on Linux for years previous)) and it doesn't look that bad. But I am not a typography nerd though, so I dunno how it'll affect you.

    Imperfect on
  • Options
    InfidelInfidel Heretic Registered User regular
    edited January 2010
    I use SVN because I have hosting for it, and it's really easy to work with so I always recommend it.

    As in, I can get non-developers to work with it and get it setup without anything more than an initial email.

    So it has my loyalty. :lol:

    Infidel on
    OrokosPA.png
  • Options
    urahonkyurahonky Resident FF7R hater Registered User regular
    edited January 2010
    I'm pretty excited for my classes this quarter. I get to learn Ruby and Scheme.

    urahonky on
  • Options
    SenjutsuSenjutsu thot enthusiast Registered User regular
    edited January 2010
    those are two pretty awesome laguages

    edit: also, I use git, even in just-me scenarios, the speed and cheap forking is more than worth it

    Senjutsu on
  • Options
    naengwennaengwen Registered User regular
    edited January 2010
    Scheme's a pretty nifty little language; might take some getting used to if you've never used lambda calculus before. If you really like it, you should take a look at its daddy language, LISP.

    If you haven't messed with scripting languages before, Ruby's a good place to start. I'm liking Python a lot more now that I've written some apps in it, but that's just me.

    If this is the class I'm thinking about, shouldn't you be delving into Prolog as well? That's a fun language to learn; well, once you get used to the syntax, anyways.

    naengwen on
  • Options
    LoneIgadzraLoneIgadzra Registered User regular
    edited January 2010
    I had that class, never could do much with Scheme. It seems anything complicated in it must necessarily become unreadable. Then there's just the utter impracticality of defining branching in functional terms - it's so counterintuitive to read and never got any better for me. Basically I can credit Scheme with making me much better at recursion (because using its loop construct is a tear-your-hair out scenario, even when it makes more sense) but I was so glad when the unit was over.

    LoneIgadzra on
Sign In or Register to comment.