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

You can: log in, read the tech support FAQ, or request your lost password. This dumb message (and those ads) will appear on every screen until you register! Get rid of this crap by registering your own SA Forums Account and joining roughly 150,000 Goons, for the one-time price of $9.95! We charge money because it costs us money per month for bills, and since we don't believe in showing ads to our users, we try to make the money back through forum registrations.
 
  • Locked thread
crashdome
Jun 28, 2011
Does anyone have any idea as to getting virtual COM ports on a development machine? This may not sound .NET direct related but, it could either be a virtual COM port solution or a solution to trick the SerialPort class into connecting to something. I've tried comOcom to no avail because: yay! 64bit Windows 8 won't load the virtual com port drivers even with Test Signing enabled. I've looked into virtual machines in Hyper V but it seems I'm limited to two virtual COM ports using named pipes and I need 4 minimum.

Note: My goal is to create an emulator project of a test stand that has multiple communications ports to various devices. I'm sick of having to lug the compiled "main project" back and forth from the PC actually connected to the devices and back to my development PC for debugging minor issues.

Note 2: I admit I haven't looked into ESXi yet. Doing that now...

Adbot
ADBOT LOVES YOU

crashdome
Jun 28, 2011

wwb posted:

VirtualBox might help too -- it has a bit more ports / networking options than Hyper-V has had.

Sorry for the delayed response. Thanks for the idea but, I ended up using a 14 day trial of an Eltima product. If I still need it, I might just shell out the $100 for it. Every other solution I can think of requires more time than it's worth to me.

crashdome
Jun 28, 2011
Take this warning with a grain of salt as it is based on old .NET but, I wrote a custom file upload control for a website back in ~2004-5 and used a FileStream to manage the upload. I ended up having to break up the stream and work with it in chunks because it would eat memory like a starving goat. It also would peg a CPU. I would buffer it and then dump it into a temp file for processing. Frequent disconnects during uploads and other problems that could happen meant I spent more time coding clean up than anything else. After all was said and done, I ended up breaking down and buying a third-party control.

VVV Ha! Too true.

crashdome fucked around with this message at 00:13 on Feb 20, 2013

crashdome
Jun 28, 2011
Well you've just made me extremely jealous. I'm in the middle of some software that could massively benefit from all that. Problem is I have to target 3.5 because the stupid Pamux controller's API hasn't been updated in forever.

Definitely going to learn more about it though.

crashdome
Jun 28, 2011

ljw1004 posted:

good stuff

