Website profiles · Technology insights · Alternatives

olsh.me

Hello, I'm Oleg

No paid content found
Visit website
Profile views 13 Outbound visits 4 Normal
Oleg Shevchenko's blog Full homepage screenshot

At a glance

Category
Forums & Blogs
Language
English
Paid-content signal
No paid content foundObserved
Registered
2014
Hosting
CloudflareInferred
HTTPS certificate trusted
PassedObserved
Last updated

Website review

This review may include AI-generated content and is not individually verified. Domain, certificate and other facts come from the observed data on this page.

What is Oleg Shevchenko's blog?

Oleg Shevchenko's blog is a personal, technically focused site by a .NET developer. It reads as a working notebook: short posts and notes on configuration problems, tooling workflows, and dependency security, often with a brief update appended years later when the advice changed. You can find it at Oleg Shevchenko's blog.

Who it is for

  • .NET and ASP.NET developers, especially those working with MVC, IIS, and self-hosted build or quality servers.
  • Team leads and DevOps-minded engineers who assemble toolchains from Jira, TeamCity, Octopus, and SonarQube.
  • Readers who prefer a concrete fix or setup note over a long tutorial.

What it covers

The visible posts cluster around a few practical themes:

  • Error handling in ASP.NET MVC 5 and IIS — custom error page configuration, framed by the author's observation that this is hard to get right, even for Microsoft.
  • Release notes automation — generating release notes from Jira and TeamCity, including a note that the official Octopus plugin for TeamCity gained metadata generation support.
  • Dependency vulnerability monitoring — using Snyk to continuously scan .NET Core projects, written because the .NET setup path was thinly documented at the time.
  • Code quality integration — importing ReSharper issues into SonarQube, with a later note about a plugin option for self-hosted servers.

How to use it

Treat it as a starting point for a specific problem, not a structured course. If you are setting up custom error pages in an older MVC app, or wiring vulnerability scanning into a .NET Core pipeline, search the site for that topic first.

A practical example: you inherit an ASP.NET MVC 5 application where 404s and 500s show inconsistent pages in production. The relevant post gives you a configuration-oriented walkthrough rather than a general theory of error handling, which is usually what you want at that moment.

A decision criterion: check the post date and any update note before following instructions. Several entries are from 2018 and 2019 with later amendments, so verify commands and plugin behavior against current tool versions.

For broader context on the tools mentioned, see Snyk, Octopus Deploy, and SonarSource.

How do I configure custom error pages in ASP.NET MVC 5 and IIS?

Custom error pages in ASP.NET MVC 5 need to be configured in two layers: the MVC pipeline (for exceptions and missing actions/controllers) and IIS (for requests that never reach MVC, such as static files or blocked paths). Getting only one layer right is the usual reason people see IIS's default error page instead of their own.

Oleg Shevchenko's post on this topic is a practical starting point: Oleg Shevchenko's blog. He notes that this is genuinely fiddly to get right, even for Microsoft's own sites, which matches what most developers find.

Layer 1: MVC-level handling

  • Turn on custom errors in Web.config with mode="On" (or RemoteOnly during development) and point defaultRedirect at a controller action, e.g. /Error/Index.
  • Add [HandleError] (or a global filter registered in FilterConfig) so unhandled exceptions route to an error view. In MVC 5, global filters registered in Global.asax/FilterConfig are more reliable than per-controller attributes.
  • Handle 404s for unmatched routes with a catch-all route ({*url}) that maps to an error action, plus httpErrors in Web.config for requests IIS handles before routing.
  • Pass a status code to the response so search engines and clients see the real error, not a 200.

Layer 2: IIS-level handling

  • Use the <httpErrors> element under <system.webServer> with errorMode="Custom" and existingResponse="Replace" (or PassThrough if your app already sets the body). This covers static files, extensionless URLs and paths blocked before MVC runs.
  • Keep customErrors and httpErrors consistent — mismatched settings are a common source of "my page works locally but not on the server."
  • On IIS 7+, Response.TrySkipIisCustomErrors = true in your error action prevents IIS from overwriting the MVC response.

Quick comparison

Concern MVC layer IIS layer
Unhandled exceptions in controllers Yes Fallback only
Missing routes/actions Yes (catch-all) Fallback only
Static files, blocked extensions No Yes
Config location Web.config customErrors + filters Web.config httpErrors

