# Project Idea, Input needed.



## Kreij (Jan 31, 2011)

This is from a discussion in my personal messages ...


> Originally Posted by *W1zzard*
> sometimes i wonder if you are desperately looking for new programming projects ..



As you can see, our fearless leader is pretty perceptive.
I've been looking for a project that I can happily code on for the rest of my life.
I have an idea, but I need your input to see if anyone would be interested.

It's a database based TPU management application.
Here are some of the features I had in mind ...
- A BST manager that would allow you to keep track of, and rate, all of your activity in the BST forum.
- Secure Key storage for your apps and games (think Key-Z)
- A private message manager for downloaded PM files. (like when your PM area gets full and you want to save the old stuff)
- A thread manager, that would store TPU threads for reference offline.
- An upload manager. This would allow you to keep track of uploads to TPU (for example,  the urls of image uploads and the image, so you can find them again and re-reference them from the TPU server without having to re-upload because you know longer know the URL on TPU)
- An RSS feed reader for the TPU RSS feed.
- An application launcher so you could attach and launch any external program from this app.
- A save game backup utility that could be scheduled to copy your game saves on a regular basis.
- A TPU MMORPG that pits you against the mods (just kidding, but it would hysterically funny)
- *Anything else you think would be useful.*

App would require the installation of SQL Server Express (Free) or MySql (Free) database.
I can compile it for both 32 and 64 bit machines (or you could just run the 32 bit one in the x86 Program Files directory).

Here's the best part ... any one of you who knows C# or anyone willing to learn it can participate (Yes, I would like to keep it in managed code, unless someone comes up with a feature that would be better served with unmanaged code .. like the TPU MMO  ). 
I would simply send you the requirement doc for a module, method or class, you write it and send back the source to be included in the app.
You source code will be reviewed and optimization suggestions sent back before it is included.. 
No deadlines, no pressure and a great learning experience, if it takes forever so be it. 
I, and probably others, will provide assistance when you need it.
Everyone who helps will be credited in the app help section.
Free to pick whatever area interests you (DB programming, GUI, etc.)

a *lot* of the code I already have from writing this stuff when I was bored and trying to come up with projects, but will happily have anyone else take a shot at it for a learning experience.
I'll keep track of who is working on what, as well as revision control.

To be involved you will need .Net 4.0 and at least C# 2010 Express. (It's free too).
When modules are released, they will be tested by others. If you wrote the code, have a thick skin. Nothing is above scrutiny.

*Mini FAQ*:
Can I help? : Yes.
Will I get paid? : No.
Do I get college credits? : No
I'm a girl, can I have your baby? : Send PM with picture

So what do you think? Useful? Am I insane? 
Did Elvis really have a baby with Bigfoot that was taken by Aliens?

All comments appreciated.


----------



## FordGT90Concept (Jan 31, 2011)

Kreij said:


> - A save game backup utility that could be scheduled to copy your game saves on a regular basis.


I'm working on an app that does that right now.  It's about half done.  Here's the last pic I took of the interface:






Mind you, every back up it makes gets a unique name.  It is meant to create multiple save-points in games that have autosave only.


Edit: What do you mean by "module?"


----------



## olithereal (Feb 2, 2011)

Where's all the input?!

I think it's a good idea, and I'd be willing to help. As you said, great learning experience..
I'm fairly good (keep in mind--I'm still a student, second year) with with C# and SQL Server.


----------



## JrRacinFan (Feb 2, 2011)

Kreij said:


> - A private message manager for downloaded PM files. (like when your PM area gets full and you want to save the old stuff)



That would be like an "Outlook for TPU". Very interesting and I would donate to the project just to see this get light of day.


----------



## scaminatrix (Feb 2, 2011)

Kreij said:


> - A BST manager that would allow you to keep track of, and rate, all of your activity in the BST forum.
> - A private message manager for downloaded PM files. (like when your PM area gets full and you want to save the old stuff)
> - A thread manager, that would store TPU threads for reference offline.
> - An upload manager. This would allow you to keep track of uploads to TPU (for example,  the urls of image uploads and the image, so you can find them again and re-reference them from the TPU server without having to re-upload because you know longer know the URL on TPU)
> - A save game backup utility that could be scheduled to copy your game saves on a regular basis.



I would use most of these on a daily basis, so needless to say, I'm all for it


----------



## char[] rager (Feb 2, 2011)

I would also be willing to assist. I think it is a wonderful idea to have a community-created project for techPowerUp!


----------



## caleb (Feb 2, 2011)

Shouldn't the app be parted so you can install the autobackup thingies or others as a service for example and forget about it?
Why not Java?
Why install a DB over at clients machine (or is this for developer purpuses ) ?


----------



## Kreij (Feb 2, 2011)

caleb said:


> Shouldn't the app be parted so you can install the autobackup thingies or others as a service for example and forget about it?



This is just a high level description of my ideas. Specifics are ironed out in the requirements phase. 
I'm not even sure this is worth it. Over 190 view and only 4 replies saying they like the idea.



> Why not Java?



I like working in C# and the VS IDE better. If someone would like to port it all to Java, I'm fine with that.



> Why install a DB over at clients machine (or is this for developer purposes ) ?


This is an offline app, data will be stored locally. Using a database is fast and efficient. 
Modifying the data structures of the database to support added features can be accomplished with simple SQL scripts. 
By using a database, the user would have the ability to install it anywhere on their LAN and access it from any machine that is running the client.
Multiple users' data could be stored in the same database and kept private through individual logins (if so desired).
It could be written as a web app, but then the data would have to be hosted somewhere (read : not free).

Or am I off base and not understanding your question, caleb?

@Ford : In this context I am using the term module to indicate a higher level function embedded within the overall application. For instance, the BST manager would be considered a module, as well as would the PM Manager.


----------



## streetfighter 2 (Feb 2, 2011)

You know I'm down 

What version control are we using?  git?

Just an idea for aiding in brainstorming: https://bubbl.us/

Also, I was thinking about whipping up a nasty shell script (using _wget_ and lots of _grep_) that would scan score threads for scores then output a list sorted by member (then sorted by score per member) with the highest score per member auto checked, allowing the user to approve or modify the list as needed.  Then when they're happy it would output the score list in coded table form for vBulletin and easy posting.  I think a feature like that (but implemented using SQL) would be nice to have in the watchamahoosit you're describing .

Also, what the hell is a "BST Manager"?  Binary Search Tree Manager ?


----------



## xbonez (Feb 2, 2011)

I'd definitely interested in participating. I am comfortable around C#, and work as a .NET developer. I have .NET 4.0 and Visual Studio 2010 Professional at home on my desktop and laptop.


----------



## Kreij (Feb 2, 2011)

streetfighter 2 said:


> Also, what the hell is a "BST Manager"? Binary Search Tree Manager ?



Buy/Sell/Trade Manager for people who do a lot in that section and want to keep accurate records of things.

I do like Binary Search Tree Manager, though. 

So far, four people offered to help. That's a team in my book. 
I need to look into a few things ... more soon.


----------



## FordGT90Concept (Feb 2, 2011)

Doesn't Visual Studio come with some form of SQL server?

Would you be interested in that Automatic File Backup code?  It is intended to run as a tray application.

This sounds mostly like database work which I'm not all that fond of.  My expertice is in writing fully formed classes so if you got something in that area you want me to do, I'll probably do it.


----------



## streetfighter 2 (Feb 3, 2011)

FordGT90Concept said:


> Doesn't Visual Studio come with some form of SQL server?


Not that I'm presently aware of, but the last version of VS I installed was an Express edition...

Since we're using SQL I'd suggest SQLite, which has bindings in C# and wouldn't require the user to install any background services.



FordGT90Concept said:


> This sounds mostly like database work which I'm not all that fond of.  My expertice is in writing fully formed classes so if you got something in that area you want me to do, I'll probably do it.


I'm fairly new to SQL myself but it's actually pretty simple.  Also, the interface is going to contain a lot more than querying .


----------



## FordGT90Concept (Feb 3, 2011)

This is some of what Express installs:





Might just be means to access a remote SQL server and not actually an instance of SQL Server itself.


----------



## copenhagen69 (Feb 3, 2011)

sounds like a sweet little project. I will keep an eye on it


----------



## xbonez (Feb 3, 2011)

@Ford: yeah, I'm pretty sure those are just the assemblies to connect to a remote sql server


----------



## streetfighter 2 (Feb 3, 2011)

FordGT90Concept said:


> This is some of what Express installs:
> http://img.techpowerup.org/110202/express.png
> 
> Might just be means to access a remote SQL server and not actually an instance of SQL Server itself.


Interesting.  I forgot to check the uninstall list...

I checked with VS2010:Express and I only have these two SQL components:
Microsoft SQL Server Compact 3.5 SP2 ENU
Microsoft SQL Server Compact 3.5 SP2 x64 ENU

Though I custom install everything and I might have deselected the CLR and Management Objects 

Honestly I've started using Mono and I prefer it to VS .


----------



## caleb (Feb 3, 2011)

Kreij said:


> Or am I off base and not understanding your question, caleb?



No. 

Was just wondering if such a "big" database engine is a good choice. Having your data mobile seems a nice feature and I think preferable over installing local db.


----------



## Kreij (Feb 3, 2011)

Connecting to different databases is basically just changing the connection string and making sure you have the driver (system data source) loaded. 
Syntax for SQL commands can vary a little depending on what you are doing. Multiple choices is fine with me.