That is all extremely helpful! After my post, I thought about writing a wrapper and decided it will probably double the work load. I'm tempted by your code but, nah... don't spend the time. The application is simple in purpose but complex in operation (It's SCADA but, only an app for running a test stand). Considering the initial version is complete and working, I decided not to use async in version 2 (which is same as version 1 but with additional features for other products).

I AM, however, going to soak all that info up and start playing around with it.

crashdome
Jun 28, 2011

TheReverend posted:

Whats the best way to do reports?

I guess it depends on how the reports are accessed. I prefer Microsoft Reporting simply because most places I write for use MS SQL and I am working with AD access anyway. If a place does not have MS SQL and Crystal design being the pain for me it is, I will sometimes build my own report in HTML and send it as an email or file. Usually those reports are pretty small though (e.g. single page report).

Although, not many places I work with use paper reporting anymore. They like to just "look it up on the screen" as they say.

crashdome
Jun 28, 2011
^^ XPS? Don't use XPS.

If your going the HTML route it might be easier to send it as an email body? They can print from there.

crashdome
Jun 28, 2011

This is good stuff. I've finally started watching it and I've decided to start a side-project of my own to practice this. My last app required targeting 3.5 and is very IO intensive but, I've started creating a second app which is an emulator of the physical equipment it uses. Normally, for testing against my app, I have to drag my butt 45 minutes across the city to the physical test stand. This emulator will be my practice in using async and will mimic the IO of the various devices so I can minimize my visits.

Congrats. You've just made my work more fun.

crashdome
Jun 28, 2011

Clanpot Shake posted:

Is there a way to iterate over the results of the query multiple times without loading it into memory and without re-executing the query?

Um... Local SQL DB Cache? ...File Storage? :shrug:

Your requirements don't leave for a lot of efficient options.

Edit: ^^^ Wait... can you modify the query? I assumed you had a query/stored procedure and couldn't modify it.

crashdome fucked around with this message at 16:15 on Mar 20, 2013

crashdome
Jun 28, 2011
I just wanted to chime in and support glompix's post. If you have a particular or just plain nasty internal/private class that is prone to issues and you want a finer-grain unit test of it, you can easily create a public wrapper class to expose that specific class' methods for testing only and set it up using directives so it doesn't get into the release builds. There are always solutions to the exceptions but, overall I agree we should be unit testing with the mentality of being an end-user and not being The DeveloperTM.

Certainly we can argue that those types of Internal classes could be refactored or re-engineered to account for high-level testing but, sometimes that is just not possible when dealing with very special circumstances in a short amount of time.

Edit: vvv Good point but, IIRC it's a pain using that if you mix signed and unsigned assemblies. Still a good idea though.

crashdome fucked around with this message at 13:48 on Mar 29, 2013

crashdome
Jun 28, 2011

gariig posted:

I still have some classes that use CollectionBase. Amazing how much code you'd write to create a List<T>.
Oh god. I'm having flash backs. :negative:


I'm on a bus and headed up to go expand on the project I did awhile back. I'm mulling over a thought and figured I would ask some advice. I have a dependancy that requires the project target 3.5 but I'm also stuck using Threading for some I/O communications. The result is a ton of sleep calls in my I/O threads because the devices I'm communicating with not only change from model to model but also use different protocols. I want to use Tasks now that I'm familiar with them.
The dependancy is with a PCI card that has a .NET API but I only use it in one object and it will not compile in 4 or higher (in fact it really is only meant for .NET 2). Imagine I have a class of device objects (e.g. MyBase.CommDevices) and the purpose of these objects is to manage command requests and return status information from the different devices.
How best to seperate this one object from my entire project and have it target 3.5 and let the rest of my project target 4+? Do I really need to create a single DLL for one measly little class?

crashdome
Jun 28, 2011

Ithaqua posted:

If you can target .NET 4.5, consider using async methods instead of Tasks.

That's my plan! :) forgive my confusion

It won't compile due to some assembly issue. In fact to get it to work with 3.5 I had to add a line to the config. I'll post more when I get it in front of me.

For specifics, it is a Pamux PCI card that communicates with an Opto 22 analog/digital controller. The API hasn't been updated in like years.

EDIT: Here is what I had to add to the app.config file to get 3.5 to work with the Pamux API DLL. This, I believe, would not work in 4.0 or 4.5. Am I out of luck all together due to this?

code:
    <startup> 
      <supportedRuntime version="v2.0.50727"/>
    </startup>
Edit Again: I just checked and the API says compatible with 3.5 and supports VS2005 to 2010 (and 2012 apparently). It has not been updated since Nov 2011.

VVVVV I really really wish I could remember the error specifically. It has been a few months since I encountered it. I *could* create a quick test project and see what it does but, it would take me awhile.Cannot test right now as the PC with the actual card in it is on the other side of the city and I don't have an extra one. Once I added the reference to PCIAC51.dll (the API) I think IIRC it either A) did not compile or B) compiled but failed once the Pamux card was initialized.

The error I was given led me to add the above code to my app.config. After another error message, googling that led me to believe I could not do that with any runtime above 3.5

Forgive me for my poor memory. Like I said, I am coming back to all of this only because I really would like to use async methods after finally learning them. If I am out of luck.. I can accept that.

crashdome fucked around with this message at 00:39 on Apr 19, 2013

crashdome
Jun 28, 2011
I edited my above post for more info.

But I figured instead of dragging that post out, my new question is this:

Since this managed library (yes, it is managed code) requires runtime 2.0, am I completely out of luck with ever getting a 4.0+ application out of it? I am not sure why it requires 2.0 to be honest. There is an unmanaged API I could use but, I hated to reinvent the wheel if they already had a .NET API available. The unmanaged one is somewhat messy.

crashdome
Jun 28, 2011
I'm getting more familiar with using async methods for events and I'm pretty comfortable using it so. I want to jump into something that is not event-driven and I'm having a hard time wrapping my head around the following concept. Probably because it isn't very common?

I am trying to simulate a device that once I supply a voltage setting, it ramps up voltage along a curve. To keep my example below simple, I'll do it linearly. Basically, once a property setter gets the voltage setting, it ramps up another property's value on another thread following a simulated time span. Any advice on keeping this thread safe and using async programming techniques?

code:
public class PowerSupply : INotifyPropertyChanged
{
        double voltage;
        public double Voltage
        {
            get { return voltage; }
            protected set
            {
                if (value != voltage)
                {
                    voltage = value;
                    NotifyPropertyChanged();
                }
            }
        }

        double voltageSetting;
        public double VoltageSetting
        {
            get { return voltageSetting; }
            set
            {
                if (value != voltageSetting)
                {
                    voltageSetting = value;
                    NotifyPropertyChanged();

		    // Call Method to change voltage here
		    changeVoltage();
                }
            }
        }
	private void changeVoltage()
	{
		//Crude Example (non-async)
		while (voltage != voltageSetting)
		{
                    (voltage < voltageSetting) ? Voltage++ : Voltage--;  //Edit: Ignore what is wrong with this obviously stupid statement and just imagine what it is supposed to do
		    Thread.Sleep(100);
		}
	}
}
Note that I want to call the property setter for Voltage so that my UI can display the changes via the property binding. i.e. I want to see the voltage increasing/decreasing in my UI as it does so.

Any suggestions on where to start?

edit:bad code

crashdome fucked around with this message at 14:58 on May 1, 2013

crashdome
Jun 28, 2011
Awesome! Thank you! It seems so simple to me I can see I was just overthinking things. I was under the impression that async methods are by themselves performed on the same thread. If I have multiple objects/devices that perform functions like this, will I get into a performance problems? I'm not too concerned right now about it, though. I'm just using all this to learn and practice and I want to also be able to recognize when not to do something like this.

edit: Again, big thanks. My project is a bit more complicated than this example but, this is like a perfect little tutorial to keep as a reference.

crashdome fucked around with this message at 15:52 on May 1, 2013

crashdome
Jun 28, 2011
Good point. I can say for certain that I will not have 100,000 devices simulated for this project. In fact, I will probably only have this one device (with up to 3 instances) with two properties which simulate delays like this (voltage AND current but fortunately they will change concurrently). I just wanted a frame of reference for when it might be good to offload to another thread and what you said about profiling says it very simply.

crashdome
Jun 28, 2011
But then this could happen later:

code:
SuccessfulTruckResponse.Success = false;
unless you made it protected instead of public?

Still, I personally wouldn't do that because I'd have to create a new instance just by changing success from true to false.

crashdome
Jun 28, 2011
Ithaqua, Thanks again. I finally got around to my project again and I was using your suggestion below but I had to make changes. Notably, Task.Factory.StartNew kept creating new threads and my UI didn't update. I used runningTask.RunSynchronously instead. Also, a problem I still have is that your cancellation concept doesn't work. I mean, it does. It just doesn't work as long as the await command is in there. The awaits (and I tried several ideas of my own, all of them using 'await') cause the runningTask.IsCompleted to change to true immediately after the await finishes. Even Status returns RanToCompletion even though... it didn't. It was still running. :iiam:

If I remove the awaits, it is always false until completed.

EDIT: ugh.. staring me in the face. I now just changed await Task.Delay(120) to Task.Delay(120).Wait() - still don;t know why an "awaited" task using Delay causes the parent task to Complete prematurely.

EDIT AGAIN: :suicide: Nevermind... Wait actually rendera my UI unresponsive to user input and I didn't notice. Even though the controls update their displayed values. I am at a loss now. OK, just added my own taskIsRunning (bool) to keep track instead of relying on IsCompleted. UGH!

Ithaqua posted:


[edit2]
For extra fun, I made it cancellable. It'll count up/down to reach the target value, but if you change the value while it's running, it'll cancel the running task and start counting toward the new value.

code:
public class VoltageViewModel : INotifyPropertyChanged
{
    private CancellationTokenSource cts;
    private Task runningTask;

[code removed for readability]

    
                runningTask = new Task(async token =>    		//Changed this line
                        {
                            if (VoltageSetting > CurrentVoltage)
                            {
                                while (VoltageSetting > CurrentVoltage)
                                {
                                    CurrentVoltage++;
                                    await Task.Delay(100);
                                    ((CancellationToken)token).ThrowIfCancellationRequested();
                                }
                            }
                            else if (VoltageSetting < CurrentVoltage)
                            {
                                while (VoltageSetting < CurrentVoltage)
                                {
                                    CurrentVoltage--;
                                    await Task.Delay(100);
                                    ((CancellationToken)token).ThrowIfCancellationRequested();
                                }
                            }
                        }, cts.Token, cts.Token);
            		runningTask.RunSynchronously();    //Added this line to force syncronous behavior
            }
        }
    }

}