Practical next step

Pick one error action (say Error/Index) that accepts a status code, log the exception there, and test three cases explicitly: a thrown exception, an unknown URL, and a request for a missing .css file. If any of the three shows an IIS page, the IIS layer needs adjusting; if a thrown exception shows a yellow screen, the MVC filter or customErrors setting is the culprit.

How can I generate release notes using Jira and TeamCity?

The short answer is that Oleg Shevchenko's own post on this topic points to Octopus Deploy's official TeamCity plugin, which added support for generating release-note metadata from work items. His note is dated September 5, 2018, with an update on August 24, 2019, so treat it as a pointer to the Octopus workflow rather than a current step-by-step guide.

Oleg Shevchenko's blog

What the approach actually is

The pattern is: link Jira issues to commits or builds in TeamCity, let a release tooling layer collect those linked work items, and turn them into formatted notes attached to a release. Octopus Deploy is the piece Oleg highlights, because its TeamCity plugin can pull work-item metadata during a build.

A practical path

  1. Make sure your commit messages or branch names reference Jira issue keys (for example PROJ-142).
  2. Install the Octopus plugin for TeamCity and enable metadata/work-item generation in the build steps.
  3. Create the release in Octopus so it can assemble the referenced issues into notes.
  4. Review the generated notes before publishing — automatic collection often includes chores, spikes or reverted work you may not want in customer-facing notes.

Who this suits

  • Teams already on the Jira + TeamCity + Octopus stack: lowest friction, since the integration is native.
  • Teams on TeamCity but not Octopus: you can still query Jira's REST API from a build step and render notes yourself, but you own the formatting and error handling.
  • Teams wanting polished, audience-specific notes: automatic generation is a starting draft, not a finished document.

For the official plugin details and current behaviour, see Octopus Deploy. Jira's own issue-linking and JQL documentation at Atlassian is useful if you decide to script the collection yourself.

How do I set up Snyk to monitor vulnerabilities in .NET Core projects?

Snyk scans a .NET Core project's dependency graph and alerts you when a package version you use has a known vulnerability. The practical approach is to run it as a CLI step in your build pipeline rather than relying only on manual checks.

Oleg Shevchenko's note on this blog covers exactly this setup and points out that Snyk's own documentation for .NET was thin at the time, so he walks through the configuration himself. Treat that post as the worked example and the points below as the surrounding decision framework.

Oleg Shevchenko's blog

What you actually need to do

  1. Choose where scanning runs. Locally, a Snyk CLI command against the solution or project file gives fast feedback. In CI, the same command runs on every build and can fail the build on new findings. Most teams end up doing both.
  2. Authenticate once per environment. The CLI needs a token tied to your Snyk account; in CI this lives in a secret, not in the repository.
  3. Point it at the right manifest. For .NET Core that generally means the .csproj or solution file, since that is where package references live. If your project uses a packages.lock.json, scanning against the lock file gives more reproducible results than resolving versions fresh.
  4. Decide the failure threshold. A useful starting point: fail the build only on high-severity issues with a known fix, and let lower-severity findings appear as warnings. Failing on everything on day one tends to get the check disabled within a week.
  5. Schedule a recurring scan. Dependency vulnerabilities are disclosed after your code is written, so a build-time check alone misses anything published between releases. A nightly or weekly run against the default branch closes that gap.

Trade-offs worth knowing

Approach Catches new disclosures Slows the build Fits
CLI in every CI build Only if it re-runs on a schedule Slightly Teams wanting per-commit feedback
Scheduled recurring scan Yes No Any project, especially low-commit ones
Editor or IDE integration No No Individual developers, quick triage

The main limitation of any dependency scanner is that it sees declared packages, not what your code does with them. A vulnerable transitive package that you never call still shows up, so expect some triage noise. Conversely, a scanner will not flag vulnerable code you wrote yourself.

A concrete next step

Take one .NET Core solution, run the scan locally against the .csproj, and look at the finding count before deciding anything about CI. If the list is long, fix or suppress the high-severity items first and record the rest; that gives you a realistic baseline for a build gate. If you want a second opinion on the same dependency graph, GitHub's Dependabot alerts cover a similar problem for repositories hosted there, and comparing the two lists is a quick way to spot false positives.

How can I import ReSharper issues into SonarQube?

