<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Tomas Mūžas</title>
    <description>The latest articles on DEV Community by Tomas Mūžas (@tomasmuzas).</description>
    <link>https://dev.to/tomasmuzas</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F37963%2F6f776b39-2699-407c-8109-88c35deac732.jpeg</url>
      <title>DEV Community: Tomas Mūžas</title>
      <link>https://dev.to/tomasmuzas</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tomasmuzas"/>
    <language>en</language>
    <item>
      <title>Refresh.NET - code migration tool for .NET projects</title>
      <dc:creator>Tomas Mūžas</dc:creator>
      <pubDate>Fri, 01 May 2020 18:08:29 +0000</pubDate>
      <link>https://dev.to/tomasmuzas/refresh-net-code-migration-tool-for-net-projects-4gn4</link>
      <guid>https://dev.to/tomasmuzas/refresh-net-code-migration-tool-for-net-projects-4gn4</guid>
      <description>&lt;h2&gt;
  
  
  Shareable refactorings
&lt;/h2&gt;

&lt;p&gt;Refactoring is a term coined by Martin Fowler. It describes an action of changing&lt;br&gt;
the structure of a code without altering it's behaviour.&lt;/p&gt;

&lt;p&gt;We are performing refactorings daily in our jobs - we rename, move, change classes and methods. Those refactorings, however, are usually highly specific&lt;br&gt;
to one's projects and will be performed only once.&lt;/p&gt;

&lt;p&gt;However, there are three groups of refactorings which can be performed on&lt;br&gt;
multiple projects without knowing their specifics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adaptation to library API changes&lt;/li&gt;
&lt;li&gt;Language version or dialect update&lt;/li&gt;
&lt;li&gt;Language change (e.g. C# -&amp;gt; Java)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this article we will focus on the first two types of refactoring. Both&lt;br&gt;
of those refactoring types are absolutely independent of the project code itself.&lt;/p&gt;

&lt;p&gt;When using a library, we are provided with a set of methods and classes to achieve the functionality of the library. If for some reason the developers of the library decide to change the API of the library, all the projects that are using this library will have to perform the same changes if they want to update the library version. In this case, the library can be both conventional library and a framework, as in essence they both only provide APIs.&lt;/p&gt;

&lt;p&gt;Also, all of the projects will be written in some programming language. All the projects will use the same, strictly defined language constructs. And in the case of language evolution, all developers will be able to perform same abstract changes on their projects.&lt;/p&gt;

&lt;p&gt;In these cases, wouldn't it be nice if someone wrote and shared all the changes necessary&lt;br&gt;
and all others could automatically apply those changes on their projects? :)&lt;/p&gt;

&lt;p&gt;There are a few tools allowing to do that: Eclipse refactoring &lt;a href="https://help.eclipse.org/2020-03/index.jsp?topic=%2Forg.eclipse.jdt.doc.user%2Fconcepts%2Fconcept-refactoring.htm"&gt;scripts&lt;/a&gt; for Java and &lt;a href="https://github.com/facebook/jscodeshift"&gt;JsCodeShift&lt;/a&gt; for JavaScript. Eclipse however only allows to record high level refactorings to the migration script. JsCodeShift, on the other hand, grants full flexibility by allowing to modify syntax trees, however lacks support for higher level refactorings.&lt;/p&gt;
&lt;h2&gt;
  
  
  Refresh.NET
&lt;/h2&gt;

&lt;p&gt;Having done quite an extensive research in this field for my bachelor paper, I have made a prototype in C# which is supposed to migrate .NET projects, since there are no such tools for C# environment which I'm the most familiar with.&lt;/p&gt;

&lt;p&gt;Now what do I mean by &lt;em&gt;migration&lt;/em&gt;? Migration, both in my paper and in the tool, signifies a series of refactorings, &lt;strong&gt;which can be shared and executed&lt;/strong&gt; across multiple projects.&lt;/p&gt;

