Noutați

A Beginner’s Guide to The Best Javascript Framework

Regardless of whether you are a beginner developer or an expert, we all need help sometimes. Help can come in many ways, such as a quick answer to a query or a piece of working code that exactly does what you require. Many developers tend to look out for help when they need it and spend extra time looking for the help. However, experienced developers keep helpful resources, and tools close from the start. While development frameworks are only one example of a helpful resource that can elevate your coding experience, they are pretty popular. By utilizing frameworks in your projects, you can save essential resources like time and effort that you can spend on better coding. Additionally, most frameworks come with documentation to help you in case of any confusion. Depending on how you have structured the application, frameworks can even add to code efficiency and readability. Frameworks like Sencha ExtJS have developed a name within the developer community for its ease-of-use and quality implementations. It can serve as the perfect framework for exploring if you are new to using them for web applications. We believe ExtJS is one of the best Javascript frameworks available. This article helps you go through Sencha ExtJS, what main features it offers, and why you should gain vital experience coding with frameworks. Do You Always Need Frameworks To Build Applications? In the past, software development was a tedious and intensive process. It often required implementing standard fundamental functionalities from scratch every time developers build a product. Therefore much of their effort went into creating the basics, and the actual work started only after. Once the community realized just how counter-productive this approach was, efforts started pouring into creating packaged implementations that could be simply imported and used. Once early developers invented the first frameworks, developers and enterprises witnessed a massive increase in productivity throughout. Now teams could create applications with a much better development velocity and fewer risks. After all, frameworks allowed them to build unique new features into products since they took care of the basic ones. Nowadays, using frameworks has become a staple, especially for enterprise-level applications. You can utilize front-end development frameworks to create beautiful user interfaces, and back-end frameworks enable you to develop powerful functionalities. While you may not always need frameworks, they make things much more manageable. What Is Missing From Most JS Frameworks Currently Available? If you are up for it, there are hundreds of options available that claim to be the best JavaScript framework for you. While many of them indeed deliver on most of their promises, they often end up lacking on one front or the other. Sometimes it involves poor documentation or learning resources for users to get comfortable developing using the framework. Other times, the web applications get further complicated due to the approach which the framework takes. Some of the main concerns many users raise with frameworks include: Poor Underlying Layout: Many frameworks have a poorly designed back-end, making it harder to understand and utilize. Inadequate Learning Resources: Frameworks often don’t create the necessary learning resources for reference. Unpredictable Performance & Delivery: Frameworks often optimize when needed but may not necessarily do so every time. Not Optimized For Mobile: Developers need to be assured that their applications will be easily usable on […]

Read More

9 Signs You Should Invest in Automation

