Search This Blog

Wednesday, April 29, 2026

Text Report to Excel

 I was given a text file that had a format like similar the following...

============================================================== 
SHEET: SheetTitle1
==============================================================
HeaderTitle1   | HeaderTitle2
Row1Value1     | Row1Value2
Row2Value1     | Row2Value2
...
==============================================================
SHEET: SheetTitle2
==============================================================
HeaderTitle1   | HeaderTitle2
Row1Value1     | Row1Value2
Row2Value1     | Row2Value2
...
==============================================================
SHEET: SheetTitle3
==============================================================
HeaderTitle1   | HeaderTitle2
Row1Value1     | Row1Value2
Row2Value1     | Row2Value2
...
...

I found that I could do several different manual processes to put this all into a multi-tabbed Excel workbook doing something similar to the following:

-Open your text file. 

-Open Excel.

-For each Sheet: label, make a worksheet in Excel using the SheetTitle as the worksheet name.

-From the text file select all the rows in the current sheet section and paste them into A1.

-Select column A.

-Go to the Data menu > click on Text to Columns > Delimited > Other: as "|" > Next > Finish

This should move all your data in to properly labeled columns

-Make a new sheet and title it as the next section.

-From the text file select all the data rows of the section.

-In cell A1 on the new worksheet, paste.

Please notice that Excel may remember what you did on your first sheet and automatically properly delimit the data and make proper columns for your rows.

if it doesn't, then you can just go select col A > Data menu > Text to Columns again.

The final workbook would look like this...


As I was sent a source with more than 5 Sheets and hundreds of rows, that may have taken a bit to do. And, since data entry will put me to sleep, I decided to do it with code. I created a repo on GitHub at  https://github.com/LesleyPhillips/ReportToExcelWorkbook

There you can get the source Python and Powershell. the Input.txt, logs and Excel workbooks from the runs.

Here is the console of the runs, the logs contain the same.



A request to anyone seeing this:

While I appreciate the neatness of this format, I don't know of any program that would generate this input.txt as a standard format. If you know it, please reach out and let me know.   : )




Thursday, April 23, 2026

Jerome Township "Data Center" Pipeline

 I put my code in: https://github.com/LesleyPhillips/JeromeTownship

Jerome Township exist in Union county Ohio. They use CivicPlus to manage exposure of public facing documents. Getting to them one at a time for large scale analysis against the documents stored there was troublesome.

They have a pleasant interface accessible through their Agendas & Meetings. If you like to take some time doing so you can spend a lot of time click through their collection and downloading the files one at a time. I asked the Jerome township folks for a dump of the files and they directed me here. 


So...

I created a local directory, wrote some code, and downloaded a bunch of their stuff. From there I was able to rummage as I see fit.

E:\JeromeTownship\1766.pdf <- 16 Feb 2021 - Record of proceedings

E:\JeromeTownship\1828.pdf <-  7 Sep 2021 - Record of proceedings

I got over 1700+ doc altogether.

I did not keep the pretty names from CivicPlus. As they are not needed, but the file names were super important. With the file name I can access these files through:  "https://www.jerometownship.com/home/showpublisheddocument/"


But First..

Go to their website: https://www.jerometownship.com/

Go to Agendas and Minutes


Go and open a doc through their interface, 



Then after opening any one (this get you a proper session key for accessing the rest of the doc), you can modify the url to open the PDF of your choice...

Like this:   https://www.jerometownship.com/home/showpublisheddocument/2845.pdf

 

The text, below, from the PDFs from Jerome township are simple copy and paste. While the original images in the PDFs read properly, because Jerome Township wont share the original text that were used to create the documents, you get the computer's Optical Character Recognition translation. Below you can see some of the misspellings from that. 

I eventually worked on a body of Python to run the PDFs throug 3 different OCR filters where there was no underlying text, so this work is not definitive at all, but it is a fun start, and makes for a good academic workout.

As it is a bit of a hot topic of the day, I focused on the use of the words "data center". These are my initial results.



|---+----|----+----|----+----|----+----|----+----|----+----|----+----|----+----|


E:\JeromeTownship\2845.pdf <-  6 Dec 2022 - 2015 zoning resolution amended 

