<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: ehsan mokhtary</title>
    <description>The latest articles on DEV Community by ehsan mokhtary (@ehsan_mokhtary_2230bbc2d8).</description>
    <link>https://dev.to/ehsan_mokhtary_2230bbc2d8</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4170244%2F32ed9aa6-de2b-4464-855e-ec1ca5e7dc11.jpg</url>
      <title>DEV Community: ehsan mokhtary</title>
      <link>https://dev.to/ehsan_mokhtary_2230bbc2d8</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ehsan_mokhtary_2230bbc2d8"/>
    <language>en</language>
    <item>
      <title>Python Won’t Die. Its Biggest Selling Point Might.</title>
      <dc:creator>ehsan mokhtary</dc:creator>
      <pubDate>Thu, 08 Oct 2026 05:44:22 +0000</pubDate>
      <link>https://dev.to/ehsan_mokhtary_2230bbc2d8/python-wont-die-its-biggest-selling-point-might-a6d</link>
      <guid>https://dev.to/ehsan_mokhtary_2230bbc2d8/python-wont-die-its-biggest-selling-point-might-a6d</guid>
      <description>&lt;p&gt;&lt;em&gt;If AI writes the code, “easy to write” becomes a strange reason to choose a programming language.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Here’s a prediction that will annoy developers: we may be approaching the end of choosing programming languages primarily for the convenience of the person typing them.&lt;/p&gt;

&lt;p&gt;For years, we’ve celebrated languages that let us express more with less effort. Cleaner syntax. Less boilerplate. Faster prototypes. Fewer things to remember.&lt;/p&gt;

&lt;p&gt;Those advantages mattered when turning an idea into code consumed a large part of our attention.&lt;/p&gt;

&lt;p&gt;But what happens if AI handles much of that translation?&lt;/p&gt;

&lt;p&gt;If a machine can produce the verbose version, the convenience of writing the short version loses some of its value.&lt;/p&gt;

&lt;p&gt;That doesn’t mean Python is dead. It means “Python is easy to write” could become a much weaker argument.&lt;/p&gt;

&lt;h2&gt;
  
  
  Your favourite syntax may be solving yesterday’s problem
&lt;/h2&gt;

&lt;p&gt;Imagine choosing between two languages.&lt;/p&gt;

&lt;p&gt;One is pleasant to write but leaves more mistakes to be discovered while the program runs. The other requires more explicit structure but catches more mistakes before deployment.&lt;/p&gt;

&lt;p&gt;When humans write every line, that extra structure can feel expensive.&lt;/p&gt;

&lt;p&gt;When AI generates the first draft, the calculation changes.&lt;/p&gt;

&lt;p&gt;Perhaps we should welcome the boilerplate if it makes assumptions visible. Perhaps the compiler asking awkward questions is doing exactly what we need when a machine can generate plausible code faster than we can review it.&lt;/p&gt;

&lt;p&gt;In that future, the winning language might be the one that makes incorrect code hardest to accept.&lt;/p&gt;

&lt;p&gt;The language that feels most convenient at the keyboard might lose to the language that gives generated software the tightest boundaries.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code is becoming cheap. Confidence isn’t.
&lt;/h2&gt;

&lt;p&gt;The provocative version of this argument is that developers are defending their favourite languages using a cost model that AI is changing.&lt;/p&gt;

&lt;p&gt;We still ask:&lt;/p&gt;

&lt;p&gt;“How quickly can I write this?”&lt;/p&gt;

&lt;p&gt;The more useful question may become:&lt;/p&gt;

&lt;p&gt;“How cheaply can I establish that this works—and keep it working?”&lt;/p&gt;

&lt;p&gt;Those questions lead to different priorities.&lt;/p&gt;

&lt;p&gt;A concise implementation is less impressive if reviewing its behaviour takes longer. A beautiful abstraction is less helpful if nobody can explain what happens when a dependency fails. A working demo means little if the next generated change silently breaks an assumption.&lt;/p&gt;

&lt;p&gt;Typing fewer characters doesn’t solve those problems.&lt;/p&gt;

&lt;p&gt;Neither does generating more characters.&lt;/p&gt;

&lt;h2&gt;
  
  
  Python deserves a better defence than “it’s easy”
&lt;/h2&gt;

&lt;p&gt;Python is the obvious target because its accessibility is such a prominent part of its appeal.&lt;/p&gt;

&lt;p&gt;But dismissing it would be lazy. Libraries, existing systems, integration requirements, and the people maintaining a project all matter. Replacing a working ecosystem because another language looks better on paper can be an expensive mistake.&lt;/p&gt;