crashdome fucked around with this message at 03:07 on May 9, 2013

crashdome
Jun 28, 2011
I think the common thing is to use a single connection string in your web.config for each database connection and after deployment, having each location manually editing the config file to suit their needs. It appears your are already doing that.

I've also seen deployments where it will prompt you for connection details and automatically write it during install. Not sure I would ever bother unless I was distributing to the public.

crashdome
Jun 28, 2011

Ruggan posted:

Do I need to use server-side scripting if all clients also have requisite privileges on the SQL server? Can I do SQL server querying on the client alongside AJAX and just avoid any server-side scripting all together?

Doesn't SQL Reporting Services do all that? User-level access, HTML reports, and despite being a pain to initially get accustomed to if you've never dabbled before, it sounds like you could begin there and wrap your own dashboard around it or am I missing something?

edit: ugh, new page

crashdome
Jun 28, 2011
Edit: while (crashdome.IsBlind()) this.Post.Ignore();

crashdome fucked around with this message at 18:05 on May 28, 2013

crashdome
Jun 28, 2011

Total Meatlove posted:


code:
UK20405
BOB
30405
JOHN
UK40404
TERRY
and I'm confusing myself trying to sort them out so they behave like just numbers. Can anybody help?

Quick and simply, I would just check the character prior to each carriage return and if it was a digit replace the CR with a comma. The other more stable way is to use regex and look for digits in the entire line and find a name pair after. After that, you could store it as a struct. Any irregularities could then be sorted out and handled.