The short answer is that you generally route ReSharper findings into SonarQube as external issues rather than trying to make SonarQube run ReSharper itself. SonarQube has a generic import format for third-party analyzer results, and ReSharper (or its command-line sibling, InspectCode) can produce a report that you convert into that format.

Oleg Shevchenko's blog covers this in a post on importing ReSharper issues into SonarQube, with a 2019 update noting that if you run a self-hosted SonarQube server, a plugin is worth considering. That points to the two realistic paths below.

Two practical approaches

Plugin route (self-hosted SonarQube)

  • A community plugin reads ReSharper/InspectCode output and creates external issues in SonarQube.
  • Least custom work, but you are tied to plugin compatibility with your SonarQube version.
  • Best when you control the server and can install plugins.

Generic external-issues route (any SonarQube, including SonarCloud)

  • Run InspectCode in CI to produce an XML report.
  • Convert that report into SonarQube's generic issue import JSON.
  • Pass it to the scanner via the sonar.externalIssuesReportPaths property.
  • More setup, but no server-side plugin and it works with hosted SonarQube.

Example flow in a .NET pipeline

  1. Restore and build the solution.
  2. Run InspectCode against the solution, writing an XML report.
  3. Transform the XML into the generic issue JSON (issue key, rule, engine ID, severity, primary location with file path and line).
  4. Invoke the SonarScanner with the external issues report path set.
  5. Confirm the findings appear under the project's external issues, attributed to ReSharper.

A small transformation script is usually the main effort; keep the rule IDs stable so trends don't reset each build.

Decision criteria

Situation Prefer
Self-hosted, can install plugins, want least scripting Plugin route
SonarCloud or locked-down server Generic external-issues route
Need to merge several analyzers Generic external-issues route
Want ReSharper rules to behave like native SonarQube rules Neither; external issues stay separate by design

One trade-off to expect: imported issues are treated as external, so they don't get SonarQube's own quality-profile management or remediation guidance. If code-quality gating matters more than preserving ReSharper's exact rule set, it is often simpler to enable SonarQube's C# analyzer and use ReSharper for local developer feedback instead.

What are the best practices for integrating Jira, TeamCity, and Octopus for metadata generation?

The short answer: let Jira remain the single source of truth for work items, let TeamCity attach that context to the build, and let Octopus carry it through to the deployment. Metadata generation is mostly about preserving the link between a commit, a build and a release, not about adding another dashboard.

Oleg Shevchenko's blog notes that the official Octopus plugin for TeamCity supports metadata generation, which is the practical starting point for a Jira + TeamCity + Octopus stack (Oleg Shevchenko's blog).

The integration chain

  1. Jira — every commit message or branch name references an issue key. This is the only reliable way to connect code changes to work items later.
  2. TeamCity — the build captures those issue keys from version control and passes them onward. The Octopus plugin for TeamCity is where this hand-off happens.
  3. Octopus — the release and deployment records inherit the work item metadata, so a deployment can be traced back to the Jira issues it resolves.

Where teams usually get it wrong

  • Treating metadata as a reporting afterthought rather than part of the build pipeline.
  • Inconsistent commit conventions, which break issue-key extraction silently.
  • Generating release notes manually when the chain above can produce them automatically.

A practical decision criterion

If you already run Jira + TeamCity + Octopus, enable the official TeamCity plugin for Octopus and confirm that issue keys flow from commits into the release record before you build any custom tooling. If you are on a different stack, the same principle applies: connect issue tracking to the build, then to the deployment, rather than duplicating the data in each tool.

For the broader vulnerability and dependency side of .NET pipelines, Snyk is worth evaluating as a complementary check (Snyk).

Related questions

More questions →
What is olsh.me?
Hello, I'm Oleg
Does olsh.me offer paid content?
Unknown.
What languages does olsh.me support?
Primary language: English.
How can I visit olsh.me?
Use the Visit website link to open the website in a new tab.
What are some alternatives to olsh.me?
Related websites include zilvia.net, young-home.myportfolio.com, xdaforums.com, wolfstalks.com, wineberserkers.com, whatever.scalzi.com. Compare their features and pricing for your needs.

Website Overview

An established domain and managed infrastructure suggest continuity of operations and may support dependable delivery, although neither guarantees service quality. An active inbound-mail setup with incomplete authentication may leave the domain more open to impersonation. Provider hosting alone does not close that gap.

