Level Up Your RPG with Python

Podcast
To listen in to this meeting click here!
Introduction
In our November 2023 iChime meeting, special guest, Joseph Wright, an experienced IBM i programmer and consultant, led an enlightening session on Python’s role in augmenting RPG. He shed light on a groundbreaking approach in IT development: the integration of Python into RPG programming. This blog post captures the essence of this insightful discussion, targeting both IT developers and executives keen on staying abreast of the latest trends in programming and application modernization.

The Rise of Python in RPG Environments
RPG has been a stalwart in the realm of business applications. However, the evolving demands of industry necessitate a more flexible and efficient approach. Enter Python, a language renowned for its simplicity and robust library ecosystem. The integration of Python into RPG programming is not just an enhancement; it’s a transformative step towards modernization and efficiency.

Key Insights From the Meeting
Python as a Helper Language: Python acts as a supplementary tool to RPG, enabling developers to execute tasks in a few lines of code that would otherwise require extensive effort in RPG. Its use in API development, file conversions, and database interactions exemplifies its utility in simplifying and speeding up development processes.
Rapid Prototyping and Development: The plethora of Python libraries means many solutions are already available, allowing RPG developers to avoid reinventing the wheel. This accelerates the development process significantly.
Enhancing RPG Applications: Python can be integrated into RPG for tasks like converting database tables to Excel or enhancing file handling capabilities. This integration opens up new avenues for RPG applications, making them more versatile and adaptable to modern requirements.

Practical Steps to Integrate Python into RPG
Joseph provided a roadmap for RPG developers to start integrating Python into their workflows. This includes:
a. Setting Up Python: Easy setup through ACS (Access Client Solutions) and the use of open-source package management for installing Python.
b. Writing Your First Python Program: Using the interactive Python interpreter to start coding immediately.
c. Calling Python from RPG: Utilizing techniques like Qshell and command exec for RPG to call Python scripts.
d. Leveraging Existing Python Libraries: Utilizing Python’s extensive libraries for various functionalities, from file handling to API integrations.
e. Error Handling and Debugging: Emphasizing the importance of incorporating robust error handling in both Python and RPG code.

The Impact on IT Development
The fusion of Python with RPG is more than just a technical upgrade; it’s a strategic move towards modernizing legacy systems. This integration enables existing RPG applications to meet contemporary business needs without the necessity for complete overhauls. For IT executives, this means enhanced efficiency, reduced development times, and extended relevance of their existing systems.

Relevant Links
Here are links that were mentioned during our meeting:
https://wright4i.github.io/#/tut/py_getting_started – Getting Started with Python on IBM i
www.ryver.com Ryver – Chat group with several IBM i open-source developers
Service Commander – IBM i – https://github.com/ThePrez/ServiceCommander-IBMi
IBM i OSS Docs – IBM i Open-Source Repository – https://ibmi-oss-docs.readthedocs.io/en/latest/README.html


Conclusion
The iChime meeting’s focus on integrating Python with RPG offers a promising path for organizations looking to modernize their legacy systems. This approach provides a balance between maintaining the robustness of RPG and embracing the agility and efficiency of Python. As the world of programming continues to evolve, such integrations will be pivotal in keeping legacy systems relevant and efficient.

Attending and presenting at IBM’s TechXchange conference? Yes, please!

TechXchange is quickly approaching and with the opportunity to co-present two sessions on my favorite topics, I am super pumped. Meeting again at a conference of this scale never disappoints.

Here are just some of the reasons why I am so looking forward to being there. You should be there too!

The People

First and foremost, it is *always* about the people and the new personal connections these conferences provide.

You would be (or may not be) amazed at the invaluable nuggets I have acquired in casual hallway or snack break conversations.  Spontaneous conversations abound during lunch.  Keep these conversations going, after hours while at the event and even well after the conference concludes.

To paraphrase Forrest Gump, attending a conference is like eating a box of chocolates, you never know who you’re going to meet.

Keynotes

Just take a look at the IBM executives who are scheduled to present keynote addresses.  Their credentials alone are setting the stage for what will be broad expert perspectives on technology and overall industry trends.  These are sure to be inspirational to all who attend.

Breakout sessions

This is where some of the “real” magic occurs.  Breakout sessions provide deep-dive depth into specific topics, with access to experts who live everyday in the trenches.