In today’s economy, efficiency, speed, and productivity is key to prolonged success. However, many businesses still waste precious time and resources running manual processes that can be automated. Knowing when it’s time to automate specific manual processes can be pivotal to the growth and success of your business.  To help in your decision-making, here are nine signs you should invest in automation. 1. Do you have error-prone repetitive processes? Often, business processes involve a series of sequential tasks based on predefined rules or conditions, many of which are of a repetitive nature. More often than not, manually repeating any process can lead to errors, as humans may miss a step or forget to click a button. In contrast, automation can significantly mitigate such errors.  For instance, if you’re automating a UI testing process, the whole test would strictly run based on predefined instructions. However, if the same test is run manually, humans may forget to test a specific use case, leading to inaccurate results.  2. Are you finding a lack of repeat business? Do you find it difficult to retain your customers or get repeat business from your previous buyers or subscribers? In that case, it might be an indication that your customer satisfaction strategy is lacking. For example, a slow response time can be off-putting for many customers.  All customer satisfaction efforts should be focused on making your customers happy, not on manually running admin tasks that can easily be automated.  3. Are you falling short on achieving your desired throughput? Inherently, humans aren’t as productive as machines; from physical or mental fatigue to other factors that may reduce human productiveness, you may find yourself way off your target. Manually run business tasks can only be completed when someone is working. However, with automation, you can efficiently complete business tasks faster and more accurately, with little or no supervision.  4. Are you experiencing the effects of a labor shortage? According to the United States Unemployment Report by trading economics, unemployment is currently the lowest it has ever been since 1969. Additionally, talents in specific skill markets are going extinct, and organizations struggle to find or attract a quality workforce. While automation can’t completely eliminate your dependency on manual labor, it can significantly reduce it.   5. Do you need faster process completion? Business processes can easily be delayed due to poor communication, amongst other factors. For example, waiting on the go-ahead for certain tasks or manually collaborating to complete in-house projects opens up the opportunity for process delay. If you find yourself needing to speed up processes, then you should look towards automating those processes. Getting the go-ahead on tasks, collaboration, etc., can all be managed from a centralized automation system.   6. Do you need to track KPIs? In this data-centric world, it is important to track performance metrics, so you know what’s working and what isn’t. Running manual business processes would also mean manually collecting performance data, which could be very difficult. However, most automation tools automatically record data you can access and use at will. This way, you can boost efficiency and productivity by focusing your time on analyzing data rather than collecting them.  7. Do you have a need for instant information access? Cloud-based automation systems allow anyone at any time to complete the tasks they need […]

Read More

RAD Studio 11 November Patch

Вслед за выпуском новейшей версии продукта всегда следует ряд исправлений, которые производитель считает необходимым быстро внести в продукт. Иногда это происходит из-за поздно найденной критической ошибки, но обычно – производитель окончательно приводит продукт в соответствие со своими и общепринятыми стандартами качества. В октябре этого года Embarcadero выпустила Patch 1.0 для версии RAD Studio 11 Alexandria, вслед за которым был выпущен November patch. Неудобство таких последовательных патчей может заключаться в том, что для получения обновленной версии пользователям приходится  “накатывать” их друг за другом, в порядке их выхода (не дай бог, перепутать порядок!) Ноябрьский патч лишен этого недостатка: он уже содержит в себе  все изменения и исправления из предыдущего и может быть применен на системах, в которые уже были внесены изменения патча 1.0  Патч предназначен для избавления от одной выявленной регрессии патча 1.0 и содержит обновления для PAServer (инструмент удаленного размещения и отладки приложений)  на платформах macOS и iOS. Установка этого патча рекомендуется всем пользователям RAD Studio 11. Патч доступен для активных пользователей подписки на обновления в менеджере пакетов GetIt и  на сайте загрузки my.embarcadero.com.  Процесс установки описывается в файле Readme.txt патча и ниже в этом посте. В Readme.txt также содержится список проблем, решаемых этим патчем. Установка на основе GetIt При запуске IDE (или при следующем обновлении страницы приветствия) вы увидите значок “Patch Available”, который находится в другом месте на странице приветствия RAD 11. Выбрав значок или открыв менеджер пакетов GetIt и перейдя в раздел “Патчи и исправления”, вы увидите следующий пункт (см картинку): Если вы скачаете патч через GetIt, он установится автоматически, создав резервную копию заменяемых файлов. Патч поставляется в виде пакета отложенной установки, что означает, что он устанавливается после выключения IDE (вам будет предложено перезагрузиться, но вы можете подождать до этого момента). Помните, что вам нужно будет подтвердить запрос UAC Windows сразу после начала процесса установки. Пока вы это не сделаете, процесс установки будет ждать!  Запрос UAC отображается в отдельном окне и может быть перекрыт другими окнами. Обратите внимание, что размер загружаемого патча превышает 900 МБ, поэтому этап загрузки из окна консоли (открываемого при выключении IDE) займет некоторое время. Если установка RAD Studio была неполной,  некоторые файлы не будут найдены (например, в случае отсутствия файлов локализации среды или при неполной установке платформ). Это ожидаемо, предусмотрено и нормально. После завершения процесса установки патча среда RAD Studio IDE автоматически перезапускается. Обратите внимание, что версию PAServer для macOS, обновленную этим патчем, необходимо установить на ваше устройство macOS вручную, как написано в Readme.txt. Ручная установка Вы также можете найти патч на портале my.embarcadero.com. В этом случае необходимо загрузить ZIP-файл патча и установить его вручную, следуя шагам, аналогичным шагам автоматической установки. Перед установкой патча необходимо вручную закрыть RAD Studio IDE (если IDE запущена, вы увидите ошибку). В этом случае вы найдете основной файл загрузки RAD Studio 11 November Patch с пакетным файлом, который вы можете запустить или вручную распаковать ZIP-файл в соответствующие подпапки папки установки RAD Studio. Вам также придется скопировать PAServer, установить на Mac и повторно импортировать SDK. Более подробное описание патча вы найдете в файле Readme.txt   Вот список некоторых проблем качества, решаемых ноябрьским патчем RAD Studio 11 Проблемы, связанные с PAServer RSP-36094 Невозможно скомпилировать на macos, нет такого файлаRSP-36068 Проблема с paserver на arm osx montereyRSP-36064 Исключение-Klasse 6 при попытке запустить приложение Firemonkey на macOS Monterey Проблемы, связанные с VCL RSP-36207 Ширина GroupBox на унаследованной форме изменяется на значение по умолчаниюRSP-36077 Исходный код […]

