You're correct, the horizontal and vertical flips for the square, are already accounted for in the wreath product. And I miscounted the products themselves. Up to 1.2*10^12 symmetries.
The exponential number of symmetries present in sudoku problems, means that once you've found one valid instance, you've actually found up to 9! * 3!^4 * 8 which are exactly the same.
The numbers themselves are all interchangeable, so you have 9! combinations: 362,880.
Columns 1-to-3 are all interchangeable, as are 4-to-6, and 7-to-9. On top of this, these blocks of columns (1-to-3, 4-to-6, 7-to-9) are all interchangeable. Read about wreath products in group theory to know more. Each of the above symmetries are 3!, combined to yield 3! * 3! = 36 combinations. As well as the columns though, the rows have the same property, so those can be combined too: 36 * 36 =
1,296.
Finally, there are the symmetries of a square. Combining all rotations and flips yields a further 8.
In total, sudoku has 3,762,339,840 symmetries. Owing to the starting state of the sudoku puzzle being incomplete, the orbit of the set of points (more group theory) will be smaller than 3 billion, but it provides an efficient method of recreating many more puzzles with the same property. In this case, human complexity.
I bought the 52x90 poster where each square is a week of your life. I've filled in significant events. It helps me ensure I keep working on making those events coming.
When I worked at Skyscanner, we'd volunteer at events where high school kids would be shown tech stuff. We'd setup Raspberry Pis with Minecraft on them and show them some basics of running Python scripts to alter the world (with the conclusion being programmatically create loads of dynamite blocks and explode them). Then at the end of the session, give every kid their own Raspberry Pi.
It was interesting reaching the occasional child who assumed this kind of thing wasn't for them.
Only US citizens are permitted to deploy code to the US government production servers, or look at the telemetry from those servers.
(I'm a UK citizen, based in the UK, and I have local colleagues supporting products that are deployed to both commercial .com, and US .gov domains. They deploy to .com themselves, but another team based in the US deploy to .gov)
The pandemic is ongoing, but despite its lasting impacts e.g. hybrid or remote is the norm, many things are back to normal. One thousand days out, how are things for you?
I created a CloudFormation script specifically to do this (including CloudFront for CDN). Yes, there's reasonable complexity, but it's a trade-off of security and configuration. As others noted, the documentation is good, and this took me a weekend to write including learning CloudFormation from scratch.
You're correct, yes, I didn't realise how generous the free tier is. If you're doing fewer than 500 updates per month, Cloudflare looks good https://pages.cloudflare.com/
Because I have other resources and projects in AWS I'll keep this setup. It's so close to free that cost doesn't bother me.
Familiarity with S3, Route53, and CloudFront was a draw for me personally.
AWS is all about abstractions. Some of them are worth learning but increasingly there's a wall of options in AWS and, for me, it's not worth spending time staying on top of all of them. The few services needed for this setup are some of the most popular and will be there in the future.
Nothing particularly novel but the setup of configuring CloudFront to connect to S3 and handle SSL termination, a DNS record pointing to CloudFront, an S3 bucket to hold the contents, an S3 bucket security policy which restricts access just to CloudFront... well, it's complex and easy to misconfigure.
In terms of pricing, you can store 1GB in S3 for a year for a fraction of a dollar. The majority of the cost comes from CloudFront. Unless you have serious traffic, this is extremely cheap:
Cloudflare Pages looks like a more productionised version of this, yes.
In terms of advantages, I'd say price, and the maturity of using AWS. I deploy a static site with a GitHub Action (look at my other repo whisky-menu for how to do this) which builds a React app, copies it to S3, and invalidates the CloudFront cache.
Completing a PhD is risky. I'd recommend reading this to see some of the ways it can go wrong: https://100rsns.blogspot.com/
Ultimately it's a big commitment. Speak to as many people as you can who've walked the specific path you want to head down i.e. being an industry researcher.
I completed a PhD in my early twenties, and though I took a completely different career path, the skills I picked up completing it have been extremely useful. I was lucky in that it was fully funded, and was setup to finish it inside 4 years. A lot of that was down to the research group I joined, and in particular the supervisor.
This is why I stress the importance of culture. I got into engineering because I loved coding, I loved problem solving, I loved writing programs and making things happen on the screen. It's so easy for the team sport aspect of software engineering to become a blindspot if it's something you're not interested in.
I'm an engineering manager in my 40s and I've hired engineers older than me.
I appreciate you're absolutely correct, age discrimination does happen. One thing to consider for older engineers is that, though your technical expertise improves through the decades, it's not just technologies that you have to keep up with but also cultural practices. That is, the bad culture fit isn't necessarily code for "We don't want you because you're old." but could be a genuine reason.
As an example, consider the book The Phoenix Project which dissects the reasons for discarding segregation of roles like developers, QA, and ops in separate teams into service teams of DevOps / T-shaped engineers. If you haven't worked in that environment or don't appreciate the difference, you may be judged accordingly.
Diversity is the solution to groupthink. From the book Surrounded By Idiots, the author demonstrates that people with different backgrounds and behaviour models come together to make stronger teams.
As engineers become more senior, they have a hand in design, in product etc. they bring something of themselves to their software solutions. Making software with only a team of white dudes means you miss the mark on issues important outside that group.
Also, inclusion goes hand in hand with diversity. People from all ethnicities and not just cis males can code, but if your team is mainly white guys, you have to work twice as hard convincing others that they'll be welcome and fit right in otherwise it becomes a self perpetuating pattern.
Also, "abilities" is subjective. If your exemplar for software engineer progression is a path that fits a majority white man route into the industry, and plays to the strengths of the people you promote, you'll over-index on those abilities. It's a good question to ask, what skills are we missing out on because our lack of diversity leads us to self selecting?
For transparency, I'm a white cis male manager, who manages a team of almost exclusively white cis males. I'm working on some long term strategic projects to help foster diversity in engineering in my city.
Working on the most important items: automate measuring the most important metrics for your team. Releases, paging events, outages, bugs, support issues. You can look at your data and get a feel for trends and whether you need to focus on quality, or delivering more features.
Look into KPIs (key performance indicators). They should be proxies for customer success - Key means only have a few. The engineers should know what they are and be given the autonomy to influence the roadmap and innovate on how best to improve them.