crashdome
Jun 28, 2011

zokie posted:

Can I get some help getting arguments for using the TPL to do asynchronous stuff? The senior developers here are all like: "We have this old thing with callbacks that we know works bla bla bla" OR "Just because you though it was pretty easy to learn that doesn't mean everyone else will get it." If it helps this is a discussion we're having regarding a new big project we are in the midst of starting, our first real big WPF-project.

I've only begun learning this myself but, the immediate benefits I see is reduced code and easier implementation for things like standard events. As far as learning curve, if you don't understand something as simple as a state machine, you should not be doing asynchronous programming. Even though I am sure I'm understating it as a simple state machine, thinking of it as such has allowed me to not get too flustered when learning it.

crashdome
Jun 28, 2011
Thanks for that link. I'm an SVN user and also generally a hobbyist that's pretty stubborn about changing and that guide really excited me to try out Mercurial.

To edmund745, don't take things too deeply that you are ALL WRONG. I grew up using arcane ways of doing my own source control prior to SVN and what you are doing is not bad if you are a hobbyist only or just learning. Put it this way: By doing what you are doing now, you are learning why source control was created and why it is better. It's a tool plain and simple. It will make your life way easier though and you'll laugh at the times before you were using it. quick edit: In a nutshell, source control is management of your project versions/files/etc. It isn't magic programming stuff like I used to think. It's just a way to maintain a "working directory" with "copies" or "versions" available to switch between or branch off of. A Visual Studio project likes to be organized and have a home. The moment you start toying with it's home or things inside it's home without it's express permission or supervision you risk making it very angry. By using source control you can keep it's home where it is and it will be comfy. Source control gives you the ability to time travel and the project will never know you are leaping through time and alternate universes totally playing God with it's life. muhahahaha - (obligatory laugh when saying "playing God")

That said, learn the difference between debug builds and production/release builds and why there are the extra files in the debug folder (hint: "build /debug"). Then learn how you can make your own build folders for different purposes even if you will not be doing anything beyond the standard debug or release versions with your projects. Then, learn how publishing in VS is more than just a 'build' (hint: think "packaging" or "distribution") and why it is in the local user apps folder instead of somewhere else. Get this crap out of the way before you start any more projects. Otherwise you'll face the same regret I did.

crashdome fucked around with this message at 04:51 on Jun 17, 2013

crashdome
Jun 28, 2011
I take my earlier comment back. Also, drop VB6 from your memory as quickly as you can. Take it from someone who is used to converting VB6 apps to C#. VB6 is old, disgusting, and I wish I never had to see another VB6 source file again. If you are trying to convert an app, you'll have to start ground up. It's the only way to stay sane.

crashdome
Jun 28, 2011
TortoiseHG.

Install, right-click on working folder, create new repository, done.