I am proud to join as one of the speakers, co-presenting with the IBM Business Architect of Application Development and Systems Administration, Tim Rowe.  Our first session focuses on the path towards IBM i application modernization, and the tools needed to get on that path.  Our second session is a much closer discussion on REST APIs, the how’s and whys, and a discussion on actual customer case studies. 

You can watch a brief video where I talk about these two sessions here.

Here is a link to our session abstracts, complete with dates and times.

Some pro tips

Having attended conferences for over two decades, I have learned a few things. Here are some tips that have helped me make the most of my attendance.

Plan ahead!  Review the keynotes and breakouts you most definitely want to attend. Create your session agenda so you are not deciding in real time. Remember – the best seats go fast, and the most popular sessions will nearly always “sell out.”

Bring current business cards – and bring more than you would typically bring. You would be surprised how quickly you distribute them.  Consider adding a QR code to your LinkedIn profile.

Update your LinkedIn profile – speaking of LinkedIn, having current information here is essential. And don’t forget about the very convenient way to share your profile in real time! Using the mobile app, go to your own profile. Next, clear your name from the search bar. You will then see a QR code icon on the right side. Click on that and voila, your very own QR code appears! Have the person you wish to connect with scan that and just like that, you’re connected!

See you there!

AI Experts Share Their Knowledge on iChime Show and Tell

The iChime community was joined this past week by not one, but four experts who shared research, experience, and demos with the group.

We kicked off the meeting with a discussion with Dr. Chirag Shah, a professor at the University of Washington. Dr. Shah is an expert in machine learning, artificial intelligence, and information science. His research revolves around intelligent systems and his content is fascinating.

A Look at Today’s AI With Dr. Shah

We started with some basics. There are two categories of models in machine learning – discriminative and generative models. Most of us are familiar with the discriminative model which is easier to understand.

Discriminative machine learning works with classifiers. Using existing data, it asks, “what is the probability that this datapoint is ‘x’?” It then uses data to recognize discriminative attributes, map out patterns, and establish clustering.

The generative learning model works in an opposite way by asking the question “what is the likelihood that ‘x’ would have generated this datapoint?” It can lead to the same outcome, but the approach is reversed.

Today’s AI is still based on these classical forms of learning and uses existing data. However, it is able to move past that and use the data to predict outcomes, fill in the blanks, and create new data points.

An example of this is ChatGPT and AI tools that use the underlying technology of – Large Language Models (LLM). What these technologies do is analyze huge bodies of text and learn patterns within the content. For instance, it learns which words follow which words within a language. For example, “when I see these five words, the sixth word is typically this.” After recognizing all these different patterns within massive amounts of content, it can extrapolate the information to start building sentences and paragraphs that did not previously exist.

Graphic and video AI generation is similar though a little different. Instead of predicting a word, AI predicts a portion of an image or video that is missing. Learning from a database of images, it fills in larger and larger portions until it is creating new images and videos.

These amazing technologies are all based on existing data. However, the outcome is something unique and new.

The Meeting Continued with Live Demonstrations

Patrick Behr demonstrated the step-by-step process of communicating with Chat GPT using their APIs.  This included initial steps such as securing an account key and explaining the various parameters and how they affect the responses.  He finished his discussion with a live demonstration of interacting with ChatGPT using traditional IBM i SQL programming tools and functions.  Here is a good starting point to learn more using these APIs – https://openai.com/blog/introducing-chatgpt-and-whisper-apis.

David Brown continued the meeting, showing a flow chart of a work in progress AI tool for IBM I, intended to aggregate data from disparate sources and perform various analyses.  He walked us through four different categories, which are classification, regression predictions, optimization, and abnormalities.   This was a very interesting discussion, and we wish David the best of luck as development on this tool continues.

The meeting was completed with Mike Pavlak offering a live demo of PHP code development using GitHub Copilot.  Copilot offers autocomplete-style suggestions as you code. It quickly became apparent how this AI tool will save tons of time in application development.   To learn more about Copilot visit https://docs.github.com/en/copilot/overview-of-github-copilot/about-github-copilot-for-individuals.

More Of These Formats in The Future

The format of multiple guests on one meeting was very well received by all who attended. We will keep an eye out for topics that lend themselves to this meeting format. A final huge thanks to all of our experts for joining us and sharing with us their time and wonderful knowledge.

