Github: Brent Litner
brentlintner starred pallets-eco/croniter
Parses cron schedules to iterate over datetime objects.
Python 555 Updated Aug 1
Parses cron schedules to iterate over datetime objects.
Python 555 Updated Aug 1
Core utilities for Python packages
Python 746 Updated Aug 1
A Python implementation of John Gruber’s Markdown with Extension support.
Python 4.2k Updated Jul 30
JSON Web Token implementation in Python
Python 5.7k Updated Jul 27
The post Extended Sale! appeared first on Grand River Rocks Climbing Gym.
The post Extended Annual Membership Special appeared first on Grand River Rocks Climbing Gym.
Isn't that great! Here we are already having the precedent of long term DNAPLS (TCE) in our drinking water aquifers hence we should be able to live with them up here in Dogpatch (Elmira) just as folks have for many decades in Waterloo and Cambridge. The ones in Waterloo are in the William St. Wellfield located at the corner of Regina St. and William St.. The Cambridge ones are at the very well known and most expensive ground water treatment location in Waterloo Region namely the Middleton Wellfield. This is located at the south end of Cambridge literally beside the Grand River. Despite a local hydrogeological consultant advising me that the source of the TCE there is NOT Canadian General Tower (CGT) perhaps a hundred metres away I am very skeptical. Yes there are dry cleaners also in the vicinity however so maybe they contributed or not.
Other good news is this. TCE or trichloroethylene is much more toxic than the chlorobenzene that we have here in Elmira courtesy of Uniroyal Chemical and maybe others. So if the good folks in Cambridge especially can both breathe TCE in the Bishop St. community and drink a little from their taps and not die immediately then we are looking good!
The sources in Waterloo may include Canbar and Sunar and even possibly the old Seagram's plant but keep in mind our authorities truly enjoy muddying those waters and not being forthcoming. The proof of course is the long term and ongoing detections of TCE in those drinking wells over a period of decades. Normally dissolved TCE should have all been pumped out by now but that is the joy and excitement of DNAPLS. They can exist in the subsurface, most especially in fractured Bedrock, sometimes for centuries and only very slowly dissolve into the groundwater and get pumped to surface. Now of course our chlorobenzene has been with us here in Elmira, just like NDMA, for far more than the 36 or 37 years since it was allegedly discovered in November 1989.
If it is still in our groundwater, even in low concentrations, in ten or twenty more years then I think even the most professional liars are going to be looking for a hole to crawl into. But hey by then the few remaining honest and knowledgeable citizens should be long gone. Liars are mostly simply buying time for themselves.
LONDON - Evan Elliott and Owen MacNeil got roughed up, as the London Majors scored early and often in a 17-2 rout of the Kitchener Panthers at Labatt Park Friday night.
The Panthers managed eight hits on the night, but could only scratch across a pair, stranding five and hitting into two double plays.
Elliott gave up eight runs on 10 hits and was chased after three innings and was tagged with the loss.
MacNeil came on in the fourth, and didn't fare much better.
He was tagged with two balks allowing lead off man Trent Lenihan to get from first to third, and an error charged to Malik Williams at first brought him in to score.
It was the first of six runs scored in the inning and put the game completely out of reach.
Luis Perez gave up a run on five hits in five innings to take the win.
Kitchener dropped to 10-23 and sit nine games back of a playoff spot with 15 games left. London improved to 22-11.
The Panthers are in Guelph Saturday night at 7:05 p.m.
Source
A browser that runs directly inside your existing terminal
Rust 626 Updated Aug 1
(FYI — At the end of the page, I have linked YouTube video of my project where I have walked through the code, the technical aspects, and also a link to the literature survey paper)
Choosing where to eat sounds trivial, until you’re standing on a street with 40 options, reading reviews that contradict each other, and ending up at the nearest place anyway.
That frustration turned into a six‑month final-year project and taught me more about data, sentiment analysis, and machine learning.
This is what we built, how it works, and what actually surprised me along the way.
I tried to build an engine that recommends a restaurant to you based on the database fed into it, your personal preferences (user profile), and the restaurant's specialty (restaurant’s profile)
Platforms like Yelp and TripAdvisor are sitting on enormous amounts of useful data with millions of real reviews, ratings, and user histories. The information is there. The challenge is turning unstructured human language into something a system can reason about. Most recommendation systems take one of two approaches:
Collaborative filtering — “Recommending things based on what similar users liked.” This works well when you have enough data, but falls apart the moment a new user joins. No history means no recommendations. This is the cold start problem.
Content-based filtering — “ Recommending based on the characteristics of the item itself.” Handles new users better, but tends to suggest things too similar to what you’ve already tried.
♦Image created by the authorThe goal for this project was to handle both scenarios properly:
We used the Yelp Academic Dataset — business listings, user reviews, star ratings, and check-in data in JSON format.
♦Image created by the authorMaking Sense of the TextA star rating tells you that someone liked or disliked a place. The review tells you why. That distinction matters for recommendations.
Sentiment analysis is the NLP technique that bridges that gap. It basically classifies text as positive, negative, or neutral.
But the more useful version is aspect-level sentiment analysis: figuring out that a restaurant has excellent food but slow service. Those are different opinions about different things, and a recommendation system should treat them differently.
For example, A person might have commented on a Restaurant xyz, “Loved the Pizza, it was amazing but the Beer was average and disappointing.”
This implies that they like pizza and had higher expectations for the beer’s quality/taste. It also implies that the restaurant makes great pizza, but the beer is not that great. This is Data!
Of course we can't rely on one such data point. A collection of such reviews is what creates a user profile, a profile of what they like, dislike, and don’t really care about. And many such reviews on a business give us the business profile of what they are best at and what they could improve on.
The Preprocessing PipelineBefore any model touches the text, the text has to be cleaned. This was the most time-consuming part of the project and the least glamorous.
Every review went through:
The output is a bag of words, a numerical representation the models can actually work with.
Getting this pipeline right took longer than expected. A lot of that time was spent on edge cases: emoji characters in reviews, inconsistent punctuation, non-ASCII text. None of it is interesting to fix, but all of it matters.
Topic Modeling with LDA♦Image created by the authorThis is the part I found most interesting.
Latent Dirichlet Allocation (LDA) is an unsupervised technique that discovers hidden topics in a collection of documents. You don’t tell it what the topics are but it finds them by identifying which words tend to appear together.
Running LDA on restaurant reviews, it comes up with topics like:
Each restaurant ends up with a topic distribution — a kind of fingerprint describing what customers most often talk about. Two Italian restaurants with identical category labels can look very different in topic space: one might be dominated by food quality discussions, the other by atmosphere and price.
This gave the recommendations a texture that simple category matching never could. One thing LDA requires is choosing the number of topics upfront — a hyperparameter you tune manually. Too few and everything blurs together; too many and they become meaningless.
There’s no automated answer here. You run it, read through the outputs, and use judgment. That was a useful reminder that unsupervised learning always needs a human in the loop.
The Recommendation Logic
User profiles and restaurant profiles were created using the process described above and converted into 2 vectors using the LDA technique.
Matching users to restaurants used cosine similarity: representing both as vectors and measuring the angle between them. The smaller the angle, the better the match. It’s direction that matters, not magnitude — so a user who left two reviews and one who left two hundred are treated fairly.
♦Image created by the authorFor new users with no history, we asked for preferences directly for crude recommendations. Cuisine type, dietary needs, atmosphere preference — and used those as the starting profile. It’s a workaround, not a solution, but it gave the system something to build from.
ResultsThe full pipeline — preprocessing, LDA, cosine similarity matching — produced a relatively good accuracy and precision against test data. Better than I’d expected given the noise in the dataset.
One thing worth noting: the system also surfaced the least compatible restaurants alongside the most compatible ones. That turned out to be a useful sanity check.
TakeawaysData cleaning and making it useful is the majority of the project. The modeling is maybe 30% of the work. The other 70% is making the data usable.
Unsupervised models need human review. With LDA there’s no ground truth to validate against. The topics either make intuitive sense or they don’t.
The cold start problem doesn’t have a clean answer. The content-based workaround is reasonable, but in a real product you’d need to think harder about onboarding — capturing enough preference signal without making sign-up feel like a survey.
Wrapping it upThe thing this project left me with is a much more concrete understanding of what goes into building a recommendations engine. There’s real work behind those “you might also like” emails that you receive as part of promotions. It’s a pipeline built using you and the data you provide.
If you’re building something similar, the Yelp dataset is a good starting point. Start simple, get the full pipeline working end to end, then improve the pieces.
GitHub - spurthym/Restaurnt-Recommendation-System
♦What Your Restaurant Reviews Know About You was originally published in Code Like A Girl on Medium, where people are continuing the conversation by highlighting and responding to this story.
It only takes a few repeated, unsupported comments to change how people see a coworker.
Author Mita Mallick described a jealous colleague who said things like:
None of these statements were presented as facts, yet repeated often enough, they shaped how others viewed her.
Bit by bit, day by day, this person shifted the narrative about her and negatively impacted her personal brand.
When we hear a claim about a coworker, pause before accepting or repeating it. Ask, “What makes you say that?” or “Have you talked with them about your concern?”
By challenging unsupported claims, we can build a workplace where people are evaluated on their contributions, not on rumors.
Share this action on Instagram, LinkedIn, or YouTube.
2. Don’t let AI minimize achievementsAfter noticing that Gemini had toned down a significant accomplishment when helping revise her résumé, Jennifer Horsburgh changed one word: her first name became Jeff. And the results were striking.
In a viral LinkedIn post, Horsburgh explained that the difference was in the framing, not the facts. Jennifer’s volunteer work was labeled as community service, and her wins were things she “assisted with” and “collaborated on.” The identical kind of work, with Jeff’s name on it, became leadership, summarizing that he had “engineered” and “architected” solutions to problems.
She pointed out “these verbs are everything, because they decide who reads as a senior director and who reads as the assistant.”
When she asked Gemini how it sorts people’s work, it explained, “I was essentially hallucinating a glass ceiling for you before you even walked into the room.”
It’s infuriating to see the bias.
Let’s learn from the cautionary tale Horsburgh shared with us, whether we’re using AI to revise our résumés, mentoring someone else to do so, or writing recommendations or performance feedback for a colleague. Look out for softening language that minimizes someone’s impact, such as “helped,” “supported,” “assisted,” or “participated.” If those words don’t accurately reflect the person’s contributions, replace them with language that better describes what they actually accomplished.
Let’s not scale the bias that was used to train these systems.
3. Correct people who say the R-wordDisability rights organization The Arc reported that slurs against people with intellectual and developmental disabilities are on the rise. The R-word is showing up on social media, in schools, in entertainment, and in everyday conversation.
As The Arc explains, “The R-word comes from the Latin retardare, meaning to slow down, delay, hold back, or hinder. But where a word starts isn’t the same as what it means now.”
Today it’s an insult that demeans their worth and humanity. And it’s become normalized enough that many people, especially younger people, do not always recognize it as a slur.
If we hear someone saying the R-word, The Arc recommends saying something without making it a scene. For example, “Hey, that word is a slur. Can we not use it?”
As they point out, the goal is education, not humiliation.
4. Offer a practice interviewA client recently asked me for suggestions on how to support autistic people, and I remembered something I had shared years ago in my newsletter: Offer a practice interview.
I came across this idea while reading How Microsoft Tapped the Autism Community for Talent. During interviews, people with autism may experience anxiety, which can cause them to freeze up and struggle to communicate their knowledge.
Yet Microsoft knows that autistic individuals can be strong at problem-solving, coding, and paying attention to detail. And the company decided to adapt its hiring processes to better meet the needs of this group.
Here’s just one of their approaches: Offer candidates a practice interview where they get feedback from recruiters before doing the official one.
I think this approach would work for anyone with pre-interview anxiety. Perhaps because they’re returning to work after taking a caregiving or medical leave. Or they have a non-traditional educational path. Or they’re a member of an underrepresented demographic.
Is this a best practice you can advocate for?
p.s. You may have noticed that I’ve used both person-first language (“people with autism”) and identity-first language (“autistic people”). I follow guidance from the National Institutes of Health (NIH): experts suggest defaulting to person-first language when writing generally about children and using a mix of person-first and identity-first language when writing about adults. (And if writing about a specific person, ask them for their preference.)
5. Community spotlight: Raise your handNewsletter subscriber Cody wrote,
“Soon after joining my company, I decided to reach out and ask, ‘How can I support or get involved in inclusion initiatives here?’ I was put in touch with the people who head up inclusion efforts, and they welcomed me into a role where I could help almost immediately. It really made it clear to me that sometimes all you need to do is reach out and express interest.”
Cody added,
“Being willing to raise your hand and make efforts to help is enough to signal not only that you’re a safe person, but that you’re willing and able to get involved and do work to make changes. Plus, sometimes you just get to meet some really neat people that way.”
Consider how you might help with your organization’s inclusion efforts, if you’re not already doing so. It could be as easy as reaching out to an employee resource group to ask if they need help with an upcoming event.
If you’ve taken a step towards being a better ally, please reply to this email and tell me about it. And mention if I can quote you by name or credit you anonymously in an upcoming newsletter.
That’s all for this week. I’m glad you’re on this journey with me,
Karen Catlin (she/her), Author of the Better Allies® book series
Copyright © 2026 Karen Catlin. All rights reserved.
Together, we can make a difference with the Better Allies® approach.
Question Unsupported Claims, and Other Actions for Allies was originally published in Code Like A Girl on Medium, where people are continuing the conversation by highlighting and responding to this story.
♦
Read full story for latest details.
It's the deception that gets to me. It's the ingenuous choice of wording. It's the never ending gilding of the lily in order to hide ugly truths. That's what I don't like about our regional government. This deception may partially be in order to protect the guilty. It may be in order to protect the names and reputations of so called "captains" of industry and or persons who built factories and provided jobs in Kitchener-Waterloo. However it's also about protecting their own butts. Some of these politicians have been around for decades and they literally have blood on their hands from decisions they've made and decisions they've avoided.
Anybody remember the Uniroyal Tire plant on Strange St. for decades? How many know the long and toxic list of airborne contaminants that employees there worked in, some for decades? How many know the battles some of those employees fought to get pis* as* compensation from our provincial government's Workman's Compensation Board (WCB) later renamed to something more politically correct?
Toxins included benzene, toluene, xylenes, chlorinated solvents and a plethora of other petroleum and rubber related toxins. These toxins don't just exist as air borne contaminants. If they leak, if they are mishandled, if they are negligently stored and most especially if they are buried on site they can and do migrate through the subsurface. Hence a nearby wellfield is the perfect way to introduce some of those same toxins that the Uniroyal workers were breathing, into the water supply. Many decades ago some BTEX chemicals (listed above) were found in low concentrations in some of the Strange St. wells. Who was the most likely contributor, Uniroyal or a nearby day care or school?
The initial Strange St. Wellfield consisted of wells K10A, K11, K13. This is an old wellfield. Current wells are named K10A, K11A, K13B, K18 and K19. We are advised that well K13B is a direct replacement for well K13A completed in 2023. Oddly both K13B and K11A appear on the maps provided in the Grand River Source Protection Area reports as further west than the original wellfield. We are not told that wells K10A, K11 and K13 were still pumping and producing water for consumption until the very early 2000s. K18 and K19 on the other hand did not appear to be contributing to the drinking water supply until 2006 several years later. Also oddly they are located even further away (westwards) from the original wellfield than K11A and K13B. Now I do have a memory of reading years ago that several of the Strange St. wells had been closed down and replaced with wells either slightly north or mostly west of their original location.
Nobody apparently wants to point fingers or besmirch corporate heroes hence it seems to me that instead citizens drank contaminated water for years (just like in Elmira) while regional bureaucrats and politicians decided how best not to identify contaminated wells while either relocating them, shutting them down, or "managing" their pumping rates so as to stop pumping as the plumes approach the wells.
When asked why our cancer rates keep rising I advise that it is the air we breathe, the food we eat and the water we drink. As soon as you stop doing that you stop feeding your body carcinogens.
Sunyi Dean’s 2026 The Girl with a Thousand Faces is a stand-alone historical fantasy.
Kowloon Walled City, August 1975: Mercy Chan is a ghost-talker. Here ability to talk to the many ghosts of Kowloon Walled City makes her very useful to triad leader Cobra Lily. Soon, Mercy will be Kowloon’s bulwark against disaster, which is fair since Mercy is ultimately to blame for the impending calamity.
Not that she would remember.
…
WELLAND - The good news is the runs were down. The better news is it was an exciting game that required extra innings.
But the Kitchener Panthers couldn't slay the Jackfish, losing 3-2 in 10 innings Thursday in Welland.
The game was scoreless until the sixth on a James Smibert sac fly, before Welland scored again in the seventh.
But Malik Williams stepped up again, crushing his ninth home run of the season to dead centre to tie the game.
Smibert would hit a walk-off single in the 10th to finish it and hand Kitchener its seventh straight defeat.
Kitchener drops to 10-22 on the year, and have fallen to eighth place. Welland leads the league with a 23-10 record.
The Panthers continue on the road Friday night in London and Saturday in Guelph.
Kitchener isn't back home until Thursday, Aug. 6 at 7:05 p.m. against the Royals.
GET YOUR TICKETS NOW and #PackTheJack!
BOXSCOREMongoDB-compatible database engine for cloud-native and open-source workloads. Built for scalability, performance, and developer productivity.
C 3.4k Updated Jul 31
The World of Retro Computing is an annual event, held within Waterloo-Region, southwestern Ontario, Canada. In past years the event has been held in different cities: Cambridge, Kitchener, and this (2026) year in the city of Waterloo.
The event is a free-to-attend 2-day expo of retro computer, and gaming hardware (though I believe any donations are appreciated by the event organizers). The expo includes hands-on vintage computers and gaming displays, guest speakers, vendors, workshops, repair stations, a LAN party area, and more activities.
Melina has a very personal reason for the work she does.
♦
As Integration Lead at Hospice Waterloo Region, Melina works to provide support to men in House of Friendship’s ShelterCare program who are struggling with the grief that comes with losing a loved one to an overdose.
And Melina can provide that support to others because she has lived through it herself.
“I lost so many people to drug poisoning,” said Melina. “It started when my son’s friend died at the tender age of 17.
“It just gave me a sense of purpose and meaning to take all this sadness, anger, and shock I was experiencing.
I refused to let them die without being able to honour them.”
Melina helps guide the men in ShelterCare who are experiencing this kind of grief.
“I remember the first group session I held, and it was only a couple of people,” said Melina. “But I’m finding more and more the men are coming in and they want to talk.”
Men in the ShelterCare program have often experienced a series of losses by the time they become homeless.
“They have lost their sense of purpose, lost their jobs, lost their homes, lost their families, lost their friends, lost their children – all of these relationships,” said Melina. “But most importantly, they have lost a sense of who they are.”
Melina works to help them process these losses and acknowledge the emotions that they are feeling.
Melina also supports the men with writing memorial messages when a participant or friend loses their life to a drug poisoning, and gives them the space they need to have their voices heard.
“Every person has a story, and I want to give them that space to share them.”
The post Providing a Safe Space appeared first on House Of Friendship.
♦
Inside my first Voice AI evaluation competition and the lessons every AI engineer should learn about reliability, failure modes, and…
Continue reading on Code Like A Girl »
Many of the longtime nearby residents don't remember the "good old days". The stench of acrid, acidic fumes leaving the site. The generally modest albeit well built homes nearby on Edwin St., Loiusa St., St. Leger etc. A company called Pannill Veneer operated on the site for decades before it closed down. Prior to Panill Veneer however was the Breithaupt Tannery. Solvents, acids and heavy metals were common and well recognized from the tannery industry. It operated approximately from the 1880s until about 1950 before shutting down. There were other tanneries in Kitchener-Waterloo and they too made a mess and left the mess for others to clean up. These industries like so many others were protected by the politicians that they helped to get elected. These same politicians minimized the negative environmental and health effects of these companies both on employees and residents while they were operating and making money as well as after they cut and ran. This is what politicians do especially if they hope to have the funds to get re-elected.
The very same politicians and their successors allowed all the anti social aspects of these heavy, stinking and loud industries, often situated beside residential areas, without proper safeguards or even reasonable mitigating efforts. Then when they packed up and departed little to no effort was made to hold them accountable to clean up the mess they left behind. These were very unhealthy messes combined with high costs to clean them up. Politicians did what they always do. They lied like dogs and passed the costs on to the public taxpayers as much as possible. The Breithaupt Tannery $ 9 million cleanup was the most expensive in Kitchener's history. It was funded by the City of Kitchener (taxpayers), The Region of Waterloo (taxpayers) and the developer (Queensgate Dev't.) who by the way complained that the Province of Ontario (taxpayers) failed to chip in. Three levels of taxpayers but all out of the same pockets.
Never any health studies, never any environmental studies until after a developer decided they could make money on the site. Breithaupt Tannery did not just mess up people's health through noise and air emissions. They also contaminated the nearby Lancaster Wellfield which supplied water to Kitchener citizens. How many of them died prematurely and or with compromised health issues while the bast**d politicians and industrialists laughed all the way to the bank?
The nearby Lancaster Wellfield has been shut down now for a very long time. Do you think they shut it down the day the Tannery closed? Did they shut it down before the toxic contaminants reached the drinking wells? Meanwhile Waterloo Region are recommissioning other shut down, contaminated wells so why not these? Allegedly there has been a major cleanup. Or was it? Regardless if we are so desperate for water the Region can reopen these wells with or without an Environmental Assessment. Just like local industry in Elmira and K-W, Waterloo Region knows that Environmental Assessments are easy to "fix". Afterall it's politicians who write the legislation, warts and loopholes and all.
Written by: Ayomide Awesu, Co-op Student, Public Relations Assistant, Capacity Canada, aspiring communications and marketing professional, entrepreneur, and creative storyteller passionate about digital media and community engagement.
Youth volunteering is becoming more important in our community and more in the nonprofit sector. I believe young people bring creativity, energy and fresh perspectives to nonprofit organizations. Which helps nonprofits expand their target audience and explore new opportunities and helps them stay connected to the world.
Volunteering gives youth a chance to understand how nonprofits work and how small actions/events can make a big impact. This builds confidence, responsibility and helps us discover what we care and want to learn more about.
Learning through experienceAs a student currently completing my co-op placement with St. Mary’s High School at Capacity Canada, I’ve seen how much youth involvement matters. Working with different staff and community leaders in my own personal life has changed my perspective. I have learned how different projects come together and how we use teamwork and our collected skills to plan events.
Before this placement I volunteered at my church and summer camps. Those experiences taught me how small actions for example, helping organize an event or supporting younger kids can make a difference. Each opportunity helped me grow and be more confident and understand how to be a leader.
Challenges and opportunitiesEven with all these different benefits, youth volunteering can be tough sometimes. Some youth don’t know where to start or worry if their opinions will be heard and acted upon. Some face barriers like transportations and balancing school. However nonprofit organizations make volunteering easier since they have more flexible roles, mentorship and clear guidance.
Questions to reflect on:Altogether my experiences have shown me that volunteering is one of the most meaningful ways youths can and learn with their community. Working in a nonprofit for my co-op placement, helping at church and volunteering at camps and events have all shown me how to make a difference and care for the world and people around me.
International Volunteer Year reminds us that every volunteer contribution matters. By creating meaningful opportunities for youth to get involved, nonprofit organizations are investing not only in their missions but also in the next generation of community leaders.
Youth have the creativity, energy and independence that nonprofits need to stay connected. When we choose to volunteer and help, we are shaping the type of world that we want to live in.
Written by:
♦Ayomide Awesu, Co-op Student & Public Relations Assistant, Capacity Canada
Ayomide is currently a Highschool student taking a co – op credit. She has plenty of volunteer experience in communication and technology from leading at her church, running her own business and volunteering in graphic design and communication camps. She has developed skills in marketing and operating design for live streams and blogs. She also has customer service skills by maintaining a good relationship with clients/customers for her business and learning how to efficiently use different creating platforms including; canva, adobe and presentations.
Email: ayo@capacitycanada.ca
The post Youth volunteering: Building the future of nonprofit leadership appeared first on Capacity Canada.
♦
A shortener lends credibility and every user draws from the same account
Continue reading on Code Like A Girl »
Getting someone to download a shopping app has never been easier. Getting them to open it a second time is a different problem entirely.
That gap between install numbers and actual repeat purchases is where most ecommerce app investments quietly fail. Retailers assume the hard part is getting noticed. In reality, the hard part starts the moment the app is already on someone’s phone, competing for attention against every other app they’ve ever downloaded and mostly forgotten.
Australian shoppers have shifted decisively toward mobile it’s now where they browse, compare, and pay, often without a second thought. But that shift only rewards the businesses that treat the app as a conversion system, not a digital brochure with a buy button attached.
Here’s what actually separates an ecommerce app people keep using from one that quietly disappears off their home screen.
Mobile Shopping Isn’t Growing Because of the Apps. It’s Growing Despite Most of Them.A few things are driving Australians deeper into mobile shopping regardless of app quality:
None of this is optional anymore, it’s the baseline expectation. Which means the businesses that only meet the baseline are the ones getting lost in it.
The Features That Actually Move the Conversion NeedleA high-converting shopping app isn’t defined by its feature count. It’s defined by how little friction stands between “I’m curious” and “I bought it.” A few features do most of the work:
Search that assumes the user is impatient. Predictive autocomplete, smart category filters, price-range sliders, and rating filters all exist for one reason: cutting down the time between opening the app and finding something worth buying.
Recommendations that feel earned, not random. Suggestions based on real browsing and purchase history read as helpful. Generic “you might also like” blocks read as filler, and users learn to ignore them fast.
Checkout with the fewest possible steps. Guest checkout, saved addresses, and stored payment methods aren’t nice-to-haves they’re the difference between a completed sale and an abandoned cart.
Wishlists that come with a nudge. A saved item is only useful if the app follows up a restock alert, a price drop, a gentle reminder instead of letting it sit forgotten.
Product pages that answer objections before they’re raised. Multiple angles, honest descriptions, clear shipping details, and visible reviews all reduce the hesitation that kills a purchase at the last second.
Notifications that respect the user’s attention. Done well, they recover abandoned carts and win back lapsed shoppers. Done carelessly, they’re the reason people delete the app entirely.
Where AI Is Actually Changing the Shopping ExperienceAI in ecommerce apps has moved past being a novelty feature it’s now doing quiet, structural work across the shopping journey:
The businesses treating these as core infrastructure not add-ons are the ones pulling ahead on both margins and customer trust.
What to Actually Check Before Choosing a Development PartnerMost of the risk in an ecommerce app project gets decided before a single screen is designed — in who you choose to build it.
Do they have real ecommerce-specific experience, not just general app development? Retail has particular failure points — cart abandonment, checkout drop-off, retention that a team without that specific background won’t know to design around.
Can they show technical depth across the stack you’ll need Shopify, Magento, WooCommerce integrations, or fully custom builds — rather than a one-size-fits-all template approach?
Do they take compliance seriously by default? Australian Privacy Principles and PCI-DSS aren’t optional extras; a partner who treats them as an afterthought is a liability waiting to surface later.
What happens after launch? Apps fail quietly in the weeks after release without ongoing monitoring, patches, and performance tuning. A development partner without a real post-launch process is handing you a half-finished project.
Are you comparing value or just quotes? The cheapest bid rarely accounts for the cost of rebuilding what wasn’t done right the first time.
Actionable Checklist✔ Map the conversion journey before designing a single screen
✔ Prioritize checkout friction reduction over feature count
✔ Treat AI (recommendations, fraud detection, forecasting) as infrastructure, not add-ons
✔ Confirm Australian Privacy Principles and PCI-DSS compliance upfront
✔ Choose a partner with a defined post-launch support process, not just a launch date
Frequently Asked QuestionsQ1.How long does ecommerce app development typically take?
A. It depends heavily on scope. A straightforward app can take a few months; one with custom integrations, AI-driven personalization, or complex payment logic will reasonably take longer. Timeline should track complexity, not the other way around.
Q2.Should the app be built for iOS, Android, or both?
A. Most retailers benefit from cross-platform development from day one, so they’re not choosing between reach and consistency. The right call depends on where your specific customers already are.
Q3. Can a new app integrate with our existing store and systems?
A. Yes modern ecommerce apps commonly integrate with platforms like Shopify and WooCommerce, along with payment gateways, inventory systems, and CRMs, so data stays synchronized rather than living in silos.
Key TakeawaysBuilding or rebuilding a shopping app that actually converts takes more than checking feature boxes it means starting from how your specific customers browse and buy. 7 Pillars works with Australian and New Zealand retailers on exactly this kind of ecommerce app development, from planning through post-launch support.
♦Why Most Ecommerce Apps Get Downloaded and Then Ignored was originally published in Code Like A Girl on Medium, where people are continuing the conversation by highlighting and responding to this story.
Dominic McDowall and Pádraig Murphy’s 2026 Warhammer: the Old World Roleplaying Game is a secondary-universe tabletop fantasy roleplaying game (TTFRPG). The core rules are divided between Warhammer: the Old World Roleplaying Game, Player’s Guide1 and Warhammer: the Old World Roleplaying Game, Gamemaster’s Guide2.
You may want to tack “black comedy” in front of that word “fantasy” up above.
But first! A word about Games Workshop’s Warhammer, formerly Warhammer Fantasy Battle.
This is long. Very long. Three or four reviews long, which is why I don’t review more TTRPGs.
…
OpenAI's Codex Security CLI and TypeScript SDK for finding, validating, and fixing security vulnerabilities. npm: www.npmjs.com/package/@op…
TypeScript 8k Updated Aug 1
♦
Read full story for latest details.Imagine two developers solving the same problem.
Both solutions return the correct answer. Both pass every test case. Both get deployed to production without any issues.
So how do you decide which one is actually better?
In software engineering, getting the correct output is only the first step. As applications grow and start handling larger amounts of data, the gap between two “correct” solutions can become enormous. One solution might continue working smoothly as traffic increases, while another might gradually slow down.
To make those decisions objectively, we need a way to measure our code. That is exactly what this episode is about.
When you’re just starting out, the first question you ask about any piece of code is:
“Does it work?”
And honestly, that’s the right place to begin.
If your solution doesn’t produce the correct result, nothing else matters. However, as you gain experience, you’ll often find yourself in situations where multiple solutions solve the same problem correctly.
That’s when a different question starts to matter:
“Which solution is more efficient?”
This is where Time Complexity and Space Complexity come into the picture.
What Are We Actually Measuring?When we talk about the complexity of an algorithm, we’re usually interested in two things.
The first is time complexity, which describes how the number of operations an algorithm performs grows as the input size increases. In simple terms, it helps us understand how much additional work the algorithm has to do when it receives more data.
The second is space complexity, which tells us how much additional memory the code needs as the input size grows.
One thing that often confuses beginners is that we are not measuring actual seconds or megabytes.
We are not asking how fast your laptop runs compared to mine. We are not comparing JavaScript against Java or Python. Those things can vary depending on hardware, operating systems, compilers, and many other factors.
Instead, we focus on something much more useful:
How does the solution scale as the input gets larger? What happens if the input doubles? What happens if it becomes ten times larger? What happens if it grows from a thousand items to a million?
That way of thinking is what makes complexity a reliable measuring tool regardless of the machine or language you are using.
Big O NotationBig O Notation is simply the language we use to describe that growth.
The “O” stands for “order of,” and the expression inside the brackets tells us how the algorithm grows relative to the size of the input. The input size is usually represented by the letter n.
At first glance, the notation may look mathematical and intimidating, but the underlying idea is surprisingly simple. Once you understand the common patterns, reading Big O becomes second nature.
The Most Common Complexities You’ll SeeO(1): Constant TimeAn algorithm is considered O(1) when the amount of work stays the same no matter how large the input becomes.
For example, imagine you have an array containing thousands or even millions of names, and you want to access the first item.
function getFirstItem(arr) {
return arr[0];
}Whether the array contains 10 items or 10 million items, retrieving the first element still requires the same operation.
The input size has no impact on the amount of work being done, which is why this is called constant time.
O(n): Linear TimeWith O(n), the amount of work grows in direct proportion to the size of the input.
Suppose you want to find a particular name inside an unsorted array.
function findName(arr, target) {
for (let i = 0; i < arr.length; i++) {
if (arr[i] === target) {
return i;
}
}
return -1;
}Since the array isn’t sorted and doesn’t provide any shortcuts, you may have to check each item one by one.
If there are 10 items, you might inspect up to 10 elements.
If there are 1,000 items, you might inspect up to 1,000 elements.
If there are a million items, you might inspect up to a million elements.
The work increases alongside the input size, so this is O(n), also known as linear time.
O(n²): Quadratic TimeQuadratic time usually appears when you have a loop running inside another loop.
function printAllPairs(arr) {
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr.length; j++) {
console.log(arr[i], arr[j]);
}
}
}Here, every element is paired with every other element.
If the array contains 10 items, the inner operation runs roughly 100 times.
If the array contains 100 items, it runs roughly 10,000 times.
The growth accelerates quickly, which is why quadratic solutions often become problematic when working with large datasets.
Many performance bottlenecks can be traced back to an unnoticed O(n²) operation.
O(log n): Logarithmic TimeLogarithmic complexity often feels strange when you first encounter it, but the idea is actually very intuitive.
Instead of examining every item one by one, the algorithm repeatedly cuts the problem in half.
Think about searching for a word in a physical dictionary.
You wouldn’t start from page one and move forward page by page. Instead, you would open the dictionary somewhere near the middle, check whether your word comes before or after that section, eliminate half the remaining pages, and repeat the process.
Each step removes half of the remaining work.
That is the essence of O(log n).
Because the search space shrinks so aggressively, the number of steps grows very slowly. Even when dealing with extremely large datasets, logarithmic algorithms remain remarkably efficient.
We’ll see a classic example of this when we cover Binary Search later in the series.
O(n log n)This complexity appears frequently in efficient sorting algorithms.
It sits somewhere between O(n) and O(n²).
Algorithms with O(n log n) complexity usually combine two ideas:
Popular sorting algorithms such as Merge Sort and Quick Sort often achieve this complexity.
As datasets become larger, O(n log n) performs dramatically better than O(n²), which is why it is considered the standard target for efficient sorting.
Visualizing the DifferenceIf we arranged these complexities from most efficient to least efficient as the input grows, the order would look like this:
O(1) → O(log n) → O(n) → O(n log n) → O(n²)
You can think of them like this:
This ranking is something you’ll use constantly as you learn algorithms and data structures.
Whenever you encounter a new solution, one of the first things you should ask is:
“Where does this algorithm sit on that scale?”
What About Space Complexity?Everything we’ve discussed so far has focused on time, meaning the amount of work being performed.
Space complexity follows the same idea, except we’re measuring memory usage instead of steps.
Consider this example:
function doubleAll(arr) {
let result = [];
for (let i = 0; i < arr.length; i++) {
result.push(arr[i] * 2);
}
return result;
}The new array grows alongside the input array. If the input doubles in size, the extra memory required also doubles.
Because the memory usage grows with the input, this is O(n) space.
Now compare that with:
function sumAll(arr) {
let total = 0;
for (let i = 0; i < arr.length; i++) {
total += arr[i];
}
return total;
}Here, we’re only using a single variable regardless of how large the input becomes.
Whether the array contains 10 elements or 10 million, the extra memory remains essentially the same.
That makes this O(1) space.
In real-world development, you’ll often encounter trade-offs between time and memory. Sometimes using extra memory can significantly reduce execution time. Other times, minimizing memory usage may require additional processing.
Understanding both time and space complexity helps you make those trade-offs consciously rather than accidentally.
One Practical Rule to RememberWhen calculating Big O, we focus only on the part of the algorithm that grows the fastest.
For example:
Why?
Because Big O is concerned with long-term growth.
As the input becomes very large, constant values and smaller terms become insignificant compared to the dominant term.
The goal is not to count every operation perfectly.
The goal is to understand how the algorithm behaves as the input continues to grow.
The Habit That Will Change How You Read CodeFrom now on, whenever you look at a piece of code, train yourself to ask a simple question:
"As the input gets larger, what happens to the amount of work being done?"
If the work stays the same, you're probably looking at O(1).
If it grows alongside the input, it's likely O(n).
If you see a loop inside another loop, there's a good chance you're dealing with O(n²).
If the problem size keeps getting cut in half, you're probably looking at O(log n).
Developing this habit is one of the most valuable steps you can take as a programmer. It changes the way you read code, write code, and evaluate solutions.
In the next episode, we'll move into Arrays. Now that you understand how to measure performance, the operations we discuss will have much more meaning because you'll be able to analyze not just what they do, but also how efficiently they do it.
♦Before We Compare Solutions, We Need a Way to Measure Them was originally published in Code Like A Girl on Medium, where people are continuing the conversation by highlighting and responding to this story.
♦
I’ve sat through more office redesign meetings than I want to admit.
Continue reading on Code Like A Girl »
♦
Knowledge, skills, and resources don’t decide which teams win and which ones stall.
Continue reading on Code Like A Girl »
The post Civic Holiday Monday appeared first on Grand River Rocks Climbing Gym.
A little bit of irony here. The stupid twits invent a weird pretend scientific test to prove one thing and actually prove the very last thing they intended which is that there both have been and are free phase and residual DNAPL in the Municipal Upper and Lower Aquifers beneath the town of Elmira. Keep in mind how late in the game the dirty polluter and their fellow travellors decided that the high concentrations of both NDMA and chlorobenzene needed further efforts. Not back in 1998 when the off-site groundwater pumping began but many years later they added pumping wells W8 and W9 to address specific problems on the east and west sides of Union St. not very far from Park Ave. The east side of the street was actually at the edge of the Yara (Nutrite) property and the pumping well went right down to the Municipal Lower Aquifer. High chlorobenzene concentrations were embarrassing and needed to be reduced in order to continue the DNAPL coverup which said that free phase DNAPLS had never left the Uniroyal Chemical site. The W9 pumping well also went right through to the Municipal Lower Aquifer and in fact its' well screen rested on the surface of the exposed Bedrock Aquifer. There is no LAT (Lower Aquitard) located here thus providing a direct route for contamination. Yes this is one of the main routes that has contaminated the Bedrock Aquifer with both NDMA, chlorobenzene and everything else despite the professional liars on behalf of Lanxess Canada/Uniroyal Chemical saying otherwise.
Table 2 (CH38A ML aquifer) gives us our first hint. This observation well located by Industrial Dr. and Oriole Parkway (Sanyo Canada right there) reacted strongly to the cessation of pumping at W3R almost two hundred metres southwards. From Non-Detect for chlorobenzene on June 25/26 before pumping stopped, it in a few days jumped to 40 and later 45 ppb. after pumping was stopped at W3R. After pumping was restarted concentrations of chlorobenzene fell to Non-Detect again. This is due to likely residual DNAPL left over from the years long heavy pumping at W4 further north and a little east of CH38 and had caused unusually high concentrations of chlorobenzene at that well for decades. W4 beside the Howard St. Water Tower and observation well OW57-32R was the location of free phase DNAPL 100 feet below ground surface originally confirmed and then denied by CRA, Uniroyal and the M.O.E..
Table 2 (OW119-27 MU aquifer) tells a somewhat similar story. Prior to pumping being stopped this well three metres north of pumping well W3R had a concentration of 68.1 ppb. of chlorobenzene and within a few days of the cessation of pumping it was at 30.7 ppb. dropping down to .98 (yes less than 1) ppb over the shutdown weeks and then jumping back up to 83.3 ppb. after pumping at W3R was restored. Clearly the core of the chlorobenzene plume has been drawn towards W3R by its' pumping and then drifts away when pumping stops. The ongoing chlorobenzene concentrations up to the drinking standard criteria of 80 ppb. after nearly thirty years of pumping are the obvious and clear result of subsurface residual or free phase DNAPL presence which dissolves very much more slowly in water than NDMA and most other solvents.
Table 2 (OW155-32 ML aquifer) This observation well is located about five metres north of pumping well W5A and had a chlorobenzene concentration of Non-Detect prior to the shutdown of pumping. Within a few days its' concentration had jumped to 135 ppb. It stayed above the drinking water standard throughout the pump shutdown period and then somewhat oddly remained high (151 ppb) even more than two months after pumping restarted at W5A. I see two possibilities here. This pumping well is very close to the south-west corner of the Uniroyal/Lanxess site and either free phase or residual DNAPL exists very nearby or since pumping well W4 to the west (Water Tower area) was shut down several years ago the remaining contaminant plume has via W5A pumping migrated eastwards towards itself (i.e. W5A). Either way this again is the second area where DNAPL left the Uniroyal site decades ago and has permanently contaminated the Elmira Aquifers (including Bedrock).
Lastly we have Table 2 (CH44D ML aquifer) Here we have a monitoring well twenty metres north of pumping well W8. I guess I may have saved the best for last. Its' concentration prior to the cessation of pumping was 4.56 ppb (parts per billion). Within a few days of pumping being stopped the chlorobenzene concentration had soared to 703 ppb. !!! It remained high throughout the shutdown period exceeding 1,000 ppb. on two occasions. Then in November two months after pumping restarted it was back down to 20.1 ppb. !!! This tells me a couple of things. Firstly either residual or free phase DNAPL is present right there in the ML aquifer very close to W8 and CH44D and the volume of groundwater impacted is small leading to amazingly fast reactions to both stopping and restarting the pumping regime. Also based upon a similar reaction to pumping by NDMA I suspect that the NDMA may very well be mixed in with the DNAPL .
What have I slowly learned over thirty-six years? Thin skinned and faint of heart individuals have a much higher tolerance for well dressed, well spoken liars, cheats and thieves than they do for those who would point out these character deficiencies and speak of them. Hence my apologies to the Jens, Sandys, Sebastians, Nathans and others who are far more impressed than I by the Ramin Ansaris, Allan Deals, Lou Almeidas, Steve Quigleys, Hadley Stamms, Lubnas, Jasons, and so many more. While I don't share your character priorities I try to understand them despite occasionally finding them grating. Also the term "cheats and thieves" may be interpreted as more figurative than literal.
The post Civic Holiday Hours appeared first on Grand River Rocks Climbing Gym.
The post Civic Holiday Hours appeared first on Grand River Rocks Climbing Gym.
2021’s Though I Am an Inept Villainess: Tale of the Butterfly-Rat Body Swap in the Maiden Court, Volume One is the first tankōbon for Satsuki Nakamura, Ei Ohitsuji, and Kana Yuki’s manga adaptation of for Satsuki Nakamura’s secondary universe series of the same name. The 2022 English translation is by Margaret Ngo.
To ensure a reliable supply of qualified queens, the five great families of a certain kingdom send maidens to the imperial court. There, the maidens are trained and assessed. The best among them will become queen.
Fate has been unkind to Shu Keigetsu. Her mother was a mere dancer, barely more than a prostitute in the eyes of judgmental court ladies. She lacks many graces expected in a court maiden. She is a pariah, the so-called Rat.
Keigetsu has a simple solution. Step one: push her most hated rival Kou “the Butterfly” Reirin off a balcony in front of a large crowd of witnesses.
KITCHENER – This was a night where eight runs won a game at Jack Couch Park.
In the finale of the season series between the Kitchener Panthers and the Hamilton Cardinals, the visiting Cardinals held on to an 8-5 victory Tuesday night.
The Panthers used just two pitchers in this one.
Jorge Minyety surrendered four runs in the first inning, and another in the second, but went five innings and struck out seven batters.
Ben Hewitt entered the ballgame in the sixth inning and went a season-high four innings. He also struck out seven and didn't give up an earned run.
Sending two pitchers up to the mound alone, was a win for Kiefer’s squad, who had become accustomed to diving deep into the bullpen.
Hamilton had won the game by getting to Minyety early. The four-spot in the first set the tone for what turned out to be another tough go for Kitchener.
Two home runs from Evan Magill did not give the home side much confidence.
The Panther offence picked up late. A three-run rally in the eighth made things interesting, but they could only get to within three runs of a comeback.
Kitchener drops to 10-21 on the season, while Hamilton improves to 18-11.
Kitchener now heads on the road for four games. Their next two? A rematch against the Welland Jackfish Thursday, and then into London Friday.
The Panthers don't return home until Thursday, Aug. 6 against Guelph at 7:05 p.m.
GET YOUR TICKETS NOW and #PackTheJack!
BOXSCOREDump the license list of packages installed with pip.
Python 374 4 issues need help Updated Jul 31
Audits Python environments, requirements files and dependency trees for known security vulnerabilities, and can automatically fix them
Python 1.3k 10 issues need help Updated Jul 30
Bandit is a tool designed to find common security issues in Python code.
Python 8.2k Updated Jul 27
♦
Join the KWMP Dance Club for another session of weekly dance classes designed to foster community, fitness, and fun through beginner-to-advanced level dance instruction.
Available Classes Date Dance Type Instructors August 6 Open Jazz Sarah Bowman & Sarah Jones August 13 Broadway Heels Sarah Jones & Caroline Wiechers August 20 Jazz Tech Sarah Bowman & Laura Hole August 27 Theatre Jazz Travis Brooks & Caroline Wiechers September 3 Commercial Jazz Travis Brooks & Ciara Moules TimesBeginner/Intermediate – 7:00pm to 8:00pm
Intermediate/Advanced – 8:00pm to 9:30pm
KWMP Arts Centre (14 Shaftsbury Drive, Kitchener)
AgesParticipants must be at least 16 years old.
Beginner/Intermediate ClassesTailored to people who are new to dance or have basic training, this class is perfect for those who want to explore dance and/or hone their skills in a casual and low-pressure environment. Build confidence in movement with slower-paced instruction, a break down of technique and the introduction of basic choreography – and have fun while you’re doing it!
Class Structure: (1 hour total) Approx. 0.5hr Warm/Technique, 0.5hr Choreography
Intermediate/Advanced ClassesFor more experienced dancers who want to challenge themselves, continue to push their skills and are comfortable picking up choreography. This class will be less focused on the basics and more about exploring musicality, style and more complex moves and combinations. It will include faster-paced choreography, transitions and a focus on performance quality. Great for audition training and taking your dance skills to the next level!
Class Structure: (1.5 Hour total) Approx. 0.5hr Warm Up, 1hr Choreography
Cost$20 per class ($15 for KWMP Members). Sign up for a KWMP Membership.
Register Now
NO REFUNDS WILL BE PROVIDED DUE TO CANCELLATIONS.
The post KWMP Dance Club – Summer 2026 appeared first on K-W Musical Productions.
♦
It’s not us. It’s the room.
Continue reading on Code Like A Girl »
When it comes to decorating a home, inspiration can come from unexpected places. While Pinterest boards, Instagram, and design magazines are great starting points, some of the most unique ideas can be found right here in Waterloo Region’s vibrant arts community.
Local art shows and exhibits offer more than an afternoon outing; they provide fresh perspectives on colour, texture, storytelling, and personal style. Whether you’re settling into a new home, refreshing a room, or preparing a property for sale, exploring local art can spark ideas that help transform your space into something truly personal.
Ways Local Art Can Inspire Your Home Décor1. Discover New Colour Palettes
Artists often combine colours in ways that wouldn’t normally occur to us. A landscape painting, abstract canvas, or mixed-media piece may inspire a fresh colour scheme for a living room, bedroom, or home office.
Look for:
2. Create a Statement Wall
A single piece of local artwork can become the focal point of an entire room. Instead of designing a room first and adding art later, try doing the opposite.
Ideas include:
3. Add Texture and Dimension
Art isn’t limited to paintings. Ceramics, glasswork, textiles, and sculpture can add depth and visual interest throughout your home.
Consider incorporating:
4. Reflect the Character of Waterloo Region
Many local artists draw inspiration from the landscapes, architecture, and communities that make our region unique. Displaying local artwork creates a stronger connection to the place you call home.
Popular themes include:
5. Support Local Artists While Decorating
Purchasing art from local creators allows you to build a home that feels authentic while supporting the creative community.
Benefits include:
6. Bring Personality Into New Construction Homes
Newer homes often feature neutral finishes and clean lines. Artwork is one of the easiest ways to add warmth and personality without undertaking major renovations.
Art can:
Waterloo Region offers plenty of opportunities to discover local and Canadian artists throughout the year. Here are some galleries, outdoor spaces, and artists to inspire your home decor!
Discover more local art galleries here.
Local artists to check out@stephboutari
View this post on InstagramA post shared by Steph Boutari (@stephboutari)
@randomsketchesofmylife_
View this post on InstagramA post shared by Della vanDokkumburg (@randomsketchesofmylife)
@trevorclareart
View this post on InstagramA post shared by Trevor Clare | Artist (@trevorclareart)
Your home should tell your story, and local art is one of the most meaningful ways to make a space feel personal. Whether you’re drawn to bold contemporary works, handcrafted ceramics, or landscapes inspired by Waterloo Region, local galleries offer endless inspiration.
The next time you’re looking to refresh a room, consider spending an afternoon exploring a local exhibit. You may discover the perfect piece and the perfect idea to bring new life to your home.