<?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>Forem: John Wilson</title>
    <description>The latest articles on Forem by John Wilson (@john_wilson).</description>
    <link>https://forem.com/john_wilson</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2944829%2F37baa021-fec5-4561-af5a-6dd920e14967.jpg</url>
      <title>Forem: John Wilson</title>
      <link>https://forem.com/john_wilson</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/john_wilson"/>
    <language>en</language>
    <item>
      <title>Temporary Email: Privacy Guardians in the Digital Age</title>
      <dc:creator>John Wilson</dc:creator>
      <pubDate>Wed, 02 Jul 2025 02:15:15 +0000</pubDate>
      <link>https://forem.com/john_wilson/temporary-email-privacy-guardians-in-the-digital-age-44kn</link>
      <guid>https://forem.com/john_wilson/temporary-email-privacy-guardians-in-the-digital-age-44kn</guid>
      <description>&lt;p&gt;In today's world of increasing information security awareness, more and more people are focusing on online privacy protection. Questions like "When should I use a temporary email?" and "What risks exist when using my real email?" frequently appear in daily conversations. This article will delve into the value of temporary email addresses, share practical scenarios, and provide security advice to help you better protect your personal privacy in the digital world.&lt;/p&gt;

&lt;h2&gt;
  
  
  Typical Application Scenarios for Temporary Email
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. AI Product Trials
&lt;/h3&gt;

&lt;p&gt;With the booming development of AI technology, ChatGPT, Midjourney, and various AI writing tools are emerging one after another, most requiring email registration to experience them. However, not every AI product is worth leaving your real email information for.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real Case&lt;/strong&gt;: I once had high expectations for a highly recommended AI drawing tool and registered with my real email without hesitation. The product experience was mediocre, but I began receiving product update emails every day. Although unsubscribing is an option, who can guarantee that your email address hasn't been sold to other marketing agencies?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Optimization Strategy&lt;/strong&gt;: First try with a temporary email, and if the product is truly excellent, consider re-registering with your real email – protecting your privacy while not missing out on quality services.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Software Downloads and Trials
&lt;/h3&gt;

&lt;p&gt;Many software manufacturers adopt a "free trial" marketing strategy that seems attractive on the surface but often comes with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Frequent reminder emails about the trial period ending soon&lt;/li&gt;
&lt;li&gt;Continuous feature upgrade notifications&lt;/li&gt;
&lt;li&gt;Various "user research" and "product feedback" requests&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Personal Experience&lt;/strong&gt;: After downloading an image editing software, my inbox received over 30 related emails in just one month! Experience tells me that temporary email addresses are ideal for these situations.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Development and Testing Work
&lt;/h3&gt;

&lt;p&gt;For programmers, product managers, or testers, temporary emails are essential tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Registration Process Testing&lt;/strong&gt;: Verifying the completeness and reliability of email sending functions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-User Scenario Simulation&lt;/strong&gt;: Evaluating system performance under different user conditions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Function Verification&lt;/strong&gt;: Testing key features like email notifications and password resets&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stress Testing&lt;/strong&gt;: When creating numerous test accounts is needed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;During product testing phases, you might need to create dozens of test accounts. Using real emails is not only impractical but would also lead to inbox management chaos.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Competitive Analysis Research
&lt;/h3&gt;

&lt;p&gt;When conducting market research, registering for competitors' services to understand their product strategies and marketing methods is a common practice. Using temporary emails has significant advantages here:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Effectively protects identity information, avoiding exposure of research intentions&lt;/li&gt;
&lt;li&gt;Specifically observes competitors' email marketing strategies and user communication methods&lt;/li&gt;
&lt;li&gt;Prevents marketing emails from interfering with daily work and personal inboxes&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. One-Time Event Participation
&lt;/h3&gt;

&lt;p&gt;Online prize drawings, free resource downloads, and webinars usually require providing an email address. These situations are particularly suitable for temporary emails:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No longer receiving related emails after the event ends, reducing information interference&lt;/li&gt;
&lt;li&gt;Avoiding having your email added to various marketing databases&lt;/li&gt;
&lt;li&gt;Important notifications (such as winning information) are usually communicated through other channels&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Potential Risk Analysis of Using Real Email Addresses
&lt;/h2&gt;