E:\JeromeTownship\2847.pdf <-  6 Dec 2022 - 2015 zoning resolution amended 

E:\JeromeTownship\2927.pdf <- 21 Nov 2016

E:\JeromeTownship\4576.pdf <-  6 Feb 2024 - 2015 zoning resolution amended

E:\JeromeTownship\4724.pdf <-  7 Aug 2024 - 2015 zoning resolution amended

E:\JeromeTownship\4930.pdf <-  6 Nov 2024 - Record of proceedings

Executive Session

At 8:34 p.m, it was moved by Barry Adler and seconded by Wezlynn Davis that the Jerome Township

Board of Trustees adopt the following motion:


The Jerome Township Board of Trustees adjourn into executive session pursuant to Ohio

Revised Code Section 121.22(G)(8) for the purpose of considering confidential information

related to the marketing plans, specific business strategy, and trade secrets of an applicant for

economic development assistance that is to be provided or administered pursuant to Sections

3735.65 to 3735.70, and Section 5709.73 of the Ohio Revised Code, and involves public

infrastructure improvements directly related to an economic development project. The

executive session is necessary to protect the interests of the applicant or the possible investment

or expenditure of public funds to be made in connection with the proposed economic

development project.


The vote resulted as follows:

Barry Adler, yes

Wezlynn Davis, yes

Lonnie (Joe) Craft, yes

The motion carried.

E:\JeromeTownship\4936.pdf <- 17 Dec 2024

The entire record was about adding ~7 acres for the support of a data center

The vote resulted as follows:

Barry Adler, yes

Wezlynn Davis, yes

Lonnie (Joe) Craft, yes

The motion carried. (Res. 24-092)

E:\JeromeTownship\5194.pdf <-  3 Sep 2025 - Meeting Agenda

E:\JeromeTownship\5208.pdf <-  7 May 2025 - 2015 zoning resolution amended

E:\JeromeTownship\5214.pdf <-  5 Aug 2025 - Record of proceedings

Public Participation

Jeanette Harrington addressed the Board regarding the noise from the data center located on Ind Iustrial Parkway. She indicated the business has refused to address the noise issue and pointed to the Zoningise Resolution stating that conditional use approval should not be permitted if there is excessive traffic, noise or odors She added the excessive noise beeins around 9:00 p.m and poes through the night. Eric or odors. She added the excessive noise begins around 9:00 p.m. and goes through the night. Eric Snowden pointed out that the section ofthe Zoning Code Jeanette Harrington referenced had been amended since the conditional use permit for this business was approved. He also referenced the performance standards located in Section 670. It was recommended that Eric Snowden work with the resident to obtain additional decibel readings

E:\JeromeTownship\5216.pdf <-  7 May 2025 - 2015 zoning resolution amended

E:\JeromeTownship\5242.pdf <- 19 Aug 2025 - Record of proceedings

Public Comment

Mike Nolan addressed the Board indicating he has had a good working relationship with Mr. Dugger through a prior project. He stated his concerns may be premature as the use of the property has yet to beв determined.d. He stated he understands the desire for this property to be zoned commercial but fears the project could related to a data center. He reiterated he is not opposed to the proposed commercial use but counativak offoct cutrent recidente does oppose any use which would negatively affect current residents.

Several other residents expressed their concerns over data centers and questioned the process of how residents are notified of rezoning requests. The Board assured the residents that all proper notifications did take place

Board of Trustee Action

Barry Adler proposed the Board continue the hearing to allow the applicant to meet with neighbors to address their concerns. Glen Dugger stated his willingness for the hearing to be continued At 8:36 p.m. it was moved by Joe Craft and seconded by Wezlynn Davis that the Board of Township Trustees of Jerome Township adopt the following motion:

The Jerome Township Board of Trustees continue the hearing in Case No. Z25-002 until September 3, 2025 at 7:00 p.m. at the Township Hall located at 9777 Industrial Parkway.

The vote resulted as follows:

Barry Adler, yes

Wezlynn Davis, yes

Lonnie (Joe) Craft, yes

The motion carried

E:\JeromeTownship\5289.pdf <- 3 Sep 2025  - Record of proceedings (the moratorium)