Read More

A Beginner’s Guide to Artificial Intelligence

There’s no denying the tumult, horrors and massive loss of life during World War II. But, as is often the case, from this environment of desperation and hardship sprang many technological advances. Alan Turing, helped lead an unprecedented cadre of mathematicians and logicians to success in building a special purpose computer which could break the secret communication codes of their military enemies. Turing emerged from this period inspired to consider the future possibilities of more generalized computing devices and where that could lead society and how those machines would evolve. Turing wrote a paper in 1950 titled “Computing Machinery and Intelligence,” which he opened with the statement: “I propose to consider the question; can machines think?”. It was a ground-breaking paper not least because it contained a test which Turing originally called “The Imitation Game” but which later became more popularly known as “The Turing Test”. The Turing Test laid out, for the first time, a foundation for how we might consider a machine – a computer – to be “intelligent”. The main premise of the test is that if we cannot tell if we are speaking to a machine or a human – or if we guess and guess wrongly – then, put simply, that machine is probably best considered ‘intelligent’. It’s a simple definition but that simplicity belies the genius of it. How have things changed since Alan Turing’s time? Computing technology- and along with it artificial intelligence – has grown exponentially since Turing’s time. Yet we are still only standing on the first rung of a very long ladder. Picture this; a machine that can organize your portable home library alphabetically, just as you’d like. Or a machine that could prepare a customized daily schedule for everyone at the office. Makes your life/job easier, doesn’t it? These are the products of artificial intelligence.  But why is it termed “artificial intelligence”? Well, these machines are designed using complex algorithms and mathematical functions that aim to incorporate human-like intelligence, to make decisions and solve problems as we do. However, AI may not be as obvious as in the above examples. In fact, AIs have various applications in almost every area of life. You can find AI in smartphones, cars, wrangling our social media feeds, playing (and beating us) in games, automating banking decisions and anti-fraud or money-laundering activities, widespread private and government surveillance, even performing roles in our vehicles to enhance safety and usability. The real question, however, is what does an AI do at its core? What makes a product or machine artificially intelligent? Three basic components make up this answer. We’ll describe them using this illustration.  Let’s assume we build our robot in a lab and transport it to a park. Regardless of the difference in lighting and landscape between our lab and the park, the robot must perform as expected. This ability to adapt quickly to a new situation is called “generalized learning.” The robot then gets to a crossroad; one, muddy and the other paved. Here, it must determine which path to take based on the circumstances. This portrays the robot’s “decision-making” ability. After a few meters on the paved road, the robot approaches a body of water it cannot swim through. Using a plank added to the robot as input, it can cross to […]

