Noutați

GraphQL, workflow engine, multitenancy and more: what you will do with Delphi in 2021

Here at TMS, we are working on so much new exciting frameworks and features that I decided to share with you what we expect to bring to you in 2021! Photo by Rhett Wesley on Unsplash First, a disclaimer: this is not an official commitment. Some of the things listed here might be delayed or not be released at all. But of course, that’s not our intention, since we are listing it here. We want to (and probably will) release all of this in 2021. But, since unexpected things might happen, we can never guarantee what will happen in future. One second thing: thislist only covers what is coming around TMS Business line of products. There is much more to come from TMS in 2021! I was going to title this post as “TMS Business Roadmap for 2021”. But I thought that the current title brings more attention and curiosity. And it looks like it worked, thanks for coming! ?? Ok, jokes aside, another reason is that we still don’t know if all of the libraries, features and technologies listed here will be part of the TMS Business bundle, and the original title could be misleading. But regardless, everything listed here will for sure be smoothly integrated with TMS Business – either using ORM (TMS Aurelius) or REST/JSON framework (TMS XData), or any other core product, what is for sure is that everything listed here makes up a huge ecosystem around TMS Business technologies. An exciting year is coming ahead! So, without further ado, this is what we expect to bring to Delphi world this year, with TMS Business. GraphQL TMS is bringing GraphQL to Delphi! We have it already in a beta state, the core is complete, all is going fine. We still need to document everything, and add a few more features here and there, but it’s in a very advanced stage. This teaser video shows GraphQL server in action, written in Delphi! The frontend is GraphQL Playground JS framework, but still being served via a Delphi server. The relevant parts of the code used to build the server in the video are the following. First, the GraphQL schema is built: SchemaDocument := TGraphQLDocumentParser.ParseSchema( ‘type Query { hello(name: String!): String }’); Schema := TGraphQLSchemaBuilder.Build(SchemaDocument); Schema.SetResolver(‘Query’, ‘hello’, function(Args: TFieldResolverArgs): TValue begin Result := ‘Hello, ‘ + Args.GetArgument(‘name’).AsString; end ); Then, the endpoints for the GraphQL API and the GraphQL Playground are created: ADispatcher.AddModule( TGraphQLServerModule.Create(‘http://+:2001/tms/graphql’, FSchema)); ADispatcher.AddModule( TGraphQLPlaygroundModule.Create(‘http://+:2001/tms/playground’, ‘/tms/graphql’)); And that’s it for the “Hello, world” demo! TMS Auth A complete framework for adding authentication to your application, with user, roles and permissions management and providing features like login, registration, e-mail confirmation and more. Relying on Aurelius ORM and XData REST framework, with a few lines of code you will get all your database setup and have an authentication API server running, with lots of features. Well, it’s said one picture is worth a thousand words, so here is an example of the available API out of box: And these are screenshots of an existing app built with TMS Web Core which is already using TMS Auth for user registration and login: It will never been as easy to add user and permissions management and login system to your Delphi application and server! BPM Workflow A full workflow engine is […]

Read More

A Timeline of the Solarwinds Hack: What We’ve Learned

Published January 19, 2021 WRITTEN BY THE KIUWAN TEAMExperienced developers, cyber-security experts, ALM consultants, DevOps gurus and some other dangerous species. The SolarWinds hack was a major security breach that affected over 3,000 SolarWinds customers, including major corporations like Cisco, Intel, Cox Communications, and Belkin. Also impacted were multiple US states and government agencies including the US Department of State and the US Department of Homeland Security. The attack, dubbed SUNBURST, involved inserting malicious code into SolarWinds’s Orion Platform software. This code created a backdoor which later was used to access customers’ networks. Experts believe the attack was instigated by hackers based in Russia who may have managed to access sensitive government data. SUNBURST is one of the most sophisticated cyberattacks in history, with malware capable of evading detection. Here’s a timeline of the major events in the SUNBURST attack, followed by recommendations for organizations to protect against supply-chain threats. The Attack Timeline Threat Actor Accesses SolarWinds September 4, 2019: unknown attackers access SolarWinds. September 12, 2019: the hackers inject the test code and perform a trial run. The attackers use a sophisticated injection source to insert the SUNBURST malicious code into the company’s Orion Platform software. The attacker use multiple servers based in the US and mimick legitimate network traffic to circumvent the threat detection used by SolarWinds, its partners, and clients. February 20, 2020: Hackers compile and deploy the SUNBURST attack. This is an updated variant of the malicious code inserted into the Orion Platform released from February 20, 2020, and beyond. June 4, 2020: the perpetrators remove the SUNBURST malicious code from SolarWinds systems. FireEye Discovers SolarWinds Attacks December 8, 2020: FireEye, a cybersecurity threat and intelligence provider, reports that state-sponsored hackers broke into its network and made away with its Red Team penetration testing and assessment tools. The company expresses concern that the hackers would use the stolen tools to target other companies. December 11, 2020: while conducting breach investigations, FireEye discovers that SolarWinds had been attacked. They realize that this was a supply chain hack where the attackers had corrupted and weaponized SolarWinds’ Orion Platform updates. The malicious SUNBURST code had corrupted all the Orion releases made between March and June 2020. December 12, 2020: FireEye informs SolarWinds that the Orion Platform had been compromised through a cyberattack. The news prompts the National Security Council (NSC) to convene a White House meeting to discuss the security breach of several government agencies and enterprises. The News Becomes Public December 13, 2020: The Cybersecurity and Infrastructure Security Agency (CISA) issues an emergency directive requiring federal agencies to disable SolarWinds Orion connections because they pose a substantial security threat. SolarWinds issues a security advisory explaining the Orion Platform hack and the defensive measures clients could use to protect their systems. FireEye discloses that a hacker had used SolarWinds’ supply chain to compromise the networks of several global clients. Microsoft issues guidance explaining how the attack could affect its customers. The attack receives media coverage for the first time. Reuters reports that the hack on SolarWinds Orion may have originated in Russia and could have compromised the systems of several federal agencies. Public Response Begins December 15, 2020: SolarWinds releases a software fix. The media identifies victims that include the Department of Homeland Security (DHS), the State Department, and […]

Read More

Freebie Friday: Windows version info

Coincidence or not, but 26 years ago, in 1995, not only Delphi 1 was released by Borland but Microsoft also released Windows 95 that from that moment on skyrocketed in popularity and went for world domination as operating system.Who would have thought in 1995 that 26 years later, detecting on what Windows operating system your software is running would be more complex than ever?Over the years, Microsoft released not only new major versions almost every 2 to 3 years but also all sorts of editions like the Windows NT operating system for example. In 2015 Microsoft released Windows 10 and decided it would continue to release incremental updates all under the Windows 10 moniker but also here Microsoft went on to make it available in different editions (Education, Home, Pro, Enterprise) and at the same time continued to release major updates to its server operating system Windows 2016 Server and Windows 2019 Server. Needless to say that proper Windows operating system version detection became non-trivial over the years. Added to this complexity is the fact that Microsoft decided to create a mechanism to return Windows version information to applications through its APIs different from the real Windows version and this depending on the application manifest. The reason for this approach was obviously for ensuring old applications would continue to work thinking they were running on older Windows operating systems, but it doesn’t make things easier.  So, forget about all this history, forget about all this complexity as after all, it is Friday today and we are heading to the weekend to celebrate the 26th anniversary of Delphi. This #FreebieFriday brings you one routine GetOperatingSystem() that returns the Windows version and also the version number as string: procedure GetOperatingSystem(var AName: string; var AVersion: string); const SM_SERVERR2 = 89; VER_NT_WORKSTATION = $0000001; type pfnRtlGetVersion = function(var RTL_OSVERSIONINFOEXW): DWORD; stdcall; var osVerInfo: TOSVersionInfoEx; majorVer, minorVer, spmajorVer, spminorVer, buildVer, edition: Cardinal; ver: RTL_OSVERSIONINFOEXW; RtlGetVersion: pfnRtlGetVersion; procedure GetUnmanistedVersion(var majv,minv,buildv: cardinal); begin @RtlGetVersion := GetProcAddress(GetModuleHandle(‘ntdll.dll’), ‘RtlGetVersion’); if Assigned(RtlGetVersion) then begin ZeroMemory(@ver, SizeOf(ver)); ver.dwOSVersionInfoSize := SizeOf(ver); if RtlGetVersion(ver) = 0 then begin majv := ver.dwMajorVersion; minv := ver.dwMinorVersion; buildv := ver.dwBuildNumber; end; end; end; function GetWindows10Edition: string; begin Result := ‘Windows 10’; GetProductInfo(majorVer, minorVer, spmajorVer, spminorVer, edition); case edition and $FF of $62..$65: Result := ‘Windows 10 Home’; $79..$7A: Result := ‘Windows 10 Education’; $46,$04,$48,$1B,$54,$7D,$7E,$81,$82: Result := ‘Windows 10 Enterprise’; $30,$31,$A1,$A2: Result := ‘Windows 10 Pro’; end; end; begin AName := ‘Unknown’; AVersion := ‘0’; // set operating system type flag osVerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfoEx); if GetVersionEx(POSVersionInfo(@osVerInfo)^) then begin majorVer := osVerInfo.dwMajorVersion; minorVer := osVerInfo.dwMinorVersion; buildVer := osVerInfo.dwBuildNumber; AVersion := majorVer.ToString + ‘.’ + minorVer.ToString + ‘.’ + buildVer.ToString; case osVerInfo.dwPlatformId of VER_PLATFORM_WIN32_NT: // Windows NT/2000 begin if majorVer = 17763 then AName := ‘Windows Server 2019’ else AName := ‘Windows Server 2016’; end; end; end else if (majorVer = 6) and (minorVer = 3) then begin if osVerInfo.wProductType = VER_NT_WORKSTATION then AName := ‘Windows 8.1’ else AName := ‘Windows Server 2012R2’ end else if (majorVer = 6) and (minorVer = 4) then begin if osVerInfo.wProductType = VER_NT_WORKSTATION then begin AName := GetWindows10Edition; end else begin if osVerInfo.dwBuildNumber >= 17763 then AName := ‘Windows Server 2019’ else AName := ‘Windows Server 2016’ end; end else if (majorVer = 10) and (minorVer = 0) then begin if osVerInfo.wProductType = VER_NT_WORKSTATION […]

Read More

Planning / Scheduling in FMX

Intro The multi-device, true native app platform The FireMonkey® framework is the app development and runtime platform behind RAD Studio, Delphi and C++Builder. FireMonkey is designed for teams building multi-device, true native apps for Windows, OS X, Android and iOS, and getting them to app stores and enterprises fast. source: https://www.embarcadero.com/products/rad-studio/fm-application-platform FMX (FireMonkey) released in 2011 and shortly after we delivered a first set of components. Today, we want to show you the TTMSFNCPlanner component, a highly configurable planning/scheduling component. Features Below is a list of the most important features the TTMSNCPlanner has to offer. The features are not limited to this list, but this will give you a quick insight on what we offer to be able to view and edit appointments / tasks in FireMonkey. Built-in and customizable inplace and dialog editing Moveable and sizeable items with HTML formatted text and hyperlink detection High performance virtual mode Various display modes: day, month, day period, half day period, multi day, multi month, multi day resource, multi resource day and custom displays Multiple events for all kinds of interactions such as editing, item inserting, updating, moving and sizing Multiple events for custom drawing and customization of default drawing Item hints and time indication helpers Optional overlapping items Touch scrolling and selection Optimized for mobile devices Recurrency support Databinding support via the TTMSFNCPlannerDatabaseAdapter Separate ToolBar Popup PDF Export capabilities Learn More! Want to learn more about what the TTMSFNCPlanner can do? Here is a video that highlights some of the above features through a demo application. Download & Explore! The TTMSFNCPlanner component is part of the TMS FNC UI Pack, which, on top of FMX, also offers the ability to write your code once and target other frameworks (VCL, LCL and WEB). You can download a full featured trial version of the TMS FNC UI Pack and start exploring the capabilities of the TTMSFNCPlanner component. Coming up The TTMSFNCPlanner is the second of a series of components that is covered to empower your FMX (FireMonkey) developments. We started the series with a general overview of the most important components that we have to offer, followed by the TTMSFNCRichEditor. Next up will be the TTMSFNCTreeView component, a highly configurable, high performance tree view with virtual and collection-based modes able to deal with millions of nodes so stay tuned for more!.

Read More

TMS FNC Maps 1.3 released!

What’s new? The first TMS FNC Maps update of 2021 includes 2 often requested features: programmatically toggle StreetView mode in TTMSFNCGoogleMaps and the ability to avoid toll roads with TTMSFNCDirections. Toggle StreetView mode in TTMSFNCGoogleMaps With just one line of code it is now possible to switch to StreetView mode on the map’s current center position. This feature is available exclusively for the TTMSFNCGoolgeMaps component.   TMSFNCGoogleMaps1.Options.StreetView.Enabled := not TMSFNCGoogleMaps1.Options.StreetView.Enabled; Avoid toll roads with TTMSFNCDirections Adjust your routing with just a single parameter to avoid toll roads. This feature is available for the following directions services: Google, Here, Bing, Azure and MapBox. Avoid toll roads:     TMSFNCDirections1.GetDirections(StartCoordinate, EndCoordinate, nil, ”, nil, False, tmDriving, nil, False, ”, mlmDefault, True); Include toll roads (default):     TMSFNCDirections1.GetDirections(StartCoordinate, EndCoordinate, nil, ”, nil, False, tmDriving, nil, False, ”, mlmDefault, False); What’s next? Although we are already working on a future update, it’s a little early to reveal what we have planned for now.I hope you enjoy the new features and I’m looking forward to share more exciting new additions to TMS FNC Maps throughout the new year! 

Read More

SVG quality improvements

Intro A while back, we introduced SVG in TMS VCL UI Pack. The first version focused on smaller icon sets. We have meanwhile tweaked and improved the engine and although there is still a lot of work to be done, the next update of TMS VCL UI Pack will offer 2 quality of life improvements: Gradients (GDI+) Rendering quality (GDI+) Disabled drawing (TVirtualImageList) Gradients Gradients were left out of the first version because of shortcomings on other platforms, as we also have SVG rendering engine support for FNC targeting not only VCL, but also FMX, LCL and WEB. The underlying native graphics can be quite complex and have various differences between frameworks. Therefore we decided to take the initial step of offering linear & radial gradients support in VCL only using GDI+. Please note that we are still targeting smaller less complex icons, but we’ll add improvements over time. Rendering quality The initial version did not use the full quality that GDI+ had to offer. When working with SVG, we focused on adding features instead of quality and therefore the rendering quality was not optimal. We have now changed this so it has a smoother appearance independant of the size. v1.0                       v1.1        Disabled drawing In v1.0 we also added support for TVirtualImageList, which converts SVG files into bitmaps on the correct size without losing quality. You can add a TAdvSVGImageCollection attached to a TVirtualImageList and specify only one SVG suitable for any size you want. The TVirtualImageList also has the ability of automatically adding disabled state versions of the converted bitmaps. Initially, this was not working due to the way the bitmap alpha channel was configured and the SVG quality drawing on the bitmap before returning it to the TVirtualImageList. In this update, we have added correct alpha channel to the bitmap conversion routine. What’s next? The above applies to VCL only and will be part of the next update of TMS VCL UI Pack. The engine is a port from FNC, support for other operating systems (macOS, iOS, Android) is still ongoing. As soon as things get shape, we’ll post an update.

Read More

Webinar: A Cross-Platform Development Deep Dive with the TMS FNC Suite of Components

We look forward to connect with you at the upcoming webinar “A Cross-Platform Development Deep Dive with the TMS FNC Suite of Components” organized by Embarcadero.   Webinar content: Starting a new project? Are you going to use FireMonkey or VCL? What about targeting the Web with TMS WEB Core? Luckily the Framework Neutral Components (FNC) from TMS Software works with all those frameworks and more.  Join this live deep-dive session with Dr. Holger Flick, Bruno Fierens and Pieter Scheldeman of TMS Software where the content will focus on your questions with live demos, real-time debugging, and a level of interaction like never before. You won’t want to wait for the replay, mark your calendar today! The TMS FNC Suite gives developers a single UI controls set, a single learning-curve and a single license to have the freedom of choice to develop Delphi or C++Builder, using VCL for Windows, FireMonkey cross-platform applications for Windows, macOS, Android, iOS, Web applications with TMS WEB Core, or even Lazarus LCL applications for Windows, macOS, or Linux. There is so much to tell about TMS FNC components so we kindly invite you to visit our landing page, where more information is provided, including online demos, video tutorials and more. Extras videos can be found on the following page: FNC videos Register today!

Read More

Gambling with Security: Mitigating Threats to Online and Mobile Gaming

Published February 3, 2020 WRITTEN BY ED TITTEL. Ed Tittel is a long-time IT industry writer and consultant who specializes in matters of networking, security, and Web technologies. For a copy of his resume, a list of publications, his personal blog, and more, please visit www.edtittel.com or follow @EdTittel In this time of the COVID-19 pandemic, we’re all spending more time on our PCs and smartphones. It might seem odd, but The Business Research Company’s Global Online Gambling Market report asserts that online gambling has skyrocketed in 2020. This is because home-bound punters, blocked from visiting brick-and-mortar gambling dens, are turning to online gambling destinations in droves. This makes protecting games of chance — and their players — against online gambling security threats more important than ever, especially where mobile gambling security is concerned. Online gambling is in hackers’ crosshairs In June 2020, Security Boulevard published a discussion of cybersecurity for the online casino and gambling industry. It exposes a number of clear and present dangers that face online gambling developers and involve more than hack attacks (though those are also quite prevalent). Access to gambling platforms themselves can come under direct attack, but smart attackers also recognize that scamming gamblers is another avenue of more indirect attack. By stealing customer information, attackers can ultimately access their money at far less risk to themselves than a “fair game” of chance. The revenue streams involved can also be quite substantial. Grand View Research estimates the size of the global online gambling industry as $53.7 billion in 2019, and a compound annual growth rate of 11.5% is projected from 2020 to 2027, for a global market size of $127.3 billion by that year. Europe dominated the 2019 market with $22 billion in receipts, but the US appears headed for the top in the short term, with Grand View Research projecting its market size at nearly $103 billion by 2025. The Asian market is also coming on strong, as more online venues that serve its populations keep appearing. Cryptocurrency payments are becoming the norm in gambling apps and applications, as online gambling and casino operators switch to Bitcoin and its various counterparts. From a security standpoint, cryptocurrency is attractive because gamblers need not enter their personal data during deposits, and blockchain systems are nearly hack-proof. In addition, cryptocurrency transaction fees are much smaller (sometimes zero) than for a traditional payment method such as credit or debit cards, bank account access, and so forth. Deposits and withdrawals are faster, too, while maintaining player anonymity. More players means more attack vectors Desktop PCs, with their larger monitors and display areas, still dominate online gambling by user count. But as smartphone size and resolution have increased over the past decade, momentum is shifting toward mobile users. Mobile online gambling applications are looking for traction, with more variety in deposit options for playing funds, loyalty points, and interactive play with others around the globe. Mobile technology continues to exert a massive influence on online gambling. Trends such as social gambling and a proliferation of mobile gambling applications signal oncoming changes in gambling habits and practices. Given that somewhere between a third and half of the global population has ready access to a smartphone, casinos and online gambling organizations are investing ever more heavily in gaming applications, especially […]

Read More

#WEBWONDERS : The world of web audio

A new year and yet another new theme for blog articles. After #GRIDGOODIES and #FREEBIEFRIDAY, this is a new theme we introduce with #WEBWONDERS. In these blogs, we explore the wonderful world of the browser operating system and uncover hidden or not so hidden treasures, tips and tricks. So, let’s kick of this new series with exploring the world of web audio. Modern browsers make the web audio API available. The goals of the web audio API are mixing sound, generating sound and applying effects to sound from web applications.  TMS WEB Core includes the Pascal import unit for using the web audio API from our beloved language. This unit is in the RTL subfolder that contains all units for several different browser APIs. So, in this blog, we let you explore the web audio API with a small code snippet that shows how you can create your own audio wave and have it played through the speakers of the device. The most straightforward is to create a sound through a sine wave with variable frequency. While technically, the web audio API comes with oscillator objects that could generate this, in this sample, we will use Pascal code for creating the buffer that will hold the sine wave. It is this buffer of floats (TJSFloat32Array) that will be played. The only part of the code where we need to use JavaScript is for the creation of the audio context. This is because there is a subtle difference between the creation on Chromium based browsers and webkit based browsers. So, basically the JavaScript code tries the webkit based creation if the Chromium based creation failed. So, the Pascal function to do this is: procedure playfreq(freq, volume: double); var   ctx: TJSAudioContext;   buf: TJSAudioBuffer;   wave: TJSFloat32Array;   i,len: integer;   src: TJSAudioBufferSourceNode;   sampleFreq: double; begin   // connect to the browser window Audio Context.    asm     ctx = new (window.AudioContext || window.webkitAudioContext)();   end;   // get the sample frequency the audio context can use    len := round(ctx.sampleRate);   // create a new buffer of floating point values   wave := TJSFloat32Array.new(len);   // determine the sine wave frequency in relation to the audio context sample frequency   sampleFreq := ctx.sampleRate / freq;   // create a buffer on the audio context   buf := ctx.createBuffer(1, len, ctx.sampleRate);   wave := buf.getChannelData(0);   // fill the float array with the sine wave data taking frequency & volume in account   for i := 0 to len – 1 do     wave[i] := (volume /100) * sin(i/(samplefreq/(2*PI)));   // create a buffer source object for the audio contect   src := ctx.createBufferSource();   // assign the buffer holding the wave to the audio buffer source object   src.buffer := buf;   // connect the audio buffer source object to the audio context output   src.connect(ctx.destination);   // play the sample from position 0   src.start(0.0); end; With this Pascal routine, it becomes simple to put two TWebTrackBar components on the form that allow to select the frequency and the volume and add a button to play the sound. With a frequency selectable between 20Hz en 20000Hz and volume between 0% and 100%, you have a little web application to test your ears frequency range or speaker […]

Read More

Release Announcement — January 28, 2021

Published January 28, 2021 WRITTEN BY THE KIUWAN TEAMExperienced developers, cyber-security experts, ALM consultants, DevOps gurus and some other dangerous species. The Kiuwan team is excited to announce the availability of our latest release, with new features for both cloud and on premise customers. Kiuwan is a fast, reliable and scalable Application Security and Enterprise Software Analytics solution. Kiuwan includes several tools for management and development that identify and guide remediation of security vulnerabilities in source code. These tools support the implementation of critical shift-left strategies that many companies desire today. Fluent in major programming languages and frameworks, Kiuwan allows extensions and customization for customer-specific needs and integrates with leading DevOps IDEs and tools, in an on-premise or SaaS model. Support for custom components in Kiuwan Insights As requested by our customers, Kiuwan Insights now supports custom artifacts, allowing the creation and maintenance of custom artifacts along with their associated licenses and vulnerabilities. This allows Kiuwan users to identify the use of custom artifacts stored in their own repositories and to track their use in their development, and signal during Insights analysis vulnerabilities added to the application, license issues, and obsolescence caused by the use of these custom components. Custom components, licenses, and vulnerabilities can be added and modified both through the UI and the REST API. With this new functionality, customers will be able to have a complete view of the components used either public or private, avoiding the need to track custom components out of Kiuwan. Engine tuning pack The Kiuwan engine is able to perform source code analysis on a wide variety of programming languages. It parses source code into memory structures, and these structures are checked with rules to identify quality and security issues. Each customer has their own way of using their languages and libraries, so we rely on continual feedback from our customers in order to continuously improve the quality and performance of our analysis to benefit customers. This engine tuning pack incorporates new cases and includes widely requested small enhancements. Add new detection rules or improve existing rules to find more security vulnerabilities in code Updates to reduce some of the false positives returned by the product Performance improvements Revisions to our security and protection rules for more accurate results Improvements to our discovery elements for Oracle, HTML5, and Javascript allowing for greater security detection Language parsing improvements for more language coverage Update language levels Additional bug fixes and improvements Documentation for this release is available in the product documentation repository. For a full list of additional bug fixes and improvements, refer to our Change Log. How to get the new release The new release is available immediately to our Cloud customers. Access the new version via the customer portal. Customers using the On-Premises version of Kiuwan should reach out to their account representative for an updated license key. Would you like to know more Kiuwan solutions? Get in touch with our Kiuwan team! We love to talk about security.

Read More