After all these years in IT, I’m young again.

It is as if I am just starting my career in technology all over again, endlessly poring through manuals and soaking up every last bit of available information on any given subject.  This is exactly how AI today has captured my imagination.  It has brought me back to my first years as a developer, as a starry eyed kid.   Am I overreaching here?  Quite possibly, but that is not the point.  What is truly important is how my enthusiasm has exploded and suddenly nothing seems impossible, with technological boundaries nowhere in sight.    Hopefully my exuberance is contagious.  Hopefully my peers will be fascinated by their own favorite technology with equal fervor.  If my years in this industry have taught me anything, it is that people who are at the top of their game have not only great technical knowledge, but excitement and passion as well.

It is a fact that as technologists, we need to have our eyes fixed on the horizon, eagerly awaiting the next new technology – the coming development that allows us to drive advancement.  Unfortunately, the truth is that often this is not always the case. In fact, I have seen cases where some are not even interested in learning about new technologies and are content with continuing to do the same old thing they have always done.

This puts many into a quagmire where they have stopped learning and developing their skills. Given this, they are not anywhere near reaching their full potential.  Worse yet, the negative effects of this are far reaching. With discontinued growth, your career will become boring and stay stagnant.

Businesses are equally affected when employees are not fully engaged.  For the business, they are committing time and money for an underutilized resource, one that would otherwise bring tremendous net new value but is not.

Companies will notice when you are passionless about your career. If you are not keeping up with the latest trends, you will be left behind and there will always be someone behind you with a target on your back. They want people on their teams who bring enthusiasm into the workplace. They recognize that these people raise morale. That they bring in a great potential for improved processes and increased profits. In short, they want employees who have a growth mindset, and simply do not settle for the status quo.

My message to you, then, is keep looking for advancements to get excited about. Prioritize your learning and growth. Fuel that desire to learn. That growth mindset needs to come from you, from the very core of you as a person.   Simply put, search online for “The hottest technologies to learn this year.”  And learn how businesses are exploiting these technologies to improve processes and increase profitability.  Figure out what gets inside you, what makes you feel as if you are right back at the beginning of your career.  Without limits.

“SQL Queen” Birgitta Hauser pays iChime a visit

The queen of SQL for Db2 for i, Birgitta Hauser, joined us on iChime last week for an amazing information download! When she’s not joining us on iChime, this impressive IBM Champion is providing training and education all around the globe. Her time with us was spent deep diving into the world of SQL and sharing her extensive wealth of knowledge.

And when I say a wealth of knowledge, I mean a treasure trove of knowledge. After our planning meeting prior to iChime, I walked away with three pages worth of potential questions and we both cleared our calendars for the meeting.

Birgitta started out by giving us a peak into how she uses SQL in her day-to-day work.

“I use SQL whenever I can,” Birgitta said. Sometimes RPG is easier, but I try to move business logic out of my programs. There are so many things you can do with SQL other than accessing a table, such as accessing the IFS and web services. All these things are important to get, merge, and analyze the data.”

We moved on to discuss what RPG could be replaced and what these replacements empower developers to do. In SQL, there are many functions and services that are often overlooked by programmers, even those using modern programming languages. In going beyond the basics, these functions and services can be powerful tools utilized to replace and write around RPG. Things like string-handling, mathematical functions, and other functions that are not available options within RPG can be easily accomplished utilizing SQL.

The conversation flowed to discuss modernization, how SQL can support those efforts, and why moving business logic out of our programs and into our databases makes for good programming practices.

“The more we can get business logic out of our programs into the database, the better,” Birgitta said. “Normally you cannot see the database without your programs and the inverse. The more we can get into the database, the less we have to do in our program.”

Birgitta shared her insights on one of her favorite SQL tool – SQL Views. With this powerful tool, you can build very complex SQL Statements while hiding the complexity. This makes it so that everyone in your team can use the same procedure, independent of the programming language. It is a tool that can prove invaluable in modernization efforts.

The conversation continued and this overview just brushes the surface of a one or two diamonds in Birgitta’s treasure trove of SQL knowledge. She is a pro in every sense of the word, and I am so grateful she joined as a guest on iChime.

On Some Level, System Administration is Every Developer’s Responsibility