Members of the Board stated that due to citizens' concerns regarding data centers and performance standards to be reviewed and possibly updated, they wished to consider a moratorium on data centers. It  was noted that while data centers can be a source of economic returns with limited impact of roads and schoole theu ale necent renes for recidente neludng noics tichting huff The schools, they also present issues for residents including noise, lighting, buffering, and construction. The Board debated the length of the moratorium ranging from six months to one year. Wezlynn Davis recommended twelve months while Joe Craft indicating he is okay with six months. Barry Adler reminedthe Board of the amount of time it takes to approve amendments to the standards. Wezlynn Davis then proposed nine months. It was moved by Wezlynn Davis and seconded by Joe Craft that the Jerome ieesoard of Tostees adont the followine resolution Township Board of Trustees adopt the following resolution:

The Jerome Township Board of Trustees approve a Resolution to Enact a Nine-Month Moratorium on the Receipt, Processing, Issuance or Approval of any Application for a Zoning Certificate Certiticate 10r for NAICS NAICS 51s 518 -ata - Data Processing, rocessing, frosting Hosting and Related Services (Data Centers) ad Riat Under Article 4, Sections 440-01 & 445.01 or Article 5 of the Jerome Zoning Resolution.

The vote resulted as follows:

Barry Adler, yes

Wezlynn Davis, yes

Lonnie (Joe) Craft, yes

The resolution carried. (Res. 25-061)


E:\JeromeTownship\5323.pdf <- 12 Jan 2026 - Zoning Commission Agenda

G. New Business/Public Hearing(s)

1. Case #ZT25-002 –Text Amendment, Data Center Land Use, Articles 2, 4, 5, & 6 Revisions

[Case File] -> https://jerometownship.portal.iworq.net/JEROMETOWNSHIP/permit/601/27940247

E:\JeromeTownship\5335.pdf <- 26 Jan 2026 - Zoning Commission Agenda

E. Old Business/Continued Public Hearing(s)

1. Case #ZT25-002 –Text Amendment, Data Center Land Use, Articles 2, 4, 5, & 6 Revisions

[Case File] (same as above)

E:\JeromeTownship\5341.pdf <- 09 Feb 2026 - Zoning Commission Agenda

E. Old Business/Continued Public Hearing(s)

1. Case #ZT25-002 –Text Amendment, Data Center Land Use, Articles 2, 4, 5, & 6 Revisions

[Case File] (same as above)


The Data Center Moratorium: https://iworq-upload.s3.amazonaws.com/JEROMETOWNSHIP/601/31281677-Res.%2025-061%20-%20Res.%20enacting%20moratorium%20on%20data%20centers.pdf

I found the memorandum doc link as an attachment to #ZT25-002

Monday, January 5, 2026

OBS - RedBlue 3d

 A Fun Thing To Do


I wanted to recreate a Red–Blue 3D (Anaglyph) video capability I lost.

Many years ago I purchased a Minoru 3D Web cam back in my 16-bit Windows days.


I still have it.   : )

If you have a few cameras sitting around, you can do the same thing using OBS Studio.



Here's How I Did It


The Equipment


I'm using a couple of Ubisoft cameras that operated well at 640x480. They do not have microphones. Speed and resolution are not a factor for me. They are cheap and do the job. 


You will want to set them so that the center of the cameras are about 6cm apart.

And, point them at your nose as close as you can. 

This take some patience and practice

Pick a meeting software and grab some images to compare, I found using two different meeting softwares, running side by side, one using the left camera and the second using the right camera, allowed to live point-tuning effectively.

When working with these cameras, you will be referencing them as if from the point of view of the eyes of the someone looking at you. The camera on the right, will be the red left eye of the person viewing you, and the camera on the left will the cyan right eye of the person viewing you.


The Software

You'll want to go to https://obsproject.com/ and download a version of OBS Studio for your system.

It's been a while since I did an initial load and configure of OBS. So I go nothing for that.

In OBS I created a Scene called RedBlue_Source


 I added two sources Right_Cyan and Left_Red.

And, finally, the RedBlue_Cropped scene is the final (polished?) output


Setup


Right_Cyan (the left camera)

Hit the plus (+) button (at the bottom) and choose Video Capture Device

Create New: Right_Cyan

Click OK

