Noutați

Top Tips For Building Javascript Accordion And Step Swipers

Sencha Ext JS allows you to accelerate web application development with an enterprise-ready framework, components and tools built to work together seamlessly. You can build Ext JS applications using drag-and-drop features and spend less time on manual coding. The IDE and Code Editor Plugins integrate Sencha frameworks into your enterprise workflow, enabling code completion, inspection, generation, navigation, refactoring and more. How do I Implement Basic Accordion Swiper in Ext JS? The Basic Accordion Swiper component provides a container used by the listswiper plugin to display information and controls when an item is swiped. How do I implement the Undoable Step Swiper? The Undoable Step Swiper allows for a hierarchy of options in a list that provide a successive series of options that can support or nullify the previous actions. How do I implement the Undoable Accordion Swiper? The Undoable Accordion Swiper provides actions that are presented as a sub-menu of options, each of which can be acted on by a subsequent cancel, delete or more general revert action. How do I implement the Basic Step Swiper? The Basic Step Swiper demonstrates different actionable options to choose from as swiping takes place. Ext JS includes a flexible layout manager to help organize the display of data and content across multiple browsers, devices, and screen sizes. It helps you to control the display of components, even for the most complex user interfaces. Ext JS also provides a responsive config system that allows application components to adapt to specific device orientation (landscape or portrait) or available browser window size. You can use all of these features with the accordion and step swipers. Ready to get started with Sencha Ext JS? It’s as easy as 1 2 3! Sencha Ext JS is the most Comprehensive JavaScript Framework and UI Component Library. Try it now!

Read More

Beyond SolarWinds: Guarding Against the Rising Threat of Supply Chain Attacks

Published March 25, 2021 WRITTEN BY MICHAEL SOLOMON Michael G. Solomon, PhD, CISSP, PMP, CISM, PenTest+, is a security, privacy, blockchain, and data science author, consultant, educator and speaker who specializes in leading organizations toward achieving and maintaining compliant and secure IT environments. The successful attack in 2020 on the SolarWinds Orion network management software showed that indirect, or third-party, attacks on organizations of all sizes are feasible. Where direct attacks used to be the most common attack vector, especially when attempting to target large organizations, attacking smaller suppliers is becoming a more attractive approach. Any attack that attempts to compromise an organization by directly attacking one of its suppliers of hardware or software is called a supply chain attack. The SolarWinds attack was not the first attack on the IT supply chain, and it looks like the number of similar attacks is increasing. As more organizations become more secure, attackers are looking for creative ways to sneak their attacks in under the radar. Let’s look at the risk of IT supply chain attacks and what you can do to mitigate them. Understanding supply chain attacks Supply chain attacks were up 430% in 2020 over the previous year. The dramatic increase in supply chain attacks means that organizations must mobilize immediately to counter this emerging threat. Cybersecurity specialists are getting better all the time. Cybersecurity education and training is becoming more commonplace and in-depth, along with the development of increasingly sophisticated tools and techniques. Unfortunately, cybercriminals are getting better as well. Over the last decade, the increased level of security awareness and control sophistication has driven cybercriminals to search for softer targets. Security defense maturity is often consistent with size. Larger organizations generally have larger security budgets and can end up maintaining more secure IT environments. Saying that larger means more secure isn’t always accurate; there are lots of insecure large organizations and many very secure smaller ones. On average, though, cybercriminals know that smaller organizations are more likely to lack sophisticated security controls. Simply put, smaller organizations often do not have the budget for the best security. Consequently, many cybercriminals are recognizing a unique opportunity to indirectly attack large organizations by focusing their efforts on the smaller — hopefully softer — suppliers that those large organizations use. The basic approach in a supply chain attack is for the cybercriminals to add malicious code to software products during the development or release process. The malicious code becomes part of a software product that then gets sold to — and installed in — numerous unsuspecting customers’ environments. While the direct target of the attack is the supplier’s code, the eventual target is the customer’s environment into which the tainted code gets installed. The main reason an attack like this works is due to its novelty and the presence of general trust between supplies and customers. Few customers of SolarWinds products probably worried about the quality of the SolarWinds product line before the news of the Orion attack. The general perception is that a trusted supplier takes the necessary precautions to ensure their software is clean. Very few existing security tools or procedures validate the security of purchased products. That’s the problem, and the opportunity for cybercriminals. It has long been known that tampering with a product during delivery is possible, and controls […]