&lt;p&gt;Such migrations can be adaptations for library or framework API changes, language&lt;br&gt;
version updates or any arbitrary other refactorings expressed through a change of AST (&lt;em&gt;abstract syntax tree&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;Everything can be written in one &lt;code&gt;.cs&lt;/code&gt; file, which can be versioned and shared across multiple projects! Moreover, it doesn't even need to be in any project!&lt;/p&gt;

&lt;p&gt;If you happen to need higher level migrations, the tool provides &lt;em&gt;fluent API&lt;/em&gt; -based migration builder, which can easily combine multiple prebuilt higher level migrations.&lt;/p&gt;

&lt;p&gt;On the other hand, if you need something more specific, like changes for language migration, you are given the plain Microsoft's &lt;code&gt;SyntaxTree&lt;/code&gt; to work with as you need.&lt;/p&gt;

&lt;p&gt;The tool and its detailed documentation can be found on:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vWogaON8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-28d89282e0daa1e2496205e2f218a44c755b0dd6536bbadf5ed5a44a7ca54716.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/tomasmuzas"&gt;
        tomasmuzas
      &lt;/a&gt; / &lt;a href="https://github.com/tomasmuzas/Refresh.NET"&gt;
        Refresh.NET
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A tool to easily migrate .NET projects
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1&gt;
Refresh.NET&lt;/h1&gt;
&lt;p&gt;A simple CLI tool to easily migrate .NET projects by writing custom migrations.&lt;/p&gt;
&lt;p&gt;This tool is built with intention to create shareable migrations to be able to easily adapt to library, framework or even language updates.&lt;/p&gt;
&lt;h1&gt;
Supported migrations:&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;Rename class, interface, method, member, namespace&lt;/li&gt;
&lt;li&gt;Add, remove, change, reorder arguments&lt;/li&gt;
&lt;li&gt;Replace class, method&lt;/li&gt;
&lt;li&gt;Change method return type&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;⚠️Disclaimer! At this point, only references are refactored! Support for end-to-end refactoring (with declarations) is coming soon.&lt;/p&gt;
&lt;h1&gt;
Usage&lt;/h1&gt;
&lt;p&gt;Install the tool by using:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;dotnet tool install -g refresh.tool&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Use the tool:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;refresh -p Path/To/Project.csproj -m Path/To/Migration.cs&lt;/code&gt;&lt;/p&gt;
&lt;h1&gt;
Migration file&lt;/h1&gt;
&lt;p&gt;Install Refresh.Components Nuget package in order to get Intelli-Sense support:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Install-Package Refresh.Components&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Migration.cs&lt;/code&gt; can be any C# class, implementing &lt;a href="https://raw.githubusercontent.com/tomasmuzas/Refresh.NET/master/blob/master/src/Refresh.Components/Migrations/IMigration.cs"&gt;IMigration&lt;/a&gt; and it can have any name (Migration, MyMigration, CustomMigration etc.).&lt;/p&gt;
&lt;h2&gt;
IMigration interface&lt;/h2&gt;
&lt;div class="highlight highlight-source-cs"&gt;&lt;pre&gt;&lt;span class="pl-en"&gt;SyntaxTree&lt;/span&gt; &lt;span class="pl-en"&gt;Apply&lt;/span&gt;(&lt;span class="pl-en"&gt;SyntaxTree&lt;/span&gt; &lt;span class="pl-smi"&gt;initialAST&lt;/span&gt;, &lt;span class="pl-en"&gt;MigrationContext&lt;/span&gt; &lt;span class="pl-smi"&gt;context&lt;/span&gt;);&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;SyntaxTree&lt;/code&gt; is just &lt;code&gt;Microsoft.CodeAnalysis.SyntaxTree&lt;/code&gt; without any alterations. This is an AST of a…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/tomasmuzas/Refresh.NET"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Everyone is welcome to suggest improvements, report bugs, etc.!:)&lt;/p&gt;

&lt;h2&gt;
  
  
  Feedback
&lt;/h2&gt;

&lt;p&gt;If someone happens to be interested, please provide any feedback here in the comments or on the github repo! :)&lt;/p&gt;

&lt;p&gt;Also, have you faced any breaking changes in the libraries that required a lot of manual refactoring? If so, I would love if someone shared it with me and I could see if I can adapt the tool to fit it. Maybe it will save someone a bit of time!&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>dotnet</category>
      <category>migration</category>
      <category>refactoring</category>
    </item>
    <item>
      <title>Insights on how to teach students a difficult subject</title>
      <dc:creator>Tomas Mūžas</dc:creator>
      <pubDate>Thu, 06 Dec 2018 19:25:42 +0000</pubDate>
      <link>https://dev.to/tomasmuzas/insights-on-how-to-teach-students-a-difficult-topic-4bca</link>
      <guid>https://dev.to/tomasmuzas/insights-on-how-to-teach-students-a-difficult-topic-4bca</guid>
      <description>&lt;h1&gt;
  
  
  A little bit of context
&lt;/h1&gt;