There is a common perception among developers that system health is strictly an admin role that does not overlap with development. Truth be told though, I have a hard time creating such a strict delineation between these roles. They compliment and rely on each other so much that they cannot be totally separated into strictly black and white jobs. As developers then, we need to have a least an entry level knowledge of system administration so that we can help protect the health of our systems.

Joining us last week on iChime to share both her knowledge and adventures on the IBM i was my dear friend, Dawn May. Agreeing that system health is everyone’s prerogative, she shared some invaluable information that was backed up with some great stories. She started with this one, one that was extremely pertinent to the developer crowd on the call.

“A developer decided that creating objects in QTEMP was a great idea – and not bad, maybe. But if you do this a lot, and it needs to scale, it becomes debilitating,” Dawn shared. The company she was telling us about a bank that eventually grew to a big shop and the object creation was never revisited. Eventually, the performance went down over lunch when bank clientele would go to the ATM and perform a transaction on their break.

“It was just because they were creating message cues in QTEMP in the application. One profile owned every message cue,” Dawn said. When creating or deleting a message the object ownership had to be updated in the user profile object. If the creates and deletes are happening on a single profile, it creates a point of contention and then the system stops working.

“In this case, it was an application decision and the application had to be modified to resolve the problem,” said Dawn. “So, system health and development are intimately related.”

And that story kicked off a fascinating conversation in which Dawn shared a wealth of knowledge, rattling off an amazing number of system message IDs without breaking a sweat, and shared stories of success as well as challenges she’s encountered.

Dawn weighed in on other tools such as Navigator, Performance Data Investigator (PDI), Graph History, Performance Adjuster, and ARE. From the standpoint of a developer, she discussed how they can be utilized to help improve or maintain good system performance. To find information and education about each of these tools, Dawn points us to her i Can blog, webinar replays on her website, and to COMMON events and replays.

From tool talk, we turned to hardware upgrades and increasing memory to solve system performance issues.

“Hardware upgrades can be very nice,” Dawn agreed, “but in the case of the story I told earlier about all the object creates and deletes, you could throw all the hardware you want at that and it wouldn’t help.”

Now, a very common response of many developers to problems with system performance is to increase system memory, expecting that this will fix all system performance issues.

“IBM i loves memory and the more you give it the happier it is!” said Dawn. But this is not always going to solve performance issues. “What’s really nice is that we don’t have to guess anymore when it comes to memory. 10-15 years ago, you had to just guess and it was all smoke and mirrors. But within the Performance Data Investigator, there are actually memory usage charts that will show you your memory pools and how much memory you have allocated and how much is available. You now have data to help make your tuning decisions.”

We could have talked all day with Dawn and this is only a high-level overview of her time with us. To really enjoy this system administration for developers conversation, you’ll really want to listen to the podcast when it is released. It was a truly great conversation that you do not want to miss.

Don’t Wait to Advocate!

Advocacy for your IT team and the work you do is not optional in today’s environment. Management often does not see IT as a valued business partner, but rather as a support system for other departments. Advocacy for your department can be a game changer not just for you and your team, but for the organization as a whole.

When you advocate for the work your IT team does, you improve the visibility of what you bring to the enterprise and gain a seat at the strategic table. You can facilitate collaboration which will support company growth and allow people to do the same amount of work in less time by utilizing stronger, more versatile applications. The benefits are huge.

In spite of the benefits of advocacy, the idea of advocating can be a little intimidating. Many people look at it as something that only happens when something goes wrong. An advocate is someone sent into talk to management when an application blows up or a serious bug is discovered.

However, there is a better way to approach advocacy. Fumbles on the field grab the attention of management and bring focus to IT, but you want to begin advocating for your department long before that. You don’t want the conversation to be started when tensions are high and management is not only upset, but second guessing the applications and technology that they perceive to be the root an issue.

Bugs happen to the best of us. As a true IT professional, you have built applications that are sturdy, reliable, and of industrial strength. They operate as they should, keeping the business moving until that stray bug appears. These issues are the exception not the rule and it’s the periods of time between events that you will find the best opportunities to begin positive and effective dialogue.

So instead of being intimidated by advocacy, here is a simple, positive approach that you can take.

Start by assessing your organization. How are your applications working for the users across your enterprise? Are there any pain points that management or very visible departments are experiencing? If there are, these are your golden ticket, the low hanging fruit waiting for you to pick.