&lt;p&gt;The challenge is narrower—and more uncomfortable:&lt;/p&gt;

&lt;p&gt;If your strongest argument for Python is that it saves human effort while writing code, how strong is that argument when AI does much of the writing?&lt;/p&gt;

&lt;p&gt;Defend the ecosystem. Defend its suitability for your workload. Defend the speed at which your team can investigate and fix problems.&lt;/p&gt;

&lt;p&gt;But “look how few lines this takes” may stop winning the debate.&lt;/p&gt;

&lt;h2&gt;
  
  
  The uncomfortable counterargument: humans still have to read it
&lt;/h2&gt;

&lt;p&gt;This is where the prediction could fall apart.&lt;/p&gt;

&lt;p&gt;If AI makes code abundant, readable code might become more valuable. Someone still has to investigate incidents, challenge assumptions, and approve changes.&lt;/p&gt;

&lt;p&gt;A language that is easy to understand could reduce the cost of supervising AI—even if ease of writing matters less.&lt;/p&gt;

&lt;p&gt;That distinction is crucial.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Easy to write is not the same as easy to verify.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sometimes they overlap. Sometimes a short expression hides enough behaviour to make the reviewer’s job harder.&lt;/p&gt;

&lt;p&gt;The future may reward human readability. It just might reward a different kind of readability: explicit contracts, visible effects, predictable behaviour, and fewer surprises.&lt;/p&gt;

&lt;h2&gt;
  
  
  Programming languages aren’t dying. Our reasons for choosing them need an update.
&lt;/h2&gt;

&lt;p&gt;My bet is that AI shifts the competition between languages.&lt;/p&gt;

&lt;p&gt;Less emphasis on saving keystrokes. More emphasis on catching mistakes.&lt;/p&gt;

&lt;p&gt;Less admiration for a tiny implementation. More scrutiny of what it guarantees.&lt;/p&gt;

&lt;p&gt;Less loyalty to whatever feels comfortable. More attention to the cost of running, reviewing, and changing the system.&lt;/p&gt;

&lt;p&gt;There won’t be one universal winner. A data experiment, a mobile app, and a payment service have different constraints.&lt;/p&gt;

&lt;p&gt;But developers who refuse to reconsider their language preferences may find themselves optimising a part of the job that no longer costs very much.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If AI writes your next 10,000 lines, would you choose the language that makes them easiest to generate—or the one that makes them hardest to get wrong?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This is a prediction, not a benchmark. I’m interested in counterexamples that challenge its argument.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;AI disclosure: I developed the argument in conversation with AI, which helped draft and structure this article.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>ai</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Inside XEvents: a Telegram event app built with JavaScript, Workers and D1</title>
      <dc:creator>ehsan mokhtary</dc:creator>
      <pubDate>Thu, 08 Oct 2026 05:14:54 +0000</pubDate>
      <link>https://dev.to/ehsan_mokhtary_2230bbc2d8/inside-xevents-a-telegram-event-app-built-with-javascript-workers-and-d1-2fm0</link>
      <guid>https://dev.to/ehsan_mokhtary_2230bbc2d8/inside-xevents-a-telegram-event-app-built-with-javascript-workers-and-d1-2fm0</guid>
      <description>&lt;p&gt;XEvents is a Telegram bot and Mini App for event creation, invitations, RSVP, tickets, check-in and shared media. I'm the maintainer, and the project is MIT licensed.&lt;/p&gt;

&lt;p&gt;This article explains the current implementation and a few boundaries that matter when building a similar app.&lt;/p&gt;

&lt;h2&gt;
  
  
  See XEvents in action
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdodwlz8v95ltw10ll321.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdodwlz8v95ltw10ll321.gif" alt="XEvents walkthrough: create an event, manage guests and check in a group" width="300" height="650"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy6geqtzy6wrssqhwyp9b.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy6geqtzy6wrssqhwyp9b.jpg" alt="XEvents event creation form" width="415" height="899"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F907fg9y6zi07ooyajqiv.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F907fg9y6zi07ooyajqiv.jpg" alt="XEvents organiser guest list" width="415" height="899"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These are actual app screens captured in an isolated local environment with fictional events and mocked Telegram calls. The animation is a sequence of screenshots, not a live Telegram recording. &lt;a href="https://github.com/ehsan0921/Telegram-event-management/blob/main/docs/demo.md" rel="noopener noreferrer"&gt;Capture details&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two joining flows with different expectations
&lt;/h2&gt;

&lt;p&gt;A shared booking link and a personal invitation look similar at first, but guests expect different things from them.&lt;/p&gt;