Read More

Customizing SVG appearance

Intro Recently we covered a blog post related to high DPI in combination with SVG in RAD Studio Alexandria. Adding SVG to your application makes you not have to worry for what the future brings in terms of look and feel. The scalable vector graphics will always be crisp independent of the screen resolution or size of the image. Today we are going a step further yet again and want to introduce a couple of QOL changes.  SVG support is available when installing one of the following 2 products. After starting the IDE, SVG is already available. This is not only registered for our products, but also available in default VCL controls. We start by adding VCL.TMSFNCTypes or AdvTypes unit (depending on the installed product). The unit will register the SVG type at runtime. At designtime, the package already registers SVG support. In the latest version of both products, we have added a way to change the tint color, setting the overal fill, stroke and opacity as well as the ability to turn an SVG to a grayscale version. TintColor Adding an SVG image to one of your controls, directly via TPicture or via a TVirtualImageList in combination with TTMSFNCSVGImageCollection enables access to the properties. After loading an SVG via the Data property of the TTMSFNCSVGImageCollection you are able to set one of the new properties. Changing the TintColor will affect the overal appearance, the SVG engine will try to blend the TintColor with the image, creating a different appearance. Original SVG TintColor = gcDarkOrange GrayScale Enabling the property GrayScale, will transform the SVG and convert all colors to grayscale versions. Customizing Opacity, Fill and Stroke The CustomOpacity, CustomFillColor and CustomStrokeColor properties are focused on changing the whole appearance of the SVG. Currently, the CustomFillColor and CustomStrokeColor are designed to be applied on monochrome colors such as complete white or black SVG icons.  CustomOpacity = 0.4 In Code  Each property can be accessed when converting the TGraphic sub-property of a TPicture to TTMSFNCSVGBitmap (or TAdvSVGBitmap). The code to do this is shown below, and based on adding a TPicture on a TImage. (Image1.Picture.Graphic as TTMSFNCSVGBitmap).SVG.GrayScale := True;             Original SVG                                GrayScale    The same applies to all the other properties. Below is a sample changing the opacity in combination with a custom fill color. (Image1.Picture.Graphic as TTMSFNCSVGBitmap).SVG.CustomFillColor := gcRed; (Image1.Picture.Graphic as TTMSFNCSVGBitmap).SVG.CustomOpacity := 0.8;             Original SVG                          Custom Fill/Opacity    Want to know more? More information on SVG, the supported SVG features as well as the enhancements we made to our SVG engine are available in the following blog posts.

Read More

Artificial Intelligence: Expectations vs. Reality

