• Log InLog In
  • Register
Liquid`
Team Liquid Liquipedia
EST 06:20
CET 12:20
KST 20:20
  • Home
  • Forum
  • Calendar
  • Streams
  • Liquipedia
  • Features
  • Store
  • EPT
  • TL+
  • StarCraft 2
  • Brood War
  • Smash
  • Heroes
  • Counter-Strike
  • Overwatch
  • Liquibet
  • Fantasy StarCraft
  • TLPD
  • StarCraft 2
  • Brood War
  • Blogs
Forum Sidebar
Events/Features
News
Featured News
ByuL: The Forgotten Master of ZvT28Behind the Blue - Team Liquid History Book19Clem wins HomeStory Cup 289HomeStory Cup 28 - Info & Preview13Rongyi Cup S3 - Preview & Info8
Community News
Weekly Cups (Feb 16-22): MaxPax doubles0Weekly Cups (Feb 9-15): herO doubles up2ACS replaced by "ASL Season Open" - Starts 21/0258LiuLi Cup: 2025 Grand Finals (Feb 10-16)46Weekly Cups (Feb 2-8): Classic, Solar, MaxPax win2
StarCraft 2
General
Terran AddOns placement How do you think the 5.0.15 balance patch (Oct 2025) for StarCraft II has affected the game? Nexon's StarCraft game could be FPS, led by UMS maker ByuL: The Forgotten Master of ZvT Oliveira Would Have Returned If EWC Continued
Tourneys
PIG STY FESTIVAL 7.0! (19 Feb - 1 Mar) Sparkling Tuna Cup - Weekly Open Tournament SEL Doubles (SC Evo Bimonthly) WardiTV Team League Season 10 RSL Season 4 announced for March-April
Strategy
Custom Maps
Publishing has been re-enabled! [Feb 24th 2026] Map Editor closed ?
External Content
Mutation # 514 Ulnar New Year The PondCast: SC2 News & Results Mutation # 513 Attrition Warfare Mutation # 512 Overclocked
Brood War
General
Recent recommended BW games TvZ is the most complete match up BGH Auto Balance -> http://bghmmr.eu/ Soma Explains: JD's Unrelenting Aggro vs FlaSh ACS replaced by "ASL Season Open" - Starts 21/02
Tourneys
The Casual Games of the Week Thread [Megathread] Daily Proleagues [LIVE] [S:21] ASL Season Open Day 1 ASL Season 21 Qualifiers March 7-8
Strategy
Soma's 9 hatch build from ASL Game 2 Fighting Spirit mining rates Simple Questions, Simple Answers Zealot bombing is no longer popular?
Other Games
General Games
Nintendo Switch Thread Battle Aces/David Kim RTS Megathread Path of Exile Beyond All Reason New broswer game : STG-World
Dota 2
Official 'what is Dota anymore' discussion
League of Legends
Heroes of the Storm
Simple Questions, Simple Answers Heroes of the Storm 2.0
Hearthstone
Deck construction bug Heroes of StarCraft mini-set
TL Mafia
Vanilla Mini Mafia Mafia Game Mode Feedback/Ideas TL Mafia Community Thread
Community
General
US Politics Mega-thread Things Aren’t Peaceful in Palestine UK Politics Mega-thread YouTube Thread Mexico's Drug War
Fan Clubs
The IdrA Fan Club The herO Fan Club!
Media & Entertainment
[Manga] One Piece [Req][Books] Good Fantasy/SciFi books Anime Discussion Thread
Sports
2024 - 2026 Football Thread Formula 1 Discussion TL MMA Pick'em Pool 2013
World Cup 2022
Tech Support
Laptop capable of using Photoshop Lightroom?
TL Community
The Automated Ban List
Blogs
YOUTUBE VIDEO
XenOsky
Unintentional protectionism…
Uldridge
ASL S21 English Commentary…
namkraft
Inside the Communication of …
TrAiDoS
Life Update and thoughts.
FuDDx
How do archons sleep?
8882
Customize Sidebar...

Website Feedback

Closed Threads



Active: 2685 users

The Big Programming Thread - Page 705

Forum Index > General Forum
Post a Reply
Prev 1 703 704 705 706 707 1032 Next
Thread Rules
1. This is not a "do my homework for me" thread. If you have specific questions, ask, but don't post an assignment or homework problem and expect an exact solution.
2. No recruiting for your cockamamie projects (you won't replace facebook with 3 dudes you found on the internet and $20)
3. If you can't articulate why a language is bad, don't start slinging shit about it. Just remember that nothing is worse than making CSS IE6 compatible.
4. Use [code] tags to format code blocks.
Manit0u
Profile Blog Joined August 2004
Poland17677 Posts
Last Edited: 2016-02-13 07:47:26
February 12 2016 23:35 GMT
#14081
Client request: This page loads really slow, could you take a look at it?

Single entity view. 3850 database queries, 2500 forms inside a single modal that's used in 0.01% cases, 700MB memory use, 23sec response time...

Further inspection shows building an enourmous select, each option containing an entire form (all that inside the modal), just for the ajax request when the modal is fired up to select one of those forms and discard the rest using JS html manipulation.

Working with legacy code is rarely a pleasure.

Edit:
I guess I'll post here a bit of my history and mention my first true mentor. The owner of one of the companies I used to work for. He was "The Man". Every time someone said something like "It's impossible" he would make everyone stop what they're doing and publicly lecture the person who used those words about the company policy: "We don't use the word 'impossible' here".

Anyway, every time I mentioned I had a problem (I was a mere intern at the time) he would come over and ask me "What is your problem?". Then, I'd tell him that "This and that doesn't work", "This is overly convoluted" etc. and every single time he would simply respond: "That's not your problem. What is your problem?", and he'd repeat that question over and over again until I finally got it. Then, he'd ask me to take pen and paper and show him how I intend to solve it. Many questions and many sheets of paper later I'd come to the conclusion that my problem wasn't as problematic as I thought it was.

There's a lesson in there for anyone who wants to learn coding.
Time is precious. Waste it wisely.
tofucake
Profile Blog Joined October 2009
Hyrule19193 Posts
February 13 2016 04:37 GMT
#14082
who builds a single entity like that? what the hell
Liquipediaasante sana squash banana
Manit0u
Profile Blog Joined August 2004
Poland17677 Posts
February 13 2016 07:46 GMT
#14083
The queries come from fetching objects with relations, hydrating them and populating all those forms with them.
Just commenting out this collection of forms cuts the number of queries down to 20 and all the other parameters get a lot closer to acceptable limits. There's so much work to be done
Time is precious. Waste it wisely.
spinesheath
Profile Blog Joined June 2009
Germany8679 Posts
February 13 2016 08:58 GMT
#14084
On February 13 2016 08:35 Manit0u wrote:
Edit:
I guess I'll post here a bit of my history and mention my first true mentor. The owner of one of the companies I used to work for. He was "The Man". Every time someone said something like "It's impossible" he would make everyone stop what they're doing and publicly lecture the person who used those words about the company policy: "We don't use the word 'impossible' here".

There are impossible things in software development though. Every now and then we get requests from our customers that are either mutually exclusive with existing intended behavior or even downright contradictory in themselves. Usually there are other ways to get the customer a satisfying result, but still, we don't do the impossible.
If you have a good reason to disagree with the above, please tell me. Thank you.
berated-
Profile Blog Joined February 2007
United States1134 Posts
February 13 2016 11:35 GMT
#14085
On February 13 2016 17:58 spinesheath wrote:
Show nested quote +
On February 13 2016 08:35 Manit0u wrote:
Edit:
I guess I'll post here a bit of my history and mention my first true mentor. The owner of one of the companies I used to work for. He was "The Man". Every time someone said something like "It's impossible" he would make everyone stop what they're doing and publicly lecture the person who used those words about the company policy: "We don't use the word 'impossible' here".

There are impossible things in software development though. Every now and then we get requests from our customers that are either mutually exclusive with existing intended behavior or even downright contradictory in themselves. Usually there are other ways to get the customer a satisfying result, but still, we don't do the impossible.


It's all about how you look at it. If you gave the customer satisfying results then it sounds like you did just do the impossible. There are lots of times, especially in working with customers, that you get unreasonable requests. It's all about realizing that everything in software development becomes a trade off. I'm still a firm believer and tell our customers that anything is possible...given enough time and money. You and I both know that that last part is laughable, but it's true. How bad does the customer really want what they are asking for?

All that being said, I still like a culture that believes that nothing is impossible because it lends itself well to always trying to think through the problem to find a solution. I hate it when people just throw their hands in the air and say that it's impossible or can't be done. Find the solution certainly doesn't mean that it's reasonable, but it still exists, and sometimes... it might just be crazy enough to work.
Shield
Profile Blog Joined August 2009
Bulgaria4824 Posts
February 13 2016 22:16 GMT
#14086
Does StarCraft need any application which we could develop in our free time as a group?
Railgan
Profile Joined August 2010
Switzerland1507 Posts
February 14 2016 19:57 GMT
#14087
On February 14 2016 07:16 Shield wrote:
Does StarCraft need any application which we could develop in our free time as a group?

I heard we need a new MapHack

...

There are always nice applications that could improve the QOL of players.
Grandmaster Zerg from Switzerland!!! www.twitch.tv/railgan // www.twitter.com/railgansc // www.youtube.com/c/railgansc
phiinix
Profile Blog Joined February 2011
United States1169 Posts
February 15 2016 06:42 GMT
#14088
On February 06 2016 14:34 vik7 wrote:
Hey I never really posted on this thread before, I'm just wondering If I could find a mentor or something I've been learning Java, yes I watch videos and read about java, and practice, however hopefully I can find a mentor I can skype here and there with questions =D


Funny I was just thinking the same thing. Its not so much that I can't be bothered to google the question, but that I don't know how to phrase the question in a way that returns the answer I'm looking for..
Gowerly
Profile Blog Joined July 2011
United Kingdom916 Posts
February 15 2016 09:48 GMT
#14089
On February 15 2016 04:57 Railgan wrote:
Show nested quote +
On February 14 2016 07:16 Shield wrote:
Does StarCraft need any application which we could develop in our free time as a group?

I heard we need a new MapHack

...

There are always nice applications that could improve the QOL of players.

Come help me do StarGraphed. I'm time limited.
I will reduce you to a series of numbers.
Soan
Profile Blog Joined August 2010
New Zealand194 Posts
February 15 2016 18:26 GMT
#14090
Anyone here got experience with AngularJS and Typescript? I've got everything working fine except for directives. I can't seem to figure out how to get them to work with Typescript. I've done some googling, but nothing I've tried, when it comes to declaring them etc, just getting them setup so that I can use them.
Wrath
Profile Blog Joined July 2014
3174 Posts
February 16 2016 19:56 GMT
#14091
I did not even reached the point of working on the question as yet I still have to understand it first. Can someone be kind and explain this to me?

https://www.reddit.com/r/dailyprogrammer/comments/43ouxy/20160201_challenge_252_easy_sailors_and_monkeys/

I tried to read some comments on how it works but it seems there is no "unified" opinion how this works...
spinesheath
Profile Blog Joined June 2009
Germany8679 Posts
Last Edited: 2016-02-16 20:16:50
February 16 2016 20:14 GMT
#14092
On February 17 2016 04:56 WrathSCII wrote:
I did not even reached the point of working on the question as yet I still have to understand it first. Can someone be kind and explain this to me?

https://www.reddit.com/r/dailyprogrammer/comments/43ouxy/20160201_challenge_252_easy_sailors_and_monkeys/

I tried to read some comments on how it works but it seems there is no "unified" opinion how this works...

Basically, the N sailors do this:

int coconuts = ...;
for(int i = 0; i < N; ++i)
{
// at this point coconuts % N must be 1
coconuts -= 1; // goes to the monkey
// at this point coconuts % N must be 0
coconuts -= coconuts / N; // hidden by a sailor
}
// at this point coconuts % N must be 0
// split the remaining coconuts among N sailors

The question asks you to work out the lowest possible number of initial coconuts of any N > 1.

Also this is more of a math puzzle than a programming question.
If you have a good reason to disagree with the above, please tell me. Thank you.
Wrath
Profile Blog Joined July 2014
3174 Posts
February 16 2016 20:52 GMT
#14093
On February 17 2016 05:14 spinesheath wrote:
Show nested quote +
On February 17 2016 04:56 WrathSCII wrote:
I did not even reached the point of working on the question as yet I still have to understand it first. Can someone be kind and explain this to me?

https://www.reddit.com/r/dailyprogrammer/comments/43ouxy/20160201_challenge_252_easy_sailors_and_monkeys/

I tried to read some comments on how it works but it seems there is no "unified" opinion how this works...

Basically, the N sailors do this:

int coconuts = ...;
for(int i = 0; i < N; ++i)
{
// at this point coconuts % N must be 1
coconuts -= 1; // goes to the monkey
// at this point coconuts % N must be 0
coconuts -= coconuts / N; // hidden by a sailor
}
// at this point coconuts % N must be 0
// split the remaining coconuts among N sailors

The question asks you to work out the lowest possible number of initial coconuts of any N > 1.

Also this is more of a math puzzle than a programming question.


Would you be kind to solve it mathematically as I still don't quite get the whole idea of the question... Yes I'm very slow at getting things... T_T
tofucake
Profile Blog Joined October 2009
Hyrule19193 Posts
February 16 2016 21:38 GMT
#14094
Watch the video in the reddit OP, they go over the math quite well
Liquipediaasante sana squash banana
Ropid
Profile Joined March 2009
Germany3557 Posts
Last Edited: 2016-02-16 21:46:04
February 16 2016 21:43 GMT
#14095
On February 17 2016 05:52 WrathSCII wrote:
Show nested quote +
On February 17 2016 05:14 spinesheath wrote:
On February 17 2016 04:56 WrathSCII wrote:
I did not even reached the point of working on the question as yet I still have to understand it first. Can someone be kind and explain this to me?

https://www.reddit.com/r/dailyprogrammer/comments/43ouxy/20160201_challenge_252_easy_sailors_and_monkeys/

I tried to read some comments on how it works but it seems there is no "unified" opinion how this works...

Basically, the N sailors do this:

int coconuts = ...;
for(int i = 0; i < N; ++i)
{
// at this point coconuts % N must be 1
coconuts -= 1; // goes to the monkey
// at this point coconuts % N must be 0
coconuts -= coconuts / N; // hidden by a sailor
}
// at this point coconuts % N must be 0
// split the remaining coconuts among N sailors

The question asks you to work out the lowest possible number of initial coconuts of any N > 1.

Also this is more of a math puzzle than a programming question.


Would you be kind to solve it mathematically as I still don't quite get the whole idea of the question... Yes I'm very slow at getting things... T_T

Play through the events of a random example.

Let's say you have 72 coconuts. You have 5 sailors. There's the monkey.

It turns dark, the night starts. The first sailor has his go at the pile.

The first sailor's calculates 72 / 5 = 14 * 5 + 2. He takes 14 coconuts and the monkey gets 2. What happens to the pile of coconuts is 72 - 14 - 2 = 56.

The second sailor calculates 56 / 5 = 11 * 5 + 1. He takes 11 coconuts and the monkey gets 1. The changes in the pile are 56 - 11 - 1 = 44.

Third: 44 -> (8, 4) and 32

Fourth: 32 -> (6, 2) and 24

Fifth: 24 -> (4, 4) and 16

Then the night ends and on the next day the pile is 16 coconuts. That divides into 3 coconuts per sailor and remainder 1.

As you can see, if you have 72 coconuts in the starting pile, the rules that are mentioned in the question don't work out. For each sailor, there's supposed to always be a remainder of one coconut for the monkey, but in this play-through here, this was different for each sailor. The pile at the end is supposed to have a number of coconuts that divide by the number of sailors, but here this wasn't the case.

You are now supposed to search for a number of coconuts for the pile where this all works out.
"My goal is to replace my soul with coffee and become immortal."
Blisse
Profile Blog Joined July 2010
Canada3710 Posts
Last Edited: 2016-02-17 02:26:14
February 17 2016 00:11 GMT
#14096
On February 15 2016 15:42 phiinix wrote:
Show nested quote +
On February 06 2016 14:34 vik7 wrote:
Hey I never really posted on this thread before, I'm just wondering If I could find a mentor or something I've been learning Java, yes I watch videos and read about java, and practice, however hopefully I can find a mentor I can skype here and there with questions =D


Funny I was just thinking the same thing. Its not so much that I can't be bothered to google the question, but that I don't know how to phrase the question in a way that returns the answer I'm looking for..


Well like 80% of real programming is communication, so it's definitely a skill worth working on. Try to read programming blogs if you want to get a feel for talking about technical topics, or listen to Youtube tutorials, or best of all write some (a lot).

And honestly I'm pretty sure if you just post in here random mumbo jumbo someone's bound to guess at what you're talking about. If you have questions people can answer, or if you want code review just throw stuff on a Github repo and link it.

---

side tangent, but Ive been blogging in my free time for the last 4 years and I've totally noticed that my written communication skills have gotten a lot better. Creative writing in school is pretty fun to me now that writing comes more naturally.
There is no one like you in the universe.
enigmaticcam
Profile Blog Joined October 2010
United States280 Posts
Last Edited: 2016-02-23 04:54:50
February 23 2016 04:50 GMT
#14097
Anyone here have experience with using websites in Azure? First time for me and I'm trying to figure out how to use the session in an Azure web app. From what I've read, the typical way of using session is not supported by Azure. Before, I used to do something like this:

public ViewState GetViewState(bool refresh) {
ViewState viewState = (ViewState)Session["ViewState"];
if (viewState == null || refresh) {
viewState = new ViewState();
Session["ViewState"] = viewState;
}
return viewState;
}


ViewState is an object I use to hold all other objects I want to save in session. I can't seem to find a way to do it as simply as this that Azure supports. Everything else I've found requires me to either (1) specify key-value pairs of data, thereby making complex objects to store a nightmare, (2) serialize all objects into a string, meaning now I have to make sure all my objects are serializable and the objects they use are seriablizable, etc, or (3) use some kind of table data storage, meaning now I have to manage tables, and any changes to what I want to store in session will be double the work with having to keep the tables up to date.

I tested the code above, and it seems to work just fine in Azure as it does in IIS on my personal machine. Am I at risk if I just do it the way I've always done it?
Manit0u
Profile Blog Joined August 2004
Poland17677 Posts
Last Edited: 2016-02-23 08:50:33
February 23 2016 08:36 GMT
#14098
Why do you want to store complex data or a multitude of objects in the session? Using session state should be avoided when possible.

Edit:

I guess this might help you: https://azure.microsoft.com/en-us/blog/mvc-movie-app-with-azure-redis-cache-in-15-minutes/

There's also a section at the bottom of the article pertaining the session state provider.
Time is precious. Waste it wisely.
enigmaticcam
Profile Blog Joined October 2010
United States280 Posts
February 23 2016 16:25 GMT
#14099
It's what I've always done at work since we have full IIS servers dedicated to the web sites we build, so I'm trying to do the same thing at home with my own personal project. It's a huge time saver. When the business logic and class structures are complex, it saves me from having to manage an additional layer that extracts the raw data, saves it elsewhere, and has to know how to instantiate and reload all the objects again with that raw data.
Manit0u
Profile Blog Joined August 2004
Poland17677 Posts
February 24 2016 11:03 GMT
#14100
More legacy code adventures...

Boss: "Can you check what's wrong with this module?"

*taking a peek*
+ Show Spoiler +


function func1()
{
foreach () {
foreach () {
foreach () {
if () {
if () {
}
}
}
}
}

return;
}

function func2()
{
if () {
} else {
if () {
} else {
}
}

if () {
if () {
}

if () {
}

if () {
}

if () {
}
}

if () {
} else {
}

if () {
} else {
}

if () {
}

if () {
}

if () {
if () {
if () {
} else {
}
} else {
}
} else {
if () {
if () {
} else {
}
} elseif () {
if () {
if () {
if () {
} else {
}
} else {
if () {
} else {
}
}
} else {
if () {
if () {
} else {
}
} else {
if () {
} else {
}
}
}
} else {
if () {
} else {
}
}
}

if () {
if () {
if () {
}
}
}

return;
}

function func3()
{
if () {
} else {
}

if () {
if () {
}

if () {
}

if () {
}

if () {
}
}

if () {
} else {
}

if () {
} else {
}

if () {
}

if () {
}

if () {
if (]) {
if () {
} else {
}
} else {
}
} else {
if () {
if () {
} else {
}
} elseif () {
if () {
if () {
if () {
} else {
}
} else {
if () {
} else {
}
}
} else {
if () {
if () {
} else {
}
} else {
if () {
} else {
}
}
}
} else {
if () {
if () {
}

if () {
}
} else {
if () {
}

if () {
}
}
}
}

if () {
if () {
if ()) {
foreach () {
}
}
}
}

return;
}



Me:
[image loading]
Time is precious. Waste it wisely.
Prev 1 703 704 705 706 707 1032 Next
Please log in or register to reply.
Live Events Refresh
Sparkling Tuna Cup
10:00
Weekly #121
ByuN vs KrystianerLIVE!
herO vs Percival
CranKy Ducklings53
LiquipediaDiscussion
PiG Sty Festival
09:00
PiGFest 7.0 FINAL DAY
Clem vs SerralLIVE!
TBD vs Maru
PiGStarcraft2552
ComeBackTV 1834
IndyStarCraft 306
BRAT_OK 251
Rex227
3DClanTV 119
LiquipediaDiscussion
[ Submit Event ]
Live Streams
Refresh
StarCraft 2
PiGStarcraft2552
IndyStarCraft 306
BRAT_OK 251
Rex 227
StarCraft: Brood War
Britney 43019
Sea 8721
firebathero 8651
Rain 1585
Pusan 428
Stork 347
ggaemo 284
Last 194
JYJ 191
Dewaltoss 93
[ Show more ]
ToSsGirL 74
Backho 40
JulyZerg 24
IntoTheRainbow 18
Sea.KH 10
Dota 2
XaKoH 432
NeuroSwarm93
XcaliburYe65
Counter-Strike
fl0m1992
Stewie2K1139
Super Smash Bros
Westballz28
Heroes of the Storm
MindelVK14
Khaldor14
Other Games
B2W.Neo865
Mew2King89
Organizations
Counter-Strike
PGL262
StarCraft 2
IntoTheiNu 13
Blizzard YouTube
StarCraft: Brood War
BSLTrovo
sctven
[ Show 13 non-featured ]
StarCraft 2
• iHatsuTV 10
• AfreecaTV YouTube
• intothetv
• Kozan
• IndyKCrew
• LaughNgamezSOOP
• Migwel
• sooper7s
StarCraft: Brood War
• BSLYoutube
• STPLYoutube
• ZZZeroYoutube
Dota 2
• lizZardDota243
League of Legends
• Jankos2962
Upcoming Events
uThermal 2v2 Circuit
3h 40m
Replay Cast
21h 40m
Wardi Open
1d
Monday Night Weeklies
1d 5h
Replay Cast
1d 12h
Replay Cast
2 days
Replay Cast
3 days
The PondCast
3 days
KCM Race Survival
3 days
Replay Cast
4 days
[ Show More ]
Replay Cast
5 days
CranKy Ducklings
5 days
Replay Cast
6 days
Sparkling Tuna Cup
6 days
Liquipedia Results

Completed

[S:21] ASL SEASON OPEN 2nd Round
LiuLi Cup: 2025 Grand Finals
Underdog Cup #3

Ongoing

KCM Race Survival 2026 Season 1
Acropolis #4 - TS5
Jeongseon Sooper Cup
Spring Cup 2026
WardiTV Winter 2026
PiG Sty Festival 7.0
Nations Cup 2026
ESL Pro League S23 Stage 1&2
PGL Cluj-Napoca 2026
IEM Kraków 2026
BLAST Bounty Winter 2026
BLAST Bounty Winter Qual
eXTREMESLAND 2025

Upcoming

ASL Season 21: Qualifier #1
ASL Season 21: Qualifier #2
ASL Season 21
Acropolis #4 - TS6
Acropolis #4
IPSL Spring 2026
CSLAN 4
HSC XXIX
uThermal 2v2 2026 Main Event
Bellum Gens Elite Stara Zagora 2026
RSL Revival: Season 4
NationLESS Cup
IEM Atlanta 2026
Asian Champions League 2026
PGL Astana 2026
BLAST Rivals Spring 2026
CCT Season 3 Global Finals
FISSURE Playground #3
IEM Rio 2026
PGL Bucharest 2026
Stake Ranked Episode 1
BLAST Open Spring 2026
ESL Pro League S23 Finals
TLPD

1. ByuN
2. TY
3. Dark
4. Solar
5. Stats
6. Nerchio
7. sOs
8. soO
9. INnoVation
10. Elazer
1. Rain
2. Flash
3. EffOrt
4. Last
5. Bisu
6. Soulkey
7. Mini
8. Sharp
Sidebar Settings...

Advertising | Privacy Policy | Terms Of Use | Contact Us

Original banner artwork: Jim Warren
The contents of this webpage are copyright © 2026 TLnet. All Rights Reserved.