&lt;p&gt;In XEvents, shared links let people book or request places, with organiser approval when configured. Named invitations offer Accept, Reject, Maybe and Respond later. They can include group counts, so a host can distinguish one invitation from the number of people attending.&lt;/p&gt;

&lt;p&gt;Keeping these flows distinct helps the interface explain what the guest is actually doing. A booking request isn't an RSVP choice, and submitting a payment report isn't proof that a payment arrived.&lt;/p&gt;

&lt;h2&gt;
  
  
  One Worker serves the hosted application
&lt;/h2&gt;

&lt;p&gt;The hosted app has three main pieces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A Cloudflare Worker receives bot webhook updates and serves the Mini App and API.&lt;/li&gt;
&lt;li&gt;D1 stores events, guest responses, preferences and coordination records.&lt;/li&gt;
&lt;li&gt;Telegram hosts uploaded files; the application stores their references.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The frontend uses HTML, CSS and JavaScript modules. Node.js 22 or newer is used for development tools and the optional standalone polling bot. Polling mode is separate: it doesn't serve the hosted Mini App or share its D1 database.&lt;/p&gt;

&lt;h2&gt;
  
  
  Authentication is only the first check
&lt;/h2&gt;

&lt;p&gt;Private Mini App API requests require signed Telegram launch data. The server verifies that identity, then checks whether the person owns the event, is a co-host or is an eligible guest.&lt;/p&gt;

&lt;p&gt;That second check matters. A valid Telegram identity doesn't automatically grant access to another event's locations, guest information or media. The Worker filters private responses on the server; hiding a frontend button isn't enough.&lt;/p&gt;

&lt;h2&gt;
  
  
  Notifications need durable coordination
&lt;/h2&gt;

&lt;p&gt;Bot operations can update attendance and queue outgoing messages. The application commits the changed records and outgoing messages together, then delivers the messages afterwards. A scheduled task retries queued messages and processes eligible reminders.&lt;/p&gt;

&lt;p&gt;This improves delivery durability, but it doesn't establish exactly-once delivery. If a network response is lost after Telegram receives a message, a retry can duplicate it. The architecture guide makes that limitation explicit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Short-lived check-in codes
&lt;/h2&gt;

&lt;p&gt;Confirmed guests can request a six-digit check-in code. It expires at the next minute, and a refresh action requests another. The app generates codes on demand, rather than continually polling or scheduling code generation.&lt;/p&gt;

&lt;p&gt;Organisers enter a code through the check-in keypad to check in the group. QR tickets are optional and start off for new events. Server-side checks still decide whether the ticket can be used.&lt;/p&gt;

&lt;h2&gt;
  
  
  Media and payments have practical limits
&lt;/h2&gt;

&lt;p&gt;Attendees can share photos in one event collection with no built-in photo-count limit. Telegram and hosting limits apply.&lt;/p&gt;

&lt;p&gt;Telegram-hosted media avoids a separate application media bucket, but it isn't an independent backup or unlimited storage promise. The Mini App limits full-file retrieval to 20 MB and offers Send to Telegram for larger files.&lt;/p&gt;

&lt;p&gt;Paid events support organiser-reviewed manual payments and Telegram Stars. Direct card processing and automatic organiser payouts aren't implemented. Hosting and provider quotas still apply.&lt;/p&gt;

&lt;h2&gt;
  
  
  Explore the project
&lt;/h2&gt;

&lt;p&gt;Try the bot: &lt;a href="https://t.me/XEvents_bot" rel="noopener noreferrer"&gt;https://t.me/XEvents_bot&lt;/a&gt; (Telegram required).&lt;br&gt;
Source: &lt;a href="https://github.com/ehsan0921/Telegram-event-management" rel="noopener noreferrer"&gt;https://github.com/ehsan0921/Telegram-event-management&lt;/a&gt;&lt;br&gt;
Architecture: &lt;a href="https://github.com/ehsan0921/Telegram-event-management/blob/main/docs/architecture.md" rel="noopener noreferrer"&gt;https://github.com/ehsan0921/Telegram-event-management/blob/main/docs/architecture.md&lt;/a&gt;&lt;br&gt;
Self-hosting: &lt;a href="https://github.com/ehsan0921/Telegram-event-management/blob/main/docs/self-hosting.md" rel="noopener noreferrer"&gt;https://github.com/ehsan0921/Telegram-event-management/blob/main/docs/self-hosting.md&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The project welcomes focused contributions, including documentation and accessibility improvements. If you organise club events or meetups, I'd like to hear where the invitation or guest-management experience needs work.&lt;/p&gt;

&lt;p&gt;Disclosure: This article was prepared with AI assistance and checked against the project's source and documentation.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