&lt;p&gt;I am a student myself. At our university, we have a student-driven initiative which is called "Students to students" - higher grade students voluntarily give lectures on difficult subjects to younger students, removing all of the formality of standard lectures. &lt;/p&gt;

&lt;p&gt;On the first semester, there come a bunch of first graders. And they are introduced to nothing other than dreaded Assembly 🙂 Having experienced no university lectures before, and kicking off first year with something completely different as ASM leaves newcomers baffled. That is where we step in 😁&lt;/p&gt;

&lt;p&gt;Even though I am mostly organising lectures and arranging auditoriums, I have made a few lectures myself (If someone asks, those were on Interrupts, MPL and conditional operations).&lt;/p&gt;

&lt;p&gt;In this article, I want to share my experience on what worked, and what didn't.&lt;/p&gt;

&lt;h1&gt;
  
  
  Give real life examples
&lt;/h1&gt;

&lt;p&gt;What worked really well in my case was comparing Assembly code to C code (in Lithuania, C is a standard language to be taught at school). C code is familiar to all of the students, thus making it easier to understand and read Assembly code.&lt;/p&gt;

&lt;p&gt;Sometimes it is not possible to convert it 1 to 1, but that turned out to be even better. ASM --&amp;gt; C sometimes required additional steps in C, which in turn explained underlying logic of ASM.&lt;/p&gt;

&lt;p&gt;This way, by seeing already familiar code by the side of ASM, they can understand things better.&lt;/p&gt;

&lt;h1&gt;
  
  
  Don't forget the context
&lt;/h1&gt;

&lt;p&gt;When entering an unknown subject, it is much more useful to know WHY things are working or implemented in a particular way, rather than knowing WHAT they are doing.&lt;/p&gt;

&lt;p&gt;Thats why I didn't talk only about my topic. For example, when talking about conditional operations, I had to explain how memory works, how commands are structured as machine code, that they are written as a sequence one after another, etc.&lt;/p&gt;

&lt;p&gt;When you know the fact that commands are written into memory one after another,&lt;code&gt;jmp&lt;/code&gt;s and their offsets in machine code start to make much more sense.&lt;/p&gt;

&lt;h1&gt;
  
  
  Use simple language
&lt;/h1&gt;

&lt;p&gt;This might be obvious, but it is crucial to use simple language to explain difficult things.  Avoid using any abbreviations until you've explained them and made sure that students understood it (more on that below).&lt;/p&gt;

&lt;h1&gt;
  
  
  Be a student yourself
&lt;/h1&gt;

&lt;p&gt;This is not meant in a literal way. You need to know, that students are not yet serious scientists, that they have short attention spams, and do like jokes. Don't overkill with jokes or memes, they will find it cringey when it comes from older people and is overused 😁 use informal language, use student slang.&lt;/p&gt;

&lt;h1&gt;
  
  
  Make sure the topic is understood
&lt;/h1&gt;

&lt;p&gt;There is no point in lecture, if it was not understood. Be open to questions, ask for them, or even force someone to answer them. Especially people that are sleeping 😁 and definitely, don't expect perfect answer. Question them on their answer if it's wrong, to know their way of thinking and to fill in the gaps. &lt;/p&gt;

&lt;p&gt;Double or triple check if majority has understood one point before moving to another and stay longer on the topic even if you have to go to absolute basics once again.&lt;/p&gt;

&lt;h1&gt;
  
  
  Make pauses
&lt;/h1&gt;

&lt;p&gt;Pauses are really necessary. It is really difficult to concentrate on one subject for 1,5 hour. Give students a five minutes break to refresh their attention, to ponder on the subject you've been talking about, or simply to have a smoke 😁&lt;/p&gt;

&lt;h1&gt;
  
  
  Make your lectures interactive
&lt;/h1&gt;

&lt;p&gt;Don't just give them all of your information. Ask students to explain things themselves. Ask them, why certain things are called so. Ask them, what is their opinion. Ask them control questions to see whether they follow you. Let them guess, and let them fail a lot to learn from own mistakes.&lt;/p&gt;

&lt;h1&gt;
  
  
  Have practice, not only theory
&lt;/h1&gt;

&lt;p&gt;It is good to give students little excercices to understand subject deeper. After someone solved it, let them explain solution to their peers. It will benefit both them and other students.&lt;/p&gt;

&lt;p&gt;Those were my learnings on teaching 🙂 please share your tips and tricks so me and other readers could improve our teaching skills!&lt;/p&gt;

