Debugging shared Client/ASP Web Service projects in VS2010
by mark on May.19, 2011, under Windows
This post details the setup required for combined Remote Debugging server side web services with client programs in the same project. It is here mainly to assist my memory but may be of use to others as I had to dig for a lot of this info.
It assumes you log into the local development machine as a domain user and the remote IIS server is on a different domain with no shared trust.
This applies to VS2010 but should also be relevant to vs2008 and vs2005.
Local Computer Config
You will have logged on the local computer as MAINDOMAIN\user
- Create a local computer user with the same name and password as your domain one. ( This step may be unnecessary )
- Change the Sharing and Security Model In Local Security Policy/Local Policies/Network access: Sharing and security model for local accounts
set Classic – local users authenticate as themselves
Remote IIS Computer
- Create a local computer user with your domain user name and same password.
- Add Administrators group to this user.
- make sure msdeploy works.
- Add debug rights to new user In Local Security Policy/Local Policies/User Rights Assignment/Debug programs/Add User or Group
- Change the Sharing and Security Model In Local Security Policy/Local Policies/Network access: Sharing and security model for local accounts
set Classic – local users authenticate as themselves
msvsmon config
Create a batch file to run msvsmon called runmsvsmon.bat in the base path (e.g. wwwroot\ServiceTest) of the asp service as follows
SET _NT_SYMBOL_PATH=%CD%\bin cd "C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\Remote Debugger\x86" start msvsmon.exe
Run the batch file as the user added above.
This will allow symbols to be used during step into service debugging.
Change the server name in msvsmon to
DEVDOMAIN\user@LOCALMACHINENAME
This allows your user to attach juts by entering the remote ip address (domain search for remote server is disabled in this case) in the Qualifier field in VS and thus works for standard debugging too.
Visual Studio Config
In Debugger Options
- disable Enable just my code
- enable Enable source server support
In Web Service project properties
- Web/Use Custom Web Server/Url – http://remoteip/ServiceTest
- Package/Publish Web/IIS Web Site – Default Web Site/ServiceTest
In Publish Service
- username user
- password is whatever
- save password checked
- method WebDeploy
- URL http://remoteipaddr
- Site Default Web Site/ServerTest or Default Web Site/Server
- check Mark as IIS app
- check Leave extra files
Procedure
Deploy Web service first
This should succeed if msdeploy is working on the remote server.
You should see the files update on the target.
add debug=”true” to compilation tag in web.config.<compilation debug="true" targetFramework="4.0"> </compilation>
Test Tools/Process Attach
If you get a list of processes, you have everything should be working.
Debug Client and Web Service together
Set a breakpoint inside the service module and press F5. It should then break with source.
Set a breakpoint in the desktop client and step into a web method.
Prep Learning Games
by mark on May.04, 2011, under Educational
Having a son in prep this year has led me to research learning tools and games. He is already quite confident with using a web browser and bookmarks for finding his favorite online games and playing them unsupervised. Once on a site like cartoon network, he can find new games quite easily.
If you allow unsupervised access, remember to jail/restrict their account so they cant install or do anything accidentally to the computer.
Here is a collection.
I may also write some if I cant find any more suitable ones.
The key motivator using experience with my son is something exciting and/or funny when you get it right. It also needs to be verbal/spoken as they cont read yet.
Sight Words
http://www.mrcpl.org/literacy/lessons/sight/index.html
http://roythezebra.com/reading-software/tricky-words/tricky-words-1.html
Using a Windows CE 4.20 SDK with VS2005 and VS2008
by mark on Nov.23, 2010, under WinCE
I have had the requirement to use a windows CE SDK with Visual Studio 2005 and 2008. This is desirable because they have better/newer ARM compilers, as well as being able to integrate a combined Native/.NET solution in 1 place for a single step build.
The hint on how to do this came after playing with Qt. Qt Comes with a program (continue reading…)
Git Tricks and Tips
by mark on Nov.19, 2010, under linux, Nifty Hacks
Maintaining Vendor Branches
For the case where you have a vendor tarball or zip source bundle, these are effectively managed in a branch.
If the vendor releases a new version, the update process is:
git co vendor
mkdir zzz
mv * zzz/
mv .* zzz/
mv zzz/.git .
rm -rf zzz
git commit -a
Now you can merge or rebase your development tree to the new vendor release.
Some useful Git links.
Refs:
http://cheat.errtheblog.com/s/git
http://sourceware.org/frysk/build/git-fu.html
http://sandofsky.com/blog/git-workflow.html
How Smart Meters can be Fooled
by mark on Sep.20, 2010, under Solar
As we all know, smart meters are being rolled out everywhere so that electricity companies and charge by time of use. This means that when you want the power most and so does everyone else, they will increase the tariff for that period. I prefer my flat rate but apparently this is not a choice if you want a premium rate feed in tariff for your solar system. It will cost us at least $150 more per year for the power we buy with AGL’s 3 rate tariff.
The old disc analog power meters record power/current usage with a motor which spins a disc, and turning the counter in a calibrated way.
The new smart meters are digital. This means they sample the current and voltage waveform for a period of time and then do some maths to calculate the resultant power used in that period. This is then recorded.
There are several designs for smart meters, a common one using an MSP430 micro, but this could as easily be a PIC or an AVR. These devices generally have an A/D converter with multiple inputs. These A/D converters can only sample so fast. They also can only sample 1 input at any one time.
The sample rate would typically be in the order of 500us to 1ms due to limitations in the hardware. This leave gaps between the samples where power could be acquired leaving no trace on the meter. Then there is also the time between sample bursts, where the calculations are done or another phase/meter input is sampled. There is no record of anything used in this period either. If a second input is sampled, the first input is not sampled. No record of this either.
Then there is also outlier detection and removal. This means any sample that is not near excepted value compared to other adjacent samples is discarded, though not all meters would necessarily implement this algorithm, but it does guard against noise creating high false readings which customers may object to.
I have direct evidence that at least 1 product does this. The Fronius inverter which a colleague has had installed for his PV system draws 70W at night, measured with a plug in power meter from Jaycar and also measured at 314 mArms. Looking at the current and voltage waveform on an oscilloscope, it shows several pulses, the main one just after peak voltage, and has a duration of between 100 and 200us. The EM1200 meter installed does not register this current draw at all!
The crux of this is that you could design a power supply along these principals, and get free power. This power could then be fed immediately back through a suitable grid connect inverter, the power which would be registered by the meter.
Conversely, if you get the timing wrong, the meter may record a higher than average value by several times.
I wonder how long it will be before this is fixed.
There is also the legal question. Is Fronius breaking the law.
No Sound in Limited User Account
by mark on Sep.17, 2010, under Windows
Recently I needed to do a repair install on Windows XP, after which sound was no longer working on limited user accounts. After extensive searching I realized no one had a solution. The device driver was ok and operating and sound was working fine on administrator capable accounts.
The strange thing is that the Realtek HD sound app worked Ok on the LUA. I concluded from this that the software enumerator was at fault, specifically the registry keys that would have to be read for the software enumerator to read its current list.
Use regedit to change the permissions of the tree on currentcontrolset to fix this issue. Log in again and its all good.
Optimal String Sizing for PV Systems
by mark on Apr.23, 2010, under Solar
Optimal string sizing for a given inverter can improve your return on investment.
As an example, I will use my system as an example. The PVI-5000-OUTD-AU efficiency plot is given below.
The important panel parameters are:
Panel: TH175M24
Pmax: 175watts
Vmp: 36.2V
Imp: 4.85A
Voc: 43.9V
Isc: 5.30A
It can be seen from the inverter efficiency diagram that the sweet spot is at 50% full power and 345V string voltage. Note that it has 2 MPPTs. These may be independently specified.
Now the 28 panels for 4.9kW need to be split between the MPPTs such that the Pmax string voltages are near the optimal 345V. This gives us 2 optimal and a symterical choices:
- 2 x 9 Panels in parallel + 1 x 10 panels. This gives string voltages of 325.8V and 362V.
- 2 x 10 panels in parallel + 1 x 8 panels. This gives string voltages of 362V and 289.6V.
- 2 x 7 panels in parallel + 2 x 7 panels in parallel. This gives string voltages of 253.4V
The open circuit string voltage for this inverter must be less than 600V. This is 439V for 10 panels, so this parameter is ok.
By inspection of the efficiency plot, configuration 1 is the best. In fact is it 0.3% better than the symmetrical configuration, which would result in about $10 per year more income/power at 68c/kWh.
The MPPT which has 2 strings in parallel has a greater weight attributed when choosing panel configuration as it supplies more power.
PV System Install Phase1
by mark on Apr.23, 2010, under Solar
The panels are up but the Aurora inverter is still coming due to supply issues in mid May.
I have opted not to obtain an alternative GCI due to the excellent efficiency of the powerone aurora. It is generally 2% or more better than others currently able to be supplied at short notice so worth waiting. 2% is worth 98W at full power, and derated, works out to about $100 per year.
All things going well, we should be generating power and income in June some time, fingers crossed. Hopefully AGL wont stuff us around like others I know when we apply for the premium rate tarrif too.
Mapping special names to multiple USB serial adapters
by mark on Apr.17, 2010, under linux, Solar
The watts clever envi has a USB serial adapter which is a Prolific pl2303. When inserted it is assigned /dev/ttyUSB0 by udev, among a few other symlinks. I have now obtained an RS485 serial adapter on ebay for A$13.98 delivered which uses the exact same chip, which makes it indistiguishable from the envi’s port. What I needed was a way to guarantee uniqueness regardless of the enumeration order on boot or random hot plugin. Naturally, this is for the Aurora GCI which will be installed when they become available in May.
Researching udev a bit, I found /lib/udev/rules.d/60-persistent-serial.rules (mine is a debian system). This file shows how the standard symlinks are done. Since each USB port is unique, I should be able to use that uniqueness to map another symlink to the device.
Firstly plug in the device in the chosen USB port and issue
udevadm info --query=all --name=/dev/ttyUSB1
This shows a heap of stuff but mainly we are interested in
P: /devices/pci0000:00/0000:00:1a.0/usb2/2-1/2-1:1.0/ttyUSB1/tty/ttyUSB1
Create a file in /etc/udev/rules.d/70-persistent-serial.rules which contains
#see /lib/udev/rules.d/60-persistent-serial.rules
ACTION!=”add|change”, GOTO=”persistent_serial_end”
SUBSYSTEM!=”tty”, GOTO=”persistent_serial_end”
KERNEL!=”ttyUSB[0-9]*|ttyACM[0-9]*”, GOTO=”persistent_serial_end”IMPORT=”usb_id –export %p”
#IMPORT=”path_id %p”ENV{ID_SERIAL}==”", GOTO=”persistent_serial_end”
# usb nearest ethernet connector
ENV{DEVPATH}==”*usb2/2-2/2-2:1.0*”, SYMLINK+=”serial/by-name/envi”
#bottom front connector
ENV{DEVPATH}==”*usb7/7-1/7-1:1.0*”, SYMLINK+=”serial/by-name/rs485″
# usb below nearest ethernet connector
ENV{DEVPATH}==”*usb2/2-1/2-1:1.0*”, SYMLINK+=”serial/by-name/rs485″LABEL=”persistent_serial_end”
Replug and voila you get /dev/serial/by-name/rs485 which will always be the correct device.
Now I just have to run the wire to where the GCI will be installed.
Funny Characters for gcc/g++ errors and warnings
by mark on Apr.01, 2010, under linux
I have found that on some linux systems when you compile with gcc and g++ the error messages have funny characters like
test.c: In function â:
test.c:6: warning: unused variable â
This is due to the default locale being set to something other than the default.
in /etc/default/locale you will have a line like
LANG="en_AU.UTF-8"
add
LC_CTYPE=C
Restart the shell and compile again and the errors are now meaningful.
test.c: In function 'main':
test.c:6: warning: unused variable 'x'
Naturally you could set it in the local shell for the session, but then you would have to do it every time.