Choose one pain point that is easy to tackle but has high visibility and take the initiative to build a solution. Once that is done, go to management and tell them about the fix. Avoid lofty tech terms and just let them know a solution is now in place. This opens the door to positive dialogue while also shining a spotlight on the IT department in a good way.

Once that critical channel of communication is open, there is a real opportunity for you to shift the perspective of management. You will be able to highlight what you and your team are working on, the value you provide to the company, and the ROI tied to your applications. Show them what is happening when they aren’t looking, the robust software that is driving their business, and pull up a chair to a collaborative conversation. When you have a seat at the table, you will learn all kinds of ways that you can support the company through IT solutions. In turn, management will begin to see software as a way to make their business goals reality. The door is open and the perspective begins to shift towards seeing IT as a valued business partner.

So I encourage you – don’t wait for that bug to wreak havoc to begin advocating for your company. Fortune favors the bold and the go-getter, so find that pain point, create the solution, and step into the role of IT advocate.

Marina Schwenk on Understanding Unit Testing and Modular Coding Using IBMiUnit

I wondered during March’s iChime how many of us were surprised to hear that our special guest had originally wanted to become an FBI investigator.  Fortunately for us, she’d found her real passion within the IBM i community while attending Gateway College and the Wisconsin Midrange User Group WMCPA. And apparently she was hard to restrain in her pursuit of software development.

About five years ago Marina felt at a loss for a good IBM i testing tool.

Granted, testing code is hardly a new concept. Formal testing tools have been around forever. But “unit testing is brand-new to the IBM i community. It’s hardly done and rarely talked about,” Marina explained.

She had originally started unit testing using Java-based tools JUnit and the open-source xUnit. And while RPGUnit is available, it has not been updated in some time. Even better would be a more recent, free open-source alternative to RPGUnit. Naturally she investigated; she dug for evidence that a solution existed. But the case went cold. So Marina developed her own: IBMiUnit.

What is IBMiUnit and how does it help in development?

Within the context of a use case pertaining to as you continue to modify code, test cases will identify if you’ve broken something, Marina stressed the importance of test-driven development (TDD), by which we develop test cases before we write any code, and demonstrated IBMiUnit’s capabilities for unit testing, to test and validate assertions, ensuring early on that code is working properly and existing functions aren’t being disrupted.

That’s how you build confidence in your existing code.

Since unit testing is bench testing, not in its environment, Marina advised that after unit testing should come integration testing in a test environment. Most larger companies will also have a quality-assurance department. But the whole idea is to test the code and get it clean and solid, she explained.

She noted two good additional points to consider: If you are changing the logic of your procedures, you should always re-test; and you will have a much better unit-testing experience when your code is modularized.

From the perspective of an industry veteran, the “big deals” about IBMiUnit might include:
  • It’s free and open-source.
  • Open source is still relatively new to the IBM i community; it’s a whole paradigm shift in how software is being distributed and consumed.
  • Now IBM i can support external environments and a variety of languages.

The takeaway for March iChime’s attendees: They’re going to commit more time to using a tool for unit testing, and they’re looking forward to trying IBMiUnit.

Find it on GitHub here: https://github.com/MarinaSchwenk/IBMiUnit

What did I take away? Marina’s technical development and presentation were great, as was the story of her journey from agent of investigation to agent of integration. But what impressed me at least as much was how much she’s accomplished in five years. Marina discussed another project she developed for error logging, specifically to identify when errors occur. Error messages are captured in a log table and can be interrogated which is helpful in debugging and error trapping. To download the source for this logging project, visit https://github.com/MarinaSchwenk/Logging

Hear more from Marina Schwenk in our Tech Talk at TechChannel: https://techchannel.com/SMB/01/2021/marina-schwenk-techtalk

Thank you, Marina, and to all who joined us in March.

Join us at iChime!

iChime reconvenes Thursday, April 8th, 2021 at 2:00 PM EST.

Special guest: “Swiss Army Knife” Richard Schoen on “See What i Can Do.”

Wondering how not to miss timely and relevant information in a friendly and casual setting in 2021? Sign up here to join us: https://www.centralparkdata.com/ichime-signup.html   

Is there a particular topic or special guest you would like to see? By all means, send us your thoughts at https://www.centralparkdata.com/contact.html

Dr. Frank Soltis inspires on iChime