Read More

TMS Aurelius 5 is here! Come see it Live!

TMS Aurelius 5 has been released with lots of new features! Photo by Tony Hand on Unsplash As we have antecipated in a previous blog post, lots of new features were expected for the next major release of TMS Aurelius, our state-of-art ORM framework for Delphi. And indeed, Aurelius 5 was released last week! The what’s new section in the documentation provides you can see the full list of new features, improvements and bug fixes. Here are the major new features, and at the end of this article we have a special invitation for you! Data Validation You can now add data validation via attributes directly to your entity classes. [Entity, Automapping] [Filter(‘Multitenant’)] TTrack = class strict private FId: Integer; [Required] FName: string; FGenre: TGenre; FComposer: Nullable; [Range(0, 3600000)] FMilliseconds: Nullable; FTenantId: Nullable; function GetDuration: string; public All fields will be proper validated according to the validation attributes applied. With a few lines you will guarantee that the entity will be persisted with a valid state. The above class is part of the Music Library demo provided with TMS Aurelius (trial and registered versions). Note how the track name is required, and the duration must not be greater than one hour (3600000 milliseconds). If you try to save something with wrong data, Aurelius will automatically prevent the user from doing so and raise an exception: Global filters and multitenancy Aurelius now includes global filter mechanism. Users will be able to define filters globally, including parameters, and choose which entities will have it applied. The Music Library demo was made multitenant with a few lines of code. The entities were marked with a new global filter definition: [Entity, Automapping] [FilterDef(‘Multitenant’, ‘{TenantId} = :TenantId’)] [FilterDefParam(‘Multitenant’, ‘TenantId’, TypeInfo(string))] [Filter(‘Multitenant’)] TGenre = class strict private FId: Integer; [Required] FName: string; FTenantId: Nullable; And, from that, Aurelius allows you to enforce values in filter (to prevent a wrong tenant id to be saved) and also enable filters to retrieve data: Manager.EnableFilter(‘Multitenant’) .SetParam(‘tenantId’, CurrentTenant); That was it! Music Library demo is now multitenant, with a few UI changes to allow the end-user to choose which tenant to use, data is now fully separated between tenants. Attribute-based event handlers Events are an important feature of any framework, and with Aurelius is not different. It provides several events you can use to add custom business logic. You can add specific code just before an entity is being saved, after an entity is deleted, when an SQL is being executed, among others. But now you can add event handlers directly in your classes, using attributes. You can use it for logging for example, or even to add custom, more complex data validation. The Music Library demo also shows how to do it: TGenre = class {…} public [OnValidate] function Validate: IValidationResult; {…} function TGenre.Validate: IValidationResult; begin if SameText(Name, ‘Experimental’) then Result := TValidationResult.Failed(‘Experimental music is not allowed’) else Result := TValidationResult.Success; end; Such validation will be applied, and Experimental genres will not be allowed in our Music Library app! Come See it Live! There are more new features, actually: TObjectManager.AddOwnership method, Aurelius Dataset can now refresh fields directly from objects and automatically destroy the source list, etc. But, what about if you come and see the new features live, in action, with a more deep explanation? The free webinar […]

Read More

Webinar: TMS WEB Core with HTML/Bootstrap templates (Portuguese)

