Answers to Software Questions the Experts Would Not Answer. Microsoft.NET, Java, Spring, Hibernate, JavaScript, C#, SQL Server as well as Mac, Solaris, Linux, CISCO IOS and related now include some Automotive IT! You could be having the same problem for hours like me!
Thursday, October 25, 2007
.NET DateTime Objects Does Not Compare Correctly
Symptom:
You have parsed a date time string and made a DateTime object, then you wanted to compare that with current time using DateTime.Now, but it does not work.
DateTime t1 = DateTime.Parse("27 October 2007 10:27");
if (t1 > DateTime.Now) { /* do something */ }
Cause:
The parsed DatTime object has the Kind attribute set to UNKNOWN while DateTime.Now is set to LOCAL. Comparison between the two will not work as expected.
Fix:
There may be other ways of doing this, but here is the one that made my code to work.
DateTime t1 = DateTime.Parse("27 October 2007 10:27");
t1 = DateTime.SpecifyKind(t1, DateTimeKind.Local);
if (t1 > DateTime.Now) { /* do something */ }
Time Wasted:
Took me about 2 hours to figure out what is exactly going on and how to fix it.
Monday, October 15, 2007
Unable to Load DLL Error
You built an application using Visual Stuido 2005, you also have a Platform Invoke code so that your managed code can call unmanaged code stored in your platform invoke DLL, and in order to test it on another machine, you copy the bin/debug folder there. The test machine does not have the Visual Studio 2005.
As soon as you run the program, and when your code calls the platform invoke code the following error message occurs,
Unable to load DLL 'Some.DLL': This application has failed to start because the application configuration is incorrect. Reinstalling the application may fix this problem. (Exception from HRESULT: 0x800736B1)
Possible Cause and Fix:
This article is still being completed. But here is what I have figured out so far:
Apparently, when you build a code that includes a platform invokaction code (i.e., calling a C++ library), there is a run-time (CRT) code to be included, and if you are doing this on a debug code then there are some very complex issues.
There is one person on the web that solved this issue by using the release build. I am going to try that approach.
If that's not what you want, here is a detailed information about this.
http://www.codeproject.com/cpp/vcredists_x86.asp#Troubleshooting
(This article will be updated further as I find the final solution.)
Saturday, September 29, 2007
CISCO ASA and Getting Mac/Windows L2TP To Work
You used the VPN Wizard in CISCO ASA's ASDM to create an L2TP configuration, but it does not work.
You look at the ASA Log and it says something to the effect that no acceptable SAs.
What Fixed:
Know that the Mac and PC will connect through the DefaultRAGroup therefore if you are doing a pre-shared key, it must be set right there. If you are not going through Phase 1, check that first.
If you are going through the Pase 1 then you are likely that the TRANSPORT mode of IPSec is not included in your Dynamic IPSec policy.
Check the following,
crypto dynamic-map Extranet_dyn_map 20 set transform-set TRANS_ESP_3DES_SHA ESP-AES-256-MD5 ESP-3DES-SHA
Finally if you are using the user account with the ASA itself, then the user password must be encrypted using nt-encrypted keyword. I would just telnet to the ASA and type that in. I am not sure if you are using both the CISCO client and L2TP, both ASA native mode of encryption and the nt encryption are allowed, so I have created a second user name for the purpose of logging on via L2TP.
username bozo password xyzzy nt-encrypted
Total Time To Figure Out This Issue
Approximately 4 hours.
Tuesday, September 25, 2007
Microsoft IIS SMTP Server Does Not Relay or Send Emails
You've installed the SMTP server (Default SMTP Virtual Server) as a part of the IIS on Microsoft Windows Server 2003, but nothing get relayed.
What Fixed:
The no hosts, including the local ones are by default not being relayed out of the box. You need to go to Default SMTP Virtual Server Properties, go in the Access tab and Press the Relay... button.
You should grant the relay permission to the server or all the IP addresses in your local network.
Total research fix time: About 30 minutes.
CISCO ASA Error construct_ipsec_delete(): No SPI to identify Phase 2 SA!
Symptom:
When configuring for Site-to-Site VPN network, the IKE negotiation (Phase 1) works but Phase 2 results in a message like
- construct_ipsec_delete(): No SPI to identify Phase 2 SA!
It appears that this occurs when there is a significant mismatch in the VPN Tunnel IPSec configuration parameters. IPSec is also know as Phase 2. If you have come this far in your connection then Phase 1, or the IKE step is complete so do not go down the pass of "fixing" the Phase 1, for example, Shared Key mismatch. You are OK there, and focus on fixing this Phase 2 issue.
If you are using like me the ASDM, this information is in VPN->IPSec->IPSec Rules section.
- Be sure that the Network Address and Netmasks of End Points are properly set on both ends. For your end this is found at IPSec->IPSecRules->Traffic Selection. You could also be using Static NAT, so check to make sure that the NAT tables are correct. This is especially important if you are NATTing to external routable addresses to avoid non-routable IP address conflicts (this is a very very advanced topic and I don't even know what I am talking about so if this does not make sense, you do have to go to a CISCO professional for help. I am just a surfer with this job dropped on my lap.)
- Speaking of the NAT, you are likely that you have NATTed your inside address pool to a set of private addresses you have. If that is the case, then you DO have to make a NAT exception. The VPN wiz does that, but if you add another host in the same tunnel then you cannot use the Wiz any more so you'd forget this. Simply look in the NAT on the left control navigation bar and follow other examples in there that are working. I almost always forget this and scratch my heads for about an hour before I realize I have forgotten it (and even blogged about it!) If Phase 1 and 2 go OK but there still is no connection, then check the NAT table. Since there are a lot of people like me, they have forgotten the NAT exception too on their end. Be sure to ask them too.
- Be sure that PFS (Perfect Forwarding Secrecy) mode are matched on both ends. This is at the bottom of the Tunnel Policy (Crypto Map) - Basic panel.
- Also be sure that the traffic rules and netmasks match between two servers identically. If other side is going for 255.255.255.255 on individual IP address than you have do that on your end as well.You cannot use a wider mask on one end even the range includes the address you are accessing. The traffic access lists from both ends must match exactly.
- Now would also be a good time to download a TFTP client (may of them are out there), and backup your config on your local disk. Keep that config in Goodle Drive or somewhere with a descriptive file name (like ASA-5505-120605-AddedBostonOffice.txt) out in the cloud so that you won't lose it.
Thursday, September 13, 2007
CISCO ASA 5510, 5505 VPN Removing peer from peer table failed, no match! Error
When you try to connect CISCO VPN client you get this error in the log and it will not connect.
4 Sep 13 2007 11:05:12 713903 Group = DefaultRAGroup, IP = xxx.xxx.xxx.xxx, Error: Unable to remove PeerTblEntry
3 Sep 13 2007 11:05:12 713902 Group = DefaultRAGroup, IP = xxx.xxx.xxx.xxx, Removing peer from peer table failed, no match!
Possible Cause
This error message is misleading and leads you to beleive there is something really wrong about your configuration.
But it could simply mean that there is a mismatch, miss-spelling or missing entry the Group ID that is configured on the CISCO VPN client and the Group ID on the Tunnel Group setting.
I guess that the ASA is picking up the default group policy as it is not finding the correct one.
Solution
Check under the tunnel group in your
tunnel-group
Go to the CISCO VPN client, go to the Authentication tab and the Name field must match what you used in
Monday, September 10, 2007
Windows .NET Service Program Does Not Fire Timer
- You started to write a Windows Service using C# and Visual Studio 2005.
- You dragged a Timer object into the service component's design surface.
- You wrote a Timer handler object.
- Timer never fires.
Solutions:
The fact that VS 2005 allows you to drag the timer (or other objects) is very misleanding. It actually never works because timer event will never be fired. In theory they (Visual Studio) should not allow you to do that. (I swear it worked in 2003 but that's the past.)
There are numerous postings, messages and such all over the places on this. It took me half a day to figure this out.
But the reason why the timer event does not fire is because under the Service execution model, it does have a "message pump" executing like in windows desktop apps.
The only way that I know it works is to use System.Threading object, launch a thread and then you block the thread by N milliseconds using the sleep function within the thread to achive the same result.
If you want an example of this, I can elaborate here. Just write a comment.
Windows .NET Programmatically Configure Network Interface with C#
Why this is useful?
You may have one server and a backup server (say a web server) and you would want to write a program to automatically move the second IP address of an interface from the master to the backup server.
Solutions:
This article on Code Project gives seems to be right on http://www.codeproject.com/cs/system/cstcpipwmi.asp
Also helpful is to look at MSDN on the Network Adapter Configuration win32 class page.
http://msdn2.microsoft.com/en-us/library/aa394217.aspx
You would access each of the item in this Win32 class by named array index into the
ManagementObjectCollection object using the member name exactly spelled out.
e.g., string description = objeMO["Description"];
Tuesday, August 28, 2007
MacOS: Automatically Mounting Network Drive on Mac With or Without Automator
One word of caution. Anything you do, password string will be included.
The easiest way to do this, but not secure as password is out in clear text is to do this,
Go to Connect To Server on Finder and punch in your NAS's IP address. In my example I am using 192.168.1.10, it will obviously be different at your home. Suppose your user name is many and password of zyzzx and my Apple file share is called ED_mini then the syntax is,
afp://manny:zyzzx@192.168.1.10/ED_mini
May be a bit more secure way to do this is to use Automator and then create an Application and include the following Apple Script.
on run {input, parameters}
mount volume "afp://manny:zyzzx@192.168.1.10/ED_mini"
return input
end run
- Open the automator
- Select the Automator from the Library menu
- Drag Run Apple Script to the workspace on the right.
- You will see the spot to(* Your script goes here *) repalce that with the connection script of mount volume "afp://manny:zyzzx@192.168.1.10/ED_mini"
- Test the script and save as an Application. Close automator.
Thursday, August 09, 2007
Fix: LaCie ED Mini Web Interface Stops Working
After running the LaCie ED Mini and try to access the Web Admin interface, you might get the following message.
/www/cgi-bin/public/sharelist: line 219: cannot create temp file for here document: No space left on deviceThis is due to the log file getting too big.
© Copyright LaCie 2004/www/cgi-bin/public/sharelist: line 246: cannot create temp file for here document: No space left on device
First clear the log.
http://192.168.0.xxx/cgi-bin/admin/log?do=clearlog
You do need to remember what was your admin password is. This is by default admin.
Above will give the same error, but the log will clear and second time you access LaCie, it will work.
Don't call LaCie for support. They will give you a firmware, in that case, you will lose all the files on your device.
The fact that this is happening to you mean that the system may be logging a lot of errors. Start checking the log and eliminate root cause.
Thursday, May 31, 2007
SQL Server 2005 Cannot Uninstall due to IIsMimeMap
Today I was trying to remove and reinstall an SQL Server 2005 installation from one of my servers. This resulted in the following error
The setup failed to read IIsMimeMap table. The error code is -2147024893
I did some search on the net and this MSDN Post had the answer.
The main cause of this is that there is some interaction with the IIS with the Reporting Service in the SQL server 2005 installation.
It is actually easy to work around this issue.
- Go to the service control panel.
- Find IIS Administrator
- Disable the service and stop it.
- Uninstall the SQL 2005 (by now the only remenant is the uninstalled Reporting service).
That will work.
Friday, May 25, 2007
How to Clear Voicemail Message Waiting Icon on Cingular/ATT
This usually is not a problem for those who get a lot of messages, but I hardly get a voice mail message (goes to say I am really so good at managing people, or I am really unpopular... who cares! Well, actually I get most of my messaging via email.)
But if this ever happens remember;
Don't call "Cingular and now AT&T!" to have this fixed. I tried Actually they cannot or will not reset this from their end.
But there is an easy 2-minute solution to this. Just leave a message on your cell phone yourself from another phone and listen to it from the cell phone. That will make it go away.
Friday, May 04, 2007
XCOPY incompatible with NTFS Mount Points
But you might run into the same situation as I have.
We wanted to copy the entire directory and files underneath it from one place in a file system (say a network share) to under a mount point directory (say C:\lotsofiles) in hosted by an iSCSI SAN, and to do so, I used XCOPY commands.
What happens next, when you do this is that XCOPY ignores the mount point and happily copy files to the drive. We saw the C: drive's space directly. As soon as XCOPY starts to run, it will cause some error and ISCSI volumes are no longer bound!
This issue does not occur, for example if you drag and drop files using the Explorer, use COPY command or do a deep copy using cp.exe in the UnxUtils package. So I know it is very specific to XCOPY
Tuesday, May 01, 2007
SQL Server 2005 Management Studio Slow to Come Up
David Tan posted a very great message on the MSDN Forum about this. But essentially the cause of this is that the Management Studio is trying to access the (digital) Certificate Revocation List crl.microsoft.com at Microsoft at start up, and if the server happens to be behind a firewall or no-Internet then it has to wait for the timeout.
If this server must sit behind the firewall without any chance to get out to the Internet (like inside the hospital network, or a QA test lab) then the one way to work around this is to configure the firewall so that it will immediately reject the connection when it sees the URL to crl.microsoft.com
Here is a cheap cheat if we have a web server in the same local network (only do this if your system always has no hope of getting out to the Internet, and you already made an enemy with your IT department).
Under your system32 directory there is drivers\etc directory. Edit the hosts file in there so that crl.microsoft.com points to a running web server.
Thursday, April 19, 2007
SharePoint Server 3.0 Gives Error 500 After Changing Domain Password
Today I changed the domain user password.
I am logging in from a WORKGROUP (i.e., non domain) computer.
Then it gives error 500 and does not proceed to give me a login prompt to supply the new password! Now there is no way to log in.
Ironically, if I test this with Firefox 2.0 I can get the login prompt!
So here is the fix.
It is breaking because your IE is sending an incorrect credentials to SharePoint 3.0, and the reason is because the server is (most likely) in your Internet and the IE, knowing the trusted site, it sends out incorrect credentials. When this happens though, it is crashing the SharePoint 3.0.
To get around this issue, change the Security level of the SharePoint 3.0 server to the default Internet level, then the login prompt should show up.
Friday, April 06, 2007
Java Technology? Why people still bother with it?
Please do know that I use Mac most of the time for my own use so this is not really me just talking from the Windows standpoint.
But my Java experience has been nothing but trouble, and there has hardly been any time when a Java technology based stuff worked well. I really feel that the technology is flawed, and wish it had not but here are some examples.
A year or a bit more ago, I was involved in a deployment of a time card system for a company I used to work for. The UI part of this application was implemented in Java. While it is not entirely the Java's fault, this specific deployment was based on an older Java platform, and it only ran on a specific version of the Java implementation. If you happened to install any different (i.e., later) version of it, that time card application stopped to work. A significant my own time was wasted to go through bunch of users who has compromised the Java version by "mistakenly" installing newer Java. It seemed to me that the Java lacked any backward-compatibility architecture, for example, running different versions side-by-side.
Later on in another company we bought an advanced firewall appliance and it came with a Java based "friendly" GUI software. I was excited to know that "Great, I can use this both on my Mac and PC." So I load this on my Mac and it says, "This program only run best on Windows." In fact it actually runs on Mac, but it does not work very well at all. They were not kidding.
But then what occurs to these people who develop this kind of tool to write something on Java but then make it only runs on Windows? In my opinion, I don't think it is really the developer's fault. The supporting Java platform should have been designed so that it would work on all latest Java supported platforms. I think that Java failed us again.
Today, I was playing with a remote management (i.e., remote screen) capability on a certain Windows server we bought. I was testing this on Windows. And what happens? The entire Java environment freezes up.
I am hoping that there will either be a significant improvement in Java, or hope someone would come up with the cross-platform environment that works on just about any.
The about the only thing that comes close to it seems to be the Flash. I cannot ever recall I had ANY time that a You Tube video did not play on all sorts of browsers both on my Mac and Windows. It seems to deal with visioning issues and such and it never gets in my way like Java does.
Wednesday, April 04, 2007
Calling Unmanaged C++ from C#. DLL Won't Register?
I had to write a DLL so that you can call it from C#. There still are some things that is easier done in C++, especially when it comes to dealing with the drivers and I/O directly. Or you simply have someone else's DLL or Win32 DLL etc. you need to call from your C# (VB.NET).
The Problem,
You think you should add the DLL as a Reference in the same manner as other C# assemblies. So you do that then the system complains
A reference to "C\blah\blah\blah\younameit.DLL" could not be accessible. Please make sure that the file is accessible, a valid assemply or COM component.
The Bad Assumption
I thought that I add the reference to any DLLs that I access in my C# project.
The Correct Way
It is not necessary to reference the DLL. That reference is made in your Plaforom Invoke code. If this had not made sense, you should read up on System.Runtime.InteropServices
Monday, February 12, 2007
System.Net.Mail.SmtpClient How To Send User Name and Password?
On .NET 2.0 framework there is now a new namespace called System.Net.Mail, so we should all take advantage of it. So I started to work on it. One problem; most of SMTP servers we deal with require some type of credentials.
If you look at the MSDN docs for the SMTP class, the MSDN's description and example of how to do this is really poor in the document. I would say that 99% of the time, we just want to send a user name and password along with the SMTP traffic, and do not need to rely on default user credentials in the CredentialsCache. It took me a bit of efforts to find how to do this, but it is actually simple. Make sure to include the following namespaces first.
The following example also shows how I am using the Properties object to pull the Application configuration file information. Since SMTP config is something that needs change from time to time, it is best to store the information in a configuration file. The only sticky issue is of course, the password saved in plain text, but in my case it is a closed application so this isn't an issue for me, and even if that leaks, it is not an immediate threat.
using System.Net.Mail;
using System.Net;
using System.Security.Principal;
private void SendEmail(string subject, string body)
{
string smtpServer = Properties.Settings.Default.SMTPServerBlankIfDontWantEmail;
if ((smtpServer == null) (smtpServer == "")) return;
try
{
MailMessage msg = new MailMessage();
msg.To.Add(new MailAddress (Properties.Settings.Default.EmailTo));
msg.From =(new MailAddress(Properties.Settings.Default.EmailFrom));
msg.Body = body;
SmtpClient c = new SmtpClient(Properties.Settings.Default.SMTPServerBlankIfDontWantEmail,
Properties.Settings.Default.SMTPPort);
string token = "mmonitor";
c.Credentials = new NetworkCredential
(Properties.Settings.Default.SMTPUserName,
Properties.Settings.Default.SMTPPassword);
// c.SendAsync(msg, token); // Don't hang the rest of the stuff is SMTP hangs.
c.Send(msg);
this.toolStripStatusLabel2.Text = "Sent email";
}
catch (System.Exception ex)
{
this.toolStripStatusLabel2.Text = ex.Message;
}
}
Saturday, February 10, 2007
SQLExpress Logs Too Many "Starting up Database" Message
I researched this and the reason why the SQL Express does this is to conserve resource by making database "Auto Close" by default. In my case, I constantly use this database and also a remote application status display pulls the data to report the progress, it would not make much sense for the database to close so quickly.
The way to turn the message off is to disable "Auto Close"mode, and where you do that is in the Database's property (use SQL Server Management Express). You will find the Options node and the Auto Close is pretty much at the top of the list of options you can turn "false".
Thursday, February 08, 2007
Running SQL 2000-5 on A Domain Controller - No!
At any rate, this question comes up fairly often because of that: "Can you run a SQL Server 2005 on a Domain Controller". The Microsoft's answer is basically NO but do it at your own risk (link).
The issues stem from basically how the SQL Service starts up in what security role.
Some key points of the reasons why they are against are;
- You cannot promote (dcpromo) or demote the domain controller's role after SQL runs. This basically means that you need to set up the DC and its role first before slapping on the SQL.
- SQL service must run on a domain acount and not on a local machine's system account or Network account.
