Showing posts with label software development. Show all posts
Showing posts with label software development. Show all posts

Thursday, July 2, 2015

TCPRelay 0.4 beta 3

TCPRelay 0.4 beta 3 is now available! Download the 32-bit or 64-bit version. You may also need to install the Microsoft .NET Framework 4.

What's new in this version:
  • GUI
    • FIXED: TCPRelay would fail on startup under some circumstances if there was no IP address configured in Bind to Interface.
      Check out the official topic on XSplit's forums and see for yourself all the great feedback people gave me.

      ARK: Survival Evolved and Android App

      Oh boy, I've been playing ARK: Survival Evolved for a couple of weeks now and having a ton of fun! This is a game about survival in a world filled with pre-historical creatures, mostly dinosaurs, where you can tame almost all of them and ride them around! The guys behind the game are constantly updating it with new creatures almost every week, tons of bug fixes and new stuff to build and explore.

      I've been recording my adventures in ARK (in Portuguese) and uploading them to YouTube. Check that out:


      In addition to that, I also took the time to learn some Android development and wrote a fairly simple app called Anacruse where you have to tell the note name from a staff. Go download it!

      Friday, March 20, 2015

      TCPRelay 0.4 beta 2

      NOTE: there is a newer version of TCPRelay here.

      TCPRelay 0.4 beta 2 is now available! Download the 32-bit or 64-bit version. You may also need to install the Microsoft .NET Framework 4.

      What's new in this version:
      • GUI
        • IMPROVED: cosmetic improvements to the Advanced Settings window.
        • FIXED: Advanced Settings window would fail to open again if closed by clicking the X button.
          Check out the official topic on XSplit's forums and see for yourself all the great feedback people gave me.

          Saturday, March 7, 2015

          TCPRelay 0.4 beta 1

          NOTE: there is a newer version of TCPRelay here.

          TCPRelay 0.4 beta 1 is now available! Download the 32-bit or 64-bit version. You may also need to install the Microsoft .NET Framework 4.

          What's new in this version:
          • GUI
            • NEW: added a new Advanced Settings window for tuning socket parameters
              • Socket Send Buffer Size moved to this window
              • Added Receive Buffer Size
              • Added No Delay
              • Added Connection Timeout
              • Can set up parameters for both the application- and the remote-facing sockets
              • [b1] Added an option to allow binding remote connections to a different IP address
            Check out the official topic on XSplit's forums and see for yourself all the great feedback people gave me.

            Tuesday, March 3, 2015

            TCPRelay 0.4 alpha 4

            NOTE: there is a newer version of TCPRelay here.

            TCPRelay 0.4 alpha 4 is now available! Download the 32-bit or 64-bit version. You may also need to install the Microsoft .NET Framework 4. Keep in mind that this is an alpha version; some features may not behave correctly.

            What's new in this version:
            • GUI
              • NEW: added a new Advanced Settings window for tuning socket parameters
                • Socket Send Buffer Size moved to this window
                • Added Receive Buffer Size
                • Added No Delay
                • Added Connection Timeout
                • Can set up parameters for both the application- and the remote-facing sockets
              Check out the official topic on XSplit's forums and see for yourself all the great feedback people gave me.

              Thursday, February 26, 2015

              TCPRelay 0.4 alpha 3

              NOTE: there is a newer version of TCPRelay here.

              TCPRelay 0.4 alpha 3 is now available! Download the 32-bit or 64-bit version. You may also need to install the Microsoft .NET Framework 4. Keep in mind that this is an alpha version; some features may not behave correctly.

              What's new in this version:
              • General
                • NEW: socket send buffer size can be tweaked from the console and GUI.
                  • Console: use the -sbs:## parameter.
                  • GUI: use the newly added Send Buffer field to adjust the buffer size.
                  • The default size is 8 KB.
                  • Increasing this might help reduce or eliminate dropped frames, especially on connections with high latency to the server.
              Check out the official topic on XSplit's forums and see for yourself all the great feedback people gave me.

              Thursday, December 4, 2014

              TCPRelay is now open source!

              Some people have been requesting that I made TCPRelay open source. I finally decided to put it up on GitHub after adjusting the build processes for them.

              Here's the Java version of TCPRelay. The latest released version is 0.1.1 beta. The current code base is 0.2 and has a few small improvements.
              Here's the .NET version of TCPRelay. The latest released version is 0.4 beta 1. The latest released versions are based on this.

              Have fun coding!

              Tuesday, October 21, 2014

              TCPRelay 0.4 alpha 2

              NOTE: there is a newer version of TCPRelay here.

              TCPRelay 0.4 alpha 2 is now available! Download the 32-bit or 64-bit version. You may also need to install the Microsoft .NET Framework 4. Keep in mind that this is an alpha version; some features may not behave correctly.

              What's new in this version:
              • General
                • NEW: partial localization support for:
                  • [es-AR] Spanish (Argentina)  (thanks to Nicolás Sigal)
                  • [nl-NL] Dutch (The Netherlands)  (thanks to TalbotEv)
                • If you wish to add your language, fill this table (make sure to fill both sheets: WinFormStrings and ControlsStrings) and send me via e-mail with the subject TCPRelay translations for [language] [country].
                • NOTE: only the GUI version has support for localization for now.
              • GUI
                • FIXED: [a1] status tooltip did not clear when TCPRelay was started sucessfully after an error.
                • FIXED: [a1] added localization support for several hard-coded strings.
                • FIXED: [a1] component layout updated manually for localization.
                • FIXED: [a2] old Twitch.tv ingest server list was shut down. Updated to the new Kraken REST API. Fixes an error when starting TCPRelay.
                Check out the official topic on XSplit's forums and see for yourself all the great feedback people gave me.

                Tuesday, July 30, 2013

                TCPRelay 0.4 alpha 1

                NOTE: there is a newer version of TCPRelay here. It fixes a problem with Twitch.tv ingest server listing when starting up, so if you still have the problem, make sure to upgrade now.

                TCPRelay 0.4 alpha 1 is now available! Download the 32-bit or 64-bit version. You may also need to install the Microsoft .NET Framework 4. Keep in mind that this is an alpha version; some features may not behave correctly.

                What's new in this version:
                • General
                  • NEW: localization support for:
                    • [es-AR] Spanish (Argentina)  (thanks to Nicolás Sigal)
                  • If you wish to add your language, fill this table (make sure to fill both sheets: WinFormStrings and ControlsStrings) and send me via e-mail with the subject TCPRelay translations for [language] [country].
                  • NOTE: only the GUI version has support for localization for now.
                • GUI
                  • FIXED: status tooltip did not clear when TCPRelay was started sucessfully after an error.
                  • FIXED: added localization support for several hard-coded strings.
                  • FIXED: component layout updated manually for localization.
                Check out the official topic on XSplit's forums and see for yourself all the great feedback people gave me.

                Saturday, June 29, 2013

                TCPRelay 0.3 beta 3

                NOTE: there is a newer version of TCPRelay here.

                TCPRelay 0.3 beta 3 is now available! Download the 32-bit or 64-bit version. You may also need to install the Microsoft .NET Framework 4.


                What's new in this version:
                • GUI
                  • FIXED: serverlist.txt is now saved to the user's AppData folder to avoid permission issues. (Thanks for reporting this Pedroca!)
                    The full path under Windows Vista/7/8 is:

                            C:\Users\<user>\AppData\Local\TCPRelay
                Check out the official topic on XSplit's forums and see for yourself all the great feedback people gave me.

                Thursday, May 30, 2013

                Tracker music player using XMP

                Recently I've been working on a tracker music player based on the xmp library. I got the basics working: the DirectSound stream buffer, a software circular buffer to write audio data, compiled xmp into .dll and .lib and integrated those into my project. Then I wrote a simple command-line based player to test it. Works like a charm!


                XMPModPlayer playing 2nd_pm.s3m by Purple Motion of Future Crew

                For those of you unfamiliar with the scene, tracker music (or module music) is an old music format very popular back in the DOS and Amiga era and was used by many games and artists of that time and even further. For instance, Epic Games used it on games like Jazz Jackrabbit and Unreal Tournament. It was also very popular in the demoscene; in fact, some tracker music formats (such as S3M and XM) were created by demosceners because they needed something better than what they had -- they needed to do something impressive, which is the whole point of demos.

                Tracker music files are very similar to MIDI files, except they also include samples and sometimes instrument information like envelopes, filters, key mapping and such. These formats were very influential, so much that there is a contemporary tracker inspired on them that can take advantage of modern technology such as VST plugins. OpenMPT runs on modern OSes too and plays these old formats without a hitch.

                "So, if there are very powerful trackers/players out there, why are you writing a simple player?" For two reasons:
                1) I enjoyed tracker music back then, and I still enjoy them today, and I didn't want to use Winamp or OpenMPT to play those songs, and I couldn't find a xmp player for Windows. (Well, this is like four reasons in one... :P)
                2) I wanted to learn DirectSound programming, and this proved to be an adequate challenge.

                I'm thinking about improving this player quite a bit, making a graphical front-end for xmp but with very advanced visualization features (think Cubic Player, but with more bling), so I can learn Direct3D/OpenGL too. I'll also probably try to implement support for ASIO drivers, mostly for learning purposes.

                Saturday, January 12, 2013

                TCPRelay 0.3 beta 2

                NOTE: there is a newer version of TCPRelay here.

                TCPRelay 0.3 beta 2 is now available! Download the 32-bit or 64-bit version. You may also need to install the Microsoft .NET Framework 4.


                What's new in this version:
                • GUI
                  • NEW: the Target URI list is now saved to a file in the TCPRelay folder (serverlist.txt) and reloaded every time TCPRelay starts.
                  • NEW: pressing Enter while typing a Target URI or starting TCPRelay will add the current Target URI to the list if not already present.
                Check out the official topic on XSplit's forums and see for yourself all the great feedback people gave me.

                Friday, December 14, 2012

                TCPRelay 0.3 beta


                TCPRelay 0.3 beta is now available! Download the 32-bit or 64-bit version. You may also need to install the Microsoft .NET Framework 4.

                What's new in this version:
                • GUI
                  • NEW: the last Target URI and Listen Port values are now saved to the Windows Registry under the key:

                            HKEY_CURRENT_USER\Software\StrikerX3\TCPRelay

                    Now every time you restart TCPRelay the last used server and listen port should be automatically set.
                Check out the official topic on XSplit's forums and see for yourself all the great feedback people gave me.

                Friday, November 30, 2012

                State of TCPRelay, and Natural Selection 2

                It's been a while since my last update here. If you're wondering why I haven't been updating TCPRelay lately, it's mostly because there was no demand for improvements or fixes for it. Also, I work as a systems analyst and that involves a lot of programming, so it's also a matter of being burned out too.
                Anyway, here's a few ideas for the next versions of TCPRelay I have written down:
                • Stream delay: I'm not entirely sure this is possible without inspecting the stream data, but this is definitely worth checking out.
                • A way to fetch server lists from other services (own3d.tv, YouTube, ustream, ...). Also enable users to add their own lists, keep them between sessions and share with others.
                • Improve localization support and allow users to translate TCPRelay to other languages.
                • Fork into TCPProbe -- basically TCPRelay with packet inspection and manipulation capabilities through .NET plugins. Could be useful for network development.
                If you have any suggestions, please feel free to comment.

                On another note, I've been looking for a strong, competitive FPS that's reminded me of the old, but fun formula of Unreal Tournament and Quake: fast-paced action with insane movement skills and pinpoint aiming accuracy required. Unfortunately, since 2007 (when UT3 was released), there was not a single memorable FPS that followed the formula and caught my interest, turning me off from the genre. I went on to other games, including World of Warcraft, Starcraft 2, Borderlands 2 and several casual and indie games. That is, until last month.

                Natural Selection 2 was developed by Unknown Worlds Entertainment and released on October 30th. I haven't heard much about the game until then, but instantly got addicted the moment I got into a multiplayer game. It's an amazing blend of RTS and FPS with a surprisingly friendly community -- the complete opposite of most popular games such as Dota 2, LoL and Starcraft 2. People in NS2 actually help each other out, newbies ask questions and learn tricks and tactics from veterans (there's even some pro players giving out "classes" for free on their servers! See here and here); there's no split between the n00bz and the pros. Teamwork and coordination are absolutely required to get somewhere. Trying to Leeroy Jenkins your way into the enemy base *will* get you killed, unless you happen to be an Onos fighting against a bunch of rookie marines (and even then, if they know how to press the fire button and move their mouse to follow a giant suicidal gorilla-rhino-thing around, you *will* go down).

                I highly recommend NS2 to anyone who has been yearning for something other than the generic "realistic" war shooter #235 with killstreaks and "realistic" gunfights, or anyone who enjoys either the FPS or RTS genres at all. It may not be as popular as LoL or Dota or SC2, but it's definitely competitive and interesting to watch. Refer to this topic on the UWE forums for a list of streams/YouTube channels/whatnot on NS2 competitive play. Oh, and it's cheap on Steam -- just 25 bucks.

                Thursday, September 27, 2012

                Simplify ternary operators

                One of my pet peeves in Java/C/C++/C# programming is the use of the ternary operator ?: with boolean values. It's almost always redundant, makes code harder to read and can be easily replaced by a simpler boolean expression that also has the advantage of being "branch-free" in some languages, that is, do not require the CPU to select a path of execution based on a condition, which can be very expensive. The best compilers will optimize them away in a manner similar to what I describe below, but they still don't improve code readability.

                From this point onward I'll be using the Java/C/C++/C# code syntax. A boolean expression is any valid expression that results in a boolean value. This may be anything from the constants true and false all the way to complex expressions such as x == 1 && (y > 3 || z <= 1.25) && !checkSomething(x, y, z) (assuming checkSomething(...) returns a boolean).

                Say you have the condition c and the boolean expressions p and q. The following table contains all possible conversions from a ternary expression to an equivalent boolean expression:

                #Ternary Expressionif-then-else ExpressionEquivalent to
                1c ? p : qif (c) p else q(c && p) || (!c && q)
                2c ? p : trueif (c) p else true!c || p
                3c ? p : falseif (c) p else falsec && p
                4c ? true : pif (c) true else pc || p
                5c ? false : pif (c) false else p!c && p
                6c ? true : falseif (c) true else falsec
                7c ? false : trueif (c) false else true!c
                8c ? true : trueif (c) true else truetrue
                9c ? false : falseif (c) false else falsefalse

                Note that #1 may or may not result in more readable code; it is probably better to use the ternary operator in that case. #6 through #9 are poor coding practices and should be replaced as soon as possible by their equivalent boolean expressions. #2 through #5 require attention and almost certainly will result in better, cleaner code.

                Also note that c ? p : q is equivalent to if (c) b=p else b=q. In other words, if any boolean variables are assigned a value that depends on the condition of an if-then-else clause, then that value can be simplified according to the equivalence table above, as long as there are no unintended side-effects.

                Let's try this with an example:

                boolean b = i > 5 ? j == 3 : false

                or, as an if-then-else clause:

                boolean b;
                if (i > 5) b = j == 3; else b = false;

                Looking at the above table, this matches expression #3, with:

                c = i > 5
                p = j == 3

                The equivalent expression would be:

                boolean b = i > 5 && j == 3

                which is slightly shorter and certainly less confusing than the above ternary or if-then-else statements.

                Sunday, September 16, 2012

                TCPRelay 0.3 alpha 3

                TCPRelay 0.3 alpha 3 is now available! Download the 32-bit or 64-bit version. You may also need to install the Microsoft .NET Framework 4. Keep in mind that this is an alpha version; some features may not behave correctly.

                What's new in this version:
                • General
                  • NEW: localization support for:
                    • [en-US] English (United States)
                    • [pt-BR] Portuguese (Brazil)
                  • Send me an e-mail if you wish to add your language.
                  • NOTE: only the GUI version has support for localization for now.
                • Console
                  • FIXED: application no longer crashes when a connection is closed. The fix never got into 0.2.2.3 for some reason.
                • GUI
                  • NEW: Localization support, as above. By default the application will use the default language set in your operating system. You can override this by passing the language code as an argument to TCPRelay.exe. The supported language codes are listed between brackets above.
                  • NEW: [alpha 3] application now has an icon (thanks to Fryderyk "Ziel" Dachowski!)
                  • FIXED: [alpha 2] localization should now work properly on all parts of the GUI.
                  • FIXED: [alpha 3] tooltips for speed buttons were incorrectly referring to "as slow as possible".
                TCPRelay finally has its own icon, thanks to Fryderyk "Ziel" Dachowski! I appreciate your work :)

                Check out the official topic on XSplit's forums and see for yourself all the great feedback people gave me.

                Sunday, August 12, 2012

                TCPRelay 0.2.2.3 beta

                TCPRelay 0.2.2.3 beta is now available! Download the 32-bit or 64-bit version. You may also need to install the Microsoft .NET Framework 4.

                What's new in this version:
                • General
                  • FIXED: [0.2.2.1] no longer tries to reverse DNS lookup the target host. Should fix issues with not being able to connect to certain servers.
                  • FIXED: [0.2.2.2] reduced socket buffer size. This should eliminate dropped frames and disconnects caused by a change in version 0.2.1.0.
                • Console
                  • FIXED: [0.2.2.3] application no longer crashes when a connection is closed.
                • GUI
                  • FIXED: Target URI field no longer loses selection after being populated by the Twitch.tv updater.
                  • FIXED: speeds below 1 bps no longer show as ",# bps" or "bps".
                  • FIXED: [0.2.2.3] outbound and inbound speeds were swapped.
                  • IMPROVED: connection info no longer shows the local bandwidth (the old Received column). Since TCPRelay cannot receive more data than it can push to the servers (due to blocking I/O), that column was completely redundant. The numbers displayed in the GUI now represent the actual bandwidth usage (the old Published column).
                  • IMPROVED: average speed is now an average of the last 2 seconds.
                  • IMPROVED: connection info now displays connection duration in HH:MM:SS.
                  • IMPROVED: [0.2.2.3] closed connections now display the overall average speeds.
                  • Speed history graph:
                    • IMPROVED: widened to fit the extra available space.
                    • IMPROVED: now displays a wide bar with the current speeds to the right of the graph.
                    • IMPROVED: slightly reduced resource usage.
                TCPRelay still does not have its own icon. If anyone could provide me with one, preferably in 16x16, 32x32, 48x48, 64x64 ICO and 128x128, 256x256 PNG formats, I'd be very grateful! :)

                Check out the official topic on XSplit's forums and see for yourself all the great feedback people gave me.

                TCPRelay 0.2.1.0 beta

                TCPRelay 0.2.1.0 beta is now available! Download the 32-bit or 64-bit version. You may also need to install the Microsoft .NET Framework 4.

                What's new in this version:
                • General
                  • FIXED: connection attempts may now timeout after 5 seconds.
                  • IMPROVED: connection errors are now handled better.
                • GUI
                  • FIXED: tab order between components is now fixed.
                  • FIXED: speed graph no longer stops working after a while.
                  • FIXED: sometimes clearing all closed connections would cause the scrollbar graphics to remain on the window.
                  • IMPROVED: added tooltips to several components.
                  • IMPROVED: target URI now accepts addresses in <host>:<port> format.
                  • IMPROVED: error messages are now shown if TCPRelay fails to start.
                  • IMPROVED: connection attempts and errors are now shown in the list.
                  • IMPROVED: connection list refresh speed can be changed.
                TCPRelay still does not have its own icon. If anyone could provide me with one, preferably in 16x16, 32x32, 48x48, 64x64 ICO and 128x128, 256x256 PNG formats, I'd be very grateful! :)

                Check out the official topic on XSplit's forums and see for yourself all the great feedback people gave me.

                Friday, August 10, 2012

                TCPRelay 0.2 beta

                TCPRelay 0.2 beta is now available! Download the 32-bit or 64-bit version. You may also need to install the Microsoft .NET Framework 4.

                What's new in this version:
                • Completely rewritten in C#. TCPRelay now requires .NET Framework 4 instead of Java. Should help eliminate some of the issues people were having with the Java Virtual Machine.
                • NEW: created a graphical user interface for easier configuration and real-time connection and bandwidth usage statistics. The command line version still exists as a separate executable file.
                • FIXED: -ttv now lists the default Twitch.tv server as well.
                Some screenshots of the new GUI:

                Right after starting up

                TCPRelay 0.2 beta GUI

                The server list

                TCPRelay 0.2 beta GUI

                Doing a bandwidth test with XSplit
                TCPRelay 0.2 beta GUI

                TCPRelay does not have its own icon yet. If anyone could provide me with one, preferably in 16x16, 32x32, 48x48, 64x64 ICO and 128x128, 256x256 PNG formats, I'd be very grateful! :)

                Check out the official topic on XSplit's forums and see for yourself all the great feedback people gave me.