After spending 2 full hours I managed to find the culprit for an IDE crash (access violation in VCL210). The cause was ...drum roll please... CnPack!
There was a palette in IDE's main tool bar called MSDN Help. However, when I right click to configure the toolbar, the palette was not listed there to show it/hide it. This probably cause the crash when I tried to remove it by dragging it out of the toolbar.
You want to do amateur or power-level computing? Then there is no other choice than Windows! Period. As a Windows user you don't have to spend tons of a money for a Mac PC (sorry Mac guys but Mac is nothing else than an expensive PC now) and you don't have to waste time on forums to learn how install stuff. All that Linux/Mac can offer you can get on Windows and get is better. I spent many years working with Linux but it was always only my second choice. Sorry Linux friends, but I said it.
Monday, October 26, 2015
Saturday, October 17, 2015
Let DC++ autoconfigure the Internet connection
If you are behind a router that supports uPNP:
www.portforward .com
Enjoy.
- Make sure the uPNP feature is active in your router. Usually is disabled by default.
- First you need to enable UPnP in Windows.
- Make sure of this by checking the "Universal Plug and Play Device Host" and "SSDP Discovery" services. Both of these services should be set to "Automatic" startup and "Started" status.
- In DC++ activate the "Firewall with UPnP / Use UPnP to let DC++ configure my router"
Enjoy.
Tuesday, September 15, 2015
svchost.exe high memory usage and 100% CPU - SOLVED
Every now and then I see high CPU utilization. So I decided to see which program is taking so much CPU.
First I looked into the task manger. At the first look it didn't show any program to take more than 1% CPU. But after checking the 'Show processes from all users' we got the guilty program: svchost.
But wait! svchost is not a program but a container for other programs (services). So we have to look inside svchost. For this, we click the 'Resource monitor' button (under Performance tab) in TaskManager.
In Resource monitor I looked under the CPU tab and I have seen that netsvcs is the process that takes all the CPU. I checked the checkbox in from of this process to filter out all other irrelevant processes. Now the 'Services' panel (located below Processes panel) shows that wuauserv is the actually guilty party. This is 'Windows updates'
If you have this problem, you could simply turn off this service as explained here:
http://www.techracket.com/solution-fix-svchost-exe-high-memory-usage-cpu-usage/
-----------------------
Related links:
http://www.cnet.com/forums/discussions/100-percent-cpu-usage-caused-by-svchost-process-need-help-339390/
First I looked into the task manger. At the first look it didn't show any program to take more than 1% CPU. But after checking the 'Show processes from all users' we got the guilty program: svchost.
But wait! svchost is not a program but a container for other programs (services). So we have to look inside svchost. For this, we click the 'Resource monitor' button (under Performance tab) in TaskManager.
In Resource monitor I looked under the CPU tab and I have seen that netsvcs is the process that takes all the CPU. I checked the checkbox in from of this process to filter out all other irrelevant processes. Now the 'Services' panel (located below Processes panel) shows that wuauserv is the actually guilty party. This is 'Windows updates'
If you have this problem, you could simply turn off this service as explained here:
http://www.techracket.com/solution-fix-svchost-exe-high-memory-usage-cpu-usage/
-----------------------
Related links:
http://www.cnet.com/forums/discussions/100-percent-cpu-usage-caused-by-svchost-process-need-help-339390/
Wednesday, June 17, 2015
More delphi weirdness - No mapping for the Unicode character exists in the target multi-byte code page
Today I tried to open an old project. While loading the main DFM form I got a "No mapping for the Unicode character exists in the target multi-byte code page" error.
After wasting some time I figured out what caused it: the form had a custom control that had a property like this: HeaderCellSpacing = 1.300000000000000000.
Meanwhile the control was updated and this property was renamed. This was the reason of the error. It was enough to open the DFM and manually delete that property. After that the form loaded nicely.
Delphi should have been able to see which properties does not exist anymore and automatically remove them. Another proof that Delphi XE7 is totally unworthy for day by day development.
Keywords: No mapping for the Unicode character exists in the target multi-byte code page
After wasting some time I figured out what caused it: the form had a custom control that had a property like this: HeaderCellSpacing = 1.300000000000000000.
Meanwhile the control was updated and this property was renamed. This was the reason of the error. It was enough to open the DFM and manually delete that property. After that the form loaded nicely.
Delphi should have been able to see which properties does not exist anymore and automatically remove them. Another proof that Delphi XE7 is totally unworthy for day by day development.
Keywords: No mapping for the Unicode character exists in the target multi-byte code page
Wednesday, May 27, 2015
How to reduce Firefox (FF) memory usage?
How to reduce memory usage in Mozilla Firefox
Know your browser
Type about:memory in the Firefox address bar. This will show you current memory usage.
Browser history
- Type about:config in the Firefox address bar
- Do a search for browser.sessionhistory.max_entries
- Double click the default value (50), change it to something lower (3, 4, 5).
Addons
- Type about:addons in the Firefox address bar
- Disable unused/unnecessary/unknown addons and plugins
AdBlock Plus
If you don't have AdBlock Plus, you don't know what you are missing: The Internet without ads!!! I am not kidding! However, it was reported that AdBlock Plus increased memory usage. So, if you have lots of open tabs, you may want to disable this plugin.
I did an experiment in May 2015, and it seems is not true, or at least, they fixed this issue, since then.
Enable hardware acceleration
- Type about:preferences#advanced in the Firefox address bar
- Check "Use hardware acceleration when available".
Restart Firefox often
In my case it helps a lot to restart Firefox every hour.
History
Press Ctrl+H to show the 'History'. Delete all entries older than 6 months.
Install it fresh
Installing a fresh copy of Firefox will help a lot. Somebody made and experiment about this here: https://support.mozilla.org/en-US/questions/1011071
In my case, the memory consumption decreased from 900MB to 500MB.
Thursday, April 2, 2015
Giving up on Delphi
Some months ago I upgraded from Delphi XE to Delphi XE7. Boy! What a mistake!
As EurekaLog people put it, Delphi XE7 is a "train wreck".
Now I am on the way of contacting Embarcadero and asking for a refund.
I will keep you updated to see how it goes.
You can find the word 'refund' only once in their huge EULA document. Not a good sign.
...Other than with respect to any indemnification hereunder, Licensor’s entire liability and Licensee’s exclusive remedy under this provision will be for Licensor to use commercially reasonable efforts to remedy defects covered by this warranty and condition within a reasonable period of time or, at Licensor’s option, either to replace the defective Product or to refund the amount paid by Licensee to license the use of the Product. Licensor does not warrant or condition that the operation of the Product will be uninterrupted or error free or that all software defects can be corrected. This warranty and condition shall not apply if...
http://edn.embarcadero.com/article/43347
Here is related discussion about the disturbing changes Embarcadero make in their license and marketing approach: http://tech.turbu-rpg.com/429/if-this-is-true
As EurekaLog people put it, Delphi XE7 is a "train wreck".
Now I am on the way of contacting Embarcadero and asking for a refund.
I will keep you updated to see how it goes.
You can find the word 'refund' only once in their huge EULA document. Not a good sign.
...Other than with respect to any indemnification hereunder, Licensor’s entire liability and Licensee’s exclusive remedy under this provision will be for Licensor to use commercially reasonable efforts to remedy defects covered by this warranty and condition within a reasonable period of time or, at Licensor’s option, either to replace the defective Product or to refund the amount paid by Licensee to license the use of the Product. Licensor does not warrant or condition that the operation of the Product will be uninterrupted or error free or that all software defects can be corrected. This warranty and condition shall not apply if...
http://edn.embarcadero.com/article/43347
Here is related discussion about the disturbing changes Embarcadero make in their license and marketing approach: http://tech.turbu-rpg.com/429/if-this-is-true
Tuesday, March 17, 2015
How to set paths (library, debug, BPL, DCP, search) in Delphi XE7 (for multiplatform use)
So, Delphi's help doesn't tell us much about how to set up paths for DPK packages. It is ok. We got all used with Delphi's sloppy manual.
So, I will tell you how I do it so they work both on 32 and 64 Win platforms:
I have these major packages/folders:
This will ensure that the IDE and app that use this package don't have access to the package's PAS files. If the IDE has access to the PAS file it will recompile the files every time you complile the app.Even worst, if the IDE recompiles package's files, it will put the DCUs in app's folder!
Also unckeck 'Build as needed'. xxxxxxxxxxx
IDE setup - Package output directory
IDE setup - Library path settings
In Delphi options -> Library -> Library path, I set these paths for Win32 platform:
CommonPackages are multi-platform (Win32/64) and multi-config (debug, prerelease, release). Therefore, we use $(Config) in the path.
If the control uses *.res files you need to manually copy them in the $(Platform) folder (the folder where the DCU are written)
This is Delphi's help page for Browsing path: Specifies search paths where the compiler can find the required files for the package, such as .dcp and .bpi files.
This is the Delphi global library path. The compiler can find only those files that exist on the Library path. If you try to build your package with a file that is not on the Library path, you receive a compiler error.
Some resource files (such as controls.res) are only available in the Release folder (not the Debug folder), so you should ensure that your project Release directory either is specified in the Library path or will be resolved by at least one variable in the Library path.
Enter the path to package's source code so the IDE will able to reach the code (for example to be able to open a file when you control+click a method in IDE):
The project's 'Search Path' is set like this (for all platforms):
You have to do the same for 32 and 64 bit platforms (in the 'Selected Platform' dropdown menu).
__________
Update: I had problems making a project to work when when I used a combination of $(Platform)_$(Config) and $(Platform) in the paths. It worked after I replaced $(Platform)_$(Config) with $(Platform).
So, I will tell you how I do it so they work both on 32 and 64 Win platforms:
My packages
I have these major packages/folders:
- Graphics32
- Drag and Drop (Melander)
- 3rd Party (many small packages put together in a big package)
- CommonPackages (these are my own packages)
Package setup
Double click the DPK file to load it in Delphi. Go to project's settings and set xxxxxxxxxxxx.This will ensure that the IDE and app that use this package don't have access to the package's PAS files. If the IDE has access to the PAS file it will recompile the files every time you complile the app.Even worst, if the IDE recompiles package's files, it will put the DCUs in app's folder!
Also unckeck 'Build as needed'. xxxxxxxxxxx
IDE setup
IDE setup - Package output directory
- For Win32 platform set it to: $(BDSCOMMONDIR)\Bpl
- For Win64 platform set it to: $(BDSCOMMONDIR)\Bpl\$(Platform)
IDE setup - Library path settings
In Delphi options -> Library -> Library path, I set these paths for Win32 platform:
- c:\MyProjects\Packages\DragDrop\$(Platform)
- c:\MyProjects\Packages\Graphics32\$(Platform)
- c:\MyProjects\Packages\Third party packages\$(Platform)
- c:\MyProjects\Packages\CubicCommonControls\$(Platform)_$(Config)
CommonPackages are multi-platform (Win32/64) and multi-config (debug, prerelease, release). Therefore, we use $(Config) in the path.
If the control uses *.res files you need to manually copy them in the $(Platform) folder (the folder where the DCU are written)
This is Delphi's help page for Browsing path: Specifies search paths where the compiler can find the required files for the package, such as .dcp and .bpi files.
This is the Delphi global library path. The compiler can find only those files that exist on the Library path. If you try to build your package with a file that is not on the Library path, you receive a compiler error.
Some resource files (such as controls.res) are only available in the Release folder (not the Debug folder), so you should ensure that your project Release directory either is specified in the Library path or will be resolved by at least one variable in the Library path.
Browse path
In Delphi options -> Library ->:Enter the path to package's source code so the IDE will able to reach the code (for example to be able to open a file when you control+click a method in IDE):
- c:\MyProjects\Packages\DragDrop\
- c:\MyProjects\Packages\Graphics32\
- c:\MyProjects\Packages\Third party packages\
- c:\MyProjects\Packages\CubicCommonControls\
- The project Search path for Delphi ( Project > Options > Delphi Compiler ) or the Include path for C++ ( Project > Options > Directories and Conditionals).
- The global browsing path (this option) for Win32 Delphi language projects;
the directories specified with this option are appended to the debug source path
for the project. Therefore, the debugger search order for unit files is
determined by the following path settings:
- The Browsing path (this option).
- The project Source path (the directory in which the project was saved).
Search path
I am not sure you really need the thing below (I think you don't):The project's 'Search Path' is set like this (for all platforms):
- c:\MyProjects\Packages\DragDrop\$(Platform)
- c:\MyProjects\Packages\Graphics32\$(Platform)
- c:\MyProjects\Packages\Third party packages\$(Platform)
- c:\MyProjects\Packages\CubicCommonControls\$(Platform)_$(Config)
You have to do the same for 32 and 64 bit platforms (in the 'Selected Platform' dropdown menu).
The applications
For applications (DPR) that are using the packages specified above I set the 'Unit output directory' like this (for 'All configurations/All platforms'):- .\$(Platform)_$(Config)
__________
Update: I had problems making a project to work when when I used a combination of $(Platform)_$(Config) and $(Platform) in the paths. It worked after I replaced $(Platform)_$(Config) with $(Platform).
Labels:
bpl,
DCP,
debug,
delphi,
delphi xe7,
library,
multiplatform,
path,
search)
Tuesday, March 3, 2015
Trying to do some multi-platform programming
So, I purchased Delphi XE7 for a pile of money (around 1000euros) hoping to do all the wonderful things they advertised.
After struggling with their grandiose (read as 'scarce' or 'almost nonexistent') user manual I managed compiling my 32 bit application for Windows 64.
Since Delphi is 32 bit and my Windows machine is also 32 bit you need to somehow deploy your app on Windows 64 and run/debug it there. This is what PAServer (debugger platform assistant) is supposed to do.
However, PAServer keeps crashing as soon you press the Run button in Delphi. Sometimes this error is shown:
Error setting debug exception hook.
[223ADB5B]{win32debugide210.bpl} Win32Debug.TNativeProcess.SetDelphiTracingLevel (Line 2324, "Win32Debug.pas" + 5) + $11
[223AD5ED]{win32debugide210.bpl} Win32Debug.TNativeProcess.InitExceptRanges (Line 2195, "Win32Debug.pas" + 3) + $4
[223ADFB8]{win32debugide210.bpl} Win32Debug.TNativeProcess.DoSetExceptOption (Line 2436, "Win32Debug.pas" + 2) + $6
[203620D0]{dbkdebugide210.bpl} Debug.TDebugger.SetProcess (Line 11394, "Debug.pas" + 31) + $10
[20363397]{dbkdebugide210.bpl} Debug.TProcess.SetExceptOption (Line 11709, "Debug.pas" + 1) + $4
[203574BF]{dbkdebugide210.bpl} Debug.TThread.ntfyThread (Line 6355, "Debug.pas" + 58) + $6
[1B76C593]{bordbk210.dll} Unknown function at @isDbkLoggingOn$qv + $626BB
[1B79C22A]{bordbk210.dll} Unknown function at @isDbkLoggingOn$qv + $92352
[1B79680A]{bordbk210.dll} Unknown function at @isDbkLoggingOn$qv + $8C932
[1B76B927]{bordbk210.dll} Unknown function at @isDbkLoggingOn$qv + $61A4F
[1B76C593]{bordbk210.dll} Unknown function at @isDbkLoggingOn$qv + $626BB
[1B793703]{bordbk210.dll} Unknown function at @isDbkLoggingOn$qv + $8982B
[1B79C4D7]{bordbk210.dll} Unknown function at @isDbkLoggingOn$qv + $925FF
[1B709D72]{bordbk210.dll} Unknown function at DllUnregisterServer + $17EF6
[1B76B8CC]{bordbk210.dll} Unknown function at @isDbkLoggingOn$qv + $619F4
[505C2850]{vcl210.bpl } Vcl.Controls.TControl.Perform (Line 7010, "Vcl.Controls.pas" + 10) + $8
[1B76C7FC]{bordbk210.dll} Unknown function at @isDbkLoggingOn$qv + $62924
[1B714263]{bordbk210.dll} Unknown function at @isDbkLoggingOn$qv + $A38B
[505C76E2]{vcl210.bpl } Vcl.Controls.TWinControl.WndProc (Line 10038, "Vcl.Controls.pas" + 153) + $6
[505C2850]{vcl210.bpl } Vcl.Controls.TControl.Perform (Line 7010, "Vcl.Controls.pas" + 10) + $8
[505C5E7E]{vcl210.bpl } Vcl.Controls.TWinControl.GetControl (Line 9130, "Vcl.Controls.pas" + 4) + $A
[505CA48F]{vcl210.bpl } Vcl.Controls.TWinControl.CMInvalidate (Line 12012, "Vcl.Controls.pas" + 10) + $4
[505C2C15]{vcl210.bpl } Vcl.Controls.TControl.WndProc (Line 7232, "Vcl.Controls.pas" + 91) + $6
(0003C651){CnWizards_DXE7.dll} [0DCCD651]
(0003C6B8){CnWizards_DXE7.dll} [0DCCD6B8]
(0003C769){CnWizards_DXE7.dll} [0DCCD769]
(00039EF6){CnWizards_DXE7.dll} [0DCCAEF6]
[500636D0]{rtl210.bpl } System.@FinalizeArray (Line 31435, "System.pas" + 139) + $0
[500636C0]{rtl210.bpl } System.@FinalizeArray (Line 31423, "System.pas" + 127) + $0
[50716363]{vcl210.bpl } Vcl.Forms.TApplication.ProcessMessage (Line 10354, "Vcl.Forms.pas" + 25) + $1
[5071639E]{vcl210.bpl } Vcl.Forms.TApplication.HandleMessage (Line 10382, "Vcl.Forms.pas" + 1) + $4
[507166D1]{vcl210.bpl } Vcl.Forms.TApplication.Run (Line 10520, "Vcl.Forms.pas" + 26) + $3
Some people suggested that if you set your connection (the network connection between the 32 bit debugging machine and 64 bit debugged machine) without a password it may not work! I have tried that but with no success.
UPDATE
I tried to fix this and I spend too much time. In the end I gave up and installed Delphi in a second computer (yes, and did all the madness about installing all tools, libraries, etc) that has Win64 bits.
I also contacted Embarcadero support about this issue. They said that somebody will call me but I never heard from them. They know they can't fix the problem.
The conclusion is that Delphi is not even by far ready for multi-platform development. It has some multi-platform capabilities but I would say it doesn't go beyond the 'experimental' or 'beta' stage. Multi-platform (FMX included) is not ripe yet. Maybe in a couple of years. But then if it is too wait that long (and pay lots of money for upgrades) we should also consider Lazarus.
After struggling with their grandiose (read as 'scarce' or 'almost nonexistent') user manual I managed compiling my 32 bit application for Windows 64.
Since Delphi is 32 bit and my Windows machine is also 32 bit you need to somehow deploy your app on Windows 64 and run/debug it there. This is what PAServer (debugger platform assistant) is supposed to do.
However, PAServer keeps crashing as soon you press the Run button in Delphi. Sometimes this error is shown:
Error setting debug exception hook.
[223ADB5B]{win32debugide210.bpl} Win32Debug.TNativeProcess.SetDelphiTracingLevel (Line 2324, "Win32Debug.pas" + 5) + $11
[223AD5ED]{win32debugide210.bpl} Win32Debug.TNativeProcess.InitExceptRanges (Line 2195, "Win32Debug.pas" + 3) + $4
[223ADFB8]{win32debugide210.bpl} Win32Debug.TNativeProcess.DoSetExceptOption (Line 2436, "Win32Debug.pas" + 2) + $6
[203620D0]{dbkdebugide210.bpl} Debug.TDebugger.SetProcess (Line 11394, "Debug.pas" + 31) + $10
[20363397]{dbkdebugide210.bpl} Debug.TProcess.SetExceptOption (Line 11709, "Debug.pas" + 1) + $4
[203574BF]{dbkdebugide210.bpl} Debug.TThread.ntfyThread (Line 6355, "Debug.pas" + 58) + $6
[1B76C593]{bordbk210.dll} Unknown function at @isDbkLoggingOn$qv + $626BB
[1B79C22A]{bordbk210.dll} Unknown function at @isDbkLoggingOn$qv + $92352
[1B79680A]{bordbk210.dll} Unknown function at @isDbkLoggingOn$qv + $8C932
[1B76B927]{bordbk210.dll} Unknown function at @isDbkLoggingOn$qv + $61A4F
[1B76C593]{bordbk210.dll} Unknown function at @isDbkLoggingOn$qv + $626BB
[1B793703]{bordbk210.dll} Unknown function at @isDbkLoggingOn$qv + $8982B
[1B79C4D7]{bordbk210.dll} Unknown function at @isDbkLoggingOn$qv + $925FF
[1B709D72]{bordbk210.dll} Unknown function at DllUnregisterServer + $17EF6
[1B76B8CC]{bordbk210.dll} Unknown function at @isDbkLoggingOn$qv + $619F4
[505C2850]{vcl210.bpl } Vcl.Controls.TControl.Perform (Line 7010, "Vcl.Controls.pas" + 10) + $8
[1B76C7FC]{bordbk210.dll} Unknown function at @isDbkLoggingOn$qv + $62924
[1B714263]{bordbk210.dll} Unknown function at @isDbkLoggingOn$qv + $A38B
[505C76E2]{vcl210.bpl } Vcl.Controls.TWinControl.WndProc (Line 10038, "Vcl.Controls.pas" + 153) + $6
[505C2850]{vcl210.bpl } Vcl.Controls.TControl.Perform (Line 7010, "Vcl.Controls.pas" + 10) + $8
[505C5E7E]{vcl210.bpl } Vcl.Controls.TWinControl.GetControl (Line 9130, "Vcl.Controls.pas" + 4) + $A
[505CA48F]{vcl210.bpl } Vcl.Controls.TWinControl.CMInvalidate (Line 12012, "Vcl.Controls.pas" + 10) + $4
[505C2C15]{vcl210.bpl } Vcl.Controls.TControl.WndProc (Line 7232, "Vcl.Controls.pas" + 91) + $6
(0003C651){CnWizards_DXE7.dll} [0DCCD651]
(0003C6B8){CnWizards_DXE7.dll} [0DCCD6B8]
(0003C769){CnWizards_DXE7.dll} [0DCCD769]
(00039EF6){CnWizards_DXE7.dll} [0DCCAEF6]
[500636D0]{rtl210.bpl } System.@FinalizeArray (Line 31435, "System.pas" + 139) + $0
[500636C0]{rtl210.bpl } System.@FinalizeArray (Line 31423, "System.pas" + 127) + $0
[50716363]{vcl210.bpl } Vcl.Forms.TApplication.ProcessMessage (Line 10354, "Vcl.Forms.pas" + 25) + $1
[5071639E]{vcl210.bpl } Vcl.Forms.TApplication.HandleMessage (Line 10382, "Vcl.Forms.pas" + 1) + $4
[507166D1]{vcl210.bpl } Vcl.Forms.TApplication.Run (Line 10520, "Vcl.Forms.pas" + 26) + $3
Some people suggested that if you set your connection (the network connection between the 32 bit debugging machine and 64 bit debugged machine) without a password it may not work! I have tried that but with no success.
UPDATE
I tried to fix this and I spend too much time. In the end I gave up and installed Delphi in a second computer (yes, and did all the madness about installing all tools, libraries, etc) that has Win64 bits.
I also contacted Embarcadero support about this issue. They said that somebody will call me but I never heard from them. They know they can't fix the problem.
The conclusion is that Delphi is not even by far ready for multi-platform development. It has some multi-platform capabilities but I would say it doesn't go beyond the 'experimental' or 'beta' stage. Multi-platform (FMX included) is not ripe yet. Maybe in a couple of years. But then if it is too wait that long (and pay lots of money for upgrades) we should also consider Lazarus.
Friday, February 27, 2015
Delphi bug: Exception EAccessViolation in module rtl210.bpl at 00016A9C [SOLVED]
I keep getting this error at Delphi shut down:
Application Error - Exception EAccessViolation in module rtl210.bpl at 00016A9C.
Access violation at address 50066A9C in module 'rtl210.bpl'. Read of address 06152AF8.
Solution 1:
The problem is fixed by restoring this registry key to its original state: [HKEY_CURRENT_USER\Software\Embarcadero\BDS\15.0\Known IDE Packages]
Here is the pristine value for this key:
[HKEY_CURRENT_USER\Software\Embarcadero\BDS\15.0\Known IDE Packages]
"$(BDS)\\bin\\htmide210.bpl"="(Untitled)"
"$(BDS)\\bin\\comptoolbar210.bpl"="Component Toolbar Package"
"$(BDS)\\bin\\mlcc210.bpl"="(Untitled)"
"$(BDS)\\Bin\\tgide210.bpl"="(Untitled)"
"$(BDS)\\Bin\\delphiosx32210.bpl"="Delphi OSX32 Platform"
"$(BDS)\\Bin\\macosxdebugide210.bpl"="MacOS"
"$(BDS)\\Bin\\delphiwin64210.bpl"="Delphi Win64 Platform"
"$(BDS)\\Bin\\win64debugide210.bpl"="(Untitled)"
"$(BDS)\\Bin\\GuidedTour210.bpl"="Embarcadero Guided Tour Package"
"$(BDS)\\Bin\\ModernTheme210.bpl"="(Untitled)"
"$(BDS)\\Bin\\asmview210.bpl"="Assembly Browser Package"
"$(BDS)\\Bin\\dbkdebugide210.bpl"="(Untitled)"
"$(BDS)\\Bin\\delphiwin32210.bpl"="Delphi Win32 Platform"
"$(BDS)\\Bin\\dotnetcoreide210.bpl"=".NET Core IDE Package"
"$(BDS)\\bin\\exceptiondiag210.bpl"="(Untitled)"
"$(BDS)\\bin\\fileexplorer210.bpl"="(Untitled)"
"$(BDS)\\bin\\historyide210.bpl"="(Untitled)"
"$(BDS)\\Bin\\htmlhelp2210.bpl"="HtmlHelp Viewer"
"$(BDS)\\bin\\idefilefilters210.bpl"="IDE File filters"
"$(BDS)\\bin\\plugview210.bpl"="Pluggable Tree View Package"
"$(BDS)\\Bin\\projpageide210.bpl"="Value Data: Project and template library package"
"$(BDS)\\Bin\\startpageide210.bpl"="Start Page IDE Package"
"$(BDS)\\Bin\\tlbview210.bpl"="TypeLibrary Browser Package"
"$(BDS)\\Bin\\codetemplates210.bpl"="(Untitled)"
"$(BDS)\\bin\\coreproide210.bpl"="Core IDE Pro Package"
"$(BDS)\\bin\\dbkdebugproide210.bpl"="(Untitled)"
"$(BDS)\\Bin\\profiledeployide210.bpl"="(Untitled)"
"$(BDS)\\Bin\\profilemgride210.bpl"="(Untitled)"
"$(BDS)\\Bin\\sdkmgride210.bpl"="Embarcadero SDK Manager"
"$(BDS)\\bin\\refactoride210.bpl"="Core Refactoring Package"
"$(BDS)\\bin\\todoide210.bpl"="ToDo"
"$(BDS)\\Bin\\comcore210.bpl"="HtmlHelp Viewer"
"$(BDS)\\Bin\\projecttargets210.bpl"="(Untitled)"
"$(BDS)\\Bin\\vclmenudesigner210.bpl"=".NET Core IDE Package"
"$(BDS)\\Bin\\DataExplorerIDE210.bpl"="(Untitled)"
"$(BDS)\\Bin\\unittestide210.bpl"="(Untitled)"
"$(BDS)\\Bin\\iteidew32210.bpl"="(Untitled)"
"$(BDS)\\Bin\\VisualizationServiceIDE210.bpl"="Visualization IDE Service Package"
"C:\\Users\\Public\\Documents\\Embarcadero\\Studio\\15.0\\Experts\\IDEFixPackStartup.bpl"="IDE Fix Pack Startup"
[UPDATE]
SOLUTION 2 (and cause):
After some work I discovered what caused this: The 'FMX controls' package was disabled (probably I disabled it since FMX is still infantile and I don't intend to use it right now). Re-enabling this package solved the problem.
Also removing "$(BDS)\\Bin\\delphiwin32210.bpl"="Delphi Win32 Platform" helped.
Labels:
access violation,
bpl,
bug,
delphi,
delphi xe7,
error,
ide,
rtl210
Delphi: Access violation in module 'bindcomp210.bpl'
I keep getting an "Access violation at address 1204F872 in module 'bindcomp210.bpl'. Read of address 1423C764" message during Delphi startup.
After poking around I have found the solution: delete the
"Project" and/or "SaveFileDirectory" keys in [HKEY_CURRENT_USER\Software\Embarcadero\BDS\15.0\Session]
Wednesday, February 25, 2015
How difficult is to write a solid software protection (licensing) scheme?
Extracting unique identification numbers from hardware and using them for software protection scheme
I had customers that are purchasing a single software license but using it on multiple computers so I wanted to prevent them from doing so. The solution I have found was to generate a license key that is unique for each computer.
How? Using a DLL called Hardware ID Extractor, I can read the unique hardware ID of each computer. The DLL is easy to use. To get the CPU ID for example you simply call: GetCPUID.
The first thing you will ask yourself is: does the ID persist after the user formats the PC and reinstalls Windows. The answer is YES (hooray!). It works because this neat DLL reads the ID that is written (permanently) in hardware, not from Windows registry key.
And yes, it is compatible with all programming languages.
Link: Hardware ID Extractor library
Supported IDs:
CPU ID (unique hardware ID)
CPU vendor
CPU current running speed
CPU theoretic speed (CPU rated speed)
I had customers that are purchasing a single software license but using it on multiple computers so I wanted to prevent them from doing so. The solution I have found was to generate a license key that is unique for each computer.
How? Using a DLL called Hardware ID Extractor, I can read the unique hardware ID of each computer. The DLL is easy to use. To get the CPU ID for example you simply call: GetCPUID.
The first thing you will ask yourself is: does the ID persist after the user formats the PC and reinstalls Windows. The answer is YES (hooray!). It works because this neat DLL reads the ID that is written (permanently) in hardware, not from Windows registry key.
And yes, it is compatible with all programming languages.
Link: Hardware ID Extractor library
Supported IDs:
Hard disk:
Hard drive ID (unique hardware serial number written in drive's IDE electronic chip)
Partition ID (volume serial number)
CPU:
CPU ID (unique hardware ID)
CPU vendor
CPU current running speed
CPU theoretic speed (CPU rated speed)
Physical memory:
Memory Load ( Total memory used in percentage (%) )
Total Physical ( Total physical memory in bytes )
Avail Physical ( Physical memory left in bytes )
Total PageFile ( Total page file in bytes )
Available PageFile( Page file left in bytes )
Total Virtual( Total virtual memory in bytes )
Available Virtual ( Virtual memory left in bytes )
Total Physical ( Total physical memory in bytes )
Avail Physical ( Physical memory left in bytes )
Total PageFile ( Total page file in bytes )
Available PageFile( Page file left in bytes )
Total Virtual( Total virtual memory in bytes )
Available Virtual ( Virtual memory left in bytes )
BIOS (NEW!):
BiosDate
BiosVersion
BiosProductID
BiosVideo
My old Fuji A610 is better than my new Fuji F550EXR
My old Fuji A610 is better than my new Fuji F550EXR. Take a look at these two photos takes at the same moment (a camera was in my right hand and the other camera in my left hand). Which one do you like better?
The first one is taken with my ancient FinePix A610, the second one with F550EXR.
____________________
Recommended download:
The first one is taken with my ancient FinePix A610, the second one with F550EXR.
____________________
Recommended download:
Labels:
digital camera,
f550exr,
FinePix A610,
fuji,
image,
photo,
quality,
resolution
Why handling a possible ISP/server time-out is critical?
Imagine that a possible client is downloading the application for the first time. During start up the application checks the internet to updates, news, resource files, etc. If the server fails to respond the application will hang. After 20 seconds (or way less) the customer will hit the Control+Alt+Del buttons, kill the application, uninstall it and download a similar one. Client lost. Bingo!
How to win a "who gets more traffic" contest (How to generate LOT of fake traffic on a web site)
Web Traffic Generator is a nice dirty tool that helps you to generate literary thousands of page views.
Lets say you participate in a contest "who's web page gets more visitors". All you have to do is to download this little devilish software, enter the URL of the page you want to send traffic to and press the 'Generate' button.
Now, minimize the program to system tray and go watch a movie or play a game. Few hours later check the visitor counter on that page. Your puny 35 visits suddenly rised to 35000+
Ups... a bit too much? You should have stopped earlier.
Here is the link to that little proggy.
--------
What else is it good for?
(Extras from program's description:)
With Web Traffic Simulator you can generating fake traffic by reloading the specified web page(s) repeatedly in an integrated web browser. It has many purposes, such as:
And if you wonder if the program will work with Google Analytics, the answer is: it will! Google Analytics will see the fake traffic as real traffic.
Lets say you participate in a contest "who's web page gets more visitors". All you have to do is to download this little devilish software, enter the URL of the page you want to send traffic to and press the 'Generate' button.
Now, minimize the program to system tray and go watch a movie or play a game. Few hours later check the visitor counter on that page. Your puny 35 visits suddenly rised to 35000+
Ups... a bit too much? You should have stopped earlier.
Here is the link to that little proggy.
--------
What else is it good for?
(Extras from program's description:)
With Web Traffic Simulator you can generating fake traffic by reloading the specified web page(s) repeatedly in an integrated web browser. It has many purposes, such as:
- increasing the counter of a web page in order to keep your web site/software in top of the others
- increasing the visits on your YouTube pages
- cheating on a "Top 10" popularity web site by increasing the number of votes
- keeping you connected (preventing a web site like Yahoo Mail from logging you off after a period of inactivity)
- reloading a page millions of times
- downloading an URL (web page, ZIP, EXE...) millions of times
- simulating clicks (for example on a link, banner, image, ad)
- storming a web server by generating massive downloads
- testing your web server under heavy load
- use your imagination and you will find countless other possibilities…
And if you wonder if the program will work with Google Analytics, the answer is: it will! Google Analytics will see the fake traffic as real traffic.
Delphi developers are now charged for bug fixes [via Update Subscription]
Starting this year Embarcadero has a new plan to milk money from its customers. With the new 'Update Subscription' plan, Embarcadero wants to charge 30% from original purchase price, each year, each customer that wants access to product bug fixes (that were not supposed to be there anyway).
Eve more, there is no warranty that the customer will actually get the bug fixes. Embarcadero clearly states that: "All fixes, updates and hotfixes are purely at Embarcadero's discretion."
Actually it states that twice. So, don't miss to read it :)
Link
Some stores are already selling upgrade subscriptions for 2000 pounds + VAT.
There is another way to get updates?
No. The FAQ clearly states it:
Can I obtain updates and hotfixes without a subscription?
An active update subscription is the only way to obtain updates and hotfixes for current and prior (up to 2 years) releases.
I see a big incoming wave of programming towards Lazarus.
Eve more, there is no warranty that the customer will actually get the bug fixes. Embarcadero clearly states that: "All fixes, updates and hotfixes are purely at Embarcadero's discretion."
Actually it states that twice. So, don't miss to read it :)
Ongoing Maintenance and Hot-Fixes for Previous Versions*
In the middle of a development cycle on an older IDE version? The RAD Studio team will now continue to release critical updates and hotfixes for up to two (2) years and three (3) major versions, improving your investment and enabling you to upgrade to the latest version on your schedule. All maintenance updates and hotfixes will only be available to users on an active Subscription and cannot be downloaded or purchased separately. Versions currently under Ongoing maintenance include XE7, XE6, and XE5 versions. Active subscribers will also have immediate access to beta hotfixes, providing the most timely access to critical fixes. All fixes, updates and hotfixes are purely at Embarcadero's discretion.Link
Some stores are already selling upgrade subscriptions for 2000 pounds + VAT.
There is another way to get updates?
No. The FAQ clearly states it:
Can I obtain updates and hotfixes without a subscription?
An active update subscription is the only way to obtain updates and hotfixes for current and prior (up to 2 years) releases.
I see a big incoming wave of programming towards Lazarus.
Labels:
bug,
bug fix,
delphi,
delphi xe7,
embarcadero,
ide,
price,
programming,
upgrade
Subscribe to:
Posts (Atom)