<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>6X10</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Thu, 13 Jun 2024 07:30:33 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <copyright>Copyright (C) 2019. 6X10. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/kyung_yu" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[Paper Review] On structuring probabilistic dependences in stochastic language modeling (KN Smoothing)]]></title>
            <link>https://velog.io/@kyung_yu/Paper-Review-On-structuring-probabilistic-dependences-in-stochastic-language-modeling-KN-Smoothing</link>
            <guid>https://velog.io/@kyung_yu/Paper-Review-On-structuring-probabilistic-dependences-in-stochastic-language-modeling-KN-Smoothing</guid>
            <pubDate>Thu, 13 Jun 2024 07:30:33 GMT</pubDate>
            <description><![CDATA[<h2 id="before-the-beginning">Before the beginning,,,</h2>
<hr>
<h3 id="n-gram-model">N-gram model</h3>
<p>Using the definition of conditional probabilities, the decomposition (the joint probability of an entire sequence of words) using the chain rule of probability:
<img src="https://velog.velcdn.com/images/kyung_yu/post/7a39dd16-1f10-4878-b709-04b09a78d3d5/image.png" alt=""></p>
<p><strong>The intuition</strong> of the n-gram model is that instead of computing the probability of a word given its entire history, we can <strong>approximate</strong> the history by just the last few words.
<img src="https://velog.velcdn.com/images/kyung_yu/post/8d14d152-d8dc-48e8-9e75-da98b1eb436f/image.png" alt=""></p>
<p><strong>The assumption</strong> that the probability of a word depends only on the previous word is called a Markov assumption. Markov models are the class of probabilistic models that assume <strong>we can predict the probability of some future unit without looking too far into the past</strong>. We can generalize the bigram (which looks one word into the past) to the trigram (which looks two words into the past) and thus to the n-gram (which looks n − 1 words into the past).</p>
<p><strong>General equation for this n-gram approximation</strong> to the conditional probability of the next word in a sequence. We’ll use N here to mean the n-gram size, so N = 2 means bigrams and N = 3 means trigrams. Then we approximate the probability of a word given its entire context as follows:
<img src="https://velog.velcdn.com/images/kyung_yu/post/4a007226-2ff5-46aa-99f1-f2ff60819a6d/image.png" alt=""></p>
<p>To estimate probabilities, we use <strong>maximum likelihood estimation</strong> or <strong>MLE</strong>. For the general case of MLE n-gram parameter estimation:
<img src="https://velog.velcdn.com/images/kyung_yu/post/faab4be9-ed22-445f-a288-07ebd853126e/image.png" alt="">
where $C(w_{n-N+1:n-1}w_n)$ is the count of the n-gram $w_{n-N+1:n-1}w_n$,
and $C(w_{n-N+1:n-1})$ is the sum of all the n-gram that start with a given word $w_{n-N+1:n-1}$ = the sum of all n-gram counts that start with a given word $w_{n-N+1:n-1}$ must be equal to the unigram count for that word $w_{n-N+1:n-1}$.</p>
<p>=&gt; Equation estimates the n-gram probability by dividing the observed frequency of a particular sequence by the observed frequency of a prefix.
This ratio is called a <strong>relative frequency</strong>.</p>
<p><strong>We always represent and compute language model probabilities in log format as log probabilities.</strong> Because: </p>
<ol>
<li>Since probabilities are (by definition) less than or equal to 1, the more probabilities we multiply together, the smaller the product becomes. </li>
<li>Adding in log space is equivalent to multiplying in linear space, so we combine log probabilities by adding them.
<img src="https://velog.velcdn.com/images/kyung_yu/post/8ef5d33d-7822-432c-a880-4505cf5be726/image.png" alt=""></li>
</ol>
<h2 id="knerser-ney-smoothing">Knerser-Ney Smoothing</h2>
<hr>
<h3 id="2-smoothing-methods">2. Smoothing methods</h3>
<h4 id="21-multinomial-distribution-and-maximum-likelihood-estimation">2.1. Multinomial distribution and maximum likelihood estimation</h4>
<p>Here, we will use the term <strong>event</strong> or <strong>event class</strong> to describe the type of observations we are considering. When we are looking at word bigrams, the events will be the possible word pairs. In discussing conditional bigram probabilities for a fixed predecessor word, the events wil be the single words that may follow the fixed predecessor word.</p>
<p>Let us denote </p>
<ul>
<li>the event classes under consideration by $k=1,..., K$,</li>
<li>their sample counts by $N(k)$, i.e. the frequency how often class $k$ was observed in the training text, </li>
<li>the corresponding probabilities by $p(k)$, i.e. the chance of success of class $K$.</li>
</ul>
<p>For a set of $N$ observations (in training or testing), we have $N$ independent trials with $K$ possible outcomes, where the sample counts $N(k)$ denote the number of trials resulting in class or outcome $k$. The distribution of the sample counts $N(k)$ is referred to as multinomial (or polynomial) distribution (Lehmann, 1983):
<img src="https://velog.velcdn.com/images/kyung_yu/post/7fa9f140-4da3-4f08-93cd-8527bb5e8ab9/image.png" alt=""></p>
<p>As we will see later, it is helpful to <strong>partition the event classes $k$ into equivalence classes according to their sample counts $r = N(k)$</strong> (Good, 1953), which is referred to as symmetry requirement (Nadas, 1985). Let $n$, be the number of event classes which occured in the training text exactly r times and $p_r&gt;0$ be the corresponding probability, i.e. we define:
<img src="https://velog.velcdn.com/images/kyung_yu/post/080a4a2a-b520-44cd-ae3f-7b4862ce738f/image.png" alt="">
where we have: $n_r=0$ for $r&gt;R$. </p>
<p>$F$ in terms of the sample counts $N(k)$ and of the equivalence class counts $n_r$:
<img src="https://velog.velcdn.com/images/kyung_yu/post/e8828b02-c1d0-4db6-989d-6a3633543823/image.png" alt=""></p>
<h4 id="22-floor-method-and-linear-interpolation">2.2. Floor method and linear interpolation</h4>
<p><strong>To guarantee non-zero probability estimates</strong>, we can modify the sample counts N(k) by adding a floor value which is chosen proportional to probabilities q(k) of a less specific distribution, e.g. unigram distribution or uniform distribution. After renormalization, we then obtain the probability estimates: </p>
<p><img src="https://velog.velcdn.com/images/kyung_yu/post/6e8d2f8a-ebdd-4379-8833-563d71fde10b/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/kyung_yu/post/0f6be949-a8f7-47b7-afc5-78bcdaad8590/image.png" alt=""></p>
<p>-&gt; linear interpolation (each sample count $N(k)$ is reduced(&quot;discounted&quot;) by a value ${lamda}*N(k)$. However, it can be argued that the higher the sample counts $N(k)$, the higher their contribution should be in the interpolation model. </p>
<h4 id="24-discounting-models">2.4 Discounting models</h4>
<p>We introduce a general discounting function $d:k→ d(k)$ that has to be subtracted from every sample count N(k) and obtain the following smoothing formula:</p>
<p><img src="https://velog.velcdn.com/images/kyung_yu/post/62b5d7b2-ae23-4d1f-b401-23384dd30533/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/kyung_yu/post/044b843b-c7d4-425f-806c-c4bbe3629015/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/kyung_yu/post/819ed825-fba5-4a8a-a951-4fb8a7b65eec/image.png" alt=""></p>
<p>A constant value D with the range constraint0&lt;D&lt;1 can be intuitively interpreted as a correction that lies well within the range of the &quot;discretization noise&quot; of the discrete counts N(k). This nonlinear interpolation model has the following properties:</p>
<ul>
<li>The weight of the more general distribution q(k) is proportional to (K-n_0), which is the total number of different events k that were observed. This property is particularly attractive for modelling conditional probabilities: if a given word predecessor is followed by only one or a few different words, the smoothing effect will be much smaller than in the case where it is followed by many different words.</li>
<li>Seting D=1 amounts to pooling al singletons, i.e. events k with N(k) =1, with the unseen events. As Katz (Katz, 1987) pointed out in asimilar context, there si not much difference between seeing an event just once or not at all.</li>
<li>Although the interpolation is nonlinear, there is always a smoothing effect in that a weighted average between the two distributions is computed. This is different from Katz&#39;s backing-off approach (Katz, 1987), where a choice must be made between the more specific and the more general distribution.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Paper Review] RNN + Long Short-Term Memory]]></title>
            <link>https://velog.io/@kyung_yu/Paper-Review-Long-Short-Term-Memory</link>
            <guid>https://velog.io/@kyung_yu/Paper-Review-Long-Short-Term-Memory</guid>
            <pubDate>Sat, 13 Apr 2024 14:04:10 GMT</pubDate>
            <description><![CDATA[<h2 id="before-the-beginning">Before the beginning,,,</h2>
<hr>
<h3 id="what-is-recurrent-neural-networks-rnn">What is Recurrent Neural Networks (RNN)?</h3>
<blockquote>
<p>RNNs use the idea of processing sequential information. The term <strong>“recurrent”</strong> applies as they perform the same task over each instance of the sequence such that the output is dependent on the previous computations and results. Generally, a fixed-size vector is produced to represent a sequence by feeding tokens one by one to a recurrent unit. In a way, RNNs have <strong>“memory”</strong> over previous computations and use this information in current processing. </p>
</blockquote>
<ul>
<li>Structure of Simple RNN
<img src="https://velog.velcdn.com/images/kyung_yu/post/733dd196-5448-4428-a92e-173e2f7c3230/image.png" alt=""></li>
</ul>
<p>$x_t$: the input to the network at time step $t$
$s_t$: the hidden state at time step $t$ </p>
<p>Caculation of $s_t$ is based as per the equation:
<img src="https://velog.velcdn.com/images/kyung_yu/post/d3b41ff6-f79b-457f-9187-34bd0a2f5dbb/image.png" alt=""></p>
<p>-&gt; $s_t$ is caculated based on the current input and the previous time step&#39;s hidden state
-&gt; $s_t$ is considered as the network’s memory element that accumulates information from other time steps</p>
<p>The function $f$: a non-linear transformation such as $tanh, ReLU$
$U, V, W$: weights that are shared across time</p>
<ul>
<li>Properties of RNN<ul>
<li>Pros<ul>
<li>Given that an RNN performs sequential processing by modeling units in sequence, it has the ability to capture the inherent sequential nature present in language, where units are characters, words or even sentences.<ul>
<li>RNNs have flexible computational steps that provide better modeling capability and create the possibility to capture unbounded context.</li>
<li>Cons</li>
<li>Simple RNN networks suffer from the infamous vanishing gradient problem, which makes it really hard to learn and tune the parameters of the earlier layers in the network.</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3 id="conventional-bptt-eg-williams-and-zipser-1992">Conventional BPTT (e.g., Williams and Zipser 1992)</h3>
<ul>
<li><p>Network Architecture</p>
<ul>
<li><p>Let the network have $n$ units, with $m$ external input lines. </p>
</li>
<li><p>Let $y(t)$ denote the $n$-tuple of outputs of the units in the network at time $t$.</p>
</li>
<li><p>Let $x^{net}(t)$ denote the $m$-tuple of external input signals to the network at time t. </p>
</li>
<li><p>We also define $x(t)$ to be the $(m+ n)$-tuple obtained by concatenating $x^{net}(t)$ and $y(t)$ in some convenient fashion. </p>
</li>
<li><p>Let $U$ denote the set of indices $k$ such that $x_k$ the $k^{th}$ component of $x$, is the output of a unit in the network.</p>
</li>
<li><p>Let $I$ denote the set of indices $k$ for which $x_k$ is an external input. </p>
</li>
<li><p>Furthermore, we assume that the indices on $y$ and $x^{net}$ are chosen to correspond to those of x, so that
<img src="https://velog.velcdn.com/images/kyung_yu/post/dedef3f5-77db-4381-bff0-a7a51291013c/image.png" alt=""></p>
</li>
<li><p>Let $W$ denote the weight matrix for the network, with a unique weight between every pair of units and also from each input line to each unit.</p>
</li>
<li><p>The element $w_{ij}$ represents the weight on the connection to the $i^{th}$ unit from either the $j^{th}$ unit, if $j \in U$, or the $j^{th}$ input line, if $j \in I$. </p>
</li>
<li><p>Furthermore, note that to accommodate a bias for each unit we simply include among the $m$ input lines one input whose value is always 1; the corresponding column of the weight matrix contains as its $i^{th}$ element the bias for unit $i$. In general, our naming convention dictates that we regard the weight $w_{ij}$ as having $x_j$ as its “presynaptic” signal and $y_j$ as its “postsynaptic” signal. 
<img src="https://velog.velcdn.com/images/kyung_yu/post/5b1d321d-e07a-4cb6-9916-c03835078dd7/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/kyung_yu/post/2af13e48-74e6-4b81-a5cc-4c205e180a6f/image.png" alt=""></p>
</li>
<li><p>For each k, the intermediate variable $s_{k}(t)$ represents the net input to the $k^{th}$ unit at time $t$. Its value at time $t+1$ is computed in terms of both the state of and input to the network at time $t$ by
<img src="https://velog.velcdn.com/images/kyung_yu/post/091f78b5-603c-49b6-94e4-ac6c5bf07281/image.png" alt=""></p>
<p>The longer one clarifies how the unit outputs and the external inputs are both used in the computation, while the more compact expression illustrates why we introduced $x$ and the corresponding indexing convention above. </p>
</li>
<li><p>The output of such a unit at time $t+1$ is then expressed in terms of the net input by
<img src="https://velog.velcdn.com/images/kyung_yu/post/87099c41-dfc4-41bd-a380-83a82fa0bbd1/image.png" alt=""></p>
<p>where $f_k$ is the unit&#39;s squashing function. </p>
</li>
<li><p>In those cases where a specific assumption (differentiable) about these squashing functions is required, it will be assumed that all units use the logistic function.</p>
</li>
</ul>
</li>
<li><p>Network Performance Measure</p>
<ul>
<li><p>Assume that the task to be performed by the network is <em>a sequential supervised learning task</em>, meaning that certain of the units’ output values are to match specified target values (which we also call <em>teacher signals</em>) at specified times. </p>
</li>
<li><p>Let $T(t)$ denote the set of indices $k \in U$ for which there exists a specified target value $d_k(t)$ that the output of the $k^{th}$ unit should match at time $t$. Then define a time-varying $n$-tuple $e$ by 
<img src="https://velog.velcdn.com/images/kyung_yu/post/b6debf3f-00ea-4c55-90ec-c859c36319f5/image.png" alt=""></p>
<p>-&gt; Note that this formulation allows for the possibility that target values are specified for different units at different times. </p>
<ul>
<li><p>Denote the negative of the overall network error at time t. 
<img src="https://velog.velcdn.com/images/kyung_yu/post/ce9a4e0a-720c-4815-a24b-6bbbee911033/image.png" alt=""></p>
</li>
<li><p>A natural objective of learning might be to maximize the negative of the total error oversome appropriate time period $(t&#39;,t]$.
<img src="https://velog.velcdn.com/images/kyung_yu/post/6c5444ed-2f64-4934-8ad2-db131eb0721c/image.png" alt=""></p>
</li>
<li><p>One natural wat to make the weight changes is along a constant positive multiple of the performance measure gradient, so that 
<img src="https://velog.velcdn.com/images/kyung_yu/post/00d8aef1-c307-4ae4-85be-b703ddd213c9/image.png" alt=""></p>
</li>
</ul>
<p>for each $i$ and $j$, where $\eta$ is a positive learning rate parameter. </p>
</li>
</ul>
</li>
</ul>
<h2 id="lstm">LSTM</h2>
<hr>
<h3 id="1-introduction">1. Introduction</h3>
<ul>
<li>With conventional &quot;Back-Propagation Through Time&quot; (BPTT) or &quot;Real-Time Recurrent Learning&quot; (RTRL), error signals &quot;flowing backwards in time&quot; tend to either (1) blow up or (2) vanish
(BPTT 참고: <a href="https://velog.io/@jody1188/BPTT">https://velog.io/@jody1188/BPTT</a>)</li>
<li><blockquote>
<p>LSTM is designed to overcome these error back-flow problems. It can learn to bridge time intervals in excess of 1000 steps even in case of noisy, incompressible input sequences, without loss of short time lag capabilities. </p>
</blockquote>
</li>
</ul>
<h3 id="3-constant-error-backprop">3. Constant Error Backprop</h3>
<h4 id="31-exponentially-decaying-error">3.1 Exponentially Decaying Error</h4>
<h4 id="32-constant-error-flow-naive-approach">3.2 Constant Error Flow: NAIVE APPROACH</h4>
<ul>
<li>A single unit<ul>
<li>To avoid vanishing error signals, at time $t$, $j$&#39;s local error back flow is 
<img src="https://velog.velcdn.com/images/kyung_yu/post/6c6a22a6-8593-43b7-ad1c-8d408547c413/image.png" alt="">  <ul>
<li>To enfore <em>constant</em> error flow through $j$, we require
<img src="https://velog.velcdn.com/images/kyung_yu/post/b4f1f52b-0e6f-4d51-8a3f-106d7e1f2925/image.png" alt=""></li>
</ul>
</li>
</ul>
</li>
<li>The constant error carrousel<ul>
<li>Interating the differential equation above, we obtain
<img src="https://velog.velcdn.com/images/kyung_yu/post/3d1b945c-55f0-4a09-af5a-143d8a94252b/image.png" alt=""></li>
<li>This means: $f_j$ has to be linear, and unit $j$&#39;s activation has to remain constant:
<img src="https://velog.velcdn.com/images/kyung_yu/post/3b336fec-367e-4212-a0df-d4b9c971a205/image.png" alt=""></li>
<li>In the experiments, this will be ensured by using the identity function $f_j$:$f_j(x)=x, \forall x$, and by setting $w_{jj}=1.0$. We refer to this as the <strong>constant error carrousel (CEC)</strong>.</li>
</ul>
</li>
</ul>
<h3 id="4-long-short-term-memory">4. LONG SHORT-TERM MEMORY</h3>
<ul>
<li>Memory cells and gate units<ul>
<li>To construct an architecture that allows for <strong>constant error flow</strong> through special, self-connected units without the disadvantages of the naive approach, we extend the <strong>constant error carrousel CEC</strong> embodied by the self-connected, linear unit $j$ from Section 3.2 by introducin additional features.</li>
<li>A <strong>multiplicative $input$ $gate$ $unit$</strong> is introduced to <strong>protect the momory contents</strong> stored in $j$ from pertubation by irrelevant inputs. Likewise, a <strong>multiplicative $output$ $gate$ $unit$</strong> is introduced which protects other units from perturbation by currently <strong>irrelevant memory contents</strong> stored in $j$. </li>
</ul>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/kyung_yu/post/010e2b05-c165-4b7d-ab71-cafaeecc19b2/image.png" alt=""></p>
<ul>
<li>$c_j$: $t</li>
</ul>
<p>&lt;References&gt;</p>
<ul>
<li><a href="https://arxiv.org/pdf/1708.02709.pdf">https://arxiv.org/pdf/1708.02709.pdf</a></li>
<li><a href="https://gwern.net/doc/ai/nn/rnn/1995-williams.pdf">https://gwern.net/doc/ai/nn/rnn/1995-williams.pdf</a></li>
<li><a href="https://www.semanticscholar.org/paper/13-Gradient-Based-Learning-Algorithms-for-Recurrent-Williams-Zipser/4983823eb66ed5d8557f20dd5c8a09ed66f05c25">https://www.semanticscholar.org/paper/13-Gradient-Based-Learning-Algorithms-for-Recurrent-Williams-Zipser/4983823eb66ed5d8557f20dd5c8a09ed66f05c25</a><ul>
<li><a href="https://www.bioinf.jku.at/publications/older/2604.pdf">https://www.bioinf.jku.at/publications/older/2604.pdf</a></li>
<li><a href="https://medium.com/@mfouzan144/understanding-lstm-gru-and-rnn-architectures-e0b3a0c1d741">https://medium.com/@mfouzan144/understanding-lstm-gru-and-rnn-architectures-e0b3a0c1d741</a></li>
</ul>
</li>
</ul>
<ul>
<li><a href="https://velog.io/@choonsik_mom/pytorch%EB%A1%9C-LSTM-%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0">https://velog.io/@choonsik_mom/pytorch로-LSTM-구현하기</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[What is the Apache Airflow?]]></title>
            <link>https://velog.io/@kyung_yu/What-is-the-Apache-Airflow</link>
            <guid>https://velog.io/@kyung_yu/What-is-the-Apache-Airflow</guid>
            <pubDate>Sat, 16 Mar 2024 13:38:43 GMT</pubDate>
            <description><![CDATA[<p>Foremost, we have to know Data Pipelines.</p>
<h3 id="data-pipelines">Data Pipelines</h3>
<blockquote>
<p>A data pipeline is a method in which raw data is ingested from various data sources—APIs, SQL and NoSQL databases, files, et cetera, and then ported to data store, like a data lake or data warehouse, for analysis. Before data flows into a data repository, it usually undergoes some data processing. This is inclusive of data transformations, such as filtering, masking, and aggregations, which ensure appropriate data integration and standardization.</p>
</blockquote>
<p>There are two main types of data pipeline, which are batch processing and streaming data.</p>
<ul>
<li>Batch Processing: Load “batches” of data into a repository during set time intervals, which are typically scheduled during off-peak business hours</li>
<li>Streaming data: Be required for data to be continuously updated
(<a href="https://aws.amazon.com/what-is/streaming-data/">Click if you want to know more about streaming data</a>)</li>
</ul>
<h3 id="etl-pipeline">ETL pipeline</h3>
<p>ETL pipeline is a subcategory of data pipelines. </p>
<blockquote>
<p>• ETL pipelines follow a specific sequence. As the abbreviation implies, they <strong>Extract</strong> data, <strong>Transform</strong> data, and then <strong>Load</strong> and store data in a data repository. All data pipelines do not need to follow this sequence. In fact, ELT pipelines have become more popular with the advent of cloud-native tools. While data ingestion still occurs first with this type of pipeline, any transformations are applied after the data has been loaded into the cloud data warehouse.<br><br/>• ETL pipelines also tend to imply the use of batch processing, but as we noted above, the scope of data pipelines is broader. They can also be inclusive of stream processing. </p>
</blockquote>
<p>Then, </p>
<h3 id="what-is-the-apache-airflow">What is the Apache Airflow?</h3>
<blockquote>
<p>Apache Airflow™ is an open-source platform for <strong>developing</strong>, <strong>scheduling</strong>, and <strong>monitoring batch-oriented workflows</strong>. Airflow’s extensible Python framework enables you to build workflows connecting with virtually any technology. A web interface helps manage the state of your workflows. Airflow is deployable in many ways, varying from a single process on your laptop to a distributed setup to support even the biggest workflows.</p>
</blockquote>
<p>That is, Apache Airflow is a tool which can help develop, schedule, and monitor batch processing with Python.</p>
<h3 id="airflow-components">Airflow Components</h3>
<h4 id="core-components">Core Components</h4>
<p><img src="https://velog.velcdn.com/images/kyung_yu/post/61c7810c-4541-49f6-8583-0f72e7a8c4d6/image.png" alt=""></p>
<ul>
<li>A <strong>folder of DAG files</strong> is read by the scheduler to figure out what tasks to run and when and to run them.</li>
</ul>
<ul>
<li>A <strong>scheduler</strong> handles both triggering scheduled workflows, and submitting Tasks to the executor to run
(1) Read DAGs from files and parses DAGs,
(2) check their schedule interval and start date, 
(3) (if the DAGs’ schedule has passed) starts scheduling the DAGs’ tasks for execution by passing them to the Airflow workers.
(The <strong>executor</strong> is a configuration property of the scheduler and runs within the scheduler process. Executors are the mechanism by which task instances get run)</li>
</ul>
<ul>
<li>A <strong>metadata database</strong> is use to store state of workflows (DAGs) and their tasks. It stores crucial information such as the configuration of your Airflow environment&#39;s roles and permissions, as well as all metadata for past and present DAG and task runs.</li>
</ul>
<ul>
<li>A <strong>webserver</strong> presents a handy user interface to inspect, trigger and debug the behaviour of DAGs and tasks.</li>
</ul>
<h3 id="situational-components">Situational Components</h3>
<ul>
<li>A <strong>worker</strong> executes the tasks given to it by the scheduler. (In the basic installation worker might be part of the scheduler not a separate component.) It is the process that executes tasks, as defined by the executor of Scheduler)</li>
</ul>
<ul>
<li>A <strong>triggerer</strong> executes deferred tasks in an asyncio event loop. In basic installation where deferred tasks are not used, a triggerer is not necessary. (Need to be updated)</li>
</ul>
<ul>
<li>A <strong>dag processor</strong> parses DAG files and serializes them into the metadata database. By default, the dag processor process is part of the scheduler, but it can be run as a separate component for scalability and security reasons. If dag processor is present scheduler does not need to read the DAG files directly. </li>
</ul>
<ul>
<li><strong>Plugins</strong> are a way to extend Airflow’s functionality (similar to installed packages). <a href="https://airflow.apache.org/docs/apache-airflow/stable/authoring-and-scheduling/plugins.html">Plugins</a> are read by the scheduler, dag processor, triggerer and webserver.</li>
</ul>
<h4 id="references">References</h4>
<ul>
<li><a href="https://www.ibm.com/topics/data-pipeline">https://www.ibm.com/topics/data-pipeline</a></li>
<li><a href="https://airflow.apache.org/docs/apache-airflow/stable/index.html">https://airflow.apache.org/docs/apache-airflow/stable/index.html</a></li>
<li><a href="https://airflow.apache.org/docs/apache-airflow/stable/core-concepts/overview.html">https://airflow.apache.org/docs/apache-airflow/stable/core-concepts/overview.html</a></li>
<li><a href="https://docs.astronomer.io/learn/airflow-components">https://docs.astronomer.io/learn/airflow-components</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Process VS Thread]]></title>
            <link>https://velog.io/@kyung_yu/Process-VS-Thread</link>
            <guid>https://velog.io/@kyung_yu/Process-VS-Thread</guid>
            <pubDate>Tue, 12 Mar 2024 01:13:30 GMT</pubDate>
            <description><![CDATA[<h3 id="process">Process</h3>
<ul>
<li>운영체제로부터 시스템 자원(CPU)을 할당받은 작업의 단위
(모든 program은 운영체제가 실행되기 위한 메모리 공간을 할당해 줘야 실행될 수 ㅇ)</li>
<li>작업 중인 Program(Static Program, 코드 덩어리)</li>
<li><blockquote>
<p>작업 관리자의 process 참고</p>
</blockquote>
</li>
<li>한계: 기술 발전으로 프로그램이 복잡해져서, 프로세스 작업 하나만으로 프로그램을 실행하기에는 한계가 있어짐. 그렇다고 동일한 프로그램을 여러 개의 프로세스로 만들면, 그만큼 메모리가 낭비되고, cpu를 할당 받는 자원이 중복되는 경우 발생.</li>
</ul>
<h3 id="thread">Thread</h3>
<ul>
<li><p>프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위
<img src="https://velog.velcdn.com/images/kyung_yu/post/a66e52ec-772b-42b9-9eb5-1f7afc3073d7/image.png" alt=""></p>
</li>
<li><p>Multithreading makes multitasking possible when it breaks programs into smaller, executable threads. Each thread has the programming elements needed to execute the main program, and the computer executes each thread one at a time. 
(참고: <a href="https://www.techtarget.com/whatis/definition/multithreading">https://www.techtarget.com/whatis/definition/multithreading</a>)</p>
</li>
<li><p>리눅스에서 코어의 수만 확인할 때는 nproc 명령을 사용하면 된다. 하이퍼-스레딩(hyper-threading)이 사용되고 있을 경우 nproc 명령의 결괏값은 물리적인 코어 수의 2배가 된다.
<br/>Ex. 6코어 12 쓰레드
CPU 한 개는 여러 개의 코어를 가질 수 있고, 코어는 말 그대로 CPU 코어 유닛을 의미한다. 즉, 코어의 개수는 명령어를 메모리에서 뽑아 해석하고 실행하는 반도체 유닛의 개수이다. 6코어가 물리적 코어의 개수라면, 12쓰레드는 논리적 코어 개수를 의미한다. 이 경우 물리적 코어 하나가 스레드 2개 이상을 동시에 실행가다는 의미가 된다. 즉, 운영 체제가 8개의 작업을 동시에 처리할 수 있다는 의미이고, 이를 Hyper-Threading 기술이라고 한다. 
(이때 CPU의 thread != process의 thread. 엄밀히는 CPU의 스레드는 하드웨어적 스레드이고, 프로그램의 스레드는 소프트웨어적 스레드로 구분한다.)</p>
</li>
</ul>
<p>&lt;참고&gt;
<a href="https://inpa.tistory.com/entry/%F0%9F%91%A9%E2%80%8D%F0%9F%92%BB-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%E2%9A%94%EF%B8%8F-%EC%93%B0%EB%A0%88%EB%93%9C-%EC%B0%A8%EC%9D%B4#">https://inpa.tistory.com/entry/👩%E2%80%8D💻-프로세스-⚔%EF%B8%8F-쓰레드-차이#</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Linux 명령어]]></title>
            <link>https://velog.io/@kyung_yu/Linux-commands</link>
            <guid>https://velog.io/@kyung_yu/Linux-commands</guid>
            <pubDate>Sun, 10 Mar 2024 14:08:43 GMT</pubDate>
            <description><![CDATA[<p>! 명령어와 argument는 한 칸 이상의 blank로 구분됨
! cmd + l : terminal 화면 clear
! 프로세스: 동작 중인 프로그램</p>
<h3 id="linux-directory-구조--역할">Linux Directory 구조 &amp; 역할</h3>
<p>-Linux <strong>file system</strong> hierarchy standard (Tree 구조의 규칙)
<img src="https://velog.velcdn.com/images/kyung_yu/post/b9e6f607-09f3-432f-87d3-93943d14cfd3/image.png" alt=""></p>
<ul>
<li><p>Basic Directories
<img src="https://velog.velcdn.com/images/kyung_yu/post/f00d965c-539f-4c80-afb4-222f2b490515/image.png" alt="">
Ex. /libXX/*.so. etc/passwd(로그인 가능한 유저들의 정보가 ASCII text 형태로 있음)</p>
</li>
<li><p>관련 명령어</p>
<ul>
<li>디렉토리 이동: cd &lt;디렉토리 이름&gt;
   Ex. cd / : 최상위 디렉토리(root)로 이동
   (폴더-파란색, 실행 가능한 파일: 초록색(or 흰색), 실행 불가능한 파일: 하늘색)
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cd : home dir로 이동 (root의 sub-dir)</li>
<li>파일 목록 보기: ls &lt;옵션&gt; &lt;파일 이름&gt;
  Ex. ls -l : sub directory의 실제 파일 위치를 바로가기 아이콘(-&gt;)을 사용하는 등을 통해서 알려줌</li>
<li>현재 작업 디렉토리 보기: pwd</li>
</ul>
</li>
</ul>
<h3 id="basic-명령어">Basic 명령어</h3>
<h4 id="명령어-도움말-보기">&gt; 명령어 도움말 보기</h4>
<ul>
<li>man &lt;옵션&gt; keyword(명령어 or 파일이름)
(Ubuntu 20.04 cd /usr/share/man에 매뉴얼 모아져있음)
  <strong>+ option</strong><pre><code>  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-k : 매뉴얼 목록을 검색
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-s [section number] : 입력한 섹션에서 매뉴얼 검색해서 출력 (생략 가능)
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(1) User Commands
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(2) System Calls
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(3) Subroutines
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(4) Devices
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(5) File Formats
  Ex. man (-s) 5 passwd : 5번째 section의 manual에서 passwd 검색해줘</code></pre>  ! space :next page<pre><code>  ! enter : next line
  ! b: backward
  ! q: backward</code></pre></li>
</ul>
<h4 id="파일-목록-보기">&gt; 파일 목록 보기</h4>
<ul>
<li>ls &lt;옵션&gt; &lt;파일|디렉토리&gt;
  <strong>+ option</strong>
  &nbsp;&nbsp;&nbsp;&nbsp;-a : (all) dot(.)로 시작하는 숨겨진 파일까지 모두(ex. config, log나 cache 정보 들어있는)
  &nbsp;&nbsp;&nbsp;&nbsp;-l <file> : (long) file/dir의 자세한 정보(permission, owner, size, last modified, file name, type 등)
  &nbsp;&nbsp;&nbsp;&nbsp;-R : (recursive) 하위 디렉토리까지 모두 출력
  &nbsp;&nbsp;&nbsp;&nbsp;-d : dir&#39;s content가 아닌 dir 자체를 출력
  Ex. ls (자동적으로 ls --color=auto 적용돼서 파란색: 바로가기 symboling link, 초록색: binary 프로그램(실행 ㄱㄴ), 빨간색: special한 permission이 있음)
Ex. ls -l /tmp (파란색: dir)
Ex. ls -ld /tmp (파일 내용 출력 없이 디렉토리 자체의 목록)
Ex. ls -l /etc/passwd /etc/hosts /etc/hostname<br/>
#### > Directory 생성/삭제/이동</li>
<li>mkdir &lt;옵션&gt; <dir_name>
<strong>+ option</strong>
&nbsp;&nbsp;&nbsp;&nbsp;-m : 퍼미션 설정
&nbsp;&nbsp;&nbsp;&nbsp;-p : 존재하지 않는 parent directories까지 같이 생성
Ex. mkdir ~/tmp-dir
Ex. mkdir -p ~/dir/subdir/subsubdir (subdir 없는 상태에서)
Ex. mkdir -m 777 share<br/></li>
<li>rmdir &lt;옵션&gt; <dir_name> 
<strong>+ option</strong>
&nbsp;&nbsp;&nbsp;&nbsp;-p : 비어있는 parent directories를 함께 삭제
Ex. rmdir share
Ex. rmdir -p ~/dir/subdir/subsubdir
! Empty dir만 지울 수 있음!!!<br/></li>
<li>cd <dir_name>
<strong>+ argument</strong>
&nbsp;&nbsp;&nbsp;&nbsp; ~ : Home dir로 이동
&nbsp;&nbsp;&nbsp;&nbsp; .. : 하나 상위 dir로 이동<h4 id="file-복사-이동-삭제">&gt; File 복사, 이동, 삭제</h4>
</li>
<li>cp &lt;옵션&gt; &lt;원본_파일&gt; &lt;목적지_파일&gt;
<strong>+ option</strong>
&nbsp;&nbsp;&nbsp;&nbsp;-i : (interactive) 복사할 때 overwrite할 것인지 질문 (y 가 아닌 모든 문자는 명령어 취소시킴)
&nbsp;&nbsp;&nbsp;&nbsp;-f : 복사할 때 overwrite할 것인지 질문 없이 무조건 덮어쓰기 (default)
&nbsp;&nbsp;&nbsp;&nbsp;-r : dir 전체 복사(하위 dir 까지)
Ex. cp /etc/passwd . (현재 디렉토리에 같은 이름으로 복사해라)
Ex. cp /etc/passwd /etc/hosts conf.d/ (passwd, hosts file을 conf.d dir에 복사해라! file에는 복사 안됨)
Ex. cp -r conf.d conf.d.backup<br/></li>
<li>mv &lt;옵션&gt; &lt;원본파일이름&gt; &lt;새이름(Rename) Or 디렉토리(이동)&gt;
<strong>+ option</strong>
&nbsp;&nbsp;&nbsp;&nbsp;-i : (interactive) 이름을 바꿀 때 overwrite할 것인지 질문
&nbsp;&nbsp;&nbsp;&nbsp;-f : 이름을 바꿀 때 overwrite할 것인지 질문 없이 무조건 덮어쓰기 (default)
Ex. mv hosts hosts.file
Ex. mv passwd /tmp/ (ls /tmp에서 passwd 확인 ㄱㄴ)
Ex. mv conf.d.backup admin.d (dir 이름 바꾸기는 -r 없이 ㄱㄴ)
Ex. mv home/* . (home dir의 모든 파일을 현재 dir로)<br/></li>
<li>rm &lt;옵션&gt; &lt;파일이름 Or Dir이름&gt;
<strong>+ option</strong>
&nbsp;&nbsp;&nbsp;&nbsp;-i : (interactive) 파일 삭제할 때 삭제 여부를 한 번 더 질문
&nbsp;&nbsp;&nbsp;&nbsp;-f : 파일 삭제할 때 질문없이 무조건 삭제 (Linux는 휴지통 없으니까..이런 짓 x)
&nbsp;&nbsp;&nbsp;&nbsp;-r : 하위내용을 포함한 디렉토리를 삭제
Ex. rm -ri admin.d/ (admin.d라는 dir 물어보고 지워라)</li>
</ul>
<h4 id="기타">&gt; 기타</h4>
<ul>
<li>tree (구조 보여줌)</li>
<li>cat <file_name> : file 내용 보여줘라</li>
</ul>
<p>&lt;참고&gt;
<a href="http://daddynkidsmakers.blogspot.com/2018/03/">http://daddynkidsmakers.blogspot.com/2018/03/</a>
<a href="https://www.youtube.com/@ttabae-learn">https://www.youtube.com/@ttabae-learn</a>
<a href="https://seosh817.tistory.com/157#mv%20%5B%ED%8C%8C%EC%9D%BC%EB%AA%85%5D%5B%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC%5D%EC%9D%BC%20%EA%B2%BD%EC%9A%B0-1">https://seosh817.tistory.com/157#mv%20%5B파일명%5D%5B디렉토리%5D일%20경우-1</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Paper Review] Beam Search +@]]></title>
            <link>https://velog.io/@kyung_yu/Beam-Search</link>
            <guid>https://velog.io/@kyung_yu/Beam-Search</guid>
            <pubDate>Wed, 06 Mar 2024 16:46:06 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/kyung_yu/post/02391af5-6397-4e0a-ae90-d84b88def18f/image.png" alt=""></p>
<p>Decoding: 인코딩(encoding)된 벡터를 다시 텍스트로 변환하는 것 (텍스트를 생성하는 과제(text generation)에서는 주어진 토큰 이후에 어떻게 토큰을 출력해야 하는지 방식을 정해야 하므로 디코딩 방법이 필요)</p>
<h3 id="greedy-search">Greedy Search</h3>
<ul>
<li>각 타임 스텝마다 다음에 등장할 토큰으로 가장 높은 확률을 가진 토큰 단 하나만을 계산하여 선택하는 방식 (Sequence로서의 전체적인 문장의 확률값을 보는 것 X)</li>
<li>Usually we decode until the model produces a <END> token</li>
<li>Problem: 해당 타임 스텝에서 최적의 토큰이 전체 문장에서 최적의 토큰은 아닐 수 있다는 문제가 발생 + 뒤로 돌아갈 수 없음</li>
</ul>
<h3 id="exhaustive-search">Exhaustive Search</h3>
<ul>
<li>가능한 모든 sequence 경우의 수를 고려하는 방식
<img src="https://velog.velcdn.com/images/kyung_yu/post/3c373fc1-0abd-4f60-bdea-09eea7784dab/image.png" alt=""></li>
<li><blockquote>
<p>joint probability 최대가 되는 sequence 선택</p>
</blockquote>
</li>
<li><blockquote>
<p>Complexity is O(V^t) where V is vocabulary size, t means time step</p>
</blockquote>
</li>
</ul>
<h3 id="beam-search">Beam Search</h3>
<ul>
<li>On each time step of the decoder, we keep track of the k most probable partial translations (which we call hypothesis) where k is the beam size</li>
<li>A hypothesis y1,...,yt has a score of its log probability:
<img src="https://velog.velcdn.com/images/kyung_yu/post/3d97bc53-a7ce-43e0-b894-eebbe861cc34/image.png" alt=""></li>
<li><blockquote>
<p>joint probability에 log를 취해줌으로써 곱셈이 아니라 덧셈이 됨 </p>
</blockquote>
</li>
<li><blockquote>
<p>이때 log 함수는 단조증가 함수이므로, 확률값과 Score 값이 비례.</p>
</blockquote>
</li>
<li>For each of the k hypotheses, find top k next words and calculate scores</li>
<li>If different hypotheses my produce <END> tokens on different timesteps? When a hypothesis produdces <END>, that hypothesis is complete, then place it aside and continue exploring other hypotheses via beam search
(Usually we continue beam search until:<ul>
<li>we reach time step T (where T is ome pre-defined cutoff), or</li>
<li>we have at least n completed hypotheses (where n is the pre-defined cutoff)</li>
</ul>
</li>
<li>Problem: longer hypotheses have lower scores(항상 -값을 더해주는 형태로 score 계산하므로)
-&gt; Nomalized by length
<img src="https://velog.velcdn.com/images/kyung_yu/post/a8a2edba-cbeb-40ae-8baa-6bfb5354280e/image.png" alt=""></li>
</ul>
<p><img src="https://velog.velcdn.com/images/kyung_yu/post/b9a5ca21-0a59-4ac4-8c78-03bf891211fd/image.png" alt=""></p>
<p>-&gt; beam of size k conatinas a set of active hypotheses
-&gt; At each time step t, the decoder model produce a distribution over the target-language vocabulary V_T. THis produces a large matrix of dimensions k X |V_T|. Conceptually, a (row, column) entry (i,j) in this matrix contains the state obtained from starting from the ith state in the beam and generating the target word corresponding to the jth word of V_T. </p>
<h3 id="gbsgrid-beam-search">GBS(Grid Beam Search)</h3>
<p>  ≒ adding an additional dimension to the beam (base bim size k X the number of constraints)</p>
<ul>
<li>For C constraints, this is accomplished by maintaining C+1 separate beams <strong>OR</strong> banks, B_0, B_1, ..., B_C, wehre B_i groups together hypotheses that have generated (or met) i of the constraints. </li>
<li>Decoding proceeds as with standard beam search, but with the addition of bookkeeping that tracks the number of constraints met by each hypothesis, such that each bank is filled at each time step. </li>
<li>When beam search is complete, the hypothesis returned is the highest-scoring one in bank B_C.
=&gt; Impractical. B/c the beam size changes for every sentence
=&gt; Decoding complexity is linear in the numer of constraints. B/c the effective beam size is k * (C+1)</li>
</ul>
<h3 id="dba-fast-lexically-constrained-decoding-via-dynamic-beam-allocation-for-nmt">DBA (fast lexically-constrained decoding via Dynamic Beam Allocation for NMT)</h3>
<ul>
<li><p>We maintain a single beam of size k, as with unconstrained decoding, and dynamically allocate the slots of this beam across the constraint banks at each time step. 
<img src="https://velog.velcdn.com/images/kyung_yu/post/ffdf6747-5187-454e-abc9-42e79d7b913c/image.png" alt=""></p>
</li>
<li><blockquote>
<p><strong>Algorithm 1</strong>의 KBEST function을 다음과 같이 대체</p>
</blockquote>
</li>
<li><blockquote>
<p>candidates = (current beam, new word, expected constraints set)</p>
</blockquote>
</li>
<li><blockquote>
<p>candidates (1) from the k best items, (2) from extending each hypothesis with all unfilled constraints, (3) from its single-best token (to ensure consideration of partially-completed hypotheses)
-&gt; When allocating a size-k beam across C+1 constraint banks(the portion of the beam reserved for items having met the same number of constraints), where C may be greater than k, we use a <strong>simple allocation strategy</strong>, setting each bin size to [k/C], irrespective of the timestep. Any remaining slots are assigned to the &quot;topmost&quot; or maximally constrained bank, C. But! There is <strong>bank adjustment</strong>. An overfilled bank is one that has been allocated more slots than it has candidates to fill. Each such overfilled bank, in turn, gives its extra allotments to banks that have more candidates than slots, looking first to its immediate neighbors, and moving outward until it has distributed all of its extra slots. In this way, the beam is filled, up to the minimumu of the beam size or the number of candidates.  </p>
</blockquote>
</li>
<li><p>Hypotheses are not allowed to generate the end-of-sentence token, </s>, unless they have met all of their constraints. when beam search is finished, the highest-scoring completed item is returned. 
<img src="https://velog.velcdn.com/images/kyung_yu/post/92a1bba5-a6b7-4516-b34e-261152c7f08c/image.png" alt=""></p>
</li>
<li><blockquote>
<p>회색으로 칠해진 word가 KBEST-DBA에서 candidates list에 포함한 beam h의 후보 word</p>
</blockquote>
</li>
</ul>
<p>&lt;참고&gt;
<a href="https://aws.amazon.com/blogs/machine-learning/train-neural-machine-translation-models-with-sockeye/">https://aws.amazon.com/blogs/machine-learning/train-neural-machine-translation-models-with-sockeye/</a>
<a href="https://terms.naver.com/entry.naver?docId=6653720&amp;cid=69974&amp;categoryId=69974">https://terms.naver.com/entry.naver?docId=6653720&amp;cid=69974&amp;categoryId=69974</a>
<a href="https://blog.naver.com/eungang0301/223242740713">https://blog.naver.com/eungang0301/223242740713</a>
<a href="https://www.boostcourse.org/ai330/lecture/1455757?isDesc=false">https://www.boostcourse.org/ai330/lecture/1455757?isDesc=false</a>
<a href="https://showmiso.tistory.com/156">https://showmiso.tistory.com/156</a>
<a href="https://arxiv.org/pdf/1804.06609.pdf">https://arxiv.org/pdf/1804.06609.pdf</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Anaconda(Miniconda)] 가상환경]]></title>
            <link>https://velog.io/@kyung_yu/AnacondaMiniconda-%EA%B0%80%EC%83%81%ED%99%98%EA%B2%BD</link>
            <guid>https://velog.io/@kyung_yu/AnacondaMiniconda-%EA%B0%80%EC%83%81%ED%99%98%EA%B2%BD</guid>
            <pubDate>Mon, 04 Mar 2024 15:59:08 GMT</pubDate>
            <description><![CDATA[<p>참고: <a href="https://chancoding.tistory.com/85">https://chancoding.tistory.com/85</a></p>
<h3 id="in-vs-code">In VS code</h3>
<p>conda create -n cralwer python=3.11y #cralwer라는 이름의 가상환경 생성
Conda activate crawler #가상환경 실행
Which python #가상환경 확인</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Introduction to Unix & Linux]]></title>
            <link>https://velog.io/@kyung_yu/Introduction-to-Unix-Linux</link>
            <guid>https://velog.io/@kyung_yu/Introduction-to-Unix-Linux</guid>
            <pubDate>Fri, 01 Mar 2024 15:08:08 GMT</pubDate>
            <description><![CDATA[<p><strong>REFERENCE</strong>: 시스템소프트웨어 (<a href="http://www.kocw.net/home/cview.do?cid=8562026226b093ea">http://www.kocw.net/home/cview.do?cid=8562026226b093ea</a>)</p>
<ul>
<li>UNIX<ul>
<li>다중 사용자 및 다중 작업 지원 (For 대형 컴퓨터. 서버급)</li>
<li>높은 이식성 (어셈블리 언어로 만드는 게 기존 방식이었는데, 기본적으로 고급언어인 C언어로 만들어짐-&gt;머신독립적인 방식)</li>
<li>소스 코드 공개</li>
<li>프로그램 개발에 용이</li>
</ul>
</li>
</ul>
<ul>
<li>Linux <ul>
<li>PC를 비롯한 다양한 컴퓨터 환경에서 사용 가능한 UNIX 운영체제</li>
<li>Linus Torvalds를 중심으로 Internet 상의 많은 개발자의 참여로 kernel이 개발됨</li>
<li>Free Software + 모듈화</li>
<li>GNU General Public License (GPL)에 따라 공개로 배포
  -&gt; 모든 프로그램의 소스 또한 공개 
  -&gt; GNU 정신에 따라 변경한 내용도 공개해야</li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Parameter]]></title>
            <link>https://velog.io/@kyung_yu/Parameter</link>
            <guid>https://velog.io/@kyung_yu/Parameter</guid>
            <pubDate>Fri, 01 Mar 2024 14:37:35 GMT</pubDate>
            <description><![CDATA[<p><strong>REFERENCE:</strong> [Fast Campus] 세계 3등에게 배우는 실무 밀착 데이터 시각화 올인원 패키지</p>
<p><strong>Parameter</strong>는 데이터셋에 속한 값이 아닌, 사용자가 워크시트, 대시보드를 컨트롤 할 수 있게 해주는 변수를 의미한다. 
(<em>참고: <a href="https://blog.naver.com/llyjin-/223088885357">https://blog.naver.com/llyjin-/223088885357</a></em>)
이때 parameter는 반드시 계산된 필드에 넣고, worksheet에 적용할 때만 사용할 수 있다. 
Parameter를 통해서 뷰의 세부 수준을 조정할 수 있고, 측정값을 변경할 수 있으며, 컬러를 변경, 데이터를 하이라이트, what-if 시나리오 분석과 디스플레이 뷰 변경이 가능하다. 
(<em>What-if 시나리오 분석 참고: <a href="https://brunch.co.kr/@cheonmyung/91">https://brunch.co.kr/@cheonmyung/91</a></em>)</p>
<p><img src="https://velog.velcdn.com/images/kyung_yu/post/4d306c92-7b9b-4a86-9bbc-4cfe2dfab7d0/image.gif" alt=""></p>
<ol>
<li>Select Granularity, Select a measure 라는 이름의 Parameter(string, list)를 만들고,</li>
<li>이를 포함하고 있는 Calculated Field를 CASE 함수를 이용해서 각각 만들어 준 뒤, </li>
<li>차원에 지정해주는 Field는 행선반에, 측정값에 지정해주는 Field는 열선반에 얹는다. </li>
</ol>
<p><img src="https://velog.velcdn.com/images/kyung_yu/post/7cec3afb-b272-4ff3-8c14-78f4a7d70079/image.png" alt="">
이 그림 처럼 Label에 넣고 싶은 모든 변수는 Marks 카드, 특히 Label에 드래그해놔야 함. 
(Dimension: 차원 지정해주는 Caculated Field,
Measures: 측정값 지정해주는 Caculated Field)</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[User Interaction] Filter & Highlight Actions Demo]]></title>
            <link>https://velog.io/@kyung_yu/User-Interaction-Filter-Highlight-Actions-Demo</link>
            <guid>https://velog.io/@kyung_yu/User-Interaction-Filter-Highlight-Actions-Demo</guid>
            <pubDate>Fri, 23 Feb 2024 17:06:38 GMT</pubDate>
            <description><![CDATA[<p><strong>REFERENCE:</strong> [Fast Campus] 세계 3등에게 배우는 실무 밀착 데이터 시각화 올인원 패키지</p>
<ul>
<li>Filtering by Region, Year, Category (When Click Sales Trend) </li>
<li>Highlighting by clicking Sales Trend</li>
</ul>
<p><img src="https://velog.velcdn.com/images/kyung_yu/post/4658623b-f5fa-4353-9ccb-e0c9758fb360/image.gif" alt=""></p>
<figcaption style="text-align:center; font-size:15px; color:#808080; margin-top:10px">
    Tooltip 지우기 전
  </figcaption>

<p><img src="https://velog.velcdn.com/images/kyung_yu/post/cd0ee339-6662-4a7f-a1b6-ed5c309fe215/image.gif" alt=""></p>
<figcaption style="text-align:center; font-size:15px; color:#808080; margin-top:10px">
    Tooltip 정리하고 난 후
  </figcaption>

<p>Interaction Dashboard는 정보량이 많기도 하고, 이것저것 예쁘게 꾸미다보면 min(0)처럼 의미없는 값들도 많아서 마우스 오버할 때 추가로 정보가 나오지 않도록 하는 것이 더 깔끔한 듯</p>
<p>근데 왜 라인은 제대로 그려져있는데 영역 부분에 빈 공간이 생기는지 원인 파악이 좀 필요해 보임</p>
<p>원래는 Worksheet 하나하나 쪼개서 어떻게 했는지 설명을 넣어보려고 했는데 velog 수정하다가 Worksheet 파트가 싹 다 날라갔기 때문에 오늘은 일단 여기까지...</p>
<p>+<em>2023.03.01</em></p>
<p><img src="https://velog.velcdn.com/images/kyung_yu/post/0eb65230-224d-44ef-941d-988e0199615c/image.gif" alt="">
처음에는 빈 공간이 데이터가 없어서 생겼나 했는데 그건 아니고...Sales Trend Worksheet의 Filters에 빈 공간이 생긴 (Category, 월, 연도)에 해당하는 데이터를 제외하는 Exclusions이 들어가 있었음. 해당 필터를 제거하니 빈 공간 사라지고 멀쩡하게 작동</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Kernel? Shell? Terminal?]]></title>
            <link>https://velog.io/@kyung_yu/Kernel-Shell-Terminal</link>
            <guid>https://velog.io/@kyung_yu/Kernel-Shell-Terminal</guid>
            <pubDate>Thu, 22 Feb 2024 13:27:03 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/kyung_yu/post/f4d8e4fd-eb3e-457c-981f-c52248408537/image.png" alt=""></p>
<p>이때 System Software는 컴퓨터 시스템의 개별 하드웨어(HW) 요소들을 직접 제어, 통합, 관리하는 소프트웨어로서 사용자가 컴퓨터 하드웨어의 물리적인 특성이나 구조를 전부 알지 못하더라도 컴퓨터 시스템을 사용할 수 있게 도와주는 역할을 하는 소프트웨어를 말한다. (Machine Dependent: Instruction Set Architecture (ISA)에 의존적)
(System Software 구성 요소 참고: <a href="https://devpad.tistory.com/119">https://devpad.tistory.com/119</a>)</p>
<p>System Software에는 운영체제 (Operating System, 좁은 의미의 System Software)가 포함되는데, 커널 (Kernel)은 이러한 운영체제의 핵심적인 역할을 담당한다. 
<img src="https://velog.velcdn.com/images/kyung_yu/post/66e85996-aab1-46c2-9fda-22f37a8caa80/image.png" alt="">
운영체제에는 User Mode와 Kernel Mode가 있다. 사용자 모드는 응용프로그램이 사용하는 영역이고, 커널 모드는 운영체제가 사용하는 영역으로 특정 권한이 필요한 명령어 수행이 가능하다. 이렇게 영역이 나뉜 이유는 보안을 위해서 중요 데이터에 영향을 끼칠 수 있는 명령어는 커널 모드에서만 수행되도록 하기 위함이다.
(운영체제와 커널의 역할 참고: <a href="https://smallrich.tistory.com/77">https://smallrich.tistory.com/77</a>)</p>
<p><strong>BUT kernel은 사용자와 직접 상호작용하지 않음!</strong>
-&gt; 운영체제와 사용자 간의 인터페이스, Shell로 운영체제와 사용자가 상호 작용함!
(Unix 및 Unix-like 운영 체제의 터미널에서 사용하는 Shell 종류 참고: <a href="https://blog.naver.com/jdockko1/222968207191">https://blog.naver.com/jdockko1/222968207191</a>)</p>
]]></description>
        </item>
    </channel>
</rss>