Let’s face it; we humans can be drawn to exaggerate and over-generalize when it comes to modern technology, especially during its early-adoption, nascent phases. This is understandable, many major tech introductions have the potential to change the way the world works or how we execute specific tasks. For that particular reason, the uprise of not-seen-before technologies can create ripples of attention as the start to shake-up the status quo. Moreover, Sci-Fi movies with not-so-accurate technology themes can feed that disquiet, causing the public to create exaggerated notions of what technologies like artificial intelligence would mean for humanity. Time-traveling liquid metal murder robots from the future may seem too far-fetched, but computers which have all the smart answers and can bring about World peace by exposing crimes before they’ve happened? Yes, much more plausible to the average non-technical person even though this would require a coordinated effort from multiple disparate government agencies who are suddenly magically released from the constraints of fiscal budgeting and the regular popularity contest of elections. These plausible possibilities, in turn, increase the need to define what’s real and what isn’t with modern technologies like AI.  There are a lot of misconceptions about artificial intelligence. From intelligent robots eventually turning against and enslaving humans in a dystopian societal apocalypse to AI replacing humans in all areas of life. The AI hype is real. In this article, we’ll be discussing some common AI expectations and defining their underlying reality.  Are we about to face an AI Apocalypse? From The Matrix to The Terminator, almost all AI-related movies portray a future where mankind is overwhelmed by technology which has turned from friend to a foe whose main, single-purposed goal is our annihilation. The AI turns against the human race or tries to take over the world. This isn’t entirely bad, as long as it is all understood to be as fictional as a world populated by dragons and reincarnated dinosaurs. But this is not often the case; the media influence is, tangibly, stronger than ever, and a large percentage of the public translates this easily-consumed fiction into an absolutely likely reality. In other words, such movies add to how the world sees AI innovations. No matter how close to modern times you foray, you’ll find that the narrative remains the same; machine revolting against humans, often with an underlying moral narrative of “well, we got what we deserved”. Almost none portray a world which results from a more probable extension of the various forms of artificial intelligence that actually exist, with fiction being mainly about the human-like type AI.  The Royal Society Report explains the implications of exaggerated expectations and fictional narratives. It reads as follows; “Both fictional and many non-fictional narratives focus on issues that form either a very small subset of contemporary AI research or that are decades if not centuries away from becoming a technological reality. This disconnect between the narratives and the reality of the technology can have several major negative consequences. The prevalence of narratives focused on utopian extremes can create expectations that the technology is not (yet) able to fulfill. This, in turn, can contribute to a hype bubble, with developers and communicators potentially feeding into the bubble through over-promising. If such a bubble bursts because the technology was unable to live up […]

Read More

More no-code in latest WX Pack!

Thanks to the use of components on a visual form designer, Delphi was a pioneer in no-code long before the term started to be used. As our primary job is to develop components, the way our components are architected is instrumental in getting as close to no-code as possible. Many times it is rather low-code than no-code, but now and then, we can assemble the components in such way that a functional application can be created without writing a line of code. Today we have a look at the newest TMS FNC WX Pack release with the new TTMSFNCWXPDFThumbnailList and TTMSFNCWXPDFToolbar that facilitate to create a functional PDF viewer app for 4 frameworks and a myriad of different operating systems without writing a single line of code. The PDF viewer app The TTMSFNCWXPDFToolbar purpose is to allow navigation in a PDF that is opened to view. It contains buttons for going to the next/previous/last/first page, to open a new PDF file or to rotate pages or zoom in & out pages. The TTMSFNCWXPDFThumbnailList is, as the name implies, an either vertically or horizontally scrolling list of thumbnails of pages in the opened PDF file. It interacts with the TTMSFNCWXPDFViewer component to show the clicked page in the thumbnail list. So, to build this application, following steps are needed: 1) Drop TTMSFNCWXPDFToolbar on the form and set alignment to top 2) Drop TTMSFNCWXPDFThumbnailList on the form and set alignment to left 3) Drop TTMSFNCWXPDFViewer on the form and set alignment to client 4) Assign the TMSFNCWXPDFViewer1 to TTMSFNCWXPDFThumbnailList.Viewer 5) Assign the TMSFNCWXPDFViewer1 to TTMSFNCWXPDFToolbar.Viewer Ok, sorry, there is nothing more to do. Compile and run the app. Click the open file button in the toolbar, select a PDF file from the local file system and it will be loaded. This means, the toolbar will get active and will allow you to browse through the PDF file and the thumbnaillist will be loaded with thumbnails of all pages in the PDF. Click a thumbnail in this list and this page will be displayed in the viewer. Targets Just to avoid confusion, these steps can be performed for a VCL Windows application. But the same steps apply for a FireMonkey application that can target Windows, macOS, Linux, iOS and Android. And it does not stop there, you can do exactly the same after creating a new TMS WEB Core web client application, a TMS WEB Core Miletus cross platform desktop application or a TMS WEB Core PWA, including doing this both from the Delphi IDE or from the Visual Studio Code IDE. And finally, also from the free Lazarus IDE, it can be done from Windows, macOS, Linux. In Delphi, no-code is not a prison The power of Object Pascal component based development is that it isn’t limited to no-code or low-code, it is just a start. Where there are a lot of possibilities to create a lot of useful end-user functionality with little to no-code, Delphi still allows to go “down to the metal” and write code that can use every corner of the operating system (and that includes the web browser as operating system when a web client application is created). The WX components contain numerous properties, event handlers and public methods that allow to further programmatically manipulate the components.  What’s […]