</description>
      <category>advice</category>
      <category>teaching</category>
      <category>education</category>
    </item>
    <item>
      <title>Organizing the mess in your head</title>
      <dc:creator>Tomas Mūžas</dc:creator>
      <pubDate>Thu, 02 Aug 2018 19:23:20 +0000</pubDate>
      <link>https://dev.to/tomasmuzas/organizing-the-mess-in-your-head-171n</link>
      <guid>https://dev.to/tomasmuzas/organizing-the-mess-in-your-head-171n</guid>
      <description>&lt;p&gt;&lt;em&gt;This is an honest story of a junior programmer, who dreamed a lot, was hit hard by reality, and found a peace of mind afterwards. By sharing this story I want to show other junior (or maybe even more experienced) developers, that life as a programmer is not always fun and games, that it is okay to struggle, and that there are ways out!&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Origins of this story
&lt;/h1&gt;

&lt;p&gt;My journey began exactly 5 months ago. It was my first day at work. All excited I am walking around the gorgeous office, getting to know my future colleagues, looking into the meeting rooms, and of course, getting to know the placement of a coffee machine, the existential need for a developer to function properly. I remember it as one of my happiest days - I've dreamed, I've worked hard to get here, it paid off and now I am in a place of my dreams. Little did I know that that will be a beginning of a new, unexpected chapter of my life.&lt;/p&gt;

&lt;h1&gt;
  
  
  Origins of a mess in my head
&lt;/h1&gt;

&lt;p&gt;Let's get back a few months before this story began. I have completed quite a big project in the university with .NET language, however I had to use many more technologies than just C#. I have had to get familiar with Python, command line usage, deployment to Heroku, Xamarin, Image Recognition and even some machine learning algorithms. Yet I enjoyed every minute of that and did not find it difficult or overwhelming at all. So I applied to a .NET position, naively expecting to working only with it. Oh boy were I wrong... What seemed as a huge project back then, turned out to be a light walk down the street before having to run a marathon. &lt;/p&gt;

&lt;h3&gt;
  
  
  Bugs
&lt;/h3&gt;

&lt;p&gt;First of all, let's talk about bugs. Debugging was a new discovery for me. And I have discovered it just a month before my job interview. Another important thing was that I've tried to debug only on a small scope of my project, mostly in one class, not across multiple services at once. So when I had to do just that, I felt overwhelmed and frustrated not being able to find a bug,just to find out later that the issue was way way further. &lt;/p&gt;

&lt;h3&gt;
  
  
  Tools
&lt;/h3&gt;

&lt;p&gt;It was nice seeing my beloved C# code. I did not really have much struggle with a language itself though not knowing how to navigate around the codebase effectively made things even more difficult. My first navigation was searching through files to find the right class only to forget about it in a couple of moments.&lt;/p&gt;

&lt;h3&gt;
  
  
  Unknown language(-s)
&lt;/h3&gt;

&lt;p&gt;When I said that I was wrong that I expected to work only with C#, I meant it :D Beside the C# I had to work with: SQL (this one is kind of obvious and not new for me), Python, NodeJS, Docker, and more. However, having a solid background in programming before, and having eagerness to learn made it an enjoyable experience, so can't complain much about that.&lt;/p&gt;

&lt;h3&gt;
  
  
  Yet another Unknown language
&lt;/h3&gt;

&lt;p&gt;It was the second day of my work. I was supposed to fly to meet my other half of the colleagues. Not even having all of my credentials properly set up, I was bombarded with lots of business slang. It was probably the most difficult part for me. It was very hard for me to get started with a task not knowing what is &lt;em&gt;"this term"&lt;/em&gt;, and &lt;em&gt;"that term"&lt;/em&gt;. Sometimes I even though that I weaker, not worthy, because it took me sooooo long to start understanding what people are talking about, what I am required to do and how code is interconnected with business language.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;and the most important thing...&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Constant fear or failure
&lt;/h3&gt;

&lt;p&gt;I was constantly afraid to push my code because it could break stuff. I was double-checking, triple-checking my code, nitpicking before finally hitting that "Create new pull request" button. I was afraid to test my code, I was afraid to do something other than &lt;code&gt;git add/commit/push&lt;/code&gt;, because, you've guessed it, &lt;em&gt;it could break stuff&lt;/em&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  Organizing the mess
&lt;/h1&gt;

