بنقرة واحدة
Use when sending email from RI C# services — notifications, daily reports, or log files as attachments.
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
Use when sending email from RI C# services — notifications, daily reports, or log files as attachments.
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
Anthropic API rate limit handling - retry logic, backoff, throttling for batch workloads against Claude models
Use when building an automated test → issue → fix loop with Claude Code and GitHub issues — overnight auto-fixing, regression loops, self-healing CI.
Use when creating, editing, publishing, or deleting posts on Cyril's Workshop blog or the steponnopets.net devblog.
Use when writing or contributing a boofuzz network-protocol fuzzer in this repo — layout, formatting rules, and reading results.
Use when a task needs real-time control of a connected browser via the Browser Bridge Broker — submit JS jobs over HTTP that browsers eval and return.
Use when training a character LoRA (Chroma/Flux or Pony/SDXL) on a RunPod GPU and wiring it into the ComfyUI + pony_web render stack.
| name | |
| description | Use when sending email from RI C# services — notifications, daily reports, or log files as attachments. |
Log files are held open by the running logging process; a normal File.OpenRead throws IOException: The process cannot access the file.... Open with FileShare.ReadWrite to read (and zip) them anyway:
public static string ZipSingleFileFromStream(string filePath, string? outputPath = null)
{
string zipPath = outputPath ?? Path.ChangeExtension(filePath, ".zip");
if (File.Exists(zipPath)) File.Delete(zipPath);
using (var zipArchive = ZipFile.Open(zipPath, ZipArchiveMode.Create))
{
var entry = zipArchive.CreateEntry(Path.GetFileName(filePath), CompressionLevel.Optimal);
using var entryStream = entry.Open();
using var fileStream = new FileStream(
filePath, FileMode.Open, FileAccess.Read,
FileShare.ReadWrite); // <-- reads files another process has open for writing
fileStream.CopyTo(entryStream);
}
return zipPath;
}
smtp.nisainternational.local (no auth) — new SmtpClient("smtp.nisainternational.local")services@ramsden-international.comUTF8Writer.GetCurrentLogFilePath() (see the Logging skill)using, and create Attachment objects inline (mailMessage.Attachments.Add(new Attachment(path)) — no variable). Undisposed MailMessage/Attachment objects hold file handles until GC, so the zip cleanup in the finally block fails with the file "in use" — this persisted for 10+ minutes in production despite retry loops.string? zippedPath = null;
try
{
using var mailMessage = new MailMessage(from, to, subject, body); // using is load-bearing
zippedPath = ZipSingleFileFromStream(logPath);
mailMessage.Attachments.Add(new Attachment(zippedPath)); // inline, owned by message
foreach (var extra in additionalAttachments.Where(File.Exists))
mailMessage.Attachments.Add(new Attachment(extra));
new SmtpClient("smtp.nisainternational.local").Send(mailMessage);
}
catch (Exception)
{
return Send(from, logPath); // fallback: uncompressed original
}
finally
{
if (zippedPath != null && File.Exists(zippedPath))
try { File.Delete(zippedPath); } catch { /* log only */ }
}