As far as portable data, I have no problem with giving the users the option to serialize their data in some other manner than in a database (it's a bit more work, but we're in no hurry.). 
I'm not nuts about having separate files for each module and would prefer to see all of the data in one data file of some type (and a backup of it to help prevent accidental deletion).
Any preferences on data serialization (binary, XML, etc.)?

RE: Compact Edition for MS website ...


> Microsoft SQL Server Compact is a free SQL Server embedded database ideal for building standalone and occasionally connected applications for mobile devices, desktops, and Web clients.
> 
> Top Features
> Free to use and distribute
> ...



This would also be fine to use, but I'm not sure if we could get remote connections (TCP/IP) to work with this version. 
They keep refering to the fact that it integrates and communicates with (a full version of) SQL Server.
Actually, the Express version comes set as local only and you have to tweak it to allow connections from remote computers.
It may be possible to tweak Compact in a similar manner using SQL Management Studio Express (I've not looked into it).

Oh I almost forgot ... we need a name for the project. Ideas?


----------



## streetfighter 2 (Feb 3, 2011)

Kreij said:


> As far as portable data, I have no problem with giving the users the option to serialize their data in some other manner than in a database (it's a bit more work, but we're in no hurry.).
> I'm not nuts about having separate files for each module and would prefer to see all of the data in one data file of some type (and a backup of it to help prevent accidental deletion).
> Any preferences on data serialization (binary, XML, etc.)?


This is why I think SQLite would be better than going with MySQL or SQL Server Express.  Creating a database file is as easy as _SQLiteConnection.CreateFile("mydatabasefile.db3")_ and the runtime is contained in the executable (though I'm not sure if it requires a dll or something).  I'm obsessed with eliminating background processes so only running the database when I need it is very appealing to me.



Kreij said:


> This would also be fine to use, but I'm not sure if we could get remote connections (TCP/IP) to work with this version.
> They keep refering to the fact that it integrates and communicates with (a full version of) SQL Server.
> Actually, the Express version comes set as local only and you have to tweak it to allow connections from remote computers.
> It may be possible to tweak Compact in a similar manner using SQL Management Studio Express (I've not looked into it).


I wasn't aware that we were looking to setup remote connections to the database.  SQLite could still work but it'd need a manager to run on the host computer.

Anyway, I'm not at all ashamed to admit I know f*ckel about SQL so I could be wrong about everything. 


Kreij said:


> Oh I almost forgot ... we need a name for the project. Ideas?


TPyou


----------



## xbonez (Feb 3, 2011)

Kreij said:


> Any preferences on data serialization (binary, XML, etc.)?



My vote goes for XML.


----------



## Kreij (Feb 3, 2011)

streetfighter 2 said:


> This is why I think SQLite would be better than going with MySQL or SQL Server Express.  Creating a database file is as easy as _SQLiteConnection.CreateFile("mydatabasefile.db3")_ and the runtime is contained in the executable (though I'm not sure if it requires a dll or something).  I'm obsessed with eliminating background processes so only running the database when I need it is very appealing to me.



I can understand that. Many here on TPU want to eliminate all processes being unused at the moment. Personally, I don't worry about it.



> I wasn't aware that we were looking to setup remote connections to the database.  SQLite could still work but it'd need a manager to run on the host computer.
> 
> Anyway, I'm not at all ashamed to admit I know f*ckel about SQL so I could be wrong about everything.



lol ... Since the SQLite database is a single disk file, other computers would only need to map the directory it's in to access it from the app. SQLite does entire file locking on reads and writes so there could be concurrency issues. As they state in the documentation, most locks do not last for more than a few dozen milliseconds, so it would probably not be a big issue, and the effects could be mitigated in code.



> TPyou



No comment. 



			
				xbonez said:
			
		

> My vote goes for XML.



Why? Just curious.


----------



## streetfighter 2 (Feb 3, 2011)

Kreij said:


> I can understand that. Many here on TPU want to eliminate all processes being unused at the moment. Personally, I don't worry about it.


If I had 8GB of ram I wouldn't care much either! 


Kreij said:


> lol ... Since the SQLite database is a single disk file, other computers would only need to map the directory it's in to access it from the app. SQLite does entire file locking on reads and writes so there could be concurrency issues. As they state in the documentation, most locks do not last for more than a few dozen milliseconds, so it would probably not be a big issue, and the effects could be mitigated in code.


Are you sure it locks on reads?  I've been reading the wiki and some docs and so far as I can tell it only locks on writes but there is also a write/fail/retry ability in the API.


> From wikipedia entry on *SQLite*
> _Several computer processes or threads may access the same database without problems. Several read accesses can be satisfied in parallel. A write access can only be satisfied, if no other accesses are currently being serviced. Otherwise, the write access fails with an error code (or can automatically be retried until a configurable timeout expires). This concurrent access situation would change when dealing with temporary tables._


Apparently Firefox uses SQLite so the concurrency issues can't possibly be critical.*

*why is the confused face sad?  Can't it be happy and confused?  And no, this isn't a gay joke . . .

@ Kreij*↓* Ah, good.  The way you wrote your other post had me wondering if it locked on parallel reads (which would definitely cause problems).  My vote definitely goes for SQLite then, assuming this is a votable decision .  No supplementary installs; just a single standalone executable that generates a single file database; definitely sounds nice to me...


----------



## Kreij (Feb 3, 2011)

I was going by this from the SQLite documentation on their site ...


> *•High Concurrency*
> 
> SQLite uses reader/writer locks on the entire database file. That means if any process is reading from any part of the database, all other processes are prevented from writing any other part of the database. Similarly, if any one process is writing to the database, all other processes are prevented from reading any other part of the database. For many situations, this is not a problem. Each application does its database work quickly and moves on, and no lock lasts for more than a few dozen milliseconds. But there are some applications that require more concurrency, and those applications may need to seek a different solution.



So yes, concurrent reads can occur, but reading locks out writing and writing locks out everything. As I said, probably inconsequential.


----------



## xbonez (Feb 3, 2011)

Kreij said:


> Why? Just curious.



Lotsa experience working with XML at my current job


----------



## Kreij (Feb 3, 2011)

What happens if after using the app a lot for a couple of years you end up with an XML file that is several hundereds of Megabytes (or a GB) in size. Would be kinda slow having to parse through the file to get what you need, no?

I've done some XML work, but not anything with really large files so I may be wrong.



> @ Kreij↓ Ah, good. The way you wrote your other post had me wondering if it locked on parallel reads (which would definitely cause problems). My vote definitely goes for SQLite then, assuming this is a votable decision . No supplementary installs; just a single standalone executable that generates a single file database; definitely sounds nice to me...



I'm good with that. We don't need to vote, as we can make use of any or all DBs we want.
Sorry for the vague post, my bad.

As for a name I was kicking around "TPU Overload!" 
(Unless W1zz bars me from using TPU or TechPowerUp! in the app. I don't want to have to deal with his lawyers. :/ )

Also, it's 0°F here at the moment, so I ain't going anywhere for awhile. lol


----------



## xbonez (Feb 3, 2011)

Kreij said:


> What happens if after using the app a lot for a couple of years you end up with an XML file that is several hundereds of Megabytes (or a GB) in size. Would be kinda slow having to parse through the file to get what you need, no?
> 
> I've done some XML work, but not anything with really large files so I may be wrong.



Neither have I worked with XML files that huge, but the issue of the storage bloating up over years is something we'd face with any format, I believe.


----------



## Kreij (Feb 3, 2011)

Databases directly access their tables through the SQL commands (and ignore the other data).
Can you do that with XML files?
Can you update portions of an XML file without re-writing the entire thing?

Like I said, I haven't done a whole lot with XML other that using to to store a little configuration data or read-only menu options.

Side Note : Do most of you have OpenOffice or Word? For reading requirement documentation, version update notes, etc. Hate to use Notepad. lol


----------



## streetfighter 2 (Feb 3, 2011)

I dunno much about parsing XML myself.  Seems like it has lots of APIs and shouldn't be hard to implement-- if slow...?

EDIT: After doing some research I found an MSDN article about parsing large XML files that's faster than using DOM based APIs:
http://msdn.microsoft.com/en-us/library/ms950778.aspx
Unfortunately it's from 2004 and something better may exist.



Kreij said:


> I'm good with that. We don't need to vote, as we can make use of any or all DBs we want.


So you're thinking support for multiple databases?  I think that's definitely the best option.  It brings up more questions though, which would have come up anyway, about how we want to store user settings related to the GUI.  If I wanted to load my database from SQLite and you wanted to get yours from MySQL, it would be pretty annoying to have to select the db source every time the program is started.  The question then becomes: ini (files+1), registry, or some other option?



Kreij said:


> As for a name I was kicking around "TPU Overload!"
> (Unless W1zz bars me from using TPU or TechPowerUp! in the app. I don't want to have to deal with his lawyers. :/ )


I like it.  The logo literally draws itself.
Some other ideas: "TPUniverse", "TPUltra", "TransmitPU", "TransactPU".  I like the last one because it actually makes sense 
How about, "TPU Overlord"?  It's a one letter change but it's awesome .



Kreij said:


> Do most of you have OpenOffice or Word? For reading requirement documentation, version update notes, etc. Hate to use Notepad. lol


No, I still cut all of my messages into stone tablets.  My brother Josephus is claiming that he has invented something called "papyrus", the poor loon . . .


----------



## xbonez (Feb 3, 2011)

Yeah, I've got to agree with you that XMl is more suited for config files and smaller files. Coming to think of it, it might not be the best idea for storage. Possibly, if you split up the data to be stored in multiple XML files, it would be a little more feasible, but having everything in a single file would be a waste of resources because deserializing the xml (AFAIK) cannot be done on parts of the file, or certainly can't be done as easily as deserializing the entire file.


----------



## mlee49 (Feb 3, 2011)

I want an Android TPU app.   Naaoooooooww!

Anyone with app writing experience here?


----------



## FordGT90Concept (Feb 3, 2011)

As long as we're talking about it, why not a segmented binary file?  It's effectively what SQL does but eliminates the middleman (SQL).  The only problem is that it can require a lot of memory to load the entire file into the memory.  At the same time, the entire file often isn't required.

I prefer INI to XML in most cases because XML is horribly inefficient (tons of white space/wasted characters).  The only times I wanted and did use XML is where users will be editing the file directly and there's information in there that isn't suitable for XML (like many objects under one type).


----------



## Kreij (Feb 3, 2011)

streetfighter 2 said:


> I dunno much about parsing XML myself.  Seems like it has lots of APIs and shouldn't be hard to implement-- if slow...?
> 
> 
> So you're thinking support for multiple databases?  I think that's definitely the best option.  It brings up more questions though, which would have come up anyway, about how we want to store user settings related to the GUI.  If I wanted to load my database from SQLite and you wanted to get yours from MySQL, it would be pretty annoying to have to select the db source every time the program is started.  The question then becomes: ini (files+1), registry, or some other option?



My thought was to put all of the presisted GUI info into the datastore itself, and create an external file only containing the information to the datastore.
INI or XML is a non-issue. I agree with Ford, XML has a lot of overhead.



> I like it.  The logo literally draws itself.
> How about, "TPU Overlord"?  It's a one letter change but it's awesome .



I changed the name to that in the ReqDoc about 10 seconds before you posted this.
I guess we're on the same page there.
*TPU Overlord - All your base are belong to us.* 



> No, I still cut all of my messages into stone tablets.  My brother Josephus is claiming that he has invented something called "papyrus", the poor loon . . .



No problem, OpenOffice just added "Export to Stone Tablet" in the latest version. 



xbonez said:


> Yeah, I've got to agree with you that XMl is more suited for config files and smaller files. Coming to think of it, it might not be the best idea for storage. Possibly, if you split up the data to be stored in multiple XML files, it would be a little more feasible, but having everything in a single file would be a waste of resources because deserializing the xml (AFAIK) cannot be done on parts of the file, or certainly can't be done as easily as deserializing the entire file.



That's what I was worried about, but I am not an XML guru. Maybe more people can comment on this.



			
				mlee said:
			
		

> I want an Android TPU app. Naaoooooooww!
> Anyone with app writing experience here?



No Android App for you until you pick a custom title. lawlz


----------



## streetfighter 2 (Feb 3, 2011)

Kreij said:


> My thought was to put all of the presisted GUI info into the datastore itself, and create an external file only containing the information to the datastore.
> INI or XML is a non-issue. I agree with Ford, XML has a lot of overhead.


That sounds good to me. 

Now how about skin support?  Anyone know of free skinning tools for .NET?
I think I found one: http://www.componentfactory.com/



Kreij said:


> No problem, OpenOffice just added "Export to Stone Tablet" in the latest version.


Unfortunately that Export function requires the Quarry extension which I couldn't install because my computer has a broken slave controller.


----------



## caleb (Feb 3, 2011)

JSON perhaps ? Works very well in files being constantly read over net. I actually switched from database's to flat files in JSON organized in day/week/month etc for my browser based reports application. I just do the sorting filtering with php built in array stuff. Report are a lot of columns tho and database engines dont like too many of these on the long run.

Check out tranmission torrent client. I have it on my router box and I think it uses JSON formatted config files.


----------



## Kreij (Feb 3, 2011)

We'll worry about skins later.

I'm working on the requirement doc. 
What functions do we want to include (choose what you like from OP or add something you want)?

We really don't need formal documentation, but I want some of the students here on TPU to get used to having to magically interpret what the end-users want from half-baked documentation made by people who have no clue of the actual process implementation.
(Notice : These ReqDocs will be more complete than you usually will see, and you can't get fired in the event you totally screw up. )
Welcome to real life coding. 

As I stated in the OP, I want this to help those coming up in the field, not just another project for us long time code junkies.
If you already have a module and someone wants to take a shot at it, let them, and then mentor them. You may be surprised at the results.
We may actually release something, or we may not ... but people are going to learn along the way if they stick with it (myself included).


----------



## streetfighter 2 (Feb 3, 2011)

I know this kind of directly contradicts the "true programming experience" ethos  but I think it will make discerning the project goals a little easier.





This is what I did on http://www.bubbl.us in a couple minutes.  You can create a user account in a couple of seconds with a fake email and it's free.  Add me as a contact, "streetfighter 2", or PM me and I'll add you to the edit list for the mind map.

Add any features you want and put your name as a dev for any features you want to be involved in implementing.  Any features that end up without devs will be given a lower priority and ultimately might not be implemented.

BTW I forgot to add GUI. . . 

If anyone disagrees with using bubbl, then disregard this.


----------



## caleb (Feb 3, 2011)

I can try to model the data for databases and create DDLs once there are Req files.

Also I'd like some noob tasks to do in .NET so I can get into it.


----------



## Kreij (Feb 3, 2011)

Looks good, we can try anything. Add Kreij please.
I will still post requirement docs as I want people to see what they may be up against.


----------



## streetfighter 2 (Feb 3, 2011)

I added you Kreij.



caleb said:


> Also I'd like some noob tasks to do in .NET so I can get into it.


All tasks in .NET are noob tasks 

Just pick any part that interests you and I'm sure there'll be people around to help you and pickup the slack.


----------



## xbonez (Feb 3, 2011)

streetfighter 2 said:


> All tasks in .NET are noob tasks



Couldn't agree anymore.

Also, I like the functionality of keeping a track of all your attachments / screenshots uploaded.


----------



## Nailezs (Feb 3, 2011)

subbed. i think this will be interesting


----------



## Kreij (Feb 3, 2011)

Dang. If bubbl had a little more functionality it would perfect as an object oriented design tool.
But hey, it's free and does a decent job at flow visualization.

@xbonez : Software Repository Manager? <-- fancy title
Sounds good. Most of the coders will probably keep running revisions so they can fall back if needed, but it's nice to have someone who keeps it all.

I was contemplating assigning roles to people, but screw that. We're all now officially project managers, coders and artists.
When the first draft of the ReqDocs comes out, just pick what you want to work on.
I intend to keep this fun and stress free. We have enough things in life to deal with already. 

The first thing we need is a list of the modules we want to include in the first revision.


----------



## streetfighter 2 (Feb 3, 2011)

Kreij said:


> Dang. If bubbl had a little more functionality it would perfect as an object oriented design tool.
> But hey, it's free and does a decent job at flow visualization.


I noticed you made a little flowchart for the _key manager_.  I was working on a flowchart of my own for the _score thread manager_, but I did it in another sheet.  I'll add you to the permissions when next I logon.

This is also my first time using bubbl and the only feature that seems to be missing is the ability to switch between boxes (activities) and diamonds (decisions).  Definitely useful anyway.


----------



## Kreij (Feb 3, 2011)

I'm downloading the Community (Free) Edition of a tool called Visual Paradigm.
Looks cool and something new to play with. 
(as if I don't have enought to do. DOH!)


----------



## xbonez (Feb 3, 2011)

@Kreji: Haha, I like the title, but I didn't mean I would keep all revisions of the code (its best we do that in some online code repository). I meant, I'd like the tool we're building to have the option of keeping a track of all attachments you upload as a user.


----------



## Kreij (Feb 4, 2011)

Oh. LOL ... That's the Upload Manager Module as stated in the OP.


----------



## olithereal (Feb 4, 2011)

Kreij said:


> *I was contemplating assigning roles to people, but screw that. *We're all now officially project managers, coders and artists.
> When the first draft of the ReqDocs comes out, just pick what you want to work on.
> I intend to keep this fun and stress free. We have enough things in life to deal with already.
> 
> The first thing we need is a list of the modules we want to include in the first revision.


You might want to assign stuff to students, or just specify something like "**beginner/intermediate/experienced" on the roles description so that we don't get lost too easily. 
my 2c.


----------



## Kreij (Feb 4, 2011)

You may be right, olith, but I don't want to hinder someone from trying something even if it's over their head. You learn by getting out of your comfort zone. 

Anyway .. _what modules should we include? Which ones are useful? New ideas?_
(You don't have to be a coder to reply to this)


----------



## Nailezs (Feb 4, 2011)

Kreij said:


> Anyway .. _what modules should we include? Which ones are useful? New ideas?_
> (You don't have to be a coder to reply to this)



can you elaborate? i dont understand what you mean.


----------



## streetfighter 2 (Feb 4, 2011)

Kreij said:


> Anyway .. _what modules should we include? Which ones are useful? New ideas?_
> (You don't have to be a coder to reply to this)


I've given it a good bit of thought and I think I know of a module that everyone would like to add.  How about a button which brings you a beer, but not just any beer from anywhere, but a beer from Kreij's fridge.  Now I know you're probably not in favor of this, but I'm certain everyone else is. 



Nailezs said:


> can you elaborate? i dont understand what you mean.


Reference the "-" lines in the thread's first post (OP).


----------



## Nailezs (Feb 4, 2011)

streetfighter 2 said:


> Reference the "-" lines in the thread's first post (OP).



oh, those. lol


----------



## streetfighter 2 (Feb 5, 2011)

I made this (not so) little diagram for the Score Thread Manager using bubbl.  It's still a work in progress.
http://i55.tinypic.com/nn4aop.jpg
I'm apparently not clever enough to make a thumbnail 

So far only Kreij and I are enjoying the bubbl.  Others should join up!


----------



## FordGT90Concept (Feb 6, 2011)

Well, I decided my Automatic File Backup app (post #2) needs some more features that would require quite a lot of rewriting of other code (specifically, ability to backup a dir and everything in it).  If you have the specifics of what a "module" should look like, I could code it to those specifications.


----------



## m4gicfour (Feb 6, 2011)

Kreij said:


> Oh I almost forgot ... we need a name for the project. Ideas?



TPU-z

Yeah, yeah I know.


----------



## Kreij (Feb 6, 2011)

FordGT90Concept said:


> Well, I decided my Automatic File Backup app (post #2) needs some more features that would require quite a lot of rewriting of other code (specifically, ability to backup a dir and everything in it).  If you have the specifics of what a "module" should look like, I could code it to those specifications.



Well, here's the rough draft of the ReqDoc. Comments wecome. (Name subject to change. )

PS. I don't care if you want to write the module and send the source to be included in the project, or as an externally launched app that can be included.


----------



## FordGT90Concept (Feb 6, 2011)

I guess the one thing I would point out is why not have the main program basically be a plugin manager.  Plugins are basically .NET compatible DLLs (could be F#, C#, or VB) which the manager loads.  The manager takes care of the shared stuff like data management.

Here's an example of a .NET plugin manager with various plugins:
http://wiki.nfbsp.com/index.php/Nightfire_Workshop

Core.dll has IPlugin which all plugins must inherit.  All GUI functions are in a UserControl which the manager docks to itself when the plugin is active.  If the UserControl is null, the application knows there is no GUI (it is just a patcher, for example).


As for Automatic File Backup, it is something that needs to be running most of the time.  If that is the only aspect of the application that needs to be running all the time, then yeah, it should be separate.  If not, all features that do need to be running constantly should be merged into one service or tray application.  AFB is currently designed to be a tray app with no associated service.  If you are fine with it being a standalone executable, I think I'll leave it as is.


----------



## streetfighter 2 (Feb 6, 2011)

I like the idea of dll based plugins, notably because I've never done it before.  I'm curious about some of the implementation details though.  I know Paint.NET also uses this plugin system.

I would imagine that the core exe/dll would have to provide a couple export functions so that plugin dlls can get handles to various context menus and controls.  I have very limited experience writing dlls in C#, so I could be wrong.

Also the RSS reader is another good reason that someone might keep _Overlord_ running.

@Kreij - Good work on the reqdoc .


----------



## FordGT90Concept (Feb 6, 2011)

I think Nightfire Workshop's plugin code is loosely based on this article:
http://www.codeproject.com/KB/cs/c__plugin_architecture.aspx

All plugins inherit IPlugin which requires certain methods and properties like Install(), Uninstall(), OnStart(), OnClose(), RequiresInstall, Author, Name, etc.  IPlugin guarentees everything required to integrate the plugin into the manager (or Host) is there.


This is what plugins for Nightfire Workshop required (including example implementations of IPlugin):
http://wiki.nfbsp.com/index.php/Nightfire_Workshop_Plugin_SDK

VB and C# examples are in there.


----------



## Kreij (Feb 6, 2011)

Okay, I just spent a couple of hours learning all about application extensibility in its various forms (plugin architecture, addins, MEF, MAF, etc.) I'm not clear on everything yet so no yelling at me. 

Seems it would keep the footprint of the app down by only loading what you need, but I am not sure what would be the best method. A plugin architecture or addins (System.Addin) with their adapters, contracts and pipelines. 

Given the data store options (SQL, MySql, SQLite, binary file, etc.), it would be nice to use plugins for login authenticators and data layer implementation. This would mean we could modify anything without breaking the main app as long as the main app has the information it needs to perform the necessary functions required of it.

I think a bit more research (and definitely more beer) is required here.
Anyway, keep posting your thoughts everyone.


----------



## caleb (Feb 6, 2011)

How are we going to get PM and Uploaded stuff data again ?


----------



## Kreij (Feb 6, 2011)

What do you mean, caleb?


----------



## FordGT90Concept (Feb 6, 2011)

I've never heard of System.Addin so I'm really in no position to compare the two.  I guess one major advantage of a plugin architecture is the support of any .NET language for each plugin.  Do you know if Addin supports that too?


----------



## Kreij (Feb 6, 2011)

They have examples for C# and VB (supported in .Net 3.5 and 4). Not sure about C++ and F# as the page only says "Either not supported or there is no example".


----------



## streetfighter 2 (Feb 6, 2011)

I think what caleb is talking about is how are we going to pull the data for PMs and uploads from the TPU server so that it can be imported into the database.  It's something I've thought about myself.

@*↓*Kreij - Actually I thought for any pics uploaded to the TPU Image host we could allow users to upload pictures via the utility (similar to TPUCapture).  If we could then record the uploaded picture URL in the page that's returned, we'd have all the info we need.

As for PMs, I think you're probably right.  Unless there is some back door feature in vBulletin that'd make it easier . . .


----------



## Kreij (Feb 6, 2011)

For PMs the only way I know of is to save your PMs locally from within the PM screen, and read the file. This would mean the PM Manager would have to check for duplicates (no biggie).

For uploads you would have to input them manually when you upload them, as TPU.org keeps no record of any information for images.

I'm open for more suggestions.


----------



## caleb (Feb 7, 2011)

That's a pretty useless app to me of I need to do it manually for each PM upload file.


----------



## Kreij (Feb 11, 2011)

Well, after some thought I am just going to kill this project.
It was a nice idea to get people involved, but the response was underwhelming and in all reality these kinds of apps need to be incorporated into the TPU environment to be successful.
No one wants to fat finger in all the information locally to keep track of what happens on TPU, and I wouldn't either.

I'm going to bail on trying to come up with ideas for utilities and go back to the one thing that is completely new and interesting for me to accomplish and will most likely take me forever.
Writing a 3D Indie game from scratch.
If anyone wants to help PM me. 
If it ever sees the light of day it will not be open source and not free (just so you know).

Thanks all.


----------



## Nailezs (Feb 11, 2011)

that sucks  something like this would be very useful. i'd help but i dont know the first thing about coding


----------



## Kreij (Feb 11, 2011)

Just out of curiosity, Nailezs, of all the things suggested what did you think would be the most useful?


----------



## Nailezs (Feb 11, 2011)

Kreij said:


> Just out of curiosity, Nailezs, of all the things suggested what did you think would be the most useful?



cant name just 1, so i picked a few. but if i HAD to pick 1 it would be the upload manager.




Kreij said:


> - A thread manager, that would store TPU threads for reference offline.
> - An upload manager. This would allow you to keep track of uploads to TPU (for example,  the urls of image uploads and the image, so you can find them again and re-reference them from the TPU server without having to re-upload because you know longer know the URL on TPU)
> - A save game backup utility that could be scheduled to copy your game saves on a regular basis.
> - A TPU MMORPG that pits you against the mods (just kidding, but it would hysterically funny)


----------



## char[] rager (Feb 14, 2011)

Writing dll's in c# is very easy, think of it as a object/class declaration. I recently made two dll's for a calculator, one that held all of my arithmetic operation functions and another to hold all of my number systems functions (like binarytodecimal...)

I have those files on my laptop, but I memorized the layout, so here it is.

*DLL*

```
namespace RandomNamespace
{
      class RandomClass
      {
             public RandomClass()
             {
                   // do nothing
             }

             public string ReturnString()
             {
                   return "hello world";
             }
      }
}
```

*Main (you have to tell VisualStudio where your .dll you are calling is located)*


```
using System;
using RandomNamespace; // the namespace that you made inside of your dll

public class RandomName
{
     static void Main()
     {
            RandomClass random_object = new RandomClass();

            Console.WriteLine(random_object.ReturnString());
     }
}
```


----------



## char[] rager (Feb 14, 2011)

Sorry for double post, but if anybody wants me to post that calculator code, I will. It demonstrates really well just how powerful dll's can be to a project. By now, you probably can see that you can put code into a dll file that would otherwise just take up space and clutter your main.


----------



## streetfighter 2 (Feb 14, 2011)

If you want to post your code demonstrating dlls in C# I'm sure it would be appreciated, but I'd suggest doing it in it's own thread.

I myself am pretty familiar with DLLs (in win32 C++), using both compiler linking and explicit linking.  The ADL SDK is actually just a collection of headers and structures used when explicitly linking to _atiadlxx.dll_.  I mostly use DLLs for hooking and injecting into other processes.  Ultimately I only create DLLs if I have to because they reduce the portability an application.  No one wants to get trapped in DLL hell.


----------

