<?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: Camille</title>
    <description>The latest articles on DEV Community by Camille (@calj).</description>
    <link>https://dev.to/calj</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%2F507067%2Fbb716571-89ce-4307-8b4c-d541358280f4.jpeg</url>
      <title>DEV Community: Camille</title>
      <link>https://dev.to/calj</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/calj"/>
    <language>en</language>
    <item>
      <title>Move docker volume to another disk</title>
      <dc:creator>Camille</dc:creator>
      <pubDate>Tue, 22 Apr 2025 09:08:32 +0000</pubDate>
      <link>https://dev.to/calj/move-docker-volume-to-another-disk-3i4f</link>
      <guid>https://dev.to/calj/move-docker-volume-to-another-disk-3i4f</guid>
      <description>&lt;p&gt;Docker volumes are essentially &lt;strong&gt;directories&lt;/strong&gt; on the host filesystem, so moving them involves copying data and updating references.&lt;br&gt;
Here’s a high-level guide to move a Docker volume to another disk:&lt;/p&gt;
&lt;h2&gt;
  
  
  1. Find the volume location
&lt;/h2&gt;

&lt;p&gt;Docker stores volumes (by default) in:&lt;br&gt;
&lt;code&gt;/var/lib/docker/volumes/&amp;lt;volume_name&amp;gt;/_data&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You can find the volume's mount point like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker inspect &amp;lt;container_name&amp;gt;
docker volume inspect &amp;lt;volume_name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Look for the Mountpoint field.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Stop the containers using the volume
&lt;/h2&gt;

&lt;p&gt;This is important to avoid data corruption.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker ps
docker stop &amp;lt;container_name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Copy the volume data to the new disk
&lt;/h2&gt;

&lt;p&gt;Let’s say you want to move it to /mnt/newdisk/docker-volumes/&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;rsync &lt;span class="nt"&gt;-aP&lt;/span&gt; /var/lib/docker/volumes/&amp;lt;volume_name&amp;gt;/_data/ /mnt/newdisk/docker-volumes/&amp;lt;volume_name&amp;gt;/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Make sure /mnt/newdisk is mounted and accessible.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Bind-mount the new location
Instead of using the Docker-managed volume, you can use a bind mount that points to the new location:
When running the container, use:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-v&lt;/span&gt; /mnt/newdisk/docker-volumes/&amp;lt;volume_name&amp;gt;:/data &amp;lt;image&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or update your docker-compose.yml:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;mydata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;driver&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;local&lt;/span&gt;
    &lt;span class="na"&gt;driver_opts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;none&lt;/span&gt;
      &lt;span class="na"&gt;device&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/mnt/newdisk/docker-volumes/mydata&lt;/span&gt;
      &lt;span class="na"&gt;o&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;bind&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then redeploy with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker-compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Optional: Remove the old volume&lt;br&gt;
Only do this once you're 100% sure the move was successful:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker volume &lt;span class="nb"&gt;rm&lt;/span&gt; &amp;lt;volume_name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let me know your setup (e.g., docker-compose, named volumes, etc.) if you want help crafting exact commands or config.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Gamma Hedging in the Crypto Market</title>
      <dc:creator>Camille</dc:creator>
      <pubDate>Thu, 07 Mar 2024 01:48:48 +0000</pubDate>
      <link>https://dev.to/calj/gamma-hedging-in-the-crypto-market-3gic</link>
      <guid>https://dev.to/calj/gamma-hedging-in-the-crypto-market-3gic</guid>
      <description>&lt;p&gt;The cryptocurrency market is widely known for its high volatility and&lt;br&gt;
rapid price fluctuations, which can be both advantageous and challenging&lt;br&gt;
for traders and investors. Given the dynamic nature of this market,&lt;br&gt;
options trading has emerged as a popular strategy for managing risk and&lt;br&gt;
speculating on price movements.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Basics of Options Trading in Crypto
&lt;/h2&gt;