Register for the free webinar “TMS WEB Core with HTML/Bootstrap templates”. The webinar is scheduled on March 25, 2021 16h00 UTC  17h00 UTC (17h CET – 18h CET) at the TMS Web Academy! “TMS WEB Core with HTML/Bootstrap templates” Ivan de Souza, former senior consultant at Embarcadero Brazil will demonstrate how to create web applications with Delphi and TMS WEB Core and use HTML with Bootstrap to create modern, responsive and good looking web user interfaces.  You will learn techniques to bind Object Pascal user interface control logic to existing HTML & CSS. NOTE: The webinar will be presented in Portuguese! “TMS Web Core com templates HTML/Bootstrap” 25 de Março de 2021 / 13h (Horário de Brasília) Ivan de Souza, ex-consultor sênior da Embarcadero Brasil, irá demonstrar como criar aplicações web usando Delphi e TMS Web Core, com HTML e Bootstrap, para criar aplicações web com visual moderno e responsivo. Você irá aprender técnicas para ligar a lógica de interface escrita em Object Pascal em templates HTML e CSS existentes. O webinar será realizado em sua maior parte em português, tendo algumas interações em inglês com o CEO da TMS, Bruno Fierens. 

Read More

Healthcare Sector Application Security: Preventing Threats from Becoming Attacks

Published March 17, 2021 WRITTEN BY MICHAEL SOLOMON Michael G. Solomon, PhD, CISSP, PMP, CISM, PenTest+, is a security, privacy, blockchain, and data science author, consultant, educator and speaker who specializes in leading organizations toward achieving and maintaining compliant and secure IT environments. Software security isn’t a state of being, or even a single action; it is a process, and one that requires more than just hardening your software. The year 2020 saw a dramatic rise in cyberattacks, with many attacks specifically targeting IT infrastructure. Any attack that compromises an IT environment interrupts normal operations, which can effectively interrupt critical software operations. Regardless of how secure your software is, if you can’t access critical data or services, your application won’t be available to authorized users. And since availability is one of the “big three” tenets of security, unavailable effectively means insecure. Ensuring software security is an organic and community-driven effort. For the most effective result, focus on actions that provide benefits for your software and its surrounding environment.  The last thing you want to do is constantly put out fires. A better approach is to get ahead of the fires. Learn to anticipate attacks and take proactive measures. Here are some ways to create a balanced threat-handling environment to make your software more secure. Responding to attacks The first step to handling any attack is to recognize that there is an attack being carried out. That may sound simple, but in many cases it isn’t. Non-disruptive attacks like data exfiltration may go unnoticed for months. Security is challenging even under normal circumstances, and the problem of handling attacks is even worse given the pressures of today’s realities.  Organizations of all types were put under more pressure when the new realities of covid-19 changed the way people work and interact. But few sectors were impacted more than healthcare. In addition to changes in the workforce and patient interaction protocols, covid-19 stretched every aspect of delivering quality healthcare. IT service and security concerns were just one part of the bigger problem. And in the midst of all the additional pressure, ransomware attackers sensed an opportunity and launched an unprecedented number of attacks against the healthcare sector. For example, in October 2020, the University of Vermont (UVM) Medical Center suffered a successful ransomware attack that ended up disabling all online systems for several weeks. At first it wasn’t evident that the interruption was an attack, but once the nature of the attack did become clear, UVM personnel searched for nearly two hours before they found a file that contained a note from the attackers. CNN picked up on the alarming statistics and published a story about the UVM Medical Center attack, and the Cybersecurity and Infrastructure Security Agency (CISA) published an advisory warning of the increasing number of ransomware attacks on healthcare organizations. UVM had taken some precautions to harden their systems, but the attackers were still able to succeed. While there is no guaranteed approach that leads to an impenetrable defense, there are ways to make your organization far less vulnerable. There is a constant need to iterate over updated threat information to stay ahead of the attackers. The goal is to approach the problems of security in parallel. If all you do is respond when you receive a new attack alert, you’re […]

Read More

VCL Grid goodies #3

