<?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: Dmytro Pylypenko</title>
    <description>The latest articles on DEV Community by Dmytro Pylypenko (@dimpiax).</description>
    <link>https://dev.to/dimpiax</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%2F1600%2F8b2d7e4d-1a88-467c-abc2-afa8d9f85d01.png</url>
      <title>DEV Community: Dmytro Pylypenko</title>
      <link>https://dev.to/dimpiax</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dimpiax"/>
    <language>en</language>
    <item>
      <title>What’s New in Xcode 11.4?</title>
      <dc:creator>Dmytro Pylypenko</dc:creator>
      <pubDate>Mon, 30 Mar 2020 08:30:40 +0000</pubDate>
      <link>https://dev.to/dimpiax/what-s-new-in-xcode-11-4-57be</link>
      <guid>https://dev.to/dimpiax/what-s-new-in-xcode-11-4-57be</guid>
      <description>&lt;p&gt;&lt;em&gt;Apple continuously tries and makes our favourite tool for developing applications for iOS/macOS/watchOS/etc. even better.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;They announced interesting new features, which I’ll describe briefly. In my opinion, they’re actually very important.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Clang Compiler (11.0.3)&lt;/strong&gt;&lt;br&gt;
If your framework uses any third-party framework dependencies, the compiler displays the warning &lt;code&gt;-Watimport-in-framework-header&lt;/code&gt; by default in the event of a framework importing a third-party dependency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Debugging&lt;/strong&gt;&lt;br&gt;
The view debugger shows UILayoutGuide and its referencing constraints&lt;br&gt;
The view debugger supports showing layers. &lt;br&gt;
Editor → Show Layers&lt;br&gt;
You can forward Xcode’s Console I/O to Terminal. &lt;br&gt;
Product → Scheme → Edit Scheme → Options tab&lt;/p&gt;

&lt;p&gt;About &lt;strong&gt;Swift 5.2&lt;/strong&gt; and new features of &lt;strong&gt;Simulator&lt;/strong&gt; and &lt;strong&gt;Testing&lt;/strong&gt; more on Medium:&lt;br&gt;
&lt;a href="https://medium.com/better-programming/whats-new-in-xcode-11-4-bd7c6f6bb0ba"&gt;https://medium.com/better-programming/whats-new-in-xcode-11-4-bd7c6f6bb0ba&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ios</category>
      <category>swift</category>
      <category>xcode</category>
      <category>programming</category>
    </item>
    <item>
      <title>Swift 5. What is new?</title>
      <dc:creator>Dmytro Pylypenko</dc:creator>
      <pubDate>Mon, 28 Jan 2019 20:55:02 +0000</pubDate>
      <link>https://dev.to/dimpiax/swift-5-what-is-new-2a94</link>
      <guid>https://dev.to/dimpiax/swift-5-what-is-new-2a94</guid>
      <description>&lt;p&gt;Swift 5 is ABI stable, which gives direct compatibility with OS without additional layers and backward compatibility between different versions of Swift, beginning from 5.0 version.&lt;/p&gt;

&lt;p&gt;Also the new version has a lot of improvements:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Flattened &lt;code&gt;try?&lt;/code&gt; with Optional type&lt;/strong&gt;&lt;br&gt;
No more &lt;code&gt;double guard&lt;/code&gt;.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9ijYaIxd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/lbtmunzltsocnujwnz91.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9ijYaIxd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/lbtmunzltsocnujwnz91.png" alt="pic_1"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Raw strings&lt;/strong&gt;&lt;br&gt;
Gives one of the possibility to write a string without escaping characters   inside. It's very feature for writing raw RegEx expressions in a clean way.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0c-S_6t3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/ky29xr6whta0q722urkf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0c-S_6t3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/ky29xr6whta0q722urkf.png" alt="pic_2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you need to embed a variable inside a raw string, you must add hash symbol after backslash: &lt;code&gt;#"(\\|\#(variable))"#&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;String interpolation&lt;/strong&gt;&lt;br&gt;
Declaration can be flexible and behave on your own.&lt;br&gt;
For this, extend the protocol &lt;code&gt;StringInterpolation&lt;/code&gt; with own function:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dFymzLY9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/4c9zydtj9x4ztbp34j0q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dFymzLY9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/4c9zydtj9x4ztbp34j0q.png" alt="pic_3"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;No recursion inside computed properties&lt;/strong&gt;&lt;br&gt;
Avoid additional layer for computations, and have it inside a closure.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7wRP0oi4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/w01yowdw0odxgn6hpoke.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7wRP0oi4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/w01yowdw0odxgn6hpoke.png" alt="pic_4"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;It was a part of described features, more is there: &lt;a href="https://developer.apple.com/documentation/xcode_release_notes/xcode_10_2_beta_release_notes/swift_5_release_notes_for_xcode_10_2_beta"&gt;https://developer.apple.com/documentation/xcode_release_notes/xcode_10_2_beta_release_notes/swift_5_release_notes_for_xcode_10_2_beta&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Article on Medium: &lt;a href="https://medium.com/@dimpiax/swift-5-what-is-new-examples-fbb64d525486"&gt;https://medium.com/@dimpiax/swift-5-what-is-new-examples-fbb64d525486&lt;/a&gt;&lt;/p&gt;