Read More

Delphi 11 Alexandria Defines

uses   System.IOUtils;   procedure TForm1.Button1Click(Sender: TObject); begin   case TOSVersion.Platform of     TOSVersion.TPlatform.pfWindows:       PlatformPath := ‘Windows’;     TOSVersion.TPlatform.pfMacOS:       PlatformPath := ‘macOS’;     TOSVersion.TPlatform.pfiOS:       PlatformPath := ‘iOS’;     TOSVersion.TPlatform.pfAndroid:       PlatformPath := ‘Android’;     TOSVersion.TPlatform.pfWinRT:       PlatformPath := ‘WinRT’;     TOSVersion.TPlatform.pfLinux:       PlatformPath := ‘Linux’   else       PlatformPath := ‘Unexpected platform’   end;     Memo1.Lines.Add(‘TPlatform: ‘+PlatformPath);   Memo1.Lines.Add(TOSVersion.ToString);     {$IF DEFINED(IOS)}     Memo1.Lines.Add(‘Defined: IOS’);   {$ENDIF}   {$IF DEFINED(IOS32)}     Memo1.Lines.Add(‘Defined: IOS32’);   {$ENDIF}   {$IF DEFINED(IOS64)}     Memo1.Lines.Add(‘Defined: IOS64’);   {$ENDIF}     {$IF DEFINED(ANDROID)}     Memo1.Lines.Add(‘Defined: ANDROID’);   {$ENDIF}   {$IF DEFINED(ANDROID32)}     Memo1.Lines.Add(‘Defined: ANDROID32’);   {$ENDIF}   {$IF DEFINED(ANDROID64)}     Memo1.Lines.Add(‘Defined: ANDROID64’);   {$ENDIF}     {$IF DEFINED(MACOS)}     Memo1.Lines.Add(‘Defined: MACOS’);   {$ENDIF}   {$IF DEFINED(MACOS64)}     Memo1.Lines.Add(‘Defined: MACOS64’);   {$ENDIF}   {$IF DEFINED(OSX)}     Memo1.Lines.Add(‘Defined: OSX’);   {$ENDIF}   {$IF DEFINED(OSX64)}     Memo1.Lines.Add(‘Defined: OSX64’);   {$ENDIF}     {$IF DEFINED(MSWINDOWS)}     Memo1.Lines.Add(‘Defined: MSWINDOWS’);   {$ENDIF}   {$IF DEFINED(WIN32)}     Memo1.Lines.Add(‘Defined: WIN32’);   {$ENDIF}   {$IF DEFINED(WIN64)}     Memo1.Lines.Add(‘Defined: WIN64’);   {$ENDIF}     {$IF DEFINED(LINUX)}     Memo1.Lines.Add(‘Defined: LINUX’);   {$ENDIF}   {$IF DEFINED(LINUX32)}     Memo1.Lines.Add(‘Defined: LINUX32’);   {$ENDIF}   {$IF DEFINED(LINUX64)}     Memo1.Lines.Add(‘Defined: LINUX64’);   {$ENDIF}       {$IF DEFINED(DCC)}     Memo1.Lines.Add(‘Defined: DCC’);   {$ENDIF}     {$IF DEFINED(CONSOLE)}     Memo1.Lines.Add(‘Defined: CONSOLE’);   {$ENDIF}     {$IF DEFINED(POSIX)}     Memo1.Lines.Add(‘Defined: POSIX’);   {$ENDIF}   {$IF DEFINED(POSIX32)}     Memo1.Lines.Add(‘Defined: POSIX32’);   {$ENDIF}   {$IF DEFINED(POSIX64)}     Memo1.Lines.Add(‘Defined: POSIX64’);   {$ENDIF}     {$IF DEFINED(CPUX86)}     Memo1.Lines.Add(‘Defined: CPUX86’);   {$ENDIF}   {$IF DEFINED(CPUX64)}     Memo1.Lines.Add(‘Defined: CPUX64’);   {$ENDIF}     {$IF DEFINED(CPU32BITS)}     Memo1.Lines.Add(‘Defined: CPU32BITS’);   {$ENDIF}     {$IF DEFINED(CPU64BITS)}     Memo1.Lines.Add(‘Defined: CPU64BITS’);   {$ENDIF}     {$IF DEFINED(CPUARM)}     Memo1.Lines.Add(‘Defined: CPUARM’);   {$ENDIF}   {$IF DEFINED(CPUARM32)}     Memo1.Lines.Add(‘Defined: CPUARM32’);   {$ENDIF}   {$IF DEFINED(CPUARM64)}     Memo1.Lines.Add(‘Defined: CPUARM64’);   {$ENDIF}     {$IFDEF DEBUG}     Memo1.Lines.Add(‘DEBUG is Defined’);   {$ELSE}     Memo1.Lines.Add(‘DEBUG is Not Defined’);   {$ENDIF} end;