During our February iChime meeting, the legendary Dr. Frank Soltis, who holds multiple hardware patents, took us through the high points and milestones of his fascinating 40-year career as an IBM chief scientist. This included, most notably to many, as chief architect for the AS/400. To record-breaking virtual attendance, he shared stories of evolution and emergence in terms of technological trends, culture, thought processes and cutting-edge machine design as well as insights to his own pioneer mindset and trail-blazing architectural activity.

Dr. Frank shared details of his journey, when, as a newly hired IBM systems architect working on the System/3(X) midrange business platform line, he was tasked with designing its next iteration as chief architect of the System/38. In line with innovation he had entertained while pursuing his Ph.D., Dr. Frank envisioned a single-level store methodology as, in summary, the least complex and most capable, and efficient way to proceed toward the future, especially with speed, adaptability and multiple-user functionality in mind.

When asked what the key to the AS/400’s success early on was, Dr. Frank attributed it largely to user groups, industry conferences, and also credited business-partners and customer advocacy.

Dr. Frank was a most engaging and inspiring guest.  As we approached the end of our meeting, many attendees “chimed-in” to personally thank Dr. Frank for the system which launched so many careers.  He was certain to remind us all, it was indeed a concerted effort with many, many people to thank; that a project of this scale could never be attributed to any one person. What a wonderful testament to IBM’s management and team collaboration. To read more about Dr. Frank, visit his Wikipedia page at https://en.wikipedia.org/wiki/Frank_Soltis.

Wondering how not to miss timely and relevant information in a friendly and casual setting month after month? Sign up here to join us: https://www.centralparkdata.com/ichime-signup.html  

Is there a particular topic or special guest you would like to see? By all means, send us your thoughts at https://www.centralparkdata.com/contact.html.

Jesse Gorzinski leads the way to Open-Source on IBM i

When I prompted Jesse Gorzinski, IBM’s Business Architect for open source on IBM i and creator of IBM i Access Client Solutions (ACS), “What is open source?” at the start of January’s iChime meeting, I was not surprised by his perfectly succinct reply.

“Open source is any application source code not only where there is a community for you to see the source code, but (that) also has some type of active contribution process by which you can suggest changes and make improvements to suit your needs,” Jesse explained. And “free” means freedom, not necessarily free of cost, he added.

One of the biggest challenges of using open source, he continued, is “the alphabet soup” of different technologies. But, he emphasized, that’s due more to the relative newness of open-source terminology to RPG developers, not to the validity of the methodology. Do not let that intimidate you, he urged as he shared his own journey from RPG developer to now-renowned open-source-on-IBM i expert — a reassuring story met by many nods of testament and a few “Hmmm”s of relief from many of the 60 attendees.

Jesse further explained how some processes which are already developed can easily be integrated into your existing applications and do much of the heavy lifting. Then he delivered to everyone just what they’d needed: a live, confident demonstration of Apache Camel (camel.apache.org), demonstrating with just a few lines of code how we could capture database changes which could be useful for other external applications.

During the session I polled attendees with a multiple-choice survey, asking, “What is your company’s attitude and readiness to adopt open-source solutions?”

Unsurprisingly, more than half (56 percent) replied, “We already have some in production and are always looking for new solutions to integrate.”  Clearly open-source solutions have already made their mark on our community.

What did I take away? The incredible depth of Jesse’s knowledge and passion for the ever-increasing adoption of open-source solutions, and how they clearly and quickly will enhance our existing applications to new heights.

Follow Jesse Gorzinski on Twitter here: https://twitter.com/ibmjesseg?lang=en  

If you want to join the open-source fun on IBM i, be sure to join one of the best collaboritive communities at https://ibmioss.ryver.com/application/signup/members/9tJsXDG7_iSSi1Q.

Already belong to the community? Click here to log back in https://ibmioss.ryver.com/application/login

iChime reconvenes at 2:00 p.m. EST Monday March 8, 2021 at 2:00PM EST.

Special guest: IBM Fresh Face ​Marina Schwenk on “Understanding Unit Testing and Modular Coding Using IBMiUnit, an RPG Unit Testing Framework.”

Wondering how not to miss timely and relevant information in a friendly and casual setting in 2021? Sign up here to join us: https://www.centralparkdata.com/ichime-signup.html   

Is there a particular topic or special guest you would like to see? By all means, send us your thoughts at https://www.centralparkdata.com/contact.html