&lt;p&gt;Many people might think "it's just a few spam emails," but the actual risks far exceed imagination:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Commercial Trading of Email Addresses
&lt;/h3&gt;

&lt;p&gt;This is the most prevalent risk. Unscrupulous websites may sell user email information to marketing companies, causing your email to appear in countless marketing databases. One of my friends receives hundreds of spam emails daily because of this, making management difficult.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Phishing Email Threats
&lt;/h3&gt;

&lt;p&gt;When your email is exposed in various databases, the probability of becoming a phishing attack target greatly increases. Scammers will impersonate websites you've registered with, sending fake emails like "account abnormality" or "password about to expire" to induce clicking on malicious links.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Chain Leakage of Personal Information
&lt;/h3&gt;

&lt;p&gt;Email addresses are usually associated with other personal information, such as real names and phone numbers. Once an email leaks, it may trigger wider exposure of personal information, constituting privacy security risks.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Decreased Work Efficiency
&lt;/h3&gt;

&lt;p&gt;Spam email flooding seriously affects normal email processing efficiency. Data shows that professionals may spend 30 minutes or more daily clearing spam emails, which is undoubtedly a waste of time resources.&lt;/p&gt;

&lt;h2&gt;
  
  
  Email Security Usage Strategies
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Layered Management Approach
&lt;/h3&gt;

&lt;p&gt;I recommend adopting a "layered use" strategy, rationally allocating services of different importance:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Core Email&lt;/strong&gt;: Dedicated to the most important services, such as bank accounts, work communications, and main social media&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Daily Email&lt;/strong&gt;: Used for general service registrations, such as e-commerce platforms and commonly used software&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Temporary Email&lt;/strong&gt;: Suitable for one-time needs, test experiences, and trial evaluations&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Choosing Reliable Temporary Email Services
&lt;/h3&gt;

&lt;p&gt;There are many temporary email services in the market. When choosing, consider these key factors:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Service Stability&lt;/strong&gt;: Ensuring stable access when needed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security Guarantees&lt;/strong&gt;: Not recording or leaking email content, protecting user privacy&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;User Experience&lt;/strong&gt;: Intuitive and concise interface, convenient and efficient operation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Feature Completeness&lt;/strong&gt;: Supporting multiple domain choices, providing email favorites functionality&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Practical Application Experience Sharing
&lt;/h2&gt;

&lt;p&gt;While recently using &lt;a href="https://tempmail100.com/" rel="noopener noreferrer"&gt;Temp Mail&lt;/a&gt; for work, I discovered a particularly practical application scenario:&lt;/p&gt;

&lt;p&gt;When testing the new user registration process for the company, I needed to create multiple test accounts. Previously, when using other temporary email services, I frequently encountered problems like domains being blocked or emails expiring too quickly, causing testing interruptions. This service solved key pain points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Provides multiple domain choices, ensuring there are always available options&lt;/li&gt;
&lt;li&gt;Email favorites feature supports long-term retention of test emails&lt;/li&gt;
&lt;li&gt;Fast generation speed, seamlessly integrated into the testing process&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now, I save commonly used test emails as favorites and call them directly when needed, greatly improving work efficiency.&lt;/p&gt;

&lt;h3&gt;
  
  
  Regular Maintenance Management
&lt;/h3&gt;

&lt;p&gt;Even if you adopt a layered strategy, you should regularly maintain your email:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clean up unnecessary emails, keeping the inbox tidy&lt;/li&gt;
&lt;li&gt;Proactively unsubscribe from mailing lists you no longer follow&lt;/li&gt;
&lt;li&gt;Regularly update email addresses and security settings for important services&lt;/li&gt;
&lt;li&gt;Check suspicious login or registration emails to detect security threats early&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Temporary email, as a simple yet practical technical tool, can effectively protect personal privacy and improve work efficiency in various scenarios. The key is to clearly understand when to use it and when not to.&lt;/p&gt;

