Archive for the ‘Software Development’ Category
Posted by jpluimers on 2016/12/08
SQL server % (modulo, not mod) operator doesn’t like floats (with reason).
You should get rid of the floats as they will give inaccurate results.
As a workaround, cast either through an integer or through a decimal: sql server modulo float – Google Search
CAST(CAST(TheInaccurateFloatValue AS decimal(38,19)) % ModuloValue AS float)
The decimal(38,19) is the maximum non-float precision you get.
( cast(dividend as integer) % divisor ) + ( dividend - cast(dividend as integer))
–jeroen
Posted in Algorithms, Database Development, Development, Floating point handling, Software Development, SQL, SQL Server, SQL Server 2008, SQL Server 2008 R2, SQL Server 2012, SQL Server 2014 | Leave a Comment »
Posted by jpluimers on 2016/12/08
How to: Migrate your SVN repository to Git – Nathan Hoad:
You’ve probably heard a lot about how awesome Git is from all the _cool_ people who are already using it. If you want to be part of the trendy crowd but feel tied down by your old Subversion repositories have no fear; Migrating all of those SVN repos to Git could not be easier **and** you get to keep the entire commit history of your project.
This is much better than what I did with FastMM:
Synced clone of FastMM SVN repository at http://sourceforge.net/projects/fastmm/ normally obtained through`svn checkout http://svn.code.sf.net/p/fastmm/code/ fastmm-code` but cloned by `git svn clone http://svn.code.sf.net/p/fastmm/code/ FastMM`
Source: jeroenp / FastMM — Bitbucket
Some more links for if I get stuck:
–jeroen
via: Stefan Glienke; For all the people migrating their svn repository to git – this guide really…
Posted in Development, DVCS - Distributed Version Control, git, Software Development, Source Code Management, Subversion/SVN | Leave a Comment »
Posted by jpluimers on 2016/12/07
I’ve been very busy with broken hardware and operating systems lately so today was the first chance to post about recent Version 1.8.1 History of Continua CI. During October and November the below builds got released.
For almost all of them, you will need to update your agents after installing the build.
v1.8.1.185, November 23rd, 2016
Changes
- Update: Added preliminary support for Visual Studio 2017 RC to MSBuild, VSTest, MSTest and Visual Studio actions
- Fix: Issue where ExecuteRepositoryServerSideScripts app setting was not being read preventing running of Git post commit scripts.
v1.8.1.178, November 22nd, 2016
Changes
- Fix: “changeset.style” file was missing from installer causing error when getting new changesets for new Mercurial repositories.
- Fix: Issue where Shared Resource Locks at the configuration level would be released before the end of the build, if Shared Resource Locks existed at the stage level and were released.
- Fix: Build version is now truncated to fit into the maximum field length of 128 characters.
- Update: Email publisher now supports wider range of secure sockets options. This also fixes an issue where you it would always try to use TLS if it was supported by the server.
v1.8.1.167, November 15th, 2016
Changes
- Fix: Issue where enabling a configuration would cause all time triggers in other configurations to stop working.
- Update: Any updates to loggers in the Continua CI Server service configuration file, such as enabling debug logging, are no longer reset when running the installer.
v1.8.1.165, November 14th, 2016
Changes
- Fix: Repository error status was being reset to “Ready” status when getting new changesets.
- Fix: Associated triggers are now updated to point to the new repository when repository edit requires it to be recreated.
- Fix: Concurrency issue with build event handlers causing incorrect build data to be used.
- Update: Bundled Mercurial used for repository cache has been upgraded to version 3.9.2
- Update: Improvements to speed when exporting files from agent repository cache to agent workspace.
- Update: Agent installer has been updated to allow it to be run silently and take additional command line parameters. The relevant parameters are:
- /usage (optional) – shows usage information.
- /silent (optional) – runs the setup in silent mode. Note that progress bars will still be displayed.
- /verysilent (optional) – runs the setup in completely silent mode. No UI is displayed.
- /log=”filename” (optional) – creates a log file with the specified filename.
- /dir=”x:\dirname” (optional) – overrides the default installation directory name.
- /serviceUser (required in silent modes) – the domain and user name of the service user e.g. domain\username.
- /servicePassword (required in silent modes) – the password of the service user.
- /serverHostName (optional) – the host name of the ContinuaCI service. Defaults to “localhost” if not provided.
- /serverPort (optional) – the port of the ContinuaCI service. Defaults to 9000 if not provided.
- /agentPort (optional) – a port for the agent being installed. Defaults to 9002 if not provided.
- /workspacePath (optional) – the local path to the agent workspace folder. Defaults to “C:\CI_AWS” if not provided.
- Update: Now showing the finished time for the last finished build rather than Never for the last queued/running build on List View dashboard.
- Update: JUnit parser now includes test case times.
- Update: Diagnostics report is now generated in the background to prevent timeouts.
- Update: Further improvements to build queue performance.
v1.8.1.121, October 11th, 2016
Changes
- Fix: Regression bug in v1.8.1.118 where Path Exists property collector plugin would always return false.
–jeroen
Posted in Continua CI, Continuous Integration, Development, Power User, Software Development | Leave a Comment »
Posted by jpluimers on 2016/12/07
Formy snippet archive (thanks Walter Prins for answering and Oliver Funcke for asking and elaborating on the answer):
in the case of error, you can get what would’ve normally been in the contentstream from the ExceptionObj.ErrorMessage property. So you can use something like the following if you want to get the content response regardless of http response code (untested):
var
FResponseStream: TStringStream;
FRequestURL, Content : String;
begin
//.... etc etc
try
FIdHTTP.Get(FRequestURL, FResponseStream);
Content := FResponseStream.DataString;
except
on E:EIdHTTPProtocolException do
Content := E.ErrorMessage;
end;
// At this point, "Content" contains the response body, both for
// successful (200) as well as other response codes.
//.... etc etc
end;
….
You can even do it simpler:
Response := IdHTTP.Get('http://host/path', [404]);
Source: delphi – Indy and REST – Can I prevent exceptions? – Stack Overflow
–jeroen
via:
Posted in Delphi, Delphi 10 Seattle, Delphi 2007, Delphi 2009, Delphi 2010, Delphi XE, Delphi XE2, Delphi XE3, Delphi XE4, Delphi XE5, Delphi XE6, Delphi XE7, Delphi XE8, Development, Software Development | 2 Comments »
Posted by jpluimers on 2016/12/06
A while ago, wrote these very nice G+ posts
The English text is about a year older, but the German text Google Translates pretty well.
The most important points in ot for me were these:
- Consensus systems are distribute systems, so take at least the P (partitioned) from the CAP theorem.
- In addidtion, Consensus systems also chose the C (consistent) from the CAP theorem.
- Since in CAP you can only pick 2 out of 3, the A (available) isn’t guaranteed on Consensus systems.
- Only three systems get this right: Zookeeper, etcd, Consul. All others shred data eventually.
- Leader election algorithms Paxos and Raft.
- Cluster a.k.a. Ensemble provide a consistent view of the data no matter to what member of the Cluster/Ensemble you talk to
- The (set of) connection(s) from a client to the Cluster/Ensemble is called session
- Cluster/Ensemble operations are on a tree with nodes that can have atomic operations on them
- Nodes can be persistent or ephemeral (temporal)
- All nodes can have data (keep it small enough ~4kilobyte max)
- Directories in the tree are usually persistent; leaf nodes often ephemeral
- Useful operations: load balancing, queueing, data availability
- There are transactions so you can make atomic operations larger. Don’t make them too long.
- Consistency takes time; expect at max ~1000s of write operations per second
- Not being available is a feature (it means it still is P and C, just not reachable right now)
- Clients must cope with the Cluster/Ensemble being temporarily being read-only or unavailable
- Applications should always re-create any persistent nodes they create (just in case – during non availability – from one consistent phase to another consistent phase) a persistent node is no more.
Some more keywords and links from the article:
–jeroen
Posted in Development, Distributed Computing, Software Development | 2 Comments »
Posted by jpluimers on 2016/12/06
Scripts are soooo coool.
I remember doing similar things in Windows, but couldn’t find the batch files any more. There is an example (thanks Rob W for answering, thanks Suchipi for asking) that works in Mac/Linux:
ImageMagick (Windows/Mac/Linux) contains a command-line tool called convert that can be used for many things, including packing multiple images in one icon:
convert 16.png 32.png 48.png 128.png 256.png -colors 256 icon.ico
The previous command takes 5 PNG images, and combines them into a single .ico file.
Unlike the other answers, this method can easily be used in batch scripts to automatically generate several icon files. In one of my projects, I have a single vector image (SVG), and use Inkscape to generate png’s of various sizes, followed by convert to create a icon container. This is a reduced example (in a bash script):
#!/bin/bash
for size in 16 32 48 128 256; do
inkscape -z -e $size.png -w $size -h $size icon.svg >/dev/null 2>/dev/null
done
convert 16.png 32.png 48.png 128.png 256.png -colors 256 icon.ico
–jeroen
via:
Posted in bash, Development, Scripting, Software Development | Leave a Comment »
Posted by jpluimers on 2016/12/01
In a quest to perform SFTP in Delphi next to FTP, I first researched what I was up against. A tiny voice in the back of my head said “SFTP is totally unlike FTP” and it was right: SFTP means SSH File Transfer Protocol, not Simple File Transfer Protocol nor FTP over SSH nor FTP over SSL aka FTPS – the latter is supported by Indy but the former isn’t.
I decided against SecureBlackBox (providing SFTPBlackbox) and IPWorks (SSH) as I tried both a while ago for S/MIME support and was disappointed about both the lack of features and documentation; in the end I went for wrapping OpenSSL for the “encrypt-then-sign” process and Indy for the SSMTP part. The merger of the SecureBlackBox and IPWorks made me even less happy.
The Chilkat alternative for SFTP isn’t too compelling either: ActiveX or DLL black-box without a lot of insight on how many people do use it.
So when I had to do SFTP and knew there are no free or open source SFTP components for Delphi available I opted for thinking outside the Delphi realm.
My basic idea was to embed either of these:
- Filezilla (as Filezilla on Windows is waaaay faster than WinSCP)
- WinSCP (a Windows SCP and SFTP client written in C++ Builder)
- PSFTP (the Putty SFTP client)
FileZilla
FileZilla internally uses FzSFtp.exe which is based on PSFTP code (but with some buffers making it faster than PSFTP or WinSCP).
According to the author, neither FzSFtp.exe nor FileZilla can be automated:
FileZilla cannot make any automated transfers at all. Neither FileZilla.exe nor fzsftp.exe (is for SFTP) can be used for any batch processing.
Source: run filezilla tzsftp from batch command line – FileZilla Forums
The WinSCP author commented in a similar fashion:
FileZilla does not have any command line arguments (nor any other way) that allow automatic transfer.
Source: windows – Command line option to download file in FileZilla – Stack Overflow
In addition, FileZilla is always a GUI program, so running it as a console app (which I’d prefer) would be impossible.
WinSCP
WinSCP can be automated in two ways:
- The WinSCP.exe command-line allows for a
/console and /script switch enabling scripting mode that you can use for Scripting and Task Automation :: WinSCP
- A wrapper around WinSCP.exe is availble as WinSCP .NET Assembly and COM Library :: WinSCP which requires both .NET to be installed and (from Delphi) calling through COM which I don’t like much
Since I already had good Delphi wrapping code round starting/waiting-for running processes, I’d opt for using WinSCP.com scripting.
There used to be wrapping code around: Use with Delphi :: Support Forum :: WinSCP
PSFTP
These Using PSFTP to transfer files securely links should get me going:
Chapter 6: Using PSFTP to transfer files securely
Practical examples:
Source locations
For my own reference, the open source locations:
Some semi-random Delphi SSL related postss
During the search above I found the below links that will be useful to me one day:
–jeroen
Posted in .NET, Delphi, Development, Software Development, SSH, TCP | 5 Comments »
Posted by jpluimers on 2016/12/01
Posted in Delphi, Delphi 10 Seattle, Delphi 2005, Delphi 2006, Delphi 2007, Delphi 2009, Delphi 2010, Delphi 7, Delphi XE, Delphi XE2, Delphi XE3, Delphi XE4, Delphi XE5, Delphi XE6, Delphi XE7, Delphi XE8, Development, Software Development, Uncategorized | Leave a Comment »