&lt;p&gt;Options trading in the crypto market involves buying and selling options&lt;br&gt;
contracts based on the price of digital assets such as Bitcoin (BTC) or&lt;br&gt;
Ethereum (ETH). Options contracts give traders the right, but not the&lt;br&gt;
obligation, to buy or sell the underlying cryptocurrency at a&lt;br&gt;
predetermined price (strike price) within a specified time frame&lt;br&gt;
(expiration date). There are two main types of options: calls, which&lt;br&gt;
give the holder the right to buy the underlying asset, and puts, which&lt;br&gt;
give the holder the right to sell the underlying asset.&lt;/p&gt;

&lt;h3&gt;
  
  
  Importance of Risk Management
&lt;/h3&gt;

&lt;p&gt;Options trading in the crypto market can be highly lucrative. But, due&lt;br&gt;
to the unique characteristics of the crypto market, it also carries&lt;br&gt;
significant risks and presents notable challenges for its hedging, such&lt;br&gt;
as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;High Volatility:&lt;/strong&gt; The cryptocurrency market is renowned for its&lt;br&gt;
dramatic price fluctuations, often exceeding the volatility observed&lt;br&gt;
in traditional asset classes like stocks or bonds. It makes it&lt;br&gt;
difficult to predict future price movements accurately, potentially&lt;br&gt;
rendering traditional hedging strategies ineffective. &lt;a href="https://www.yellowcapital.com/blog/market-making-in-times-of-crypto-market-volatility"&gt;Read more&lt;br&gt;
about volatility in crypto&lt;br&gt;
markets&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Delta Hedging Limitations:&lt;/strong&gt; Delta hedging, a common hedging&lt;br&gt;
strategy in options trading, involves continuously adjusting the&lt;br&gt;
position to maintain a neutral delta. However, these adjustments may&lt;br&gt;
need to be made frequently in the highly volatile crypto market. It&lt;br&gt;
can be resource-intensive and lead to increased transaction costs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Imperfect Markets:&lt;/strong&gt; Traditional hedging strategies often rely on&lt;br&gt;
the assumption of efficient markets where prices accurately reflect&lt;br&gt;
all available information. However, the crypto market is still&lt;br&gt;
relatively young and evolving, potentially exhibiting inefficiencies&lt;br&gt;
that can impact the effectiveness of specific hedging strategies.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These challenges highlight the need for &lt;strong&gt;alternative hedging&lt;br&gt;
approaches&lt;/strong&gt; specifically tailored to address the unique complexities of&lt;br&gt;
the crypto market. Gamma &lt;strong&gt;hedging&lt;/strong&gt; emerges as a potentially more&lt;br&gt;
suitable strategy for managing risk.&lt;/p&gt;

&lt;h3&gt;
  
  
  Understanding Gamma Hedging
&lt;/h3&gt;

&lt;p&gt;Options traders use gamma hedging as a risk management strategy to&lt;br&gt;
reduce their exposure to changes in the underlying asset\'s price and&lt;br&gt;
volatility. It involves adjusting options positions to maintain a&lt;br&gt;
delta-neutral or gamma-neutral portfolio, which helps to minimize the&lt;br&gt;
impact of price movements on the overall value of the position.&lt;/p&gt;

&lt;p&gt;In the crypto market, traders can use several strategies to implement&lt;br&gt;
gamma hedging.&lt;/p&gt;

&lt;h3&gt;
  
  
  Dynamic Delta Hedging
&lt;/h3&gt;

&lt;p&gt;Dynamic delta hedging is a strategy that involves continuously adjusting&lt;br&gt;
options positions in response to changes in the underlying asset price.&lt;br&gt;
Delta measures an option\'s price sensitivity to changes in the&lt;br&gt;
underlying asset\'s price. By dynamically hedging delta, traders can&lt;br&gt;
maintain a delta-neutral portfolio and reduce directional risk.&lt;/p&gt;

&lt;h3&gt;
  
  
  Vega Hedging
&lt;/h3&gt;

&lt;p&gt;Vega hedging is a method traders use to adjust their options positions&lt;br&gt;
in response to changes in vega. Vega measures an option\'s sensitivity&lt;br&gt;
to changes in volatility, and by hedging it, traders can protect their&lt;br&gt;
portfolios against volatility-level fluctuations. It reduces the impact&lt;br&gt;
of volatility changes on the overall value of the position, helping&lt;br&gt;
traders manage risk more effectively.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gamma Scalping
&lt;/h3&gt;