</description>
      <category>swift</category>
      <category>ios</category>
      <category>macos</category>
    </item>
    <item>
      <title>[Node.js] Using Local Module In Projects </title>
      <dc:creator>Dmytro Pylypenko</dc:creator>
      <pubDate>Fri, 13 Oct 2017 18:41:59 +0000</pubDate>
      <link>https://dev.to/dimpiax/nodejs-using-local-module-in-projects--e34</link>
      <guid>https://dev.to/dimpiax/nodejs-using-local-module-in-projects--e34</guid>
      <description>&lt;p&gt;Link to article at Medium: &lt;a href="https://medium.com/@dimpiax/node-js-using-local-module-in-project-c6fb54bbc83a"&gt;https://medium.com/@dimpiax/node-js-using-local-module-in-project-c6fb54bbc83a&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You have several projects that use the same abstract libraries, you can hold “the same independent copy (not good) or create a private repository at npm.js.&lt;/p&gt;

&lt;p&gt;I will share with you my experimental approach that is good in specific case.&lt;/p&gt;

&lt;p&gt;File structure is next:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/serviceA
/serviceB
/library
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Both services use same abstract classes / scripts from library, or a few of them. You can install local library as dependency simply putting local path to it. &lt;/p&gt;

&lt;p&gt;Further examples will be with &lt;strong&gt;serviceA&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd serviceA
npm i --no-save ../library
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Important to &lt;strong&gt;not&lt;/strong&gt; save dependency in package.json. Also npm creates alias to library, so after any changes you have a fresh version. After installing you can require your library’s dependency files as default.&lt;/p&gt;

&lt;p&gt;Not bad, but what to do in &lt;strong&gt;production&lt;/strong&gt; case?&lt;br&gt;
For example, I have built a project using babel and want to add some additional files to built folder, that i will upload farther via git hook, scp or s3.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Use-case, in more details, uploading zip file to s3 and update Lambda function. There is no scenario to install dependencies inside lambda function, so need to put project as is.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Solution is to put your library by script inside build folder — not good, but works. Maybe sometime &lt;strong&gt;npm&lt;/strong&gt; will support this approach by command.&lt;br&gt;
Example: &lt;code&gt;import syncManager from 'library/managers/syncManager'&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Prepare package.json and some scripts inside. &lt;br&gt;
&lt;code&gt;package.json:&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "name": "serviceA",
  "version": "0.1.0",
  "main": "index.js",
  "config": {
    "sourceDir": "src",
    "buildDir": "dist",
    "library": {
      "name": "library",
      "path": "../library"
    }
  },
  "scripts": {
    "clean": "rimraf $npm_package_config_buildDir",
    "build:prod": "NODE_ENV=production npm run clean &amp;amp;&amp;amp; mkdir $npm_package_config_buildDir &amp;amp;&amp;amp; cp$npm_package_main package.json package-lock.json $npm_package_config_buildDir &amp;amp;&amp;amp; cd $npm_package_config_buildDir &amp;amp;&amp;amp; npm i",
    "pack:prod": "npm run build:prod &amp;amp;&amp;amp; mkdir -p $npm_package_config_buildDir/node_modules/$npm_package_config_library_name &amp;amp;&amp;amp; cp -r $npm_package_config_library_path/. $npm_package_config_buildDir/node_modules/$npm_package_config_library_name/.",
  },
  "author": "Dima Pilipenko &amp;lt;dimpiax@gmail.com&amp;gt;",
  "dependencies": {
  }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Pay attention that &lt;code&gt;dependencies&lt;/code&gt; does not have an library mention.&lt;/em&gt;&lt;br&gt;
By calling &lt;code&gt;npm run pack:prod&lt;/code&gt; project is being prepared for farther use.&lt;/p&gt;

&lt;p&gt;Hope this approach is useful for someone too :)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The end.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Dear reader, if you have some proposition or question about this approach — let’s discuss in comments.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>node</category>
      <category>aws</category>
      <category>awslambda</category>
    </item>
    <item>
      <title>Hi, I'm Pilipenko Dima</title>
      <dc:creator>Dmytro Pylypenko</dc:creator>
      <pubDate>Tue, 10 Jan 2017 18:08:53 +0000</pubDate>
      <link>https://dev.to/dimpiax/hi-im-pilipenko-dima</link>
      <guid>https://dev.to/dimpiax/hi-im-pilipenko-dima</guid>
      <description>&lt;p&gt;I have experience in IT over 10 years, and I am from beautiful city of Ukraine, in Kyiv.&lt;br&gt;
Currently I live in Barcelona.&lt;/p&gt;

&lt;p&gt;I use technologies for achieve and implement great products.&lt;br&gt;
My knowledge are wide and deep.&lt;/p&gt;

&lt;p&gt;More you can check and contact me on my personal website: &lt;a href="https://dimpiax.com" rel="noopener noreferrer"&gt;https://dimpiax.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nice to meet this community.&lt;/p&gt;

</description>
      <category>introduction</category>
    </item>
  </channel>
</rss>