Domain and Registration

Registered in 2014, this domain has about 12 years of history. That suggests continuity, although ownership and purpose may have changed. Transfer-protection status is present, helping reduce the risk of unauthorized domain transfers. The registrar is Cloudflare, Inc, a widely used domain service provider. The domain uses the common .me extension, which is not an independent safety signal.

DNS and Email

MX records exist, but SPF, DKIM and DMARC were not detected. Protection against domain impersonation may be incomplete. Nameservers are provided by Cloudflare, indicating managed DNS hosting. MX records point to the GoDaddy email service. DNSSEC is enabled, allowing validating resolvers to authenticate signed DNS data. No CNAME was found; the observed records resolve directly to addresses.

TLS and Certificates

The public key uses EC with 256 bits. The server supplied a complete certificate chain. No organization name is present in the certificate; the available fields are consistent with domain validation. The certificate was issued within the Google Trust Services cloud or CDN ecosystem. The certificate's total validity is about 90 days, consistent with a short renewal cycle.

HTTP and Browser Security

The response lacks these common security headers: CSP, Referrer-Policy, Permissions-Policy, clickjacking protection. CORS permits any origin to read this response. This is common for public resources; sensitive responses need narrower handling. No X-Powered-By header was found, reducing one common source of backend fingerprinting information. The cf-ray response header indicates a CDN or caching proxy in the delivery path. No obvious internal addresses or debug information were found in the headers.

Technology Stack Analysis

The public page identifies Google Analytics, Cloudflare without precise versions, leaving fewer clues for version-specific scanning.

Search and Social Sharing

No Open Graph metadata was detected, so social previews may depend on platform inference. The title has 22 characters, within a common display range. A meta description is present, with 15 characters. The observed directives allow indexing and link following. No Generator meta tag is publicly exposed.

Hosting and Email

DNSCloudflare
HostingCloudflare
EmailGoDaddy
Approximate IP geolocation (inferred; a CDN or proxy may differ from the origin server) Location unknown Inferred 104.21.27.80

Registration details

RDAP / WHOIS

RegistrarCloudflare, Inc
Registered2014-04-01
Expires2027-04-01
Domain statusclientTransferProhibited https://icann.org/epp#clientTransferProhibited
Nameserversalexis.ns.cloudflare.com、cass.ns.cloudflare.com
DNSSECsigned

DNS records

DNS

TypeNameValueTTLPriority
Aolsh.me104.21.27.80300—
Aolsh.me172.67.141.213300—
AAAAolsh.me2606:4700:3033::ac43:8dd5300—
AAAAolsh.me2606:4700:3034::6815:1b50300—
MXolsh.mesmtp.secureserver.net3000
MXolsh.memailstore1.secureserver.net30010
NSolsh.mealexis.ns.cloudflare.com86400—
NSolsh.mecass.ns.cloudflare.com86400—
TXTolsh.megoogle-site-verification=1tkOL9eSZyDn7eI9er4SRm93Y1GEmKOt8TP2DNs2o9I300—
TXTolsh.megoogle-site-verification=NwyTlFuE0zs3fo7_O_6_f3UjM3fAvq6rpiYSoCHxqZw300—
DSolsh.me2371 13 2 853f00d9fa5156be62cf4151a35b06f9f7f9cffa1c7657a8085c9b6350fece4d3600—

TLS and certificates

TLS / SSL

AssessmentNormal configuration
Supported protocolsTLSv1.2、TLSv1.3
Negotiated protocolTLSv1.3
Certificate subjectolsh.me
IssuerGoogle Trust Services
Valid until2026-12-16T20:22 · Remaining when checked: 73 days
Verification detailsCertificate trust: Passed · Hostname match: Passed

HTTP response headers

HTTP

HeaderValue
content-typetext/html; charset=utf-8
cache-controlmax-age=600
servercloudflare
strict-transport-securitymax-age=15552000; includeSubDomains; preload
x-content-type-optionsnosniff
access-control-allow-origin*

Identified technologies

Google AnalyticsCloudflare

Pages, Search and Sharing

Meta descriptionHello, I'm Oleg
Canonical URLhttps://olsh.me/
LanguageEnglish (default)
Twitter CardNot detected

Unknown

No rules found

User reviews (0)

  • No reviews yet.