Today, we have a look at another often overlooked but yet convenient feature of TAdvStringGrid (and also TDBAdvGrid) from the TMS VCL UI Pack: HoverButtons! Activating HoverButtons With the HoverButtons, you can quickly setup actions to be performed on rows in the grid where the mouse is hovering. It is enabled by just setting grid.HoverButtons.Enabled = true. This means, that when the mouse hovers over a row, a small panel hosting buttons will appear at a column of choice in the grid. This column is set with grid.HoverButtons.Column. WIth the property grid.HoverButtons.Position, you can specify in what relative position with respect to this column the panel should appear.  Configuring the buttons  To add any number of buttons on the panel, the collection grid.HoverButtons.Buttons can be used. This is a collection of the type THoverButtonsCollectionItem and allows to set the caption of such button, an imagelist ImageIndex, a picture, the hint, enabled state of the button … Just add any number of buttons needed for different actions to be performed on the row. Reacting to HoverButtons clicks When a button on the HoverButtons panel is clicked, this triggers the event OnHoverButtonClick returning the index of the button clicked. Performing the different actions for the different button clicks as such is simple: procedure TForm1.AdvStringGrid1HoverButtonClick(Sender: TObject; ARow: Integer; AButton: THoverButtonsCollectionItem); begin case AButton.Index of 0: begin // select the entire row and copy it to the clipboard AdvStringGrid1.SelectRows(ARow,1); AdvStringGrid1.CopySelectionToClipboard; end; 1: begin // invoke the inplace editor for the 2nd column cell AdvStringGrid1.Col := 2; AdvStringGrid1.ShowInplaceEdit; end; 2: AdvStringGrid1.RemoveRows(ARow,1); end; end; Hovering & hints Now we are discussing hovering, we can as well highlight another small but neat feature of the grid and that is to show the content of cells via a hint when the mouse hovers the cell. This is activated by setting grid.ShowHint = true as well as grid.HintShowLargeText = true. Whenever the text does not fit in the size of the cell, the grid will automatically display it as hint text for the cell. As a standard Delphi hint is just a single line of text hint, we add the TMS THTMLHint component on the form. This will replace the standard Delphi VCL hint and this hint can display multiple lines of text. The THTMLHint component also offers a MaxWidth property with which we can set the maximum width of hints to be displayed. And of course, if the text exceeds this MaxWidth, it will be rendered wordwrapped (and even formatted) in the HTMLHint. No code needs to be written for this. Drop a THTMLHint on the form, set HTMLHint.MaxWidth property and set the grid properties grid.ShowHint = true and grid.HintShowLargeText = true. The effect can be seen in this recording. Want more goodies? Looking for more interesting features in the VCL TAdvStringGrid or in other components uncovered? Let us know what you want to see demonstrated in a next episode!

Read More

7 Database Security Principles and Practices

Published February 24, 2021 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 Few, if any, other repositories for data and meta-data within an organization exceed the importance and value of its databases (DBs). In fact, databases often provide a home for an organization’s personnel information, financial data of all kinds (pay, taxes, purchases, income, and other monetary transactions), and data describing its physical inventory and assets. Thus, it’s not unfair to observe that most of the data that defines “who, what, where, when, and why” for an organization is likely to reside in a database. All of this goes to explain why DB security is vitally important to an organization’s health and its ability to conduct business. Principles that drive DB security are well-understood In the realm of database security, informed professionals understand that while basic security principles definitely apply, they can (and often do) take a database-specific slant. Thus, any enumeration of such principles will often play to the special circumstances involved in defining database metadata (often called a “database schema” to emphasize its scope and coverage for some specific and related collection of data) and in setting up and managing a database engine of some kind (which may be on-premises, in one or more clouds, and various permutations on those themes). That said, here are how some of these basic principles play into the world of database security. 1. Principle of least privilege (aka PLP) In general, PLP means providing the minimum of access rights and user privileges necessary to perform some specific task, run an application, or work with database contents, software or infrastructure elements. As with other PLP situations, periodic review to avoid “privilege creep” (gradual accumulation of more rights and privileges than are really needed) is essential. But in general database designers and database administrators (DBAs) should grant only rights and privileges that users, applications, and services need, and no more than that. 2. Platform hardening Across the board, platform hardening requires a deep understanding of a platforms vulnerabilities and its attack surfaces, so that organizations can take pre-emptive measure to address known potential weaknesses. Among other things this means uninstalling or disabling features or services that you don’t need or use. It also means resolutely enforcing password discipline, especially when it comes to changing well-known passwords and their associated accounts (best to delete them if you don’t use them). Make sure all security controls that the database engine offers are enabled, and set to maximum tolerable levels. Checks on hardening success are covered further in the upcoming “monitoring and auditing” item. 3. Data protection Data and metadata for the database should be encrypted both in motion and at rest (and this applies to backups and snapshots, too). Data and meta-data should include security tags or classifications to permit full-blow security policies and protections to apply. Data protection also includes monitoring its access and use, export and exfiltration, especially wholesale copying activity not readily explained or understood. 4. Monitoring and auditing The old saying goes “If you don’t monitor it, you can’t measure it.” This applies equally to […]