&lt;p&gt;All those things added up creating a huge mess in my head, and sparked some serious thoughts like: &lt;em&gt;&lt;strong&gt;Dude, you got the job you wanted, you just can't give up at the beginning of your journey&lt;/strong&gt;&lt;/em&gt;. And I didn't. Instead, I though of ways on how to solve my problems. And I have decided to share them with you, addressing every problem I've mentioned above.&lt;/p&gt;

&lt;h3&gt;
  
  
  Learn the context!
&lt;/h3&gt;

&lt;p&gt;It is hard to debug without a context. Spend some time getting to know your code base. It really helps to find an entrance point of your problem, be it a HTTP endpoint, a &lt;code&gt;Main&lt;/code&gt; method of your program or the beginning of a function. Look at the code surrounding it. Look at your infrastructure. Get to know the communication between code parts or services. Only then look at your problem. Yes, a few times it will be difficult, but later on you will know more and more reasons of why your code can fail, and you will spend less and less time identifying the potential problem&lt;/p&gt;

&lt;h3&gt;
  
  
  Get to know your tools!
&lt;/h3&gt;

&lt;p&gt;We are lucky to live in the age of super fancy IDEs. Utilize them! Learn debugging, formatting, commenting, searching key bindings of your preferred IDE or code editor. It will speed up your workflow exponentially! In my particular case, &lt;a href="https://www.jetbrains.com/resharper/"&gt;Resharper&lt;/a&gt; helped tremendously dealing with code analysis in .NET&lt;/p&gt;

&lt;h3&gt;
  
  
  Face the unknown!
&lt;/h3&gt;

&lt;p&gt;I really liked what my course mate said: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I've learned that I know much, yet at the same time I've learned that I don't know even more" &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's why programming is a unique profession. You have to constantly learn. The more you learn, the more confident you grow, but then while learning, you discover, that there are even more things to conquer now with your new knowledge. Be eager to learn new stuff, read A LOT (whether it's documentation of your language/framework, &lt;a href="https://stackoverflow.com/"&gt;StackOverflow&lt;/a&gt;, or &lt;a href="https://dev.to/"&gt;Dev.to&lt;/a&gt;), and make it fun, because you will have to learn A LOT during your career.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gather the knowledge!
&lt;/h3&gt;

&lt;p&gt;When I was facing a problem of not knowing things, I though that it is a good idea to document my findings. And the best way to do that, at least for me, was taking notes. I've tried many tools, but I ended up with &lt;a href="https://boostnote.io"&gt;Boostnote&lt;/a&gt; which supports Markdown, however later on I enjoyed using Visual Studio Code as my note app, since it gave me a degree of freedom to organize and synchronize my notes. &lt;/p&gt;

&lt;p&gt;I took notes on everything: business language, new feature of my programming language, ways to test and debug, hardships, basically - everything. I've questioned a lot my mentor, most of my questions were in fact stupid, but at the end &lt;strong&gt;THINGS FINALLY STARTED TO MAKE SENSE&lt;/strong&gt;. I learned the connection between business language and code, and after that, I've finally felt like a part of a team!&lt;/p&gt;

&lt;p&gt;Don't be afraid to spend a lot of time on that, because it will help you in the future.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Relax&lt;/strong&gt;!
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;It is okay to fail&lt;/em&gt;&lt;/strong&gt;. We will all inevitably fail. And we will fail multiple times. Though every fail is a lesson to be learned. Experiment freely, as long as it complies to your company rules of course, learn from your mistakes and thus grow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Some personal bonus tips
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Get cosy!
&lt;/h3&gt;

&lt;p&gt;Customize your editor with fonts, themes, colors, and icons. Having familiar and neat environment gives me confidence and somehow I feel joyful to code with my personal setup.&lt;/p&gt;

&lt;h3&gt;
  
  
  Get moving!
&lt;/h3&gt;

&lt;p&gt;We, programmers, spend most of our day sitting in front of a computer. Start moving - going to the gym, taking short walks, etc. This will not only keep you fit, but will clear your mind.&lt;/p&gt;

&lt;h3&gt;
  
  
  Take a break!
&lt;/h3&gt;

&lt;p&gt;Don't be afraid to take a break if you feel overwhelmed! It is not worth it to spend countless hours looking at your monitor hopelessly. Take a nap, go for a stroll, have a snack or do something that will distract you for a moment. Don't force a solution from yourself :)&lt;/p&gt;

&lt;p&gt;&lt;em&gt;That was my story and my tips, hope you have liked at least some of them, or even found it useful! I would love to hear your personal tips on how you deal with difficulties at work!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>advice</category>
      <category>help</category>
    </item>
  </channel>
</rss>