When you want to initiate a new "version", right-click and commit.

When you want to revert, right-click and revert.

Edit: oh, you may have to specify your name on first commit. That's about it. Much easier than SVN. Don't know about git.

crashdome fucked around with this message at 02:01 on Jun 21, 2013

crashdome
Jun 28, 2011

ljw1004 posted:

My identical twin brother doesn't share this irrational fear, doesn't use VisualStudio much at all, he swears by SVN, and has little pictures of tortoises all over his Windows Explorer.

Sounds like the Arnold Schwarzenegger/Danny DeVito of programming. :D

lovely Treat posted:

VB6 conversion

It depends but, I'm going to say start from scratch. It'll be a good learning experience for you since you sound like you are starting out. Just keep reminding yourself that how ever it was done in VB6, there is a better OO approach and trying to figure it all out will give you good practice in improving your critical thinking skills if you ever have to deal with converting or improving on other lovely OO designs.

crashdome fucked around with this message at 12:53 on Jun 24, 2013

crashdome
Jun 28, 2011

JawnV6 posted:

The user will hear the process happening, it's out in the real world making widgets move. When they hear it going off the rails I want an obvious go-to for them to cancel it. The button right underneath their cursor when they kicked it off is a good spot. I just need a non-crappy way to show that if they happen to look at the screen.

Are you saying plain old windows forms can't color a stupid button all one shade?

Checkboxes have a property that makes them appear as toggle buttons. I change the backcolor as an indicator on them all the time. Looks fine to me. Especially if you use the operating systems original theme style and not that classic windows 95 crap :barf:

crashdome
Jun 28, 2011
Tinkering with defaults is the only way to ensure no one will ever mess with your stuff.

crashdome
Jun 28, 2011

Dietrich posted:

You can use tasks to do this sort of thing. Timers are pretty lovely in general.

Is there a task-based way to have a callback guaranteed to run on the UI thread? Because I'm using a timer right now only because the callback method runs on the UI and it's consistent timing. It is an IO intensive method. Basically, I read some (roughly 48) digital outputs off a card and turn some indicator lights on/off in the UI based on their value. At peek idleness with the rest of my code it runs every 200ms and in some cases every 60ms when only monitoring a single value during a procedure. It's ok if it's blocked for a second or two during certain times because it is mostly visual cues and not time-critical operations but, it needs to be able to accelerate back to normal operating speed pretty quickly after something cpu-intensive. If a task can guarantee me that in some way, I'll gladly switch.

crashdome
Jun 28, 2011
Uh...

It is a DispatcherTimer. The read operation is in the tick event. I guess I am not seeing why or where the async comes in?

edit: Let me elaborate a bit so you can tell me if there is a different way.

The read operation is a single method call on a device object.

timer_Tick -> object.PerformRead(); this.UpdateThoseFourPeskyControls();

This method loops through 24 properties in blocks of 8 (the card can read a single value or values in blocks of a byte for Boolean outputs). Each read is roughly 5-6ms on a good day. So I loop 3 times and read 3 bytes worth of data in less than 60ms. I then also read 3 analog (basically a byte) values. Then, I update bound properties on the object doing the usual "if (prop == value) return;" so I don't fire off my OnNotifyProperty unless absolutely needed.

After calling this method, way back in the tick method, I have to update some UI controls manually which are not data-bound to the object directly. Not many. Maybe 4.

If I didn't use a DispatcherTimer, and I tried a few other options, I would always get the 'accessing UI on separate thread' warnings.

crashdome fucked around with this message at 19:14 on Jul 2, 2013

crashdome
Jun 28, 2011
You replied just as I edited in some details.

I see your point. Should I just make the object.PerformRead() do the asyncing so my UI(WinForm) doesn't have to?

edit: wait, but I can't update my UI until that method is done. I have to do the async/await in the tick event no matter what. Correct?


VVVV OK, that's what I thought. I'll probably even throw in something to prevent the 'ticks' from stacking in the event something horrible goes wrong and it takes 5 years to do a read operation.

crashdome fucked around with this message at 19:38 on Jul 2, 2013

crashdome
Jun 28, 2011

Ithaqua posted:

A tree Trunk, an Elephant.Trunk, and a Car.Trunk are all different things even though they have the same name.


And then the UK branch refactors Car.Trunk to Car.Boot and all the US developers jump from windows.

crashdome
Jun 28, 2011

Night Shade posted:

SomethingHappened will never be null so you can omit the check.

Omg I love you.

crashdome
Jun 28, 2011
edit: nevermind... new page


zokie posted:

LINQ provides OrderBy and ThenBy and Descending versions of them both.

Do this.

crashdome
Jun 28, 2011
I read it as a single field sorted by strings in predefined order. Forgive me if I am wrong also but, you can use them sorta like this:

code:
list.OrderBy(o => o.Name == "heyo" ? 1 : 2).ThenBy(o => o.Name == "This is second" ? 1 : 2) [etc]
edit:

Example Before:


Example After:


In fact, to do all this automatically with a single extension method is pretty trivial. I'd write one up but, I am a bit busy at the moment and I've already spent my break snipping those clips above.

crashdome fucked around with this message at 17:57 on Jul 18, 2013

crashdome
Jun 28, 2011
Find/Replace the type if it has all the same properties.

crashdome
Jun 28, 2011
I have a hopefully very easy question for all you veterans. I value the input of this thread and it's helped me out in getting back on the horse after being away from .Net since 2007.

I've recently been developing special applications designed to integrate with I/O systems and I'm very good at it: Very minimal UI, minimal database access, and mostly just automation mechanisms tied to physical tools and equipment. I've avoided the complicated parts of .Net and limited my exploration of new features. Now, I want to get back into LOB programming. Last I was doing any LOB apps, LINQ was just announced, Datasets were the best way to handle persistance, and WinForms were your only UI option (and EF was just something to point and laugh at). I've been reading C# 5.0 Unleashed as a refresher and to learn the new features but, I've not had much practice yet. Design philosophy has certainly changed a lot since I was programming as my primary job. I've also purchased a few HeadFirst books to engrain the good habits in my head before I DID any practice.

I now am ready to convert, quickly but efficiently, an Access database application which handles Employee Info, Vehicle Info, and some minor Payroll Info to a full .Net application using SQL. It will be my head first dive into WPF and other .Net 3+ features. I plan on using everything I've learned from this thread. It's going to be painful for me because I'll be tempted to fall back to old habits and complain about how WinForms and DataAdapters handled X, Y, and Z so much easier back then. Of course, I know the truth.

Can anyone provide me with the minimal amount of weapons to add to my arsenal to accomplish this task? I am looking for quick ways to build object models, implement a snazzy UI, and deploy it. I hear talk about this library and that toolset and all sorts of acronyms I've never had to think about before in this thread and now I want to expose myself to them. Suggestions? Thoughts?...

...Prayers?

edit: Oh, and I've purchased VS2012 so I'll be using that

crashdome
Jun 28, 2011

gariig posted:

Why WPF over ASP.NET Webforms/MVC?

Because I hate web development with a burning passion. :v: I say that but, I will probably end up doing something web-related at some point. I'm not looking to be marketable to be honest. I'm looking to supplement my current work with some minor software development I can do in my free time for some extra $$. Maybe I'll look at Azure for something to toy with in the near future.

edit: Annnnd I want to learn WPF. Maybe it really just simply comes down to that? I've done ASP.NET back with .Net 2.0 and I've had a hand in some DNN module development way back when too. So I'm not completely in the dark about it.


Ithaqua posted:

...lots of good info..

I am familiar with TDD although at a minimum and certainly not fluent in working with it yet. I also am familiar with repository patterns from days long ago. The rest you mention helps me out immensely.

Re: nHibernate - this has been around since I was developing and I just remember it was very much a "you commit to this for your whole application and your going to live and breathe it the whole time" ORM system. Is it really the easiest and simplest ORM to get started with? Keep in mind this app I'm starting with, athough based in SQL, is very simple. It could theoretically be done on a spreadsheet. If you say "yes", than I will still go ahead and read up on it and use it. I just want to ensure I'm not creating a dependancy I can't crawl away from.

crashdome fucked around with this message at 01:26 on Aug 3, 2013

Adbot
ADBOT LOVES YOU

crashdome
Jun 28, 2011
OK, I'll give nHibernate a whirl. Yes, I always used SVN and this thread got me using Mercurial. It's hard to explain that yes, I do have the fundamentals of development (and patterns) but, I'm just falling behind in practice of .Net specific tools and other modern practices (E.g. MVVM is something I understand 100% just never used and practiced because it was popular after I left development). It's this thread and all of you that convinced me to get back into it, and do it properly!

  • Locked thread