<?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: Joana Chavez</title>
    <description>The latest articles on DEV Community by Joana Chavez (@grokcode).</description>
    <link>https://dev.to/grokcode</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%2F15158%2Fc9957087-d187-4c54-ab47-29094f17ac35.jpg</url>
      <title>DEV Community: Joana Chavez</title>
      <link>https://dev.to/grokcode</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/grokcode"/>
    <language>en</language>
    <item>
      <title>99 problems but Python ain't one!</title>
      <dc:creator>Joana Chavez</dc:creator>
      <pubDate>Wed, 22 Aug 2018 20:46:14 +0000</pubDate>
      <link>https://dev.to/grokcode/99-problems-but-python-aint-one-1gj4</link>
      <guid>https://dev.to/grokcode/99-problems-but-python-aint-one-1gj4</guid>
      <description>&lt;p&gt;Let's start from the very beginning, defining the different approaches of how code is finally executed. In general, when a programming language is used, two approaches are possible: either compilation or interpretation. Oh and there is also a third one which is a hybrid approach and is in between both of those said previously. Let's take a look:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Compilation:&lt;/strong&gt; When compilation process is done, what is done is a executable code obtained from the whole code, so from all the source code what is obtained is a executable that can be used as it is and that has the same characteristics needed by the machine. (Let's say an example would be Java, which through compilation it can be run over the JVM) The guy in charge here to do this job is the compiler (duh! of course he is!) In the image below, we can see more in deep the whole process...&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fsc72gsefcq5ikadyim4z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fsc72gsefcq5ikadyim4z.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you can see, it takes the whole thing in there and then produces the executable to be then processed.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Interpretation:&lt;/strong&gt; On the other side, with interpretation we obtain let's say a "translation" of each instruction from each of the statements, so it is a job done statement by statement, that is, instruction by instruction is being interpreted by the interpreter (duh again, of course that's his name!) Languages that could be used as an example of interpretation are shell scripts, like bash for example, or Javascript, PHP, and oh! also the most important dude in this article: Python. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This process can be seen in a better explanation here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fr8w9rylky72s9t9pnrin.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fr8w9rylky72s9t9pnrin.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you can see, statement (stm for short) by statement are processed and immediately executed.&lt;/p&gt;

&lt;p&gt;Ok but there should be a third one right? there is always something in between... and yes there exists also a third approach that uses a combination of both approaches and it is for intermediate languages, we can see it in the following image:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fgs7xlod8gjg2lrywpaee.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fgs7xlod8gjg2lrywpaee.png"&gt;&lt;/a&gt;   &lt;/p&gt;

&lt;p&gt;In this last one, the compilation is done up to an intermediate language and then using the executor which is no more than an interpreter like the one used in the interpretation process, we can say that is an approach in the middle (has some features from compilation and some from interpretation)&lt;/p&gt;

&lt;p&gt;Okay, but going back to the idea of why Python is so cool? I mean, it is widely used in the areas like Bioinformatics, Data Science and so on, and the reason is because of many reasons like for instance:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Readability&lt;/strong&gt; : It is considerably ordered, and this helps a lot for making it easier to people to read code ( even to make your code work you will need to indent everything okay before using it! )&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Code reuse&lt;/strong&gt;: There are many modules available to be used in Python for different purposes, that's the feature that some call "batteries included"&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;High Performance&lt;/strong&gt;: It's very close to C, but the use of other libraries that enable an efficient computation like for example NumPy, increases much more the performance. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Simple&lt;/strong&gt;: Again, and this one is also related to the first one in this list, the readability and the minimalistic characteristic it has, makes it easier to concentrate in the problem you have instead of thinking in other low-level language problems. (Like for example exceeding memory or garbage collection... who thinks of that in Python? ) &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Easy to learn&lt;/strong&gt;: Another point for Python, the learning curve is considerably low and you'll learn very fast! As a matter of fact I think this is the one that actually is considered for Bioinformatics areas, I had colleagues in Bioengineering areas who are not used to code all the time, but this language makes it easier to get started!&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Free and Open source&lt;/strong&gt;: Another one yet is that &lt;strong&gt;it's free!&lt;/strong&gt; so you don't have to worry about licenses and things like that, even with so many different IDEs like Spyder and package managers like Anaconda. (Another cool feature from Spyder better than the &lt;strong&gt;not free&lt;/strong&gt; IDE PyCharm is that for Pycharm you don't get the coolest help inside the IDE, while with Spyder you can get to search the documentation of the code inside the IDE, how cool is that?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Interpreted&lt;/strong&gt;: This one is more related to the previous we talked about the performance but it's about it.. since it's interpreted, the execution is very fast, but of course this will also depend the amount of data you're processing!&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Great, so now that you got all these ideas I hope this has been an eye opener on what to expect from the language, and if you are considering on learning about it, I totally recommend it!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you're having girl problems I feel bad for you son, I got 99 problems but Python ain't one!&lt;/strong&gt; &lt;/p&gt;

</description>
      <category>bioinformatics</category>
      <category>python</category>
      <category>datascience</category>
      <category>compilation</category>
    </item>
    <item>
      <title>Singularity : a "Docker" for HPC environments</title>
      <dc:creator>Joana Chavez</dc:creator>
      <pubDate>Tue, 12 Jun 2018 18:04:30 +0000</pubDate>
      <link>https://dev.to/grokcode/singularity--a-docker-for-hpc-environments-i6p</link>
      <guid>https://dev.to/grokcode/singularity--a-docker-for-hpc-environments-i6p</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fyzafdxak1nf3fh9q1jvw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fyzafdxak1nf3fh9q1jvw.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Companies nowadays are under pressure to digitally transform their applications but are constrained by existing applications and infrastructure while rationalizing in a diverse portfolio of clouds, data centers and application architectures.&lt;/p&gt;

&lt;p&gt;Many different container platforms have been released to the market, overall the most well-known is Docker, a very powerful container platform that works perfectly for "almost" all use cases of applications. I said “almost” because Docker is oriented to micro-service virtualization.&lt;/p&gt;

&lt;p&gt;However, in the HPC (High Performance Computing) context, scheduling  resources is an essential feature that can considerably determine the performance of the system. This type of applications run a wide range of computationally intensive tasks in various fields, some examples including quantum mechanics, weather forecasting, climate research, oil and gas exploration, molecular modeling, biological macromolecules and physical simulations. Centers and companies that use this type of applications cannot run the risk to run Docker on their environment because it simply does not fit their use case. Some of the main reasons of this incompatibility are the following:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security issues&lt;/strong&gt;: HPC environments are multi-user systems where users should only have access to their own data. While Docker gives superuser privileges, it does not avoid the ability of accessing other users’ data and with it getting also control of the cluster and the computing resources. Singularity avoids this security problem by allowing different mechanisms for privileges:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Root owned daemon process&lt;/strong&gt;: This mechanism is the most similar to Docker, because there is a root owned background process that allows the management of containers and spawns the jobs within the container. The access of users to the daemon is allowed through the IPC control socket for communicating with the root owned daemon process. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Limited usage to root&lt;/strong&gt;: This mechanism allows only the root user to run the containers.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;User Namespace&lt;/strong&gt;: This mechanism allows a user to virtually become another user and run a limited set of privilege system functions. Singularity supports the user namespace natively and can run completely “rootless” or without privileges, of course the features are severely limited. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SetUID&lt;/strong&gt;: Singularity supports the “old school” UNIX method for running a particular program with escalated permission. This mechanism gives a lot of flexibility in terms of supported features and legacy compliance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Capability sets&lt;/strong&gt;: with capability sets you can set up privileges by process and per file basis. This is an alternative to SetUID because it allows much finer grained capability control.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Portability&lt;/strong&gt;: &lt;br&gt;
Another awesome feature from Singularity is the portability. You can take your container image with your environment which inside has all of your scientific apps and tools that you need and carry it from system to system. Docker uses layers for this matter, making the image more difficult to share.&lt;/p&gt;

&lt;p&gt;In the necessity to support all the previous needs, Singularity was born. It was developed by Sylabs and a community who continuously work on this platform. The first public release was on April 2016 and it had a massive uptake from different companies and research groups around the world. As a matter of fact, this powerful tool got the attention of the HPC Wire team and was also named as one of the top technologies to watch on 2017.&lt;/p&gt;

&lt;p&gt;We have just started to scratch the surface of deep learning and AI. This is still a new unexplored field and it’s expected to be evolving rapidly for the next 20 years at least. Singularity is already the standard de-facto in the academic world for running HPC workloads related to ML, DL, and AI, and it is deployed at hundreds of supercomputer research centers worldwide. Singularity is the best choice for Enterprises that want to enter these new emerging fields because it creates a bridge between the research world and the enterprise world and allows recent advances in research to freely flow into enterprise offerings. New disruptive technologies require the IT infrastructure of enterprises to adapt quickly, but this conflicts with the need of IT departments to preserve stability, security, and performance. Singularity solves this problem by introducing a layer of abstraction between the applications and the underlying operating system, while providing a safe passthrough to access computing resources required by ML, DL, and AI directly, with no performance penalty and without compromises on security.&lt;/p&gt;

</description>
      <category>singularity</category>
      <category>sylabs</category>
      <category>docker</category>
      <category>containers</category>
    </item>
    <item>
      <title>Encryption 101 : Introducing the idea of Symmetric Encryption</title>
      <dc:creator>Joana Chavez</dc:creator>
      <pubDate>Sun, 16 Apr 2017 22:25:36 +0000</pubDate>
      <link>https://dev.to/grokcode/encryption-101--introducing-the-idea-of-symmetric-encryption-and-basic-concepts</link>
      <guid>https://dev.to/grokcode/encryption-101--introducing-the-idea-of-symmetric-encryption-and-basic-concepts</guid>
      <description>

</description>
    </item>
  </channel>
</rss>