&lt;p&gt;Remember this core principle: For services of questionable reliability or only temporary use, choose &lt;a href="https://tempmail365.com/" rel="noopener noreferrer"&gt;Temporary email&lt;/a&gt; for important services used long-term, use your real email.&lt;/p&gt;

&lt;p&gt;In the digital age of information explosion, learning to protect personal privacy has become an essential skill. &lt;a href="https://tempmail365.com/" rel="noopener noreferrer"&gt;Temporary email&lt;/a&gt; may be small, but it can provide an extra layer of protection for your digital life. By reasonably utilizing this tool, you can better control personal information security while enjoying digital convenience.&lt;/p&gt;

&lt;h2&gt;
  
  
  Recommended Temporary Email Services
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://tempmail100.com/" rel="noopener noreferrer"&gt;Temp Mail&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://tempmail365.com/" rel="noopener noreferrer"&gt;Temporary email&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://vmail.dev/" rel="noopener noreferrer"&gt;vmail.dev&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>Further Understanding Cargo and Crates.io</title>
      <dc:creator>John Wilson</dc:creator>
      <pubDate>Wed, 25 Jun 2025 04:48:33 +0000</pubDate>
      <link>https://forem.com/john_wilson/further-understanding-cargo-and-cratesio-gna</link>
      <guid>https://forem.com/john_wilson/further-understanding-cargo-and-cratesio-gna</guid>
      <description>&lt;p&gt;In Rust, "release profiles" are predefined and customizable sets of settings with different options that allow programmers to control compilation options flexibly. Each profile is independent.&lt;/p&gt;

&lt;p&gt;Cargo mainly has two profiles: the dev profile used when running cargo build, and the release profile used when running cargo build --release. The dev profile is the default suitable for development, while the release profile is suitable for building optimized release binaries.&lt;/p&gt;

&lt;p&gt;You may see these names in the build output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ cargo build
   Compiling cargo1 v0.1.0 (/rust/cargo1)
    Finished dev [unoptimized + debuginfo] target(s) in 0.67s
$ cargo build --release
   Compiling cargo1 v0.1.0 (/rust/cargo1)
    Finished release [optimized] target(s) in 0.11s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The output shows dev and release, indicating that the compiler is using different settings.&lt;/p&gt;

&lt;p&gt;If you do not explicitly add [profile.&lt;em&gt;] sections in your project's Cargo.toml, Cargo uses default settings for all profiles. You can override any subset by adding the corresponding [profile.&lt;/em&gt;] section. For example, the default opt-level values for dev and release are:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[profile.dev]
opt-level = 0

[profile.release]
opt-level = 3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The opt-level controls how much optimization Rust applies to the code. It ranges from 0 to 3. Higher optimization levels increase compile time, so during development you may prefer faster compile times at the cost of less optimization. Hence, dev has default opt-level of 0. Release builds, intended to be compiled once and run multiple times, benefit from more optimization, so release defaults to opt-level 3.&lt;/p&gt;

&lt;p&gt;You can override defaults in Cargo.toml. For example, to use optimization level 1 for development builds:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[profile.dev]
opt-level = 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will increase optimization in dev builds but not as aggressively as the release profile.&lt;/p&gt;

&lt;h3&gt;
  
  
  Documentation Comments
&lt;/h3&gt;

&lt;p&gt;Documentation comments start with triple slashes /// and support Markdown. They must be placed immediately before the item being documented. Create a new project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ cargo new learn_cratel
$ cd learn_cratel
$ cargo new mylib --lib
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open mylib's lib.rs and add a documentation comment to the default add function:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/// Adds two usize values
pub fn add(left: usize, right: usize) -&amp;gt; usize {
    left + right
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run cargo doc to generate HTML documentation from the comments. This calls rustdoc and outputs docs into target/doc.&lt;/p&gt;

&lt;p&gt;Running cargo doc --open builds the docs and opens them in your browser. You can see how the documentation renders when following the add function.&lt;/p&gt;

&lt;p&gt;You can add more detailed comments:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="cd"&gt;/// Adds two numbers&lt;/span&gt;
&lt;span class="cd"&gt;/// # Example&lt;/span&gt;
&lt;span class="cd"&gt;/// ```&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;endraw&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="cd"&gt;/// let left = 1;  &lt;/span&gt;
&lt;span class="cd"&gt;/// let right = 2;  &lt;/span&gt;
&lt;span class="cd"&gt;/// assert_eq!(3, mylib::add(left, right));  &lt;/span&gt;
&lt;span class="cd"&gt;///&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;raw&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;pub fn add(left: usize, right: usize) -&amp;gt; usize {&lt;br&gt;
    left + right&lt;br&gt;
}&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