&lt;p&gt;Gamma scalping is a trading strategy that involves profiting from&lt;br&gt;
changes in volatility through buying or selling options. Traders can&lt;br&gt;
adjust their options positions in response to changes in the underlying&lt;br&gt;
asset\'s price and volatility to capture profits from short-term price&lt;br&gt;
movements. By scalping gamma, traders aim to take advantage of&lt;br&gt;
fluctuations in volatility and generate profits from them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Benefits of Gamma Hedging
&lt;/h2&gt;

&lt;p&gt;Gamma hedging offers several benefits for options traders in the crypto&lt;br&gt;
market:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Risk Management&lt;/strong&gt;: Gamma hedging helps traders mitigate exposure&lt;br&gt;
to changes in the underlying asset\'s price and volatility, reducing&lt;br&gt;
the impact of market fluctuations on their portfolio.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Profit Potential&lt;/strong&gt;: By effectively managing risk through gamma&lt;br&gt;
hedging, traders can focus on maximizing profits and capitalizing on&lt;br&gt;
opportunities in the crypto market.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Portfolio Stability&lt;/strong&gt;: Maintaining a delta-neutral or&lt;br&gt;
gamma-neutral portfolio through gamma hedging helps traders achieve&lt;br&gt;
portfolio stability and balance, even in volatile market conditions.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Tips for Implementing Gamma Hedging Strategies
&lt;/h2&gt;

&lt;p&gt;First of all, it\'s crucial to understand the practical implementation&lt;br&gt;
and inherent limitations of gamma hedging:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Implementing Gamma Hedging:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Selling Options:&lt;/strong&gt; The core principle of gamma hedging involves&lt;br&gt;
selling options with a delta close to the desired constant delta of&lt;br&gt;
the overall position. It can be achieved by selling options with a&lt;br&gt;
delta slightly higher than the desired delta when the underlying&lt;br&gt;
asset price rises and vice versa when it falls.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Dynamic Adjustments:&lt;/strong&gt; As the underlying asset price fluctuates,&lt;br&gt;
the delta of the existing options position will change. To maintain&lt;br&gt;
the desired constant delta, dynamic adjustments may be needed by&lt;br&gt;
buying or selling additional options to compensate for these&lt;br&gt;
changes.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Considerations and Limitations:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Complexity:&lt;/strong&gt; Implementing gamma hedging effectively requires a&lt;br&gt;
deep understanding of options pricing, delta, gamma, and the&lt;br&gt;
specific dynamics of the crypto market. It\'s not recommended for&lt;br&gt;
beginner traders due to its inherent complexity and potential risks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Transaction Costs:&lt;/strong&gt; The frequent adjustments required in gamma&lt;br&gt;
hedging can lead to significant transaction costs, which, if not&lt;br&gt;
carefully managed, can erode potential profits.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Market Imperfections:&lt;/strong&gt; Market inefficiencies in the crypto market&lt;br&gt;
can impact the effectiveness of gamma hedging. These inefficiencies&lt;br&gt;
can make it challenging to achieve and maintain a constant delta.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Risk Management:&lt;/strong&gt; Even with gamma hedging, risk management&lt;br&gt;
remains crucial. Unexpected market movements or unforeseen events&lt;br&gt;
can still lead to losses, and it\'s essential to have stop-loss&lt;br&gt;
orders and other risk mitigation strategies in place.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Effective implementation of gamma hedging strategies requires careful&lt;br&gt;
planning and execution&lt;/strong&gt;. Below are some practical tips for options&lt;br&gt;
traders seeking to incorporate gamma hedging into their trading&lt;br&gt;
strategies:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Understand Your Portfolio Exposure&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Before implementing gamma hedging strategies, assessing your portfolio&lt;br&gt;
exposure and identifying risk areas is essential. Understanding the&lt;br&gt;
sensitivity of your options positions to changes in the underlying&lt;br&gt;
asset\'s price and volatility will help you determine the appropriate&lt;br&gt;
hedging strategy.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Monitor Market Conditions Closely&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Gamma hedging requires active monitoring of market conditions, including&lt;br&gt;
changes in the underlying asset\'s price, volatility levels, and options&lt;br&gt;
prices. By staying informed about market developments, you can make&lt;br&gt;
timely adjustments to your options positions and maintain a balanced&lt;br&gt;
portfolio.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Use Risk Management Tools&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Utilize risk management tools and software to analyze your options&lt;br&gt;
positions, assess portfolio risk, and identify potential hedging&lt;br&gt;
opportunities. Risk management tools can help you optimize your hedging&lt;br&gt;
strategy and minimize losses in adverse market conditions.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Practice Discipline and Patience&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Maintain discipline and patience when implementing gamma hedging&lt;br&gt;
strategies. Avoid making impulsive decisions based on short-term market&lt;br&gt;
fluctuations, and stick to your hedging plan. By staying disciplined and&lt;br&gt;
patient, you can effectively manage risk and achieve long-term success&lt;br&gt;
in options trading.&lt;/p&gt;

&lt;p&gt;Gamma hedging is an advanced, helpful options trading strategy for&lt;br&gt;
experienced traders in the cryptocurrency market. It can reduce risk&lt;br&gt;
exposure and allow traders to capitalize on market movements. However,&lt;br&gt;
to make it work effectively, it\'s essential to understand the&lt;br&gt;
underlying concepts and implement responsible risk management practices.&lt;/p&gt;

&lt;p&gt;It\'s important to note that gamma hedging is not a guaranteed path to&lt;br&gt;
success, and significant risks remain even with this strategy.&lt;br&gt;
Therefore, it\'s crucial to conduct thorough research and seek&lt;br&gt;
professional guidance before attempting any advanced options trading&lt;br&gt;
strategies, including gamma hedging, in cryptocurrency\'s volatile and&lt;br&gt;
unpredictable world.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.yellowcapital.com/"&gt;Yellow Capital&lt;/a&gt; specializes in strategic investments and prime crypto market making.&lt;/p&gt;

</description>
    </item>
    <item>
      <title> Channel push non blocking in GoLang</title>
      <dc:creator>Camille</dc:creator>
      <pubDate>Wed, 11 Nov 2020 20:15:58 +0000</pubDate>
      <link>https://dev.to/calj/channel-push-non-blocking-in-golang-1p8g</link>
      <guid>https://dev.to/calj/channel-push-non-blocking-in-golang-1p8g</guid>
      <description>&lt;p&gt;By default push operations to golang channel will block once the channel is full and wait that an other go routine will consume a message from the channel.&lt;/p&gt;

&lt;p&gt;The following example will block after 3 messages queued in the channel, and since no other go routine is running it will crash with a dead lock error:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;package&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="s"&gt;"fmt"&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;ch&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="nb"&gt;make&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;chan&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;ch&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="s"&gt;"hello"&lt;/span&gt;
        &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Pushed a message to the channel"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To avoid blocking the execution of your application you can handle the case of a full channel by using select:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;package&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="s"&gt;"fmt"&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;ch&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="nb"&gt;make&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;chan&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;select&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="n"&gt;ch&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="s"&gt;"hello"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Pushed a message to the channel"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"WARN: The channel is full"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This way you can easily decide to ignore the message or handle this problem an other way than blocking the current go routine.&lt;/p&gt;

</description>
      <category>go</category>
      <category>channel</category>
      <category>nonblocking</category>
    </item>
    <item>
      <title>Open Finance</title>
      <dc:creator>Camille</dc:creator>
      <pubDate>Tue, 10 Nov 2020 19:40:37 +0000</pubDate>
      <link>https://dev.to/calj/open-finance-3kki</link>
      <guid>https://dev.to/calj/open-finance-3kki</guid>
      <description>&lt;p&gt;We started an initiative to make an open finance protocol for simplifying the connection of institutions (server to server) and the interoperability of bots (client to server).&lt;/p&gt;

&lt;p&gt;Please share your thoughts: &lt;a href="https://open-finance.org/"&gt;Open Finance&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Github link: &lt;a href="https://github.com/openware/open-finance-protocol"&gt;https://github.com/openware/open-finance-protocol&lt;/a&gt;&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>opensource</category>
      <category>finance</category>
      <category>trading</category>
    </item>
    <item>
      <title>OpenDAX Crypto Exchange Software</title>
      <dc:creator>Camille</dc:creator>
      <pubDate>Tue, 03 Nov 2020 15:35:43 +0000</pubDate>
      <link>https://dev.to/calj/opendax-crypto-exchange-software-14jj</link>
      <guid>https://dev.to/calj/opendax-crypto-exchange-software-14jj</guid>
      <description>&lt;p&gt;OpenDAX stands for "Open-source Digital Asset Exchange".&lt;br&gt;
It's a open-source platform providing a fully featured cryptocurrency exchange software, let's say a small binance software.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://github.com/openware/opendax"&gt;OpenDAX&lt;/a&gt; repository contains a ready to use docker-compose structure to run the stack locally using docker, you can follow the readme to run everything in few minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are the main components of the stack
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/openware/barong"&gt;Barong&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Barong is the authentication service of the stack. &lt;br&gt;
It manages users profiles, 2FA using google authenticator and contains a builtin customizable KyC process. Users can upload their documents for operator to verify them or it can be connected to third party services to fully automate this process.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/openware/peatio"&gt;Peatio&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Peatio is the core component of the exchange, it manages the accounting, the trading activities and the blockchains interaction. It supports natively Bitcoin, Litecoin, Ethereum (including all ERC20 tokens), Ripple and Dash but can be easily extended to support more blockchains and currencies. See the list of &lt;a href="https://github.com/openware/peatio-contrib"&gt;peatio wallets and blockchains plugins&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/openware/rango"&gt;Rango&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Rango is a high performance websocket server which dispatches public and private messages from other components (through message queues).&lt;/p&gt;

&lt;p&gt;Rango makes the user experience smooth by forwarding public market informations in real time but also private updates for the connected user, trade notification for example.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://quay.io/repository/openware/tower"&gt;Tower&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Tower is the administration panel of the platform. It allows to manage users and KyC levels, monitor trading activity, deposited and withdrawn funds. It's free to use and can be extended by contacting the openware team.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/openware/baseapp"&gt;React Interface&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;BaseApp is a React application containing all features of a regular crypto exchange platform, it can be used to quickly deliver a fully featured product on the market and thus be extended for the specific need of the project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Storage and Databases
&lt;/h2&gt;

&lt;h3&gt;
  
  
  MySQL or PostgreSQL
&lt;/h3&gt;

&lt;p&gt;SQL databases are used to store sensitive accounting informations and users profiles.&lt;/p&gt;

&lt;p&gt;The stack is actively tested with the following database versions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MySQL 5.7 and 8.0&lt;/li&gt;
&lt;li&gt;PostgreSQL 13.0&lt;/li&gt;
&lt;li&gt;MariaDB 10.3&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  InfluxDB
&lt;/h3&gt;

&lt;p&gt;InfluxDB is an open source time series database, it is used to compute and store historical market chart data. OpenDAX components supports InfluxDB sharding and replication for scalability reason to support a platform to grow to hundreds of markets.&lt;/p&gt;

&lt;h2&gt;
  
  
  Business support
&lt;/h2&gt;

&lt;p&gt;While OpenDAX is open-source and allows any Startup to adopt this technology with a very low entry cost, &lt;a href="https://www.openware.com"&gt;Openware&lt;/a&gt; provides support and licenses for scaling the solution as well as &lt;a href="https://www.opendax.io"&gt;white label exchange&lt;/a&gt; deployed and managed in the Cloud.&lt;/p&gt;

&lt;p&gt;You can read more about Openware &lt;a href="https://www.openware.com"&gt;cryptocurrency exchange software&lt;/a&gt; support and licenses. It includes a &lt;a href="https://www.openware.com/products/openfinex"&gt;high performance trading engine&lt;/a&gt; written in go to reach high trading volume.&lt;/p&gt;

</description>
      <category>crypto</category>
      <category>exchange</category>
      <category>software</category>
      <category>finance</category>
    </item>
  </channel>
</rss>