Read More

Introducing FNC Grid Excel Bridge components

In the last weeks, we’ve been working on a component to allow you to import and export FNC Grids to the xlsx file format. We’ve also used the opportunity to rename the existing “Grid Filters” and “FMX Grid Filters” to “VCL Grid Excel Bridge” and “FNC Grid Excel Bridge” because the word “Filter” has a different meaning in a grid. We hope the new “Bridge” naming proves less ambiguous. Same as the “Filters” before, the new Bridge components are free, but they require to have both TMS FNC UI Pack and TMS FlexCel licenses. You can get the components here: And the documentation is available here: So what is the state now if you want to export or import a grid to/from Excel?  We have the following choices: (VCL Only) You can use StringGrid.SaveToXLS and StringGrid.LoadFromXLS. Those methods will use OLE Automation under the hood, and so they require that Excel is installed in the machine. Because they need Excel, they can only work on Windows. You can use TAdvGridExcelIO (VCL), TTMSFMXGridExcelIO (FMX) and TTMSFNCGridExcelIO (FNC). Those components use an older trimmed-down FlexCel 3 to do their job. Because they use FlexCel 3, which predates the XLSX file format, they can only work with XLS files, not XLSX. You can use the “TMS Grid Excel Bridge” components. Those components use an existing  FlexCel 7 to do the work, and so they can export to xls and xlsx, but also HTML and PDF.  Because they require a FlexCel license, they can access the full FlexCel behind it, to do extra customization. Just as an an example: You could add conditional formats to the generated files, as shown in the example here: https://doc.tmssoftware.com/grid-excel-bridge/fnc/guides/user-guide.html#customizing-the-export. Note: FNCGrid already supports exporting to PDF and HTML natively, you don’t need the bridge components for that. But if you are customizing the xlsx output, you might want to have a PDF or HTML exported with those customizations, and that’s where the Bridge’s exporting to HTML and PDF can be useful. Up to now, the “Bridges” had support for VCL Grids and FMX Grids. With the release of FNC Bridge, we are extending the first-class Excel exporting and importing to FNC. Note that in FNC, we only support VCL and FMX at the moment (all platforms). We can’t support Lazarus or WebCore because FlexCel doesn’t support them yet. So to finish this small post, I’d like to show how it works. We’ll try adding export support for the FNC Grid in the “ClientDataset” demo. This is the grid: We dropped a TTMSFNCGridExcelExportComponent, and wrote the code: TMSFNCGridExcelExport1.Export(‘r:test.xlsx’); And we got this result: The checkboxes work in Excel, they are not images. But they will be exported as images to HTML and PDF. Next, we tried with HTML: TMSFNCGridExcelExport1.ExportHtml(‘r:test.html’, THtmlExportMode.SingleSheet); And we got: Finally we went for the PDF export. We could also have tried the one-liner, but in this case it would end up with 2 pages. The grid is too wide and the right part of it goes to the second page. But here is where the power of having full access to the FlexCel engine can help. We could export this file to xlsx, then set the print options in the xlsx file to fit to one page, and only then export to PDF: var xls := TXlsFile.Create(1, […]