The Properties for Righ_Cyan will pop up.

This is what my properties look like...

I had to enable Deactivate when not showing.

I disabled Apply rotation data from the camera...

Click OK


* just a note here...

Deactivate when not showing may be needed due to the default USB drivers. Apparently, when switching scenes, a camera can get stuck on its initial frame (frozen). 


Add a Cyan Tint

Right Click the Right_Cyan source, and then on Filter.


Plus button, then Color Correction.

 

Name: Cyan_Tint

Click OK

Click the Select Color button.

Set HTML: #00ffff (zero zero foxtrot foxtrot foxtrot foxtrot)


Click OK

Adjust the Opacity to somewhere between .5 and .7   <--    IMPORTANT   ***

Adjust the other sliders to taste.

Here is what mine looks like... 



Fill the screen (optional)

This is a preference, but I like my sources to fill the screen. As the canvas (the output) is by default, 1920x1080, this tiny 640x480 video feed will only fill in a small portion of the screen. To demonstrate, observe the  red rectangle in the upper left corner, of this canvas (larger blue box around mostly everything. this is the default size on my video source unless I do something to it.


My Preference it to let it fill the screen. by default it will get letterboxed as needed.

Right click the source Right_Cyan > Transform > Fit to screen 



Left_Red (the right camera)

These Steps are very similar to the Right_Cyan steps.


Hit the plus button (at the bottom) and choose Video Capture Device

Create New: Left_Red

Click OK

The Properties for Left_Red will pop up.

Enable Deactivate when not showing.

Disabled Apply rotation data from the camera.

Click OK

Add a Red Tint

Right Click the Left_Red source, and then on Filter.

Plus button, then Color Correction.


 Name: Red_Tint

Click OK

 

Click the Select Color button.

Set HTML: #ff0000 (foxtrot foxtrot zero zero zero zero)

Click OK

 

Keep the Opacity at 1   <--   IMPORTANT   ***

Adjust the other sliders to taste.

Here is what mine looks like...


 

Fill the screen (optional)

Only do this if you did it for the Right_Cyan source

Right click the source Left_Red > Transform > Fit to screen


Adjust the layers

Layer Order

The sources can be dragged to ordered. but with the settings described as above, you will want Right_Cyan on top, then Left_Red

If you flip them, you may notice that the cyan layer is not visible.


 

Just drag the top source  to the bottom of the list, to flip them back.

Vertical and Horizontal Camera Adjustments

To ease eye strain, you will want to bump the cameras to as horizontally correct as you can determine. 

This feed is likely to cause some stress...


It works, because our brains are amazing things, but after a while it will be annoying.

By selecting the source then holding down the mouse button on the object on the canvas, you can use the arrow keys to make very small adjustments to the layers positions on the canvas.


In this example it puts the red-blue focus somewhere in the middle of my head. And as the vertical alignment is close, less strain on viewers.


Trim the Edges

After tweaking the larger positions I noticed that there was some extra red and cyan trim around the edge on my layers.


 

Right Click the scene RedBlue_Source > Filters


 

Plus Button > Crop/Pad


name: EdgeTrim

Click OK

 

At this point you'll have to play until you are happy with the results. Here is what mine looks like

 


Source Final...



Final Scene

Earlier I mentioned letterbox, OBS does not letterbox, or pillerbox, unless the source aspect ratio differs from the canvas AND you use “Fit to screen”. The last step...

Make a new scene 

Scenes box > Plus button

Name: RedBlue_Cropped

Click OK

The sources box will be empty,

Add a Source

Source box > Plus button > Scene


Add Existing > select RedBlue_Source

Click OK


In Sources, Right click the RedBlue_Source > Transform > Fit to screen




Final!




Use it


On installing the software,  OBS creates a virtual video source called OBS Virtual Camera that is usable by most meeting software.

In Zoom it looks like this...


When you are ready to start using it, Start OBS, select the scene RedBlue_Cropped,  and start the virtual camera (button in the lower right).


The start button toggles to Stop... 




Conclusion

There are actual video engineers out in the world that you should probably consult for advice on how to do this stuff. But, hopefully it gets you on a starting path.



You're done!   : )





P.S.   I still have the original packaging and glasses!   : )