Read More

What Is It Like To Be A Developer David Cornelius?

Hello. This article is part of a series where we speak with professional software developers, ask them what it’s like to write code for a living, and perhaps gain a few insights into the software development industry along the way. Our guest today is a Delphi MVP and author David Cornelius. David describes himself as “a programmer through-and-through”. He runs a small software development business from his home office and seems to have his priorities right when he says “I love family, music, strategy board games, and the great outdoors”. Living, as he does, half-way between the Pacific Ocean and the Cascade Mountains David says means he is offered a wide variety of places to explore—either on a motorcycle or by hiking from a campground. Hi David, thank you for talking to me today Well, it’s very nice to meet you, Ian!! 😁 David, in his “auditioning for James Bond” pose Which Embarcadero product(s) do you use a) the most b) regularly? a & b: Delphi XE, 10.4, 11. Every day. How and/or why did you become a developer? When I was in grade school, my favorite subject was math. I got a programmable TI (Texas Instruments) calculator and would compete with my grandfather on the most complex calculations we could come up with in its limited 32 steps. The small high school I attended had a TRS-80 with a cassette “drive” for storage but I got impatient waiting for it to load/save and with its many retries and errors so lost interest. But later, when the school set up its first computer lab with three Apple IIs, I spent all available time teaching myself AppleSoft BASIC. When I got to the end of the tutorial book and realized a friend of mine was writing games that could not have been done in BASIC alone, I knew there was so much more to learn—I was hooked on programming by that point! Majoring in Computer Science in college was the obvious next step and the rest, as they say, is history. Do you think you will ever stop being a developer? If so, what would be next? No—I have too many ideas to ever stop, even if I sell my house and travel the country in an RV, I’d still be programming part of the time. What made you start using Delphi/C++ Builder? College exposed me to several different programming languages. I studied assembly on three different processors, enjoyed the structure of FORTRAN, got bored with COBOL and dropped the class, looked at some niche languages like SNOBOL, and taught myself C using Mark William’s Let’s C. But the most useful class was one that taught general programming concepts using an inexpensive tool that allowed us to edit, compile, and debug all in one IDE, a new concept in the mid-80s. It was Turbo Pascal. Later at my first long-term programming job, I was given the opportunity to start a brand-new application and I could choose whatever programming tool I wanted. I went with Turbo Pascal, then at version 4, because I already knew how to use it, I could drop to assembly if I needed to (which I actually did occasionally), and it was starting to get popular—it was the logical place to start. As the application grew over the […]

Read More