Here, the description and an example section demonstrate how to use the add function.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y97jpolgd562kthxae6a.webp)

### Testing Documentation Examples
The sample code inside doc comments also acts as tests. cargo test runs these docs tests to help make sure examples don't break after code changes. Running cargo test produces:



&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Doc-tests mylib&lt;/p&gt;

&lt;p&gt;running 1 test&lt;br&gt;
test src/lib.rs - add (line 3) ... ok&lt;/p&gt;

&lt;p&gt;test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.18s&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

If an example assertion fails, cargo test reports it as a failure.

### Inner Documentation Comments

The //! style documents the enclosing item itself and appears at the beginning of files, commonly at crate root (src/lib.rs) or module roots. It documents the crate or module as a whole.

Example in src/lib.rs:



&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;//! # My Crate&lt;br&gt;
//!&lt;br&gt;
//! &lt;code&gt;learn_cratel&lt;/code&gt; is a utility collection&lt;/p&gt;

&lt;p&gt;/// Adds two numbers&lt;br&gt;
/// # Example&lt;br&gt;
/// ```&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;/// let left = 1;&lt;br&gt;&lt;br&gt;
/// let right = 2;&lt;br&gt;&lt;br&gt;
/// assert_eq!(3, mylib::add(left, right));&lt;br&gt;&lt;br&gt;
///&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pub fn add(left: usize, right: usize) -&amp;gt; usize {
    left + right
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;//! comments appear on the crate's top-level documentation page above the list of public items when running cargo doc --open.&lt;/p&gt;

&lt;h3&gt;
  
  
  Publishing Crates to Crates.io
&lt;/h3&gt;

&lt;p&gt;We have used dependencies from crates.io, but you can also publish your own crates to share code with others. crates.io is a distribution platform for open-source Rust code.&lt;/p&gt;

&lt;h3&gt;
  
  
  Create a Crates.io Account
&lt;/h3&gt;

&lt;p&gt;Before publishing, you need an account and an API token from crates.io. Log in using your GitHub account (currently the only supported login). Get your token from &lt;a href="https://crates.io/me/" rel="noopener noreferrer"&gt;https://crates.io/me/&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Then run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ cargo login your_api_token
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This stores your token in ~/.cargo/credentials. Keep this token secret.&lt;/p&gt;

&lt;h3&gt;
  
  
  Publish to Crates.io
&lt;/h3&gt;

&lt;p&gt;Once logged in, publish a specific crate version to make it available for others to depend on.&lt;/p&gt;

&lt;p&gt;Publishing is permanent; versions cannot be overwritten or deleted. This preserves stable code for dependent projects. Version numbers follow semantic versioning but you can publish any version.&lt;/p&gt;

&lt;p&gt;If you run cargo publish and see an error like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Caused by:
  the remote server responded with an error: missing or empty metadata fields: description, license. Please see https://doc.rust-lang.org/cargo/reference/manifest.html for how to upload metadata
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It means description and license fields are missing in your Cargo.toml. Add them:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;description = "This is a test project"
license = "MIT OR Apache-2.0"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Publish again, and it should succeed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ cargo publish
    Updating crates.io index
warning: manifest has no documentation, homepage or repository.
See https://doc.rust-lang.org/cargo/reference/manifest.html#package-metadata for more info.
   Packaging mylib-hekang v0.1.0 (/rust/learn_cratel/mylib)
   Verifying mylib-hekang v0.1.0 (/rust/learn_cratel/mylib)
   Compiling mylib-hekang v0.1.0 (/rust/learn_cratel/mylib/target/package/mylib-hekang-0.1.0)
    Finished dev [unoptimized + debuginfo] target(s) in 0.84s
    Packaged 3 files, 1.3KiB (901.0B compressed)
   Uploading mylib-hekang v0.1.0 (/rust/learn_cratel/mylib)
    Updating crates.io index
    Waiting on `mylib-hekang` to propagate to crates.io index (ctrl-c to wait asynchronously)
    Updating crates.io index
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now your code is shared with the Rust community, and anyone can add it as a dependency.&lt;/p&gt;

&lt;h3&gt;
  
  
  Publishing New Versions
&lt;/h3&gt;

&lt;p&gt;When updating your crate, increment the version in Cargo.toml following semantic versioning and run cargo publish again.&lt;/p&gt;

&lt;h3&gt;
  
  
  Yank Crate Versions
&lt;/h3&gt;

&lt;p&gt;You cannot remove published versions but can "yank" them to mark them as deprecated for new projects. Existing projects using that version continue to work, but new dependencies won’t use it.&lt;/p&gt;

&lt;p&gt;To yank version 0.1.0:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ cargo yank --vers 0.1.0
    Updating crates.io index
    Yank mylib-hekang@0.1.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To undo the yank:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ cargo yank --vers 0.1.0 --undo
    Updating crates.io index
    Unyank mylib-hekang@0.1.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Yanking does not delete code; if secrets were published accidentally, regenerate new versions with fixes.&lt;/p&gt;

</description>
      <category>cargo</category>
      <category>rust</category>
    </item>
    <item>
      <title>Analyzing and Visualizing Nginx Access Logs with GoAccess</title>
      <dc:creator>John Wilson</dc:creator>
      <pubDate>Thu, 19 Jun 2025 05:41:52 +0000</pubDate>
      <link>https://forem.com/john_wilson/analyzing-and-visualizing-nginx-access-logs-with-goaccess-48nd</link>
      <guid>https://forem.com/john_wilson/analyzing-and-visualizing-nginx-access-logs-with-goaccess-48nd</guid>
      <description>&lt;p&gt;Nginx access logs contain a wealth of information, but directly reading them can be a daunting task for most people. Fortunately, we have powerful tools like GoAccess that help us easily analyze and visualize Nginx access logs.&lt;/p&gt;




&lt;h2&gt;
  
  
  Tool Installation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Debian-based Systems (e.g., Ubuntu)
&lt;/h3&gt;

&lt;p&gt;You can install GoAccess with the following commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install &lt;/span&gt;goaccess
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Red Hat-based Systems (e.g., CentOS)
&lt;/h3&gt;

&lt;p&gt;Install with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;yum &lt;span class="nt"&gt;-y&lt;/span&gt; &lt;span class="nb"&gt;install &lt;/span&gt;goaccess
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Installing from Source Code
&lt;/h2&gt;

&lt;p&gt;If you wish to install GoAccess from source, follow these steps. First, download the source package:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wget https://tar.goaccess.io/goaccess-1.4.tar.gz
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Extract and compile:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;tar&lt;/span&gt; &lt;span class="nt"&gt;-xzvf&lt;/span&gt; goaccess-1.4.tar.gz
&lt;span class="nb"&gt;cd &lt;/span&gt;goaccess-1.4/
./configure &lt;span class="nt"&gt;--enable-geoip&lt;/span&gt; &lt;span class="nt"&gt;--enable-utf8&lt;/span&gt;
make &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;make &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Tool Configuration
&lt;/h2&gt;

&lt;p&gt;GoAccess needs configuration to correctly parse Nginx access logs. The config file is usually at &lt;code&gt;/etc/goaccess/goaccess.conf&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
For the default Nginx log format, you can simply use the &lt;code&gt;--log-format=COMBINED&lt;/code&gt; parameter.&lt;/p&gt;

&lt;p&gt;If you've set a custom log format in your Nginx configuration, specify the corresponding log format in the GoAccess config file. For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;log-format %h %^[%d:%t %^] "%r" %s %b "%R" "%u"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You also need to define the date and time formats so GoAccess can parse timestamps correctly, e.g.:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;date-format %d/%b/%Y
time-format %H:%M:%S
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Log Analysis
&lt;/h2&gt;

&lt;p&gt;Run GoAccess in the terminal to enter its interactive interface, which displays log analysis results.&lt;br&gt;&lt;br&gt;
For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;goaccess /var/log/nginx/access.log &lt;span class="nt"&gt;--log-format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;COMBINED
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;GoAccess can also generate an HTML report, viewable in your browser. The following command will create a &lt;code&gt;report.html&lt;/code&gt; file with comprehensive statistics and charts:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;goaccess /var/log/nginx/access.log &lt;span class="nt"&gt;-o&lt;/span&gt; report.html &lt;span class="nt"&gt;--log-format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;COMBINED
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To enable real-time monitoring and generate a dynamically updating HTML report, use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;--real-time-html --daemonize
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sample full command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;goaccess /var/log/nginx/access.log &lt;span class="nt"&gt;-o&lt;/span&gt; /var/www/html/report.html &lt;span class="nt"&gt;--log-format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;COMBINED &lt;span class="nt"&gt;--real-time-html&lt;/span&gt; &lt;span class="nt"&gt;--daemonize&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Understanding the Analysis Results
&lt;/h2&gt;

&lt;p&gt;GoAccess provides a wealth of statistics and charts, helping you comprehensively understand your website’s visitors, including:&lt;/p&gt;

&lt;h3&gt;
  
  
  Overview
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Total Hits&lt;/td&gt;
&lt;td&gt;Shows the total website visits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unique Visitors&lt;/td&gt;
&lt;td&gt;Counts unique IP addresses&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data Transferred&lt;/td&gt;
&lt;td&gt;Total data sent (MB or GB)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Visitor Information
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;IP Rankings&lt;/td&gt;
&lt;td&gt;IP addresses by visit count&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Browsers &amp;amp; OS&lt;/td&gt;
&lt;td&gt;Visitor browser and OS details&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Request Information
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Methods&lt;/td&gt;
&lt;td&gt;Number of different HTTP methods&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Status Codes&lt;/td&gt;
&lt;td&gt;HTTP status (200 = OK, 404 = Not Found, etc.)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;URL Rankings&lt;/td&gt;
&lt;td&gt;Most accessed URLs&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Performance Analysis
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Time Distribution&lt;/td&gt;
&lt;td&gt;Requests per time period&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Slowest Requests&lt;/td&gt;
&lt;td&gt;Requests with longest response times&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Advanced Usage
&lt;/h2&gt;

&lt;p&gt;Besides basic analytics, GoAccess supports advanced features such as pipes and filters.&lt;br&gt;&lt;br&gt;
For real-time analysis, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;tail&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; /var/log/nginx/access.log | goaccess &lt;span class="nt"&gt;-p&lt;/span&gt; /etc/goaccess/goaccess.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To analyze and merge multiple log files:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;goaccess &lt;span class="nt"&gt;-p&lt;/span&gt; /etc/goaccess/goaccess.conf access.log.1 access.log.2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Let me know if you need more explanation or have any other questions!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Temporary Email: A Developer’s Practical Notes on Privacy Tools</title>
      <dc:creator>John Wilson</dc:creator>
      <pubDate>Thu, 12 Jun 2025 15:23:46 +0000</pubDate>
      <link>https://forem.com/john_wilson/temporary-email-a-developers-practical-notes-on-privacy-tools-4hmm</link>
      <guid>https://forem.com/john_wilson/temporary-email-a-developers-practical-notes-on-privacy-tools-4hmm</guid>
      <description>&lt;p&gt;Last week, while collecting various API documents and developer tools for a new open-source project, I encountered a frustrating issue: nearly every developer resource website required me to register and verify an email address. Afterward, my inbox started filling up with marketing emails and promotional notifications.&lt;/p&gt;

&lt;p&gt;At that moment, I realized I needed a &lt;a href="https://tempmail100.com" rel="noopener noreferrer"&gt;temp mail&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem and the Solution
&lt;/h2&gt;

&lt;p&gt;As a developer, I frequently need to register for many services: testing new APIs, downloading SDK documentation, signing up for test accounts to verify registration flows in my apps… Using my real email every time means my inbox is forever flooded with marketing emails and notifications.&lt;/p&gt;

&lt;p&gt;A friend once joked, “Your main email isn’t a work tool anymore; it’s a battlefield for marketing campaigns.” Though exaggerated, that hit the nail on the head.&lt;/p&gt;

&lt;p&gt;When I needed to create 20 test accounts to verify a new registration flow I was developing, a &lt;a href="https://tempmail100.com" rel="noopener noreferrer"&gt;temp mail&lt;/a&gt; became my lifesaver.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is a Temporary Email?
&lt;/h2&gt;

&lt;p&gt;Temporary email (also called a disposable or anonymous email) has become an indispensable tool in my development work. It requires no registration—just open the website and instantly get a usable email address. Use it and toss it away, simple and efficient.&lt;/p&gt;

&lt;p&gt;The first time I used a &lt;a href="https://tempmail100.com" rel="noopener noreferrer"&gt;temp mail&lt;/a&gt;, I was surprised at its simplicity—no complicated interface, no mandatory sign-up, just a randomly generated email address and a message inbox. As a fan of minimalistic design, it was exactly what I wanted.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Practical Use Cases
&lt;/h2&gt;

&lt;p&gt;In daily development, I find &lt;a href="https://tempmail100.com" rel="noopener noreferrer"&gt;temporary email&lt;/a&gt; especially useful in these scenarios:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Bulk Testing Registration Flows: When I need to verify an app’s registration logic, creating 10 different test accounts is incredibly easy. No more worrying about “email already registered” errors!&lt;/li&gt;
&lt;li&gt;  API Service Comparison Testing: Last month, I needed to compare three different payment API providers. Each required registering a developer account, so using temporary emails let me quickly sign up and obtain test credentials without the hassle of marketing emails afterward.&lt;/li&gt;
&lt;li&gt;  Downloading Developer Resources: Many SDKs, tutorials, and developer tools are hidden behind “free download” email verifications. Temporary emails let me quickly receive these resources without risking privacy leaks.&lt;/li&gt;
&lt;li&gt;  Temporary Team Collaboration: Once, while collaborating briefly with external developers, we used a temporary email to register a shared project management platform. After the project ended, the email naturally expired, leaving no trace.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Experience and Suggestions
&lt;/h2&gt;

&lt;p&gt;After months of practice, here are some lessons from using temporary emails:&lt;/p&gt;

&lt;h3&gt;
  
  
  Advantages:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  Improved Development Efficiency: No more email issues during testing, so I can focus on code and functionality.&lt;/li&gt;
&lt;li&gt;  Privacy Protection: My main inbox sees far fewer spam emails; important messages are no longer drowned out.&lt;/li&gt;
&lt;li&gt;  Hassle-Free Use: No need to remember extra passwords or accounts—just open the site and use it.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Limitations:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  Major platforms like GitHub and AWS detect and block temporary email domains, which is reasonable because these platforms require reliable identity verification.&lt;/li&gt;
&lt;li&gt;  Some &lt;a href="https://tempmail100.com" rel="noopener noreferrer"&gt;temporary email&lt;/a&gt; services are unstable. I once experienced a service outage while waiting for an important API key email.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Recommendations
&lt;/h2&gt;

&lt;p&gt;Currently, I use the following &lt;a href="https://tempmail100.com" rel="noopener noreferrer"&gt;temporary email&lt;/a&gt; services, which I find stable and user-friendly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://tempmail100.com" rel="noopener noreferrer"&gt;Temp Mail&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://tempmail365.com" rel="noopener noreferrer"&gt;TempMail 365&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>From $0 to $300 per Month: A Friend's Indie Maker Story</title>
      <dc:creator>John Wilson</dc:creator>
      <pubDate>Sat, 15 Mar 2025 04:22:38 +0000</pubDate>
      <link>https://forem.com/john_wilson/from-0-to-300-per-month-a-friends-indie-maker-story-40pl</link>
      <guid>https://forem.com/john_wilson/from-0-to-300-per-month-a-friends-indie-maker-story-40pl</guid>
      <description>&lt;p&gt;Recently, my friend decided to embark on the path of indie developer and made a &lt;a href="https://tempmail100.com" rel="noopener noreferrer"&gt;temporary email&lt;/a&gt; site: &lt;a href="https://tempmail100.com" rel="noopener noreferrer"&gt;tempmail100.com&lt;/a&gt;. As a bystander, I witnessed him starting from scratch, figuring it out step by step, and finally achieving $300 monthly ad revenue. Today, I'd like to share his experience and hope to give some inspiration to those who want to step into the indie developer industry.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. From idea to realization
&lt;/h3&gt;

&lt;p&gt;My friend's initial intention is very simple: to make a practical temporary mailbox tool to help users quickly sign up for some temporary services without exposing their real mailboxes. He chose the direction of &lt;br&gt;
&lt;a href="https://tempmail100.com" rel="noopener noreferrer"&gt;temporary mailbox&lt;/a&gt; mainly because of the clear market demand and relatively low technical threshold.&lt;/p&gt;

&lt;p&gt;He spent a few weeks from design to development, and finally launched  &lt;a href="https://tempmail100.com" rel="noopener noreferrer"&gt;tempmail100.com&lt;/a&gt;. The page design of the website is very simple, and the user experience is also very smooth, especially the function of “generate mailbox with one click”, which is simply too convenient.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Technology stack and SEO optimization
&lt;/h3&gt;

&lt;p&gt;As an independent developer, my friend was very pragmatic in his technology selection. He chose a lightweight tech stack to ensure that the site would be responsive and easy to maintain. At the same time, he did the following things in order to improve the site's SEO performance:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Outbound link building: he took the initiative to share his project on some technical forums (e.g. V2EX, X, etc.), which attracted a lot of developers to click and discuss. These external links not only brought traffic, but also improved the weight of the website.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Keyword Optimization: He cleverly incorporated keywords such as “temporary email” and “free email generation” in the title, description and content of his website to ensure that search engines can better crawl and index it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Social media promotion: He also shared some development tips and tricks on Twitter (X), attracting many users to try it out.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Payments
&lt;/h3&gt;

&lt;p&gt;In order to keep the site running, a friend decided to bring in Stripe as a payment collection tool. In order to access Stripe, he even registered a US company! Although the process was a bit complicated, he eventually succeeded in accessing Stripe, and users can pay to unlock some advanced features, such as longer mailbox expiration dates, customized mailbox prefixes, and so on. Although there aren't many paying users yet, this provides him with a steady source of income.&lt;/p&gt;

&lt;p&gt;In addition, he also places ads on his website through Google AdSense. With the increase in traffic, the ad revenue has gradually increased, and recently even reached the achievement of $10 per day. Although this number may seem small, it's a good start for an indie developer who is just starting out.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Challenges and the future
&lt;/h3&gt;

&lt;p&gt;Of course, the road for indie developers isn't always smooth. My friend also encountered some challenges, such as how to continuously attract new users and how to deal with competitors. However, he always stays optimistic and keeps optimizing the product to improve the user experience.&lt;/p&gt;

&lt;p&gt;In the future, he plans to continue to improve the site's features, such as adding multi-language support and improving the stability of the mailbox. At the same time, he also hopes to further enhance the website's popularity and traffic through more SEO optimization and social media promotion.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;My friend experience made me realize that indie developers are full of challenges but also full of possibilities. If you have a similar idea, you might as well try it boldly, maybe the next successful indie developer is you!&lt;/p&gt;

&lt;p&gt;linktree: &lt;a href="https://linktr.ee/dearjohnwilson" rel="noopener noreferrer"&gt;https://linktr.ee/dearjohnwilson&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