Read More

New Delphi productivity developer tool from new TMS FNC partner

It is with great pleasure that we announce today there is not only a new partner in our TMS FNC Partner program but also a new innovative productivity developer tool for Delphi developers to manage better the workflow with testers & end-users for VCL and FMX applications. New TMS FNC Partner We are glad to welcome Neil Laskowski from SwiftExpat in the TMS FNC Partner program. The TMS FNC Partner program is all about supporting Delphi developers offering valuable tools built upon our FNC framework. If you also develop tools or components based on the FNC framework, have a look at the our FNC Partner program! New productivity developer tool Runtime Toolkit from SwiftExpat helps developers to gather information & feedback from testers and end-users in a structured way and get and apply this feedback to the applications. When running the application, the users can enable a runtime inspector and modify any components property on forms and immediately see the effect of the update visually on the form. At the same time, the details of the update are stored in a file together with a form screenshot before and after the update and this can be sent back to the developer(s). As such, this is an ideal tool to let users send back corrections for possible language related issues, UI colors and UI control layout issues. And this is for Delphi developers building VCL applications as well as FMX applications. A closer look at the capabilities of Runtime Toolkit This is a comprehensive overview of the features of Runtime Toolkit: Inspect Feature-rich components are hard to get right (have you ever missed a setting?) RunTime ToolKit gives you access to component properties to diagnose defects. Apply property changes and see the effect realtime to eliminate guesswork. Marshal will capture the changes in a session for you to review offline. Fine Tune RunTime ToolKit addresses the challenges faced with user interface elements such as fine tuning color schemes, ensuring translated fields are displayed properly, and resizing controls. Engage Clients expect to see changes quickly. Modifying at runtime can get you valuable feedback when engaging with a client. Implement Marshal was designed around ease of implementation. With the drag of a button you place the Marshal control in your application and instrument your existing code. Marshal creates its own form without cluttering your application form. Diagnose Inspecting components at runtime allows you to diagnose configuration or data driven behavior. Inspect the items collection to ensure the data was loaded and determine if the item is hidden. Record Capture the details and integrate the fixes into your source code immediately or at your own pace. Marshal records each change to component properties in a session which can be reviewed offline in Caddie. Compare Before and After Marshal automatically captures screen shots before and after property modifications. Visually compare the details of the form before and after a change. Target Deployment Deploy instrumented code during testing or to beta users. Marshal can be controlled using build configurations to target specific builds. Vendor Agnostic Designed to work with controls from any vendor, Marshal is fully functional in an application that uses no other FNC controls. Partnering with FNC leverages technologies to deliver better tools. Visit SwiftExpat and get started You can visit the Runtime Toolkit […]

Read More

High performance tree list 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 TTMSFNCTreeView component, a component with high performance virtual and collection-based modes able to deal with millions of nodes. Features Below is a list of the most important features the TTMSFNCTreeView 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 create a hierarchical tree list in FireMonkey. Multi-line HTML formatted text Various built-in column editors Multi-column support Fixed and variable node height High performance virtual and collection-based modes Multiple events for custom drawing and customization of default drawing Multiple events for all kinds of interactions such as editing, expand / collapse and selection Auto-sizing and stretching of columns Mouse and keyboard interaction Nodes with checkbox, radiobutton, image, disabled nodes Nodes extending over multiple columns Sorting, Filtering Clipboard support Keyboard lookup Reordering Drag & Drop Learn More! Want to learn more about what the TTMSFNCTreeView can do? Here is a video that highlights some of the above features through a demo application. Download & Explore! The TTMSFNCTreeView 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 TTMSFNCTreeView component. Coming up The TTMSFNCTreeView is the third 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 and the TTMSFNCPlanner. Next up will be the TTMSFNCKanbanBoard component, a highly configurable workflow visualization component.

Read More