<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Garis Kode Community]]></title><description><![CDATA[Membawa para Developer untuk bekerja sama mencari pengalaman dari komunitas untuk komunitas]]></description><link>https://gariskode.com</link><image><url>https://cdn.hashnode.com/res/hashnode/image/upload/v1690188016717/bea5ST70X.png</url><title>Garis Kode Community</title><link>https://gariskode.com</link></image><generator>RSS for Node</generator><lastBuildDate>Mon, 07 Sep 2026 00:47:46 GMT</lastBuildDate><atom:link href="https://gariskode.com/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Publish and Subscribe Data with Wemos D1 Mini Using MQTT Protocol]]></title><description><![CDATA[Introduction
The Wemos D1 Mini is a compact, Wi-Fi-enabled development board based on the ESP8266 chip, making it a popular choice for IoT projects. This guide demonstrates how to use the Wemos D1 Mini to both publish and subscribe to data using the ...]]></description><link>https://gariskode.com/publish-and-subscribe-data-with-wemos-d1-mini-using-mqtt-protocol</link><guid isPermaLink="true">https://gariskode.com/publish-and-subscribe-data-with-wemos-d1-mini-using-mqtt-protocol</guid><category><![CDATA[wemos]]></category><category><![CDATA[mqtt]]></category><category><![CDATA[arduino]]></category><category><![CDATA[ArduinoIDE]]></category><category><![CDATA[sensors]]></category><category><![CDATA[Actuator]]></category><dc:creator><![CDATA[M Ishlah Buana Angkasa]]></dc:creator><pubDate>Thu, 15 Aug 2024 16:39:31 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1723739593810/a08b693c-1e23-4705-bb1f-e619461e8826.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-introduction">Introduction</h2>
<p>The Wemos D1 Mini is a compact, Wi-Fi-enabled development board based on the ESP8266 chip, making it a popular choice for IoT projects. This guide demonstrates how to use the Wemos D1 Mini to both publish and subscribe to data using the MQTT protocol. By following this guide, you will learn how to set up the Wemos D1 Mini to collect data from sensors, publish that data to an MQTT broker, and subscribe to a topic to receive and act upon incoming messages.</p>
<h3 id="heading-overview-of-wemos-d1-mini">Overview of Wemos D1 Mini</h3>
<p>The Wemos D1 Mini is a small development board that offers built-in Wi-Fi capabilities, making it ideal for Internet of Things (IoT) projects. It is based on the ESP8266 chip, which provides the power and versatility needed for various applications, including data acquisition, remote monitoring, and control systems.</p>
<p>Key features include:</p>
<ul>
<li><p><strong>Wi-Fi Connectivity:</strong> Connect to wireless networks for remote data transmission and control.</p>
</li>
<li><p><strong>Compact Size:</strong> Ideal for projects with space constraints.</p>
</li>
<li><p><strong>Arduino IDE Compatibility:</strong> Program the Wemos D1 Mini using the popular Arduino IDE, which is beginner-friendly and widely supported.</p>
</li>
<li><p><strong>Breadboard-Friendly:</strong> Easy integration with breadboards for prototyping.</p>
</li>
</ul>
<h3 id="heading-explanation-of-mqtt-protocol">Explanation of MQTT Protocol</h3>
<p>MQTT (Message Queuing Telemetry Transport) is a lightweight messaging protocol designed for small sensors and mobile devices in low-bandwidth, high-latency, or unreliable networks. MQTT follows a publish/subscribe model, where clients publish messages to topics, and other clients subscribe to those topics to receive the messages.</p>
<p>Key concepts include:</p>
<ul>
<li><p><strong>Broker:</strong> The server that manages all the communication between clients.</p>
</li>
<li><p><strong>Topics:</strong> Named channels through which messages are sent.</p>
</li>
<li><p><strong>Quality of Service (QoS):</strong> Levels that define the guarantee of message delivery.</p>
</li>
</ul>
<h3 id="heading-importance-of-data-publishing-and-subscribing">Importance of Data Publishing and Subscribing</h3>
<p>In MQTT, data is exchanged between devices using the publish/subscribe model. A device can publish data to a specific topic, and any device subscribed to that topic will receive the data. This method allows for real-time communication and decouples the data producers from consumers, enhancing scalability and efficiency in IoT systems.</p>
<h2 id="heading-hardware-and-software-requirements">Hardware and Software Requirements</h2>
<h3 id="heading-necessary-components">Necessary Components</h3>
<ul>
<li><p><strong>Wemos D1 Mini:</strong> The main microcontroller board used for both publishing and subscribing to data.</p>
</li>
<li><p><strong>Sensors and Actuators:</strong> Sensors (e.g., temperature, humidity) for data collection and actuators (e.g., LEDs, relays) for responding to received data.</p>
</li>
</ul>
<h3 id="heading-software-tools">Software Tools</h3>
<ul>
<li><p><strong>Arduino IDE:</strong> The primary development environment for programming the Wemos D1 Mini.</p>
</li>
<li><p><strong>MQTT Broker (e.g., Mosquitto):</strong> The server that handles the routing of messages between MQTT clients.</p>
</li>
<li><p><strong>MQTT Client Tools:</strong> Tools like MQTT.fx or MQTT Explorer for testing and monitoring the MQTT communication.</p>
</li>
</ul>
<h2 id="heading-setting-up-the-development-environment">Setting Up the Development Environment</h2>
<h4 id="heading-installing-arduino-ide"><strong>Installing Arduino IDE</strong></h4>
<ol>
<li><p><strong>Download and Install:</strong> Obtain the Arduino IDE from the official Arduino website.</p>
</li>
<li><p><strong>Configure for ESP8266:</strong> Add support for the ESP8266 by including the appropriate board manager URL and installing the ESP8266 package via the Boards Manager.</p>
</li>
</ol>
<h4 id="heading-adding-required-libraries"><strong>Adding Required Libraries</strong></h4>
<ul>
<li><p><strong>ESP8266WiFi:</strong> This library allows the Wemos D1 Mini to connect to Wi-Fi networks.</p>
</li>
<li><p><strong>PubSubClient:</strong> A library for MQTT communication, enabling the Wemos D1 Mini to publish and subscribe to MQTT topics.</p>
</li>
</ul>
<p>Install these libraries using the Arduino IDE’s Library Manager.</p>
<h4 id="heading-configuring-the-mqtt-broker"><strong>Configuring the MQTT Broker</strong></h4>
<p>To enable MQTT communication, set up an MQTT broker like Mosquitto:</p>
<ol>
<li><p><strong>Install Mosquitto:</strong> Follow installation instructions for your operating system.</p>
</li>
<li><p><strong>Configure Broker:</strong> Customize the broker configuration as needed, including security settings, topic management, and user authentication.</p>
</li>
<li><p><strong>Start the Broker:</strong> Ensure that the Mosquitto service is running and accessible.</p>
</li>
</ol>
<h2 id="heading-basic-concepts-of-mqtt-protocol">Basic Concepts of MQTT Protocol</h2>
<h4 id="heading-mqtt-architecture"><strong>MQTT Architecture</strong></h4>
<p>In MQTT, communication is managed by a central broker that connects multiple clients. Clients can publish messages to topics, and the broker ensures that these messages are delivered to all clients subscribed to the corresponding topics.</p>
<h4 id="heading-clients"><strong>Clients</strong></h4>
<p>In this project, the Wemos D1 Mini acts as an MQTT client that can both publish data to and subscribe to topics managed by the MQTT broker.</p>
<h4 id="heading-broker"><strong>Broker</strong></h4>
<p>The MQTT broker is the intermediary that handles all message routing between clients. It ensures that messages published to a topic are delivered to all subscribed clients.</p>
<h4 id="heading-topics-and-messages"><strong>Topics and Messages</strong></h4>
<p>Messages in MQTT are organized into topics. Devices publish messages to topics, and other devices can subscribe to these topics to receive the messages. Topics are hierarchical and can be structured to organize data efficiently.</p>
<h4 id="heading-quality-of-service-qos-levels"><strong>Quality of Service (QoS) Levels</strong></h4>
<p>MQTT provides three QoS levels:</p>
<ul>
<li><p><strong>QoS 0:</strong> At most once delivery, where the message is delivered once with no confirmation.</p>
</li>
<li><p><strong>QoS 1:</strong> At least once delivery, where the message is guaranteed to be delivered at least once but may be delivered multiple times.</p>
</li>
<li><p><strong>QoS 2:</strong> Exactly once delivery, ensuring the message is delivered only once and with confirmation from the receiver.</p>
</li>
</ul>
<h2 id="heading-programming-the-wemos-d1-for-data-publishing-and-subscribing">Programming the Wemos D1 for Data Publishing and Subscribing</h2>
<h4 id="heading-connecting-sensors-and-actuators-to-wemos-d1"><strong>Connecting Sensors and Actuators to Wemos D1</strong></h4>
<p>First, connect your sensors and actuators to the Wemos D1 Mini:</p>
<ul>
<li><p><strong>Sensors:</strong> Connect sensors to the appropriate GPIO pins. For instance, a temperature sensor could be connected to a digital pin like D1.</p>
</li>
<li><p><strong>Actuators:</strong> Connect actuators (e.g., an LED) to other GPIO pins to allow the Wemos D1 Mini to act on received data.</p>
</li>
</ul>
<h4 id="heading-writing-sketch-for-data-collection"><strong>Writing Sketch for Data Collection</strong></h4>
<p>Create an Arduino sketch that reads data from the connected sensor:</p>
<pre><code class="lang-cpp"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;ESP8266WiFi.h&gt;</span></span>
<span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;PubSubClient.h&gt;</span></span>

<span class="hljs-keyword">const</span> <span class="hljs-keyword">char</span>* ssid = <span class="hljs-string">"your_SSID"</span>;
<span class="hljs-keyword">const</span> <span class="hljs-keyword">char</span>* password = <span class="hljs-string">"your_PASSWORD"</span>;
<span class="hljs-keyword">const</span> <span class="hljs-keyword">char</span>* mqtt_server = <span class="hljs-string">"your_MQTT_SERVER"</span>;

WiFiClient espClient;
<span class="hljs-function">PubSubClient <span class="hljs-title">client</span><span class="hljs-params">(espClient)</span></span>;

<span class="hljs-keyword">const</span> <span class="hljs-keyword">int</span> sensorPin = A0; <span class="hljs-comment">// Analog sensor connected to pin A0</span>
<span class="hljs-keyword">const</span> <span class="hljs-keyword">int</span> actuatorPin = D1; <span class="hljs-comment">// Actuator connected to pin D1</span>

<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">setup</span><span class="hljs-params">()</span> </span>{
  pinMode(actuatorPin, OUTPUT);
  Serial.begin(<span class="hljs-number">115200</span>);
  setup_wifi();
  client.setServer(mqtt_server, <span class="hljs-number">1883</span>);
  client.setCallback(callback);
  reconnect();
}

<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">setup_wifi</span><span class="hljs-params">()</span> </span>{
  WiFi.begin(ssid, password);
  <span class="hljs-keyword">while</span> (WiFi.status() != WL_CONNECTED) {
    delay(<span class="hljs-number">500</span>);
    Serial.print(<span class="hljs-string">"."</span>);
  }
  Serial.println(<span class="hljs-string">"WiFi connected"</span>);
}

<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">reconnect</span><span class="hljs-params">()</span> </span>{
  <span class="hljs-keyword">while</span> (!client.connected()) {
    <span class="hljs-keyword">if</span> (client.connect(<span class="hljs-string">"WemosClient"</span>)) {
      client.subscribe(<span class="hljs-string">"topic/sub"</span>);  <span class="hljs-comment">// Subscribe to the topic for receiving data</span>
    } <span class="hljs-keyword">else</span> {
      delay(<span class="hljs-number">5000</span>);
    }
  }
}

<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">loop</span><span class="hljs-params">()</span> </span>{
  <span class="hljs-keyword">if</span> (!client.connected()) {
    reconnect();
  }
  client.loop();

  <span class="hljs-keyword">int</span> sensorValue = analogRead(sensorPin);
  String payload = <span class="hljs-string">"Sensor value: "</span> + String(sensorValue);
  client.publish(<span class="hljs-string">"topic/pub"</span>, payload.c_str());  <span class="hljs-comment">// Publish sensor data to the topic</span>

  delay(<span class="hljs-number">5000</span>); <span class="hljs-comment">// Delay between readings and publishing</span>
}
</code></pre>
<p>This sketch reads data from a sensor connected to <code>A0</code>, publishes the data to an MQTT topic, and subscribes to another topic to receive commands.</p>
<h4 id="heading-implementing-mqtt-callback-for-subscribing"><strong>Implementing MQTT Callback for Subscribing</strong></h4>
<p>The callback function processes incoming messages from the subscribed topic and can trigger an actuator:</p>
<pre><code class="lang-cpp"><span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">callback</span><span class="hljs-params">(<span class="hljs-keyword">char</span>* topic, byte* payload, <span class="hljs-keyword">unsigned</span> <span class="hljs-keyword">int</span> length)</span> </span>{
  Serial.print(<span class="hljs-string">"Message arrived ["</span>);
  Serial.print(topic);
  Serial.print(<span class="hljs-string">"]: "</span>);

  String message;
  <span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> i = <span class="hljs-number">0</span>; i &lt; length; i++) {
    message += (<span class="hljs-keyword">char</span>)payload[i];
  }

  Serial.println(message);

  <span class="hljs-comment">// Example: Act on incoming data (e.g., turn on/off an LED)</span>
  <span class="hljs-keyword">if</span> (message == <span class="hljs-string">"ON"</span>) {
    digitalWrite(actuatorPin, HIGH);  <span class="hljs-comment">// Turn on actuator</span>
  } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (message == <span class="hljs-string">"OFF"</span>) {
    digitalWrite(actuatorPin, LOW);   <span class="hljs-comment">// Turn off actuator</span>
  }
}
</code></pre>
<p>This callback function listens for messages on the subscribed topic, and if it receives "ON," it turns on an actuator (e.g., an LED), and if it receives "OFF," it turns the actuator off.</p>
<h3 id="heading-testing-and-debugging"><strong>Testing and Debugging</strong></h3>
<h4 id="heading-initial-tests-for-connectivity"><strong>Initial Tests for Connectivity</strong></h4>
<p>Verify that the Wemos D1 Mini can connect to your Wi-Fi network and the MQTT broker. Use the Serial Monitor to check for successful connections.</p>
<h4 id="heading-verifying-data-publishing-and-subscribing"><strong>Verifying Data Publishing and Subscribing</strong></h4>
<p>Use an MQTT client tool like MQTT.fx or MQTT Explorer to:</p>
<ul>
<li><p><strong>Monitor the Published Data:</strong> Subscribe to the topic where the Wemos D1 Mini publishes sensor data and verify the messages.</p>
</li>
<li><p><strong>Test Subscribing:</strong> Send commands (e.g., "ON" or "OFF") to the topic the Wemos D1 Mini is subscribed to and observe the behavior of the connected actuator.</p>
</li>
</ul>
<h4 id="heading-common-issues-and-troubleshooting"><strong>Common Issues and Troubleshooting</strong></h4>
<ul>
<li><p><strong>Wi-Fi Connection Issues:</strong> Ensure the correct SSID and password are used, and that the Wi-Fi signal is strong.</p>
</li>
<li><p><strong>MQTT Connection Issues:</strong> Verify the broker's address, port, and ensure that the broker is running and accessible.</p>
</li>
<li><p><strong>Data Not Published/Subscribed:</strong> Check the topic names and ensure that both publishing and subscribing are configured correctly in the code.</p>
</li>
</ul>
<h3 id="heading-conclusion"><strong>Conclusion</strong></h3>
<h4 id="heading-summary-of-steps"><strong>Summary of Steps</strong></h4>
<p>This guide covered how to use the Wemos D1 Mini to both publish and subscribe to data using the MQTT protocol. We started by setting up the development environment, connecting sensors and actuators, programming the Wemos D1 Mini, and then testing the entire setup.</p>
<h4 id="heading-benefits-of-using-mqtt-with-wemos-d1-mini"><strong>Benefits of Using MQTT with Wemos D1 Mini</strong></h4>
<ul>
<li><p><strong>Real-Time Data Exchange:</strong> Immediate and reliable communication between devices.</p>
</li>
<li><p><strong>Scalability:</strong> Easily add more devices without significant changes to the system.</p>
</li>
<li><p><strong>Efficiency:</strong> Lightweight and efficient communication, making it ideal for IoT projects.</p>
</li>
</ul>
<h4 id="heading-future-enhancements-and-projects"><strong>Future Enhancements and Projects</strong></h4>
<p>Possible extensions of this project include:</p>
<ul>
<li><p><strong>Security Enhancements:</strong> Implement SSL/TLS for secure communication over MQTT.</p>
</li>
<li><p><strong>Advanced Automation:</strong> Use more complex logic to automate actions based on incoming data.</p>
</li>
<li><p><strong>Cloud Integration:</strong> Send data to cloud platforms for analysis, storage, or integration with other services.</p>
</li>
</ul>
<p>These improvements can help you create more advanced, secure, and feature-rich IoT solutions.</p>
]]></content:encoded></item><item><title><![CDATA[Connecting Laravel to the IoT Device with MQTT Integration]]></title><description><![CDATA[In the era of the Internet of Things (IoT), connecting various devices and systems is becoming increasingly crucial for creating seamless, smart environments. MQTT (Message Queuing Telemetry Transport) is a lightweight messaging protocol designed for...]]></description><link>https://gariskode.com/connecting-laravel-to-the-iot-device-with-mqtt-integration</link><guid isPermaLink="true">https://gariskode.com/connecting-laravel-to-the-iot-device-with-mqtt-integration</guid><category><![CDATA[mqtt]]></category><category><![CDATA[iot]]></category><category><![CDATA[Laravel]]></category><category><![CDATA[PHP]]></category><dc:creator><![CDATA[Fajar Chaniago]]></dc:creator><pubDate>Thu, 15 Aug 2024 16:09:59 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/VHTVtYTNr8M/upload/46e7d8913b03115000b30736bcaae8cf.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In the era of the Internet of Things (IoT), connecting various devices and systems is becoming increasingly crucial for creating seamless, smart environments. MQTT (Message Queuing Telemetry Transport) is a lightweight messaging protocol designed for low-bandwidth, high-latency, or unreliable networks, making it an ideal choice for IoT applications. Integrating MQTT with a web application framework like Laravel enables developers to connect and communicate with IoT devices efficiently.</p>
<p>This article will guide you through the process of integrating MQTT into a Laravel application, allowing it to communicate with IoT devices seamlessly.</p>
<h2 id="heading-why-mqtt-for-iot">Why MQTT for IoT?</h2>
<p>MQTT is specifically designed for constrained devices and unreliable networks. Its publish/subscribe model allows for efficient, real-time communication between multiple devices and applications, making it a preferred protocol for IoT projects.</p>
<p>Key features of MQTT include:</p>
<ul>
<li><p><strong>Lightweight and Efficient</strong>: MQTT minimizes network bandwidth and device resource requirements.</p>
</li>
<li><p><strong>Scalable</strong>: Suitable for large-scale IoT deployments with millions of devices.</p>
</li>
<li><p><strong>Low Power Usage</strong>: Ideal for devices with limited battery life.</p>
</li>
</ul>
<h2 id="heading-prerequisites">Prerequisites</h2>
<p>Before diving into the integration, ensure you have the following:</p>
<ul>
<li><p>A Laravel application set up on your local environment.</p>
</li>
<li><p>An MQTT broker (such as Mosquitto) running locally or accessible via the network.</p>
</li>
<li><p>Basic knowledge of PHP and Laravel.</p>
</li>
</ul>
<h3 id="heading-step-1-install-the-mqtt-client-package">Step 1: Install the MQTT Client Package</h3>
<p>The first step is to install an MQTT client library that integrates well with Laravel. For this tutorial, we'll use the <code>php-mqtt/laravel-client</code> package.</p>
<p>Run the following command in your terminal to install the package:</p>
<pre><code class="lang-bash">composer require php-mqtt/laravel-client
</code></pre>
<h3 id="heading-step-2-publish-the-configuration-file">Step 2: Publish the Configuration File</h3>
<p>Once the package is installed, publish the configuration file to customize the MQTT settings according to your environment.</p>
<pre><code class="lang-bash">php artisan vendor:publish --provider=<span class="hljs-string">"PhpMqtt\Client\MqttClientServiceProvider"</span> --tag=<span class="hljs-string">"config"</span>
</code></pre>
<p>This command will create an <code>mqtt-client.php</code> configuration file in the <code>config</code> directory of your Laravel application.</p>
<p>You can also set these values in your <code>.env</code> file:</p>
<pre><code class="lang-bash">MQTT_HOST=mqtt.example.com
MQTT_PORT=1883
MQTT_AUTH_USERNAME=your_username
MQTT_AUTH_PASSWORD=your_password
MQTT_CLIENT_ID=your_client_id
MQTT_ENABLE_LOGGING=<span class="hljs-literal">true</span>
</code></pre>
<h3 id="heading-step-3-implement-mqtt-publishing">Step 3: Implement MQTT Publishing</h3>
<p>Now, let’s create a simple controller to publish messages to an MQTT topic. This will allow your Laravel application to send messages to your IoT devices.</p>
<p>Create a controller using Artisan:</p>
<pre><code class="lang-bash">php artisan make:controller MqttController
</code></pre>
<p>In the <code>MqttController.php</code> file, add the following code:</p>
<pre><code class="lang-php"><span class="hljs-meta">&lt;?php</span>

<span class="hljs-keyword">namespace</span> <span class="hljs-title">App</span>\<span class="hljs-title">Http</span>\<span class="hljs-title">Controllers</span>;

<span class="hljs-keyword">use</span> <span class="hljs-title">Illuminate</span>\<span class="hljs-title">Http</span>\<span class="hljs-title">Request</span>;
<span class="hljs-keyword">use</span> <span class="hljs-title">PhpMqtt</span>\<span class="hljs-title">Client</span>\<span class="hljs-title">Facades</span>\<span class="hljs-title">MQTT</span>;

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MqttController</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Controller</span>
</span>{
    <span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">publish</span>(<span class="hljs-params">Request $request</span>)
    </span>{
        $topic = $request-&gt;input(<span class="hljs-string">'topic'</span>);
        $message = $request-&gt;input(<span class="hljs-string">'message'</span>);

        $mqtt = MQTT::connection();
        $mqtt-&gt;publish($topic, $message);
        $mqtt-&gt;disconnect();

        <span class="hljs-keyword">return</span> response()-&gt;json([<span class="hljs-string">'status'</span> =&gt; <span class="hljs-string">'Message published'</span>]);
    }
}
</code></pre>
<p>You can now send a POST request to this controller's method to publish messages to a specific topic. for example:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723737539594/c6a10c59-650b-4316-8b60-16aee69dbae1.png" alt /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723737554933/ecc6e802-ca74-4f1b-a6cc-2e73fe7daa34.png" alt /></p>
<h3 id="heading-step-4-implement-mqtt-subscription">Step 4: Implement MQTT Subscription</h3>
<p>To receive messages from an IoT device, you need to subscribe to a topic. The best way to continuously receive and process messages is by creating a long-running Artisan command.</p>
<p>Generate a new Artisan command:</p>
<pre><code class="lang-bash">php artisan make:<span class="hljs-built_in">command</span> MqttSubscribe
</code></pre>
<p>Then, update the command to subscribe to an MQTT topic:</p>
<pre><code class="lang-bash">&lt;?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use PhpMqtt\Client\Facades\MQTT;

class MqttSubscribe extends Command
{
    protected <span class="hljs-variable">$signature</span> = <span class="hljs-string">'mqtt:subscribe {topic}'</span>;

    protected <span class="hljs-variable">$description</span> = <span class="hljs-string">'Subscribe to a given MQTT topic and display messages in the terminal'</span>;

    public <span class="hljs-keyword">function</span> <span class="hljs-function"><span class="hljs-title">__construct</span></span>()
    {
        parent::__construct();
    }

    public <span class="hljs-keyword">function</span> <span class="hljs-function"><span class="hljs-title">handle</span></span>()
    {
        <span class="hljs-variable">$topic</span> = <span class="hljs-variable">$this</span>-&gt;argument(<span class="hljs-string">'topic'</span>);

        <span class="hljs-variable">$mqtt</span> = MQTT::connection();

        <span class="hljs-variable">$this</span>-&gt;info(<span class="hljs-string">"Subscribing to topic: {<span class="hljs-variable">$topic</span>}"</span>);

        <span class="hljs-variable">$mqtt</span>-&gt;subscribe(<span class="hljs-variable">$topic</span>, <span class="hljs-keyword">function</span> (string <span class="hljs-variable">$topic</span>, string <span class="hljs-variable">$message</span>) {
            <span class="hljs-variable">$this</span>-&gt;info(sprintf(<span class="hljs-string">"Received message on topic [%s]: %s"</span>, <span class="hljs-variable">$topic</span>, <span class="hljs-variable">$message</span>));
        });

        <span class="hljs-variable">$mqtt</span>-&gt;loop(<span class="hljs-literal">true</span>);
    }
}
</code></pre>
<p>Run this command in your terminal to start listening for messages:</p>
<pre><code class="lang-bash">php artisan mqtt:subscribe lamp
</code></pre>
<h3 id="heading-step-5-testing-the-mqtt-integration">Step 5: Testing the MQTT Integration</h3>
<p>With your MQTT publisher and subscriber set up, you can now test the integration. Use tools like Postman to send POST requests to the <code>publish</code> endpoint of your Laravel application, and observe the messages appearing in your terminal as the <code>MqttSubscribe</code> command processes them. for example:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723737780420/ecdad211-0ee0-476c-b71f-298f9b216a95.png" alt /></p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>Integrating MQTT with Laravel opens up numerous possibilities for IoT projects, allowing real-time communication between web applications and physical devices. By following this guide, you've set up a robust framework for sending and receiving messages via MQTT, laying the groundwork for more complex IoT applications.</p>
<p>As IoT continues to evolve, the combination of Laravel and MQTT will empower developers to build innovative, connected solutions that bridge the gap between the digital and physical worlds.</p>
<p>Feel free to expand on this foundation by adding features such as message persistence, device management, and more, as your IoT ecosystem grows.</p>
]]></content:encoded></item><item><title><![CDATA[Integrate Google Sheets as database with ExpressJS]]></title><description><![CDATA[Google Sheets is a powerful tool often used for data storage and manipulation. While traditionally used for simple spreadsheet tasks, it can also serve as a database for web applications. This article will guide you through integrating Google Sheets ...]]></description><link>https://gariskode.com/integrate-google-sheets-as-database-with-expressjs</link><guid isPermaLink="true">https://gariskode.com/integrate-google-sheets-as-database-with-expressjs</guid><category><![CDATA[spreadsheets]]></category><category><![CDATA[Express]]></category><category><![CDATA[Express.js]]></category><category><![CDATA[Node.js]]></category><category><![CDATA[node]]></category><category><![CDATA[Databases]]></category><dc:creator><![CDATA[Fajar Chaniago]]></dc:creator><pubDate>Tue, 30 Jul 2024 09:59:34 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1722333451366/101f2d3e-b7a5-491c-abcb-632d10a76c21.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Google Sheets is a powerful tool often used for data storage and manipulation. While traditionally used for simple spreadsheet tasks, it can also serve as a database for web applications. This article will guide you through integrating Google Sheets as a database with an ExpressJS application.</p>
<h2 id="heading-why-use-google-sheets-as-a-database">Why Use Google Sheets as a Database?</h2>
<p>Google Sheets offers several advantages:</p>
<ol>
<li><p><strong>Ease of Use</strong>: Its familiar interface makes it easy for non-developers to view and edit data.</p>
</li>
<li><p><strong>Collaboration</strong>: Multiple users can work on the same sheet simultaneously.</p>
</li>
<li><p><strong>Cost-Effective</strong>: For small to medium-sized applications, it can be a free alternative to traditional databases.</p>
</li>
</ol>
<h2 id="heading-prerequisites">Prerequisites</h2>
<p>Before we start, ensure you have the following:</p>
<ol>
<li><p><strong>Node.js and npm</strong>: Install from <a target="_blank" href="https://nodejs.org/">Node.js official website</a>.</p>
</li>
<li><p><strong>Google Cloud Account</strong>: To access Google Sheets API.</p>
</li>
<li><p><strong>Google Sheet</strong>: Create spreadsheet</p>
</li>
</ol>
<h2 id="heading-step-by-step">Step by Step</h2>
<h3 id="heading-step1-create-service-account">Step1 : Create Service Account</h3>
<p>If you have already registered for Google Cloud account, go to Google Cloud IAM and admin. Klik Service accounts in the red box shown below, under the left side bar.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1722327865954/b73ea431-f8fd-47bb-8aa0-1aea19b3dfcf.png" alt class="image--center mx-auto" /></p>
<p>then, click on <strong>CREATE SERVICE ACCOUNT</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1722328159464/ab6a0842-a151-4e13-8708-5f04548877e8.png" alt class="image--center mx-auto" /></p>
<p>fill in the form provided</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1722328369750/ca558597-f385-46a4-bf99-7e60e45e5dc7.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1722328409075/fba639d0-07e7-43f8-aa07-7a50e2d9bc33.png" alt class="image--center mx-auto" /></p>
<p>Once created, go to the service account detail as below.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1722328805002/1504d365-8e58-4a44-b46b-c2be6a6d03df.png" alt class="image--center mx-auto" /></p>
<p>you must generate a key that, after being named, will be immediately downloaded in a JSON format into your computer's storage in order to connect the API from programs</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1722329069471/806b4a7a-e0e4-4024-ab46-72394d267f5c.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-step2-set-up-the-spreadsheet">Step2 : Set Up the Spreadsheet</h3>
<p>create a new spreedsheet, share the spreedsheet with the google account service that you have created earlier</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1722329637024/e99b9273-02ed-4e47-b6e8-e8295b984574.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1722329642018/2c1dbc80-5da9-4e5b-b07e-f455c1fc8982.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-step3-create-expressjs-project">Step3 : Create ExpressJS Project</h3>
<p><strong>Set Up the Project:</strong> Begin by creating a new directory for your project and initializing it with <code>npm</code>:</p>
<pre><code class="lang-plaintext">mkdir crud-spreadsheet
cd crud-spreadsheet
npm init -y
</code></pre>
<p>This will create a new directory called <code>crud-spreadsheet</code> and a <code>package.json</code> file, which will keep track of your project's dependencies and scripts.</p>
<p><strong>Install Dependencies:</strong> You will need to install Express, Google APIs, and Body-Parser:</p>
<pre><code class="lang-plaintext">npm install express googleapis body-parser
</code></pre>
<ul>
<li><p><strong>Express:</strong> A minimal and flexible Node.js web application framework that provides a robust set of features for web and mobile applications.</p>
</li>
<li><p><strong>Googleapis:</strong> A library that provides access to various Google APIs, including Google Sheets.</p>
</li>
<li><p><strong>Body-Parser:</strong> A middleware to parse incoming request bodies in a middleware before your handlers, available under the <code>req.body</code> property.</p>
</li>
</ul>
<p><strong>Project Structure:</strong> Your project structure should look like this:</p>
<pre><code class="lang-plaintext">crud-spreadsheet/
├── node_modules/
├── service-account.json
├── package.json
└── index.js
</code></pre>
<ul>
<li><p><code>node_modules/</code>: Directory where npm installs the packages.</p>
</li>
<li><p><code>service-account.json</code>: The JSON key file you downloaded from Google Cloud Console for your service account.</p>
</li>
<li><p><code>package.json</code>: File created by <code>npm init</code> that lists your dependencies and project details.</p>
</li>
<li><p><code>index.js</code>: The main file where you will write your Express application code.</p>
</li>
</ul>
<p><strong>Implement CRUD Operations:</strong> In <code>index.js</code>, implement the CRUD operations as follows:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> express = <span class="hljs-built_in">require</span>(<span class="hljs-string">'express'</span>);
<span class="hljs-keyword">const</span> { google } = <span class="hljs-built_in">require</span>(<span class="hljs-string">'googleapis'</span>);
<span class="hljs-keyword">const</span> bodyParser = <span class="hljs-built_in">require</span>(<span class="hljs-string">'body-parser'</span>);
<span class="hljs-keyword">const</span> fs = <span class="hljs-built_in">require</span>(<span class="hljs-string">'fs'</span>);
<span class="hljs-keyword">const</span> path = <span class="hljs-built_in">require</span>(<span class="hljs-string">'path'</span>);

<span class="hljs-keyword">const</span> app = express();
<span class="hljs-keyword">const</span> port = <span class="hljs-number">4000</span>;

<span class="hljs-comment">// Middleware</span>
app.use(bodyParser.json());

<span class="hljs-comment">// Load service account credentials</span>
<span class="hljs-keyword">const</span> SERVICE_ACCOUNT_FILE = path.join(__dirname, <span class="hljs-string">'service-account.json'</span>);
<span class="hljs-keyword">const</span> credentials = <span class="hljs-built_in">JSON</span>.parse(fs.readFileSync(SERVICE_ACCOUNT_FILE));

<span class="hljs-comment">// Create an authorized client</span>
<span class="hljs-keyword">const</span> auth = <span class="hljs-keyword">new</span> google.auth.GoogleAuth({
  credentials,
  <span class="hljs-attr">scopes</span>: [<span class="hljs-string">'https://www.googleapis.com/auth/spreadsheets'</span>]
});
<span class="hljs-keyword">const</span> sheets = google.sheets({ <span class="hljs-attr">version</span>: <span class="hljs-string">'v4'</span>, auth });

<span class="hljs-comment">// Spreadsheet ID</span>
<span class="hljs-keyword">const</span> spreadsheetId = <span class="hljs-string">'YOUR_SPREADSHEET_ID'</span>; <span class="hljs-comment">// Replace with your spreadsheet ID</span>

<span class="hljs-comment">// CREATE</span>
app.post(<span class="hljs-string">'/mahasiswa'</span>, <span class="hljs-keyword">async</span> (req, res) =&gt; {
  <span class="hljs-keyword">const</span> { name, nim, ipk } = req.body;

  <span class="hljs-keyword">if</span> (!name || !nim || !ipk) {
    <span class="hljs-keyword">return</span> res.status(<span class="hljs-number">400</span>).send(<span class="hljs-string">'All fields are required'</span>);
  }

  <span class="hljs-keyword">try</span> {
    <span class="hljs-keyword">await</span> sheets.spreadsheets.values.append({
      spreadsheetId,
      <span class="hljs-attr">range</span>: <span class="hljs-string">'Sheet1!A1'</span>, <span class="hljs-comment">// Replace with the appropriate range</span>
      <span class="hljs-attr">valueInputOption</span>: <span class="hljs-string">'USER_ENTERED'</span>,
      <span class="hljs-attr">resource</span>: {
        <span class="hljs-attr">values</span>: [[name, nim, ipk]],
      },
    });
    res.status(<span class="hljs-number">200</span>).send(<span class="hljs-string">'Data saved successfully'</span>);
  } <span class="hljs-keyword">catch</span> (err) {
    <span class="hljs-built_in">console</span>.error(<span class="hljs-string">'Error inserting data:'</span>, err);
    res.status(<span class="hljs-number">500</span>).send(<span class="hljs-string">'Error saving data'</span>);
  }
});

<span class="hljs-comment">// READ</span>
app.get(<span class="hljs-string">'/mahasiswa'</span>, <span class="hljs-keyword">async</span> (req, res) =&gt; {
  <span class="hljs-keyword">try</span> {
    <span class="hljs-keyword">const</span> response = <span class="hljs-keyword">await</span> sheets.spreadsheets.values.get({
      spreadsheetId,
      <span class="hljs-attr">range</span>: <span class="hljs-string">'Sheet1!A2:C'</span>, <span class="hljs-comment">// Replace with the appropriate range</span>
    });

    <span class="hljs-keyword">const</span> rows = response.data.values;
    <span class="hljs-keyword">if</span> (rows.length) {
      res.status(<span class="hljs-number">200</span>).send(rows);
    } <span class="hljs-keyword">else</span> {
      res.status(<span class="hljs-number">404</span>).send(<span class="hljs-string">'No data found'</span>);
    }
  } <span class="hljs-keyword">catch</span> (err) {
    <span class="hljs-built_in">console</span>.error(<span class="hljs-string">'Error reading data:'</span>, err);
    res.status(<span class="hljs-number">500</span>).send(<span class="hljs-string">'Error reading data'</span>);
  }
});

<span class="hljs-comment">// UPDATE</span>
app.put(<span class="hljs-string">'/mahasiswa/:row'</span>, <span class="hljs-keyword">async</span> (req, res) =&gt; {
  <span class="hljs-keyword">const</span> { row } = req.params;
  <span class="hljs-keyword">const</span> { name, nim, ipk } = req.body;

  <span class="hljs-keyword">if</span> (!name || !nim || !ipk) {
    <span class="hljs-keyword">return</span> res.status(<span class="hljs-number">400</span>).send(<span class="hljs-string">'All fields are required'</span>);
  }

  <span class="hljs-keyword">try</span> {
    <span class="hljs-keyword">await</span> sheets.spreadsheets.values.update({
      spreadsheetId,
      <span class="hljs-attr">range</span>: <span class="hljs-string">`Sheet1!A<span class="hljs-subst">${row}</span>:C<span class="hljs-subst">${row}</span>`</span>, <span class="hljs-comment">// Replace with the appropriate range</span>
      <span class="hljs-attr">valueInputOption</span>: <span class="hljs-string">'USER_ENTERED'</span>,
      <span class="hljs-attr">resource</span>: {
        <span class="hljs-attr">values</span>: [[name, nim, ipk]],
      },
    });
    res.status(<span class="hljs-number">200</span>).send(<span class="hljs-string">'Data updated successfully'</span>);
  } <span class="hljs-keyword">catch</span> (err) {
    <span class="hljs-built_in">console</span>.error(<span class="hljs-string">'Error updating data:'</span>, err);
    res.status(<span class="hljs-number">500</span>).send(<span class="hljs-string">'Error updating data'</span>);
  }
});

<span class="hljs-comment">// DELETE</span>
app.delete(<span class="hljs-string">'/mahasiswa/:row'</span>, <span class="hljs-keyword">async</span> (req, res) =&gt; {
  <span class="hljs-keyword">const</span> { row } = req.params;

  <span class="hljs-keyword">try</span> {
    <span class="hljs-keyword">await</span> sheets.spreadsheets.values.update({
      spreadsheetId,
      <span class="hljs-attr">range</span>: <span class="hljs-string">`Sheet1!A<span class="hljs-subst">${row}</span>:C<span class="hljs-subst">${row}</span>`</span>, <span class="hljs-comment">// Replace with the appropriate range</span>
      <span class="hljs-attr">valueInputOption</span>: <span class="hljs-string">'USER_ENTERED'</span>,
      <span class="hljs-attr">resource</span>: {
        <span class="hljs-attr">values</span>: [[<span class="hljs-string">''</span>, <span class="hljs-string">''</span>, <span class="hljs-string">''</span>]], <span class="hljs-comment">// Clear the data</span>
      },
    });
    res.status(<span class="hljs-number">200</span>).send(<span class="hljs-string">'Data deleted successfully'</span>);
  } <span class="hljs-keyword">catch</span> (err) {
    <span class="hljs-built_in">console</span>.error(<span class="hljs-string">'Error deleting data:'</span>, err);
    res.status(<span class="hljs-number">500</span>).send(<span class="hljs-string">'Error deleting data'</span>);
  }
});

app.listen(port, <span class="hljs-function">() =&gt;</span> {
  <span class="hljs-built_in">console</span>.log(<span class="hljs-string">`Server running at http://localhost:<span class="hljs-subst">${port}</span>`</span>);
});
</code></pre>
<p><strong>Explanation:</strong></p>
<ol>
<li><p><strong>Express Setup:</strong></p>
<ul>
<li><p><code>const express = require('express');</code> and <code>const app = express();</code> set up an Express application.</p>
</li>
<li><p><code>app.use(bodyParser.json());</code> adds middleware to parse JSON request bodies.</p>
</li>
</ul>
</li>
<li><p><strong>Google Sheets API Setup:</strong></p>
<ul>
<li><p>The service account credentials are loaded from the JSON file.</p>
</li>
<li><p>An authorized client is created using <code>google.auth.GoogleAuth</code>.</p>
</li>
<li><p>The Sheets API is initialized with the authorized client.</p>
</li>
</ul>
</li>
<li><p><strong>CRUD Operations:</strong></p>
<ul>
<li><p><strong>CREATE:</strong> A POST request to <code>/mahasiswa</code> appends a new row with the provided data.</p>
</li>
<li><p><strong>READ:</strong> A GET request to <code>/mahasiswa</code> retrieves all rows starting from the second row.</p>
</li>
<li><p><strong>UPDATE:</strong> A PUT request to <code>/mahasiswa/:row</code> updates a specific row with the provided data.</p>
</li>
<li><p><strong>DELETE:</strong> A DELETE request to <code>/mahasiswa/:row</code> clears the data in a specific row.</p>
</li>
</ul>
</li>
</ol>
<p>Another important thing you should remember for connection is the id of the google sheet you want to handle. You can find the id from the url of the google sheet and It looks like:</p>
<blockquote>
<p><a target="_blank" href="https://docs.google.com/spreadsheets/d/[your-sheet-id]/edit#gid=0"><em>https://docs.google.com/spreadsheets/d/[<strong><strong>your-sheet-id]</strong></strong>/edit#gid=0</em></a></p>
</blockquote>
<h3 id="heading-step4-run-your-application">Step4 : Run Your Application</h3>
<p>Now that we have our application code ready, we need to start our server and test the endpoints to ensure everything is working correctly. This step involves running the Node.js server, sending requests to the server, and verifying that the Google Sheets operations are performed as expected.</p>
<p><strong>Start the Server:</strong> Open a terminal in the root directory of your project and run the following command to start the server:</p>
<pre><code class="lang-javascript">node index.js
</code></pre>
<p><strong>CREATE:</strong> Use Postman or another tool to send a POST request to <code>/mahasiswa</code> with a JSON body:</p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"name"</span>: <span class="hljs-string">"John Doe"</span>,
  <span class="hljs-attr">"nim"</span>: <span class="hljs-number">123456</span>,
  <span class="hljs-attr">"ipk"</span>: <span class="hljs-number">3.5</span>
}
</code></pre>
<p><strong>READ:</strong> Send a GET request to <code>/mahasiswa</code>.<br /><strong>UPDATE:</strong> Send a PUT request to <code>/mahasiswa/:row</code> with a JSON body to update a specific row:</p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"name"</span>: <span class="hljs-string">"Jane Doe"</span>,
  <span class="hljs-attr">"nim"</span>: <span class="hljs-number">654321</span>,
  <span class="hljs-attr">"ipk"</span>: <span class="hljs-number">3.8</span>
}
</code></pre>
<p>Replace <code>:row</code> with the row number you want to update.</p>
<p><strong>DELETE:</strong> Send a DELETE request to <code>/mahasiswa/:row</code> to delete a specific row.</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>Integrating Google Sheets with ExpressJS to perform CRUD operations is a powerful way to leverage the simplicity and accessibility of Google Sheets as a database. This method is particularly useful for small projects or for quickly prototyping applications where setting up a full database might be unnecessary. By following the steps outlined in this guide, you can easily set up a CRUD application and start managing your data with ease.</p>
]]></content:encoded></item><item><title><![CDATA[Pipeline Arsitektur]]></title><description><![CDATA[Pipeline Architecture (Arsitektur Pipa) adalah pola arsitektur perangkat lunak yang digunakan untuk meningkatkan kinerja sistem dengan membagi aliran pemrosesan data atau tugas menjadi serangkaian langkah-langkah (stages) yang berurutan. Setiap langk...]]></description><link>https://gariskode.com/pipeline-arsitektur</link><guid isPermaLink="true">https://gariskode.com/pipeline-arsitektur</guid><category><![CDATA[Pipeline]]></category><category><![CDATA[architecture]]></category><category><![CDATA[#pipeline arsitekture]]></category><dc:creator><![CDATA[Sukma Rizki]]></dc:creator><pubDate>Fri, 11 Aug 2023 16:59:22 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1691497138710/e3325efc-dd09-432b-b088-036de3ad2bd4.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Pipeline Architecture (Arsitektur Pipa) adalah pola arsitektur perangkat lunak yang digunakan untuk meningkatkan kinerja sistem dengan membagi aliran pemrosesan data atau tugas menjadi serangkaian langkah-langkah (stages) yang berurutan. Setiap langkah dalam pipa mengambil masukan dari langkah sebelumnya, memprosesnya, dan mengirimkan keluaran ke langkah berikutnya. Pola ini mirip dengan proses pabrik yang membagi produksi menjadi tahap-tahap tertentu.</p>
<p>Konsep utama dalam Pipeline Architecture adalah sebagai berikut:</p>
<ol>
<li><p><strong>Stages (Langkah)</strong>: Pipa terdiri dari serangkaian langkah yang berurutan, di mana setiap langkah memiliki tanggung jawab tertentu dalam pemrosesan data atau tugas. Setiap langkah dapat berjalan secara paralel, memungkinkan pemrosesan data secara efisien.</p>
</li>
<li><p><strong>Data Flow (Aliran Data)</strong>: Data mengalir melalui pipa dari satu langkah ke langkah berikutnya. Setelah sebuah langkah selesai memproses data, hasilnya dikirim ke langkah berikutnya untuk diproses lebih lanjut.</p>
</li>
<li><p><strong>Parallelism (Paralelisme)</strong>: Pipa memungkinkan paralelisme eksekusi, di mana beberapa langkah dapat bekerja secara bersamaan, mengoptimalkan kinerja dan kecepatan pemrosesan.</p>
</li>
<li><p><strong>Single Responsibility</strong>: Setiap langkah dalam pipa memiliki tanggung jawab yang terbatas, memudahkan perawatan dan pengelolaan kode.</p>
</li>
</ol>
<p>Contoh sederhana Pipeline Architecture:</p>
<p>Misalkan Anda memiliki aplikasi pemrosesan data besar. Pipeline Architecture dapat diterapkan sebagai berikut:</p>
<ul>
<li><p>Pipa terdiri dari langkah-langkah pemrosesan berurutan, seperti mengambil data mentah, membersihkan data, menghitung statistik, dan menyimpan hasilnya ke database.</p>
</li>
<li><p>Setiap langkah memproses data secara independen dan mengirimkan hasilnya ke langkah berikutnya.</p>
</li>
<li><p>Pipa memungkinkan langkah-langkah ini berjalan secara paralel, sehingga pemrosesan data lebih cepat dan efisien.</p>
</li>
</ul>
<p>Keuntungan Pipeline Architecture:</p>
<ul>
<li><p><strong>Kinerja Tinggi</strong>: Paralelisme dalam pipa memungkinkan pemrosesan data secara efisien dan meningkatkan kinerja aplikasi.</p>
</li>
<li><p><strong>Skalabilitas</strong>: Penambahan langkah atau kapasitas pemrosesan dalam pipa dapat meningkatkan kapasitas dan skalabilitas aplikasi.</p>
</li>
<li><p><strong>Modularitas</strong>: Setiap langkah dalam pipa memiliki tanggung jawab terbatas, sehingga memungkinkan kode yang lebih bersih, terorganisir, dan mudah dimengerti.</p>
</li>
<li><p><strong>Reuse</strong>: Setiap langkah dalam pipa dapat digunakan kembali (reusable) dalam berbagai pipa lainnya, mempercepat pengembangan aplikasi.</p>
</li>
</ul>
<p>Kelamahan Pipeline Architecture:</p>
<ul>
<li><p><strong>Overhead Komunikasi</strong>: Pengiriman data antara langkah-langkah dalam pipa memerlukan komunikasi, yang dapat menyebabkan overhead.</p>
</li>
<li><p><strong>Penanganan Kesalahan</strong>: Dalam beberapa kasus, penanganan kesalahan dan kegagalan di berbagai langkah dalam pipa dapat menjadi rumit dan memerlukan manajemen yang hati-hati.</p>
</li>
<li><p><strong>Koordinasi</strong>: Koordinasi antara langkah-langkah dalam pipa dan sinkronisasi data memerlukan perencanaan yang cermat dan implementasi yang baik.</p>
</li>
</ul>
<p>Pipeline Architecture sering digunakan dalam pemrosesan data besar, komputasi paralel, dan aplikasi yang memerlukan pemrosesan tugas yang berurutan. Penggunaan pola ini harus disesuaikan dengan kebutuhan aplikasi dan mempertimbangkan keuntungan dan kerugiannya terhadap kompleksitas dan kinerja aplikasi.</p>
]]></content:encoded></item><item><title><![CDATA[Relay Channel Menggunakan Arduino UNO]]></title><description><![CDATA[Relay Arduino adalah sebuah modul yang dapat digunakan untuk mengontrol perangkat listrik atau elektronik dengan menggunakan mikrokontroler Arduino. Modul relay berfungsi sebagai saklar (switch) yang dapat mengalirkan arus listrik pada perangkat yang...]]></description><link>https://gariskode.com/relay-channel-menggunakan-arduino-uno</link><guid isPermaLink="true">https://gariskode.com/relay-channel-menggunakan-arduino-uno</guid><category><![CDATA[arduino]]></category><dc:creator><![CDATA[Fajri Chan]]></dc:creator><pubDate>Tue, 01 Aug 2023 01:12:22 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1690852228462/744583bc-95a5-4099-b382-0067beab2079.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Relay Arduino adalah sebuah modul yang dapat digunakan untuk mengontrol perangkat listrik atau elektronik dengan menggunakan mikrokontroler Arduino. Modul relay berfungsi sebagai saklar (switch) yang dapat mengalirkan arus listrik pada perangkat yang dikendalikan oleh Arduino.</p>
<p>Pada dasarnya, Relay Arduino berfungsi sebagai penghubung antara mikrokontroler Arduino dengan perangkat listrik yang lebih besar, seperti lampu, motor, atau peralatan rumah tangga lainnya. Dengan menggunakan Relay Arduino, maka pengguna dapat mengontrol perangkat listrik tersebut secara otomatis melalui program yang dibuat di mikrokontroler Arduino.</p>
<p>Relay Arduino biasanya terdiri dari beberapa bagian, antara lain relay, transistor, dioda, dan beberapa komponen elektronik lainnya yang membantu dalam mengontrol aliran listrik. Relay Arduino biasanya dapat dihubungkan dengan mudah ke pin output digital pada mikrokontroler Arduino, sehingga dapat dikendalikan dengan mudah melalui program Arduino.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1690851967171/5c56d6a3-8509-4dbe-94c9-368b6ac1ced2.jpeg" alt class="image--center mx-auto" /></p>
<p>Modul Relay Arduino umumnya terdiri dari beberapa pin yang berfungsi sebagai input dan output. Berikut ini adalah beberapa pin yang umumnya terdapat pada modul Relay</p>
<table><tbody><tr><td><p>PIN</p></td><td><p>Fungsi</p></td></tr><tr><td><p>Pin VCC</p></td><td><p>merupakan pin input untuk sumber daya listrik pada modul relay. Pin ini umumnya terhubung dengan sumber daya listrik eksternal atau pin 5V pada mikrokontroler Arduino.</p></td></tr><tr><td><p>Pin GND</p></td><td><p>merupakan pin ground atau tanah pada modul relay yang digunakan untuk menghubungkan dengan ground pada mikrokontroler Arduino.</p></td></tr><tr><td><p>Pin IN</p></td><td><p>merupakan pin input yang digunakan untuk mengontrol relay. Pin ini terhubung ke salah satu pin output digital pada mikrokontroler Arduino.</p></td></tr><tr><td><p>Pin COM</p></td><td><p>merupakan pin output common atau kaki umum dari relay yang digunakan untuk menghubungkan dengan perangkat listrik atau elektronik yang dikendalikan.</p></td></tr><tr><td><p>Pin NO</p></td><td><p>merupakan pin output normally open atau kaki terbuka yang digunakan untuk menghubungkan dengan perangkat listrik atau elektronik yang akan dihidupkan ketika relay aktif.</p></td></tr><tr><td><p>Pin NC</p></td><td><p>merupakan pin output normally closed atau kaki tertutup yang digunakan untuk menghubungkan dengan perangkat listrik atau elektronik yang akan dimatikan ketika relay aktif.</p></td></tr></tbody></table>

<p>Perlu diingat bahwa konfigurasi pin pada modul Relay Arduino dapat berbeda-beda tergantung pada jenis dan model modulnya. Sebaiknya selalu merujuk pada datasheet modul Relay Arduino yang digunakan untuk mengetahui detail pinout dari modul tersebut.</p>
<p>Contoh:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1690852054293/3591f8dd-5118-41fb-a491-0fe5d9f0db92.png" alt class="image--center mx-auto" /></p>
<pre><code class="lang-c"><span class="hljs-keyword">int</span> relayPin = <span class="hljs-number">2</span>; <span class="hljs-comment">// Pin output digital pada Arduino Uno yang terhubung ke pin IN pada modul Relay Arduino</span>

<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">setup</span><span class="hljs-params">()</span> </span>{
  pinMode(relayPin, OUTPUT); <span class="hljs-comment">// Mengatur pin relay sebagai output</span>
}

<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">loop</span><span class="hljs-params">()</span> </span>{
  digitalWrite(relayPin, HIGH); <span class="hljs-comment">// Mengaktifkan relay</span>
  delay(<span class="hljs-number">1000</span>); <span class="hljs-comment">// Menunggu selama 1 detik</span>
  digitalWrite(relayPin, LOW); <span class="hljs-comment">// Mematikan relay</span>
  delay(<span class="hljs-number">1000</span>); <span class="hljs-comment">// Menunggu selama 1 detik</span>
}
</code></pre>
<p>Pada contoh kode di atas, pin output digital pada Arduino Uno yang terhubung ke pin IN pada modul Relay Arduino adalah pin 2. Pada blok <code>setup()</code>, pin 2 diatur sebagai output. Pada blok <code>loop()</code>, relay diaktifkan dengan menyetel pin 2 ke HIGH, kemudian menunggu selama 1 detik menggunakan fungsi <code>delay()</code>, lalu mematikan relay dengan menyetel pin 2 ke LOW, dan menunggu selama 1 detik lagi sebelum memulai kembali proses pengulangan.</p>
]]></content:encoded></item><item><title><![CDATA[Mari Mengenal JavaScript: Bahasa Pemrograman Yang Powerful & Serbaguna]]></title><description><![CDATA[Siapa yang suka dengan halaman web yang kaku dan membosankan? Kita semua tahu, situs web yang asik itu yang bikin mata terpukau dan hati senang. Nah, inilah dia si bintang utama yang bikin situs-situs web keren dan interaktif: JavaScript!
Jadi begini...]]></description><link>https://gariskode.com/mari-mengenal-javascript-bahasa-pemrograman-yang-powerful-serbaguna</link><guid isPermaLink="true">https://gariskode.com/mari-mengenal-javascript-bahasa-pemrograman-yang-powerful-serbaguna</guid><category><![CDATA[JavaScript]]></category><dc:creator><![CDATA[Andriyan Ginting]]></dc:creator><pubDate>Sat, 29 Jul 2023 10:30:52 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1690621165820/c00f0ebe-a821-4705-8f99-ed5a268fbd93.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Siapa yang suka dengan halaman web yang kaku dan membosankan? Kita semua tahu, situs web yang asik itu yang bikin mata terpukau dan hati senang. Nah, inilah dia si bintang utama yang bikin situs-situs web keren dan interaktif: JavaScript!</p>
<p>Jadi begini ceritanya, pada tahun 1995, ada seorang pahlawan kode bernama Brendan Eich yang menciptakan bahasa pemrograman keren bernama JavaScript. Awalnya, dia punya nama LiveScript, tapi akhirnya diubah jadi JavaScript, karena saat itu bahasa Java juga lagi nge-hits.</p>
<p>Gak kayak bahasa Java yang ribet dan berat, JavaScript ini lebih santai, namun powerful banget! Tujuan utamanya adalah memberikan situs web kemampuan buat jadi hidup, kayak ngasih efek animasi dan halaman web yang berubah-ubah sesuai aksi pengguna. Jadi bukan cuma nampilin teks doang, tapi bisa bikin interaksi yang bikin pengunjung betah.</p>
<p>Gak cuma jadi raja di sisi klien (client-side), JavaScript juga jadi jagoan di sisi server (server-side) berkat munculnya sang pahlawan Node.js! Jadi sekarang, kita bisa pakai JavaScript buat bikin aplikasi web seru dari awal sampai akhir.</p>
<p>Gara-gara kemampuannya yang luar biasa, JavaScript jadi idola di dunia pengembangan web. Setiap situs web keren pasti ada sentuhan ajaib dari JavaScript. Bisa dibilang, dia adalah bahasa pemrograman paling populer dan cewek-cewek di dunia pengembangan web nggak bisa lepas darinya.</p>
<h3 id="heading-fundamental-javascript">Fundamental Javascript</h3>
<p>Ayoo, mari kita masuk ke dunia JavaScript yang seru dan keren! Fundamental JavaScript adalah dasar-dasar yang wajib kita kuasai untuk jadi pahlawan kode sejati</p>
<ol>
<li><p><strong>Variabel dan Tipe Data</strong></p>
<p> Pertama, ada variabel! Bayangin variabel kayak kotak penyimpanan yang bisa kita isi dengan berbagai macam nilai, seperti angka, teks, atau bahkan objek keren! Variabel ini bikin kita bisa main-main dengan data, makin fleksibel deh!</p>
<p> Selanjutnya, kita punya tipe data. Ini kayak atribut khusus buat setiap nilai di JavaScript. Ada string buat teks, number buat angka, boolean buat "ya" atau "tidak," dan masih banyak lagi! Seru banget kan?</p>
<pre><code class="lang-javascript"> <span class="hljs-comment">//Deklarasi variabel menggunakan let dan const</span>
 <span class="hljs-keyword">let</span> nama = <span class="hljs-string">"John Doe"</span>; <span class="hljs-comment">//tipe data string</span>
 <span class="hljs-keyword">const</span> usia = <span class="hljs-number">25</span>; <span class="hljs-comment">//tipe data number</span>
 <span class="hljs-keyword">let</span> isMenikah = <span class="hljs-literal">false</span>; <span class="hljs-comment">//tipe data boolean</span>
 <span class="hljs-keyword">let</span> angka = [<span class="hljs-number">1</span>, <span class="hljs-number">2</span>, <span class="hljs-number">3</span>, <span class="hljs-number">4</span>, <span class="hljs-number">5</span>]; <span class="hljs-comment">//tipe data array</span>
 <span class="hljs-keyword">const</span> objek = { <span class="hljs-attr">nama</span>: <span class="hljs-string">"John Doe"</span>, <span class="hljs-attr">usia</span>: <span class="hljs-number">25</span>, <span class="hljs-attr">pekerjaan</span>: <span class="hljs-string">"Web Developer"</span>} <span class="hljs-comment">//tipe data objek</span>
</code></pre>
</li>
<li><p><strong>Pengkondisian dan Looping</strong></p>
<p> Terus, jangan lupa tentang struktur kendali! Ini seperti jalan tol buat mengatur alur program kita. Punya keputusan sulit? Tenang aja, pakai if-else biar program tahu harus ngapain kalau kondisinya berubah! Loop juga penting nih, bisa bikin kode kita berulang-ulang untuk pekerjaan keren!</p>
<pre><code class="lang-javascript"> <span class="hljs-comment">//pengkondisian menggunakan if-else if-else</span>
 <span class="hljs-keyword">let</span> nilai = <span class="hljs-number">80</span>;

 <span class="hljs-keyword">if</span> (nilai &gt;= <span class="hljs-number">90</span>) {
   <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Nilai Anda A."</span>);
 } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (nilai &gt;= <span class="hljs-number">80</span>) {
   <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Nilai Anda B."</span>);
 } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (nilai &gt;= <span class="hljs-number">70</span>) {
   <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Nilai Anda C."</span>);
 } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (nilai &gt;= <span class="hljs-number">60</span>) {
   <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Nilai Anda D."</span>);
 } <span class="hljs-keyword">else</span> {
   <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Nilai Anda E."</span>);
 }
</code></pre>
<p> <strong>Contoh Penggunaan Looping (For):</strong></p>
<pre><code class="lang-javascript"> <span class="hljs-keyword">for</span> (<span class="hljs-keyword">let</span> i = <span class="hljs-number">1</span>; i &lt;= <span class="hljs-number">5</span>; i++) {
   <span class="hljs-built_in">console</span>.log(i);
 }
</code></pre>
<p> <strong>Contoh Penggunaan Looping (While):</strong></p>
<pre><code class="lang-javascript"> <span class="hljs-keyword">let</span> angka = <span class="hljs-number">1</span>;

 <span class="hljs-keyword">while</span> (angka &lt;= <span class="hljs-number">5</span>) {
   <span class="hljs-built_in">console</span>.log(angka);
   angka++;
 }
</code></pre>
<p> <strong>Contoh Penggunaan Looping (Do-While):</strong></p>
<pre><code class="lang-javascript"> <span class="hljs-keyword">let</span> x = <span class="hljs-number">1</span>;

 <span class="hljs-keyword">do</span> {
   <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Ini adalah iterasi ke-"</span> + x);
   x++;
 } <span class="hljs-keyword">while</span> (x &lt;= <span class="hljs-number">5</span>);
</code></pre>
</li>
<li><p><strong>Function</strong></p>
<p> Fungsi adalah teman baik kita di JavaScript. Ini kayak resep masak, tapi buat kode! Dengan fungsi, kita bisa memecah kode jadi bagian-bagian yang lebih kecil dan mudah diatur. Reusabilitas kode pun jadi makin oke!</p>
<pre><code class="lang-javascript"> <span class="hljs-comment">// Fungsi sederhana untuk menyapa pengguna</span>
 <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">sapaPengguna</span>(<span class="hljs-params"></span>) </span>{
   <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Halo, selamat datang!"</span>);
 }

 <span class="hljs-comment">// Memanggil fungsi</span>
 sapaPengguna(); <span class="hljs-comment">// Output: "Halo, selamat datang!"</span>
</code></pre>
</li>
<li><p><strong>DOM - Document Object Model</strong></p>
<p> Jangan takut, ini cuma nama keren untuk cara JavaScript bermain-main dengan elemen di halaman web! Kita bisa mengubah konten, menambah elemen baru, atau merespons aksi dari pengguna. Bikin halaman jadi makin hidup!</p>
<pre><code class="lang-javascript"> &lt;!DOCTYPE html&gt;
 <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">html</span>&gt;</span>
 <span class="hljs-tag">&lt;<span class="hljs-name">head</span>&gt;</span>
   <span class="hljs-tag">&lt;<span class="hljs-name">title</span>&gt;</span>Contoh Penggunaan DOM<span class="hljs-tag">&lt;/<span class="hljs-name">title</span>&gt;</span>
 <span class="hljs-tag">&lt;/<span class="hljs-name">head</span>&gt;</span>
 <span class="hljs-tag">&lt;<span class="hljs-name">body</span>&gt;</span>
   <span class="hljs-tag">&lt;<span class="hljs-name">h1</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"judul"</span>&gt;</span>Selamat Datang!<span class="hljs-tag">&lt;/<span class="hljs-name">h1</span>&gt;</span>
   <span class="hljs-tag">&lt;<span class="hljs-name">p</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"pesan"</span>&gt;</span>Ini adalah contoh penggunaan DOM.<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>

   <span class="hljs-tag">&lt;<span class="hljs-name">script</span>&gt;</span><span class="javascript">
     <span class="hljs-comment">// Mengubah konten elemen berdasarkan ID</span>
     <span class="hljs-built_in">document</span>.getElementById(<span class="hljs-string">"judul"</span>).innerHTML = <span class="hljs-string">"Hello, World!"</span>;
     <span class="hljs-built_in">document</span>.getElementById(<span class="hljs-string">"pesan"</span>).innerHTML = <span class="hljs-string">"Saya belajar DOM."</span>;
   </span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
 <span class="hljs-tag">&lt;/<span class="hljs-name">body</span>&gt;</span>
 <span class="hljs-tag">&lt;/<span class="hljs-name">html</span>&gt;</span></span>
</code></pre>
</li>
</ol>
<p>Jadi, itulah sedikit bocoran tentang kehebatan JavaScript yang akan menjadi sahabat setia kita dalam merajut web yang keren dan interaktif. Makanya, kenalilah dan kuasailah fundamental JavaScript! Dengan dasar ini, kita bakal jadi penguasa situs web yang keren dan interaktif! Siap-siap deh, dunia pengembangan web bakal makin seru dan menyenangkan.</p>
]]></content:encoded></item><item><title><![CDATA[Memprogram LCD 16x2 Dengan Koneksi I2C Menggunakan Arduino Uno]]></title><description><![CDATA[LCD 16×2 (Liquid Crystal Display) merupakan modul penampil data yang mepergunakan kristal cair sebagai bahan untuk penampil data yang berupa tulisan maupun gambar

Spesifikasi dari LCD 16×2

Terdiri dari 16 kolom dan 2 baris

Dilengkapi dengan back l...]]></description><link>https://gariskode.com/memprogram-lcd-16x2-dengan-koneksi-i2c-menggunakan-arduino-uno</link><guid isPermaLink="true">https://gariskode.com/memprogram-lcd-16x2-dengan-koneksi-i2c-menggunakan-arduino-uno</guid><category><![CDATA[arduino]]></category><category><![CDATA[microcontroller]]></category><category><![CDATA[iot]]></category><dc:creator><![CDATA[Fajri Chan]]></dc:creator><pubDate>Sat, 29 Jul 2023 08:09:07 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1690618010121/57555374-2e3b-4b09-b22c-d1c090ff6af3.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>LCD 16×2 (Liquid Crystal Display)</strong> merupakan modul penampil data yang mepergunakan kristal cair sebagai bahan untuk penampil data yang berupa tulisan maupun gambar</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1690616571920/deec000b-e5b6-46be-b1f9-ed03080d5654.jpeg" alt class="image--center mx-auto" /></p>
<h3 id="heading-spesifikasi-dari-lcd-162">Spesifikasi dari LCD 16×2</h3>
<ul>
<li><p>Terdiri dari 16 kolom dan 2 baris</p>
</li>
<li><p>Dilengkapi dengan back light</p>
</li>
<li><p>Mempunyai 192 karakter tersimpan</p>
</li>
<li><p>Dapat dialamati dengan mode 4-bit dan 8-bit</p>
</li>
<li><p>Terdapat karakter generator terprogram</p>
</li>
</ul>
<p>Untuk menghemat pin pin pada Arduino ada 1 modul LCD yang bisa manfaatkan untuk alternatif mengakses LCD menggunakan antarmuka atau interface I2C, sehingga hanya membutuhkan 2 pin saja yaitu SDA dan SCL.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1690616906385/7b3889c4-2329-448a-a5d0-ab2a35120269.jpeg" alt class="image--center mx-auto" /></p>
<h3 id="heading-spesifikasi-modul-i2c-display">Spesifikasi modul i2C Display</h3>
<ul>
<li><p>Tegangan beroperasi antara 2-5 Vdc</p>
</li>
<li><p>Pada saat kondisi standby konsumsi arus hanya 10 uA</p>
</li>
<li><p>Kompatibel dengan semua jenis mikrokontroler</p>
</li>
<li><p>Kendali 8 bit menggunakan antarmuka i2c</p>
</li>
<li><p>Open-drain interrupt output</p>
</li>
</ul>
<h3 id="heading-penggunaan">Penggunaan</h3>
<p>Ok langsung praktek saja ya, LCD I2C dengan Arduino UNO. Pertama kita siapkan kebutuhan komponennya.</p>
<ol>
<li><p>Arduino UNO</p>
</li>
<li><p>LCD Display 16×2</p>
</li>
<li><p>Backpack I2C module LCD</p>
</li>
<li><p>Kabel konektor</p>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1690617050413/1d750183-ade6-4c85-bd59-566216d5b161.png" alt class="image--center mx-auto" /></p>
<ul>
<li><p>GND : terhubung dengan GND Arduino</p>
<p>  VCC : terhubung dengan 5V</p>
<p>  SDA : terhubung dengan pin SDA (A4)</p>
<p>  SCL : terhubung dengan pin SCL (A5)</p>
</li>
</ul>
<p>Sebelum kita membuat programmnya terlebih dahulu siapkan library LiquidCrystal_I2C.h</p>
<p><a target="_blank" href="https://drive.google.com/drive/folders/1rtjryfsvrdc53x0eStq-5r6Bn4NppcED?usp=sharing">Download Library LiquidCrystal I2C 1.1.2</a></p>
<p>Masukkan library tersebut ke folder libraries diman anda menyimpan aplikasi Arduino IDE atau dari menu <em>Sketch -&gt; Include Library -&gt; Add .ZIP</em>. Sekarang kita tulis programnya di Arduino IDE</p>
<pre><code class="lang-c"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;Wire.h&gt;</span></span>
<span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;LiquidCrystal_I2C.h&gt;</span></span>

<span class="hljs-function">LiquidCrystal_I2C <span class="hljs-title">lcd</span><span class="hljs-params">(<span class="hljs-number">0x27</span>, <span class="hljs-number">16</span>, <span class="hljs-number">2</span>)</span></span>; <span class="hljs-comment">// sesuaikan dengan address i2C kalian</span>

<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">setup</span><span class="hljs-params">()</span> </span>{
  lcd.init();      <span class="hljs-comment">// initialize the lcd </span>
  lcd.backlight();

  lcd.setCursor(<span class="hljs-number">0</span>,<span class="hljs-number">0</span>);
  lcd.print(<span class="hljs-string">"TEST LCD i2C"</span>);
  lcd.setCursor(<span class="hljs-number">0</span>,<span class="hljs-number">1</span>);
  lcd.print(<span class="hljs-string">"gariskode.com"</span>);
}

<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">loop</span><span class="hljs-params">()</span></span>{
  <span class="hljs-comment">// Running Text LCD</span>
  lcd.scrollDisplayLeft(); 
  delay(<span class="hljs-number">1000</span>);
}
</code></pre>
]]></content:encoded></item><item><title><![CDATA[Design Pattern MVP (Model View Presenter)]]></title><description><![CDATA[Pada arsitektur Model-View-Presenter (MVP), terdapat beberapa pola desain yang umum digunakan untuk mengatur dan mempermudah pengembangan aplikasi. Berikut adalah beberapa pola desain yang sering digunakan dalam MVP:

Model:

Pola desain Model mewaki...]]></description><link>https://gariskode.com/design-pattern-mvp-model-view-presenter</link><guid isPermaLink="true">https://gariskode.com/design-pattern-mvp-model-view-presenter</guid><category><![CDATA[patterns]]></category><category><![CDATA[mvp development]]></category><category><![CDATA[design principles]]></category><category><![CDATA[design and architecture]]></category><dc:creator><![CDATA[Sukma Rizki]]></dc:creator><pubDate>Sat, 29 Jul 2023 05:31:46 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1690608654953/92e141fc-5c18-40f6-966a-ecbe2554488f.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Pada arsitektur Model-View-Presenter (MVP), terdapat beberapa pola desain yang umum digunakan untuk mengatur dan mempermudah pengembangan aplikasi. Berikut adalah beberapa pola desain yang sering digunakan dalam MVP:</p>
<ol>
<li><p>Model:</p>
<ul>
<li><p>Pola desain Model mewakili logika bisnis dan akses ke data. Ini berisi kode untuk mengambil data dari database, API, atau sumber data lainnya, serta mengatur pemrosesan data dan logika aplikasi.</p>
</li>
<li><p>Biasanya, model terdiri dari kelas-kelas POJO (Plain Old Java Objects) atau PODO (Plain Old Dart Objects) untuk mewakili data dan fungsi yang berhubungan dengan data.</p>
</li>
</ul>
</li>
<li><p>View:</p>
<ul>
<li><p>Pola desain View bertanggung jawab atas tampilan antarmuka pengguna (UI). Ini berisi kode yang menampilkan informasi kepada pengguna dan menangani interaksi dari pengguna.</p>
</li>
<li><p>View tidak seharusnya berisi logika bisnis; sebaliknya, ia hanya mengirimkan tindakan dari pengguna ke presenter dan menampilkan data dari presenter.</p>
</li>
</ul>
</li>
<li><p>Presenter:</p>
<ul>
<li><p>Pola desain Presenter bertindak sebagai perantara antara Model dan View. Ia berfungsi untuk menghubungkan logika bisnis dalam Model dengan tampilan dalam View.</p>
</li>
<li><p>Presenter mengambil perintah dari View (misalnya, ketika pengguna mengklik tombol) dan memprosesnya melalui Model. Setelah Model menyelesaikan tugasnya, Presenter mengirimkan hasilnya kembali ke View untuk ditampilkan ke pengguna.</p>
</li>
<li><p>Presenter juga berfungsi sebagai pemisah untuk memastikan bahwa View dan Model tetap independen satu sama lain.</p>
</li>
</ul>
</li>
<li><p>Observer/Observable:</p>
<ul>
<li><p>Pola desain Observer/Observable sering digunakan untuk menghubungkan Model dan View. Ketika data di Model berubah, View perlu diberi tahu sehingga tampilan dapat diperbarui sesuai.</p>
</li>
<li><p>Presenter bertindak sebagai subjek (Observable), yang akan memberitahu View (Observer) tentang perubahan data di Model. Ini memungkinkan tampilan untuk selalu mencerminkan kondisi data terbaru.</p>
</li>
</ul>
</li>
<li><p>Dependency Injection:</p>
<ul>
<li><p>Pola desain Dependency Injection digunakan untuk mengelola dependensi antara kelas-kelas dalam arsitektur MVP.</p>
</li>
<li><p>Dengan Dependency Injection, Anda dapat menghindari ketergantungan langsung antara View dan Model dengan menggunakan kerangka kerja atau pustaka yang tepat (misalnya, Dagger untuk Java atau Flutter's built_value untuk Dart).</p>
</li>
<li><p>Ini mempermudah pengujian dan membuat kode lebih modular.</p>
</li>
</ul>
</li>
</ol>
<p>Penting untuk diingat bahwa MVP adalah salah satu dari beberapa pendekatan arsitektur yang dapat digunakan dalam pengembangan perangkat lunak. Pola desain di atas membantu Anda dalam menerapkan MVP secara efektif, mengurangi ketergantungan, dan memisahkan logika bisnis dari tampilan.</p>
<h2 id="heading-contoh-code">Contoh Code</h2>
<p>Berikut code sederhana yang bisa kamu pahami dan cermati untuk Pola desain MVP dalam bahasa pemograman dart (Untuk aplikasi Flutter).Kami akan menggunakan contoh aplikasi Kalkulator sederhana dengan empat operasi matematika dasar:penjumlahan,pengurangan,perkalian dan pembagian.</p>
<pre><code class="lang-dart"><span class="hljs-comment">//Model </span>
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">CalculatorModel</span> </span>{
  <span class="hljs-built_in">double</span> calculate(<span class="hljs-built_in">String</span> operation, <span class="hljs-built_in">double</span> num1, <span class="hljs-built_in">double</span> num2) {
    <span class="hljs-keyword">switch</span> (operation) {
      <span class="hljs-keyword">case</span> <span class="hljs-string">'+'</span>:
        <span class="hljs-keyword">return</span> num1 + num2;
      <span class="hljs-keyword">case</span> <span class="hljs-string">'-'</span>:
        <span class="hljs-keyword">return</span> num1 - num2;
      <span class="hljs-keyword">case</span> <span class="hljs-string">'*'</span>:
        <span class="hljs-keyword">return</span> num1 * num2;
      <span class="hljs-keyword">case</span> <span class="hljs-string">'/'</span>:
        <span class="hljs-keyword">return</span> num1 / num2;
      <span class="hljs-keyword">default</span>:
        <span class="hljs-keyword">throw</span> Exception(<span class="hljs-string">"Invalid operation"</span>);
    }
  }
}
</code></pre>
<p>Dibawah ini adalah view dari si model</p>
<pre><code class="lang-dart"><span class="hljs-comment">// View.dart</span>
<span class="hljs-keyword">import</span> <span class="hljs-string">'package:flutter/material.dart'</span>;

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">CalculatorView</span> </span>{
  <span class="hljs-keyword">final</span> TextEditingController number1Controller = TextEditingController();
  <span class="hljs-keyword">final</span> TextEditingController number2Controller = TextEditingController();
  <span class="hljs-keyword">final</span> TextEditingController resultController = TextEditingController();

  <span class="hljs-keyword">void</span> showResult(<span class="hljs-built_in">double</span> result) {
    resultController.text = result.toString();
  }
}
</code></pre>
<p>dan Selanjutnya adalah Presenternya</p>
<pre><code class="lang-dart"><span class="hljs-comment">// Presenter.dart</span>
<span class="hljs-keyword">import</span> <span class="hljs-string">'model.dart'</span>;
<span class="hljs-keyword">import</span> <span class="hljs-string">'view.dart'</span>;

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">CalculatorPresenter</span> </span>{
  <span class="hljs-keyword">final</span> CalculatorModel _model;
  <span class="hljs-keyword">final</span> CalculatorView _view;

  CalculatorPresenter(<span class="hljs-keyword">this</span>._view) : _model = CalculatorModel();

  <span class="hljs-keyword">void</span> calculate(<span class="hljs-built_in">String</span> operation) {
    <span class="hljs-built_in">double</span> num1 = <span class="hljs-built_in">double</span>.tryParse(_view.number1Controller.text) ?? <span class="hljs-number">0.0</span>;
    <span class="hljs-built_in">double</span> num2 = <span class="hljs-built_in">double</span>.tryParse(_view.number2Controller.text) ?? <span class="hljs-number">0.0</span>;

    <span class="hljs-keyword">try</span> {
      <span class="hljs-built_in">double</span> result = _model.calculate(operation, num1, num2);
      _view.showResult(result);
    } <span class="hljs-keyword">catch</span> (e) {
      _view.showResult(<span class="hljs-number">0.0</span>);
    }
  }
}
</code></pre>
<p>Selanjutnya ,dalam main.dart kita akan menggabungkan model,view, dan Presenter untuk mengatur antarmuka pengguna dan logika bisnis.</p>
<pre><code class="lang-dart"><span class="hljs-keyword">import</span> <span class="hljs-string">'package:flutter/material.dart'</span>;
<span class="hljs-keyword">import</span> <span class="hljs-string">'presenter.dart'</span>;
<span class="hljs-keyword">import</span> <span class="hljs-string">'view.dart'</span>;

<span class="hljs-keyword">void</span> main() {
  runApp(CalculatorApp());
}

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">CalculatorApp</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">StatelessWidget</span> </span>{
  <span class="hljs-keyword">final</span> CalculatorView _view = CalculatorView();
  <span class="hljs-keyword">final</span> CalculatorPresenter _presenter = CalculatorPresenter(CalculatorView());

  <span class="hljs-meta">@override</span>
  Widget build(BuildContext context) {
    <span class="hljs-keyword">return</span> MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text(<span class="hljs-string">'MVP Calculator'</span>)),
        body: Padding(
          padding: <span class="hljs-keyword">const</span> EdgeInsets.all(<span class="hljs-number">16.0</span>),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            crossAxisAlignment: CrossAxisAlignment.center,
            children: &lt;Widget&gt;[
              TextField(controller: _view.number1Controller, keyboardType: TextInputType.number),
              SizedBox(height: <span class="hljs-number">10</span>),
              TextField(controller: _view.number2Controller, keyboardType: TextInputType.number),
              SizedBox(height: <span class="hljs-number">20</span>),
              Row(
                mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                children: &lt;Widget&gt;[
                  ElevatedButton(onPressed: () =&gt; _presenter.calculate(<span class="hljs-string">'+'</span>), child: Text(<span class="hljs-string">'+'</span>)),
                  ElevatedButton(onPressed: () =&gt; _presenter.calculate(<span class="hljs-string">'-'</span>), child: Text(<span class="hljs-string">'-'</span>)),
                  ElevatedButton(onPressed: () =&gt; _presenter.calculate(<span class="hljs-string">'*'</span>), child: Text(<span class="hljs-string">'*'</span>)),
                  ElevatedButton(onPressed: () =&gt; _presenter.calculate(<span class="hljs-string">'/'</span>), child: Text(<span class="hljs-string">'/'</span>)),
                ],
              ),
              SizedBox(height: <span class="hljs-number">20</span>),
              TextField(controller: _view.resultController, readOnly: <span class="hljs-keyword">true</span>),
            ],
          ),
        ),
      ),
    );
  }
}
</code></pre>
<p>Dalam contoh diatas,kita telah membuat aplikasi kalkulator sederhana menggunakan pola MVP.Model betnggung jawab untuk perhitungan matematika,View untuk menampilkan elemen antar pengguna dan Presenter untuk menghubungkan Model dan View.Ini Memungkinkan Aplikasi untuk mempertahankan pemisahan tugas yang baik dan memudahkan pengujian.</p>
]]></content:encoded></item><item><title><![CDATA[Bluetooth HC-05 / HC-06 Dengan Arduino]]></title><description><![CDATA[Modul Bluetooth Arduino adalah sebuah perangkat tambahan yang dapat dipasang pada board Arduino untuk memungkinkan komunikasi nirkabel dengan perangkat lain yang juga memiliki teknologi Bluetooth, seperti ponsel cerdas atau laptop. Modul ini menyedia...]]></description><link>https://gariskode.com/bluetooth-hc-05-hc-06-dengan-arduino</link><guid isPermaLink="true">https://gariskode.com/bluetooth-hc-05-hc-06-dengan-arduino</guid><category><![CDATA[arduino]]></category><dc:creator><![CDATA[Fajri Chan]]></dc:creator><pubDate>Fri, 28 Jul 2023 02:46:30 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1690512301376/31fb0b78-77c3-4b07-ab90-913ddc8de936.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Modul Bluetooth Arduino adalah sebuah perangkat tambahan yang dapat dipasang pada board Arduino untuk memungkinkan komunikasi nirkabel dengan perangkat lain yang juga memiliki teknologi Bluetooth, seperti ponsel cerdas atau laptop. Modul ini menyediakan antarmuka yang mudah digunakan untuk mengontrol perangkat Bluetooth dan dapat digunakan untuk berbagai aplikasi, seperti kendali jarak jauh, pengiriman data, dan pengendalian robot.</p>
<p>Modul Bluetooth Arduino tersedia dalam berbagai macam jenis dan varian yang dapat dipilih sesuai dengan kebutuhan proyek Anda. Beberapa jenis modul Bluetooth Arduino yang populer di antaranya adalah HC-05 dan HC-06. Modul Bluetooth Arduino ini biasanya dihubungkan ke board Arduino melalui pin RX dan TX, dan kemudian diatur dengan kode program Arduino untuk memastikan koneksi yang baik dan stabil.</p>
<p>Setelah dihubungkan dan dikonfigurasi dengan benar, modul Bluetooth Arduino dapat memungkinkan Anda untuk mengirim dan menerima data melalui koneksi Bluetooth, serta mengendalikan perangkat yang terhubung dengan board Arduino dari jarak jauh. Ini membuat modul Bluetooth Arduino menjadi pilihan yang ideal untuk proyek yang membutuhkan komunikasi nirkabel, seperti kendali jarak jauh untuk mobil atau drone, atau pengendalian robot secara jarak jauh.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1690507863442/18196524-0cfb-4c48-9294-c748c6dd546d.jpeg" alt class="image--center mx-auto" /></p>
<p>Modul Bluetooth Arduino biasanya dihubungkan ke board Arduino melalui pin RX dan TX. Berikut adalah fungsi dari masing-masing pin pada modul Bluetooth Arduino:</p>
<table><tbody><tr><td><p>PIN</p></td><td><p>FUNGSI</p></td></tr><tr><td><p>Pin VCC</p></td><td><p>Pin ini digunakan untuk memberikan daya ke modul Bluetooth Arduino. Tegangan yang diperlukan biasanya bervariasi tergantung pada jenis modul, tetapi umumnya antara 3.3V dan 5V.</p></td></tr><tr><td><p>Pin GND</p></td><td><p>Pin ini digunakan untuk menghubungkan modul Bluetooth Arduino ke ground pada board Arduino.</p></td></tr><tr><td><p>Pin TX</p></td><td><p>Pin ini digunakan untuk mengirim data dari board Arduino ke perangkat yang terhubung melalui koneksi Bluetooth.</p></td></tr><tr><td><p>Pin RX</p></td><td><p>Pin ini digunakan untuk menerima data dari perangkat yang terhubung melalui koneksi Bluetooth dan diteruskan ke board Arduino.</p></td></tr><tr><td><p>Pin EN</p></td><td><p>Pin ini digunakan untuk mengaktifkan atau menonaktifkan modul Bluetooth Arduino. Pin ini tidak selalu tersedia pada setiap jenis modul Bluetooth Arduino, dan jika tidak tersedia, modul Bluetooth Arduino akan secara otomatis aktif saat daya diberikan.</p></td></tr></tbody></table>

<p>Contoh:</p>
<p>pada contoh dibawah ini, kita akan menghidup/matikan led menggunakan Bluetooth, led kaki <strong>anoda (anode)</strong> pada pin 13 di arduino uno dan led kaki <strong>katoda (cathode)</strong> pada pin ground arduino, lalu kita sambungkan juga kaki <strong>RX HC-05</strong> ke <strong>TX arduino</strong>, kaki <strong>TX HC05</strong> ke <strong>RX arduino</strong>, kaki <strong>VCC HC05</strong> ke <strong>5V arduino,</strong> dan kaki <strong>GND HC05</strong> ke <strong>GND Arduino</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1690509567832/068729f1-321a-4f48-88d4-6a51d829c0ad.png" alt class="image--center mx-auto" /></p>
<pre><code class="lang-c"><span class="hljs-keyword">int</span> led=<span class="hljs-number">13</span>;
<span class="hljs-keyword">int</span> DataBluetooth;

<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">setup</span><span class="hljs-params">()</span> </span>{
  Serial.begin(<span class="hljs-number">9600</span>);
  Serial.println(<span class="hljs-string">"ON/OFF LED"</span>);
  Serial.println(<span class="hljs-string">"1 = ON, 0 = Off"</span>);
  pinMode(led,OUTPUT);
}

<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">loop</span><span class="hljs-params">()</span> </span>{
  <span class="hljs-keyword">if</span> (Serial.available()){
   DataBluetooth=Serial.read();
   <span class="hljs-keyword">if</span>(DataBluetooth==<span class="hljs-string">'1'</span>){  
     digitalWrite(led,HIGH);
     Serial.println(<span class="hljs-string">"LED On"</span>);
   }
   <span class="hljs-keyword">if</span> (DataBluetooth==<span class="hljs-string">'0'</span>){
      digitalWrite(led,LOW);
      Serial.println(<span class="hljs-string">"LED Off"</span>);
  }
}
delay(<span class="hljs-number">100</span>);
}
</code></pre>
]]></content:encoded></item><item><title><![CDATA[Laravel #5: Blade Templating Engine]]></title><description><![CDATA[Blade adalah mesin templating yang powerful dan intuitif yang digunakan dalam Laravel untuk mengelola tampilan (View) dari aplikasi web. Blade memungkinkan para developer untuk membuat template yang dapat digunakan kembali dengan mudah, menggabungkan...]]></description><link>https://gariskode.com/laravel-5-blade-templating-engine</link><guid isPermaLink="true">https://gariskode.com/laravel-5-blade-templating-engine</guid><category><![CDATA[Laravel]]></category><category><![CDATA[PHP]]></category><dc:creator><![CDATA[Fajar Chaniago]]></dc:creator><pubDate>Thu, 27 Jul 2023 13:12:26 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1690461724478/c06cb482-c852-4cf8-8fd9-395e03bc0440.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Blade adalah mesin templating yang powerful dan intuitif yang digunakan dalam Laravel untuk mengelola tampilan (View) dari aplikasi web. Blade memungkinkan para developer untuk membuat template yang dapat digunakan kembali dengan mudah, menggabungkan konten dinamis, dan menyediakan berbagai fitur berguna untuk mempermudah pengembangan antarmuka aplikasi.</p>
<h2 id="heading-keuntungan-menggunakan-blade">Keuntungan Menggunakan Blade</h2>
<p>Beberapa keuntungan menggunakan Blade dalam pengembangan aplikasi Laravel:</p>
<ol>
<li><p><strong>Sintaks Simpel</strong>: Blade menyediakan sintaks yang mudah dipahami dan bersih. Template Blade terlihat seperti kode HTML standar dengan tambahan beberapa ekstensi yang khas untuk Blade.</p>
</li>
<li><p><strong>Inheritance Layout</strong>: Blade mendukung konsep "template inheritance" di mana Anda dapat membuat layout induk (parent) yang berisi struktur dasar halaman, dan kemudian membuat view anak (child) yang mewarisi layout induk tersebut.</p>
</li>
<li><p><strong>Penggunaan Komponen</strong>: Blade memungkinkan pembuatan komponen (components) yang dapat digunakan kembali dalam berbagai view, sehingga memudahkan pengaturan tampilan secara konsisten.</p>
</li>
<li><p><strong>Pengontrolan Struktur</strong>: Dengan Blade, Anda dapat dengan mudah mengatur struktur kontrol, seperti if-else, loop, dan lain-lain, langsung di dalam view.</p>
</li>
<li><p><strong>Penyisipan Data</strong>: Blade memungkinkan penyisipan data dinamis dalam view menggunakan sintaks yang jelas dan mudah dimengerti.</p>
</li>
<li><p><strong>Escaping Otomatis</strong>: Blade secara otomatis akan menyaring data yang ditampilkan dalam view untuk menghindari serangan XSS (Cross-Site Scripting).</p>
</li>
</ol>
<h2 id="heading-penggunaan-blade">Penggunaan Blade</h2>
<p>Berikut adalah contoh penggunaan Blade dalam aplikasi Laravel:</p>
<ul>
<li><p>Layout Induk (parent) - <code>layouts/app.blade.php</code>:</p>
<pre><code class="lang-xml">  <span class="hljs-meta">&lt;!DOCTYPE <span class="hljs-meta-keyword">html</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">html</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">head</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">title</span>&gt;</span>@yield('title')<span class="hljs-tag">&lt;/<span class="hljs-name">title</span>&gt;</span>
  <span class="hljs-tag">&lt;/<span class="hljs-name">head</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">body</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">header</span>&gt;</span>
          <span class="hljs-comment">&lt;!-- Bagian header --&gt;</span>
      <span class="hljs-tag">&lt;/<span class="hljs-name">header</span>&gt;</span>

      <span class="hljs-tag">&lt;<span class="hljs-name">main</span>&gt;</span>
          @yield('content')
      <span class="hljs-tag">&lt;/<span class="hljs-name">main</span>&gt;</span>

      <span class="hljs-tag">&lt;<span class="hljs-name">footer</span>&gt;</span>
          <span class="hljs-comment">&lt;!-- Bagian footer --&gt;</span>
      <span class="hljs-tag">&lt;/<span class="hljs-name">footer</span>&gt;</span>
  <span class="hljs-tag">&lt;/<span class="hljs-name">body</span>&gt;</span>
  <span class="hljs-tag">&lt;/<span class="hljs-name">html</span>&gt;</span>
</code></pre>
</li>
<li><p>View Anak (child) - <code>pages/home.blade.php</code>:</p>
<pre><code class="lang-xml">  @extends('layouts.app')

  @section('title', 'Halaman Home')

  @section('content')
      <span class="hljs-tag">&lt;<span class="hljs-name">h1</span>&gt;</span>Selamat Datang di {{ $data['title'] }}<span class="hljs-tag">&lt;/<span class="hljs-name">h1</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>{{ $data['description'] }}<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
  @endsection
</code></pre>
</li>
<li><p>Controller - <code>/app/Http/Controller/HomeController.php</code>:</p>
<pre><code class="lang-php">  <span class="hljs-keyword">namespace</span> <span class="hljs-title">App</span>\<span class="hljs-title">Http</span>\<span class="hljs-title">Controllers</span>;

  <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">HomeController</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Controller</span>
  </span>{
      <span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">index</span>(<span class="hljs-params"></span>)
      </span>{
          $data[<span class="hljs-string">'title'</span>] = <span class="hljs-string">'Garis Kode'</span>; 
          $data[<span class="hljs-string">'description'</span>] = <span class="hljs-string">'membawa para Developer untuk bekerja sama mencari pengalaman dari komunitas untuk komunitas'</span>;
          <span class="hljs-keyword">return</span> view(<span class="hljs-string">'pages.home'</span>, compact(<span class="hljs-string">'data'</span>));
      }
  }
</code></pre>
</li>
<li><p>Routes - <code>routes/web.php</code>:</p>
<pre><code class="lang-php">  <span class="hljs-keyword">use</span> <span class="hljs-title">App</span>\<span class="hljs-title">Http</span>\<span class="hljs-title">Controllers</span>\<span class="hljs-title">HomeController</span>;

  Route::get(<span class="hljs-string">'/'</span>, [HomeController::class, <span class="hljs-string">'index'</span>])-&gt;name(<span class="hljs-string">'index'</span>);
</code></pre>
</li>
<li><p>Maka anda akan mendapatkan output seperti ini:</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1690463485321/9eb0a34e-6fd4-4a6a-bda1-a9495a8ae847.png" alt class="image--center mx-auto" /></p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Space - based arsitektur]]></title><description><![CDATA[Space-Based Arsitektur (Arsitektur berbasis Ruang) adalah pola arsitektur perangkat yang dirancang untuk mengatasi masalah skala,kinerja dan distribusi data dalam sistem terdistribusi. Pola ini cocok untuk mengelola beban kerja dan mendukung aplikasi...]]></description><link>https://gariskode.com/space-based-arsitektur</link><guid isPermaLink="true">https://gariskode.com/space-based-arsitektur</guid><category><![CDATA[architecture]]></category><category><![CDATA[clean code]]></category><category><![CDATA[Clean Architecture]]></category><category><![CDATA[#space-based]]></category><dc:creator><![CDATA[Sukma Rizki]]></dc:creator><pubDate>Thu, 27 Jul 2023 12:36:03 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1690447783494/63d92f1b-2233-45a7-a7c6-716acbaac197.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Space-Based Arsitektur (Arsitektur berbasis Ruang) adalah pola arsitektur perangkat yang dirancang untuk mengatasi masalah skala,kinerja dan distribusi data dalam sistem terdistribusi. Pola ini cocok untuk mengelola beban kerja dan mendukung aplikasi dengan persyaratan ketersediaan tinggi serta sklabilitas yang tinggi.Space based arsitektur ,mengambil inspirasi dari model sistem terdistribusi seperti tuple-space dan memori berbagi.</p>
<p>Konsep utama dalam space based arsitektur adalah sebagai berikut:</p>
<p>1.Space(Ruang) space merupakan tempat penyimpanan ruang terdistribusi dan terdiri dari kumpulan entitas data yang disebut "tuples" dan "entry".Tuple dapat berisikan data atau informasi yang diperlukan dalam aplikasi.</p>
<p>2.Proccessor(prossesor) Setiap komponen dalam sistem (disebut juga sebagai "procccessing unit" memiliki akses ke space. Komponen ini dapat membaca dan menulis tuples ke space,serta memproses atau memanipulasi tuples yang ada.</p>
<p>3.Even Drivent Arsitektur ini biasanya berbasis event driven dimana proses berjalan sebagai respons terhadap peristiwa(event) tertentu yang terjadi di sistem.</p>
<p>4.Distribuasi dan replikasi Space based arsitekture memungkinkan untuk mendistribusikan dan mereplikasi space di beberapa node atau lokasi, yang mendukung skalabilitas dan ketersediaan yang tinggi.</p>
<p>5.In-memory Data Grid(IMDG) Implementasi arsitektur ini sering menggunakan IMDG untuk menyimpan data dalam memory, yang meningkatkan akses dan kinerja.</p>
<p>Contoh sederhana Space-based arsitektur:</p>
<p>Misal anggaplah anda memiliki sebuah aplikasi e-commerce dengan banyak pelanggan yang melakukan pembelian secara bersamaan.Space-based architecture dapat diterapkan sebagai berikut.</p>
<ul>
<li><p>Setiap komponen aplikasi memiliki akses ke space,yang berfungsi sebagai "Keranjang belanja"bebagi di antara semua komponen.</p>
</li>
<li><p>Ketika pelanggan menambahkan barang keranjang belanja,tuple yang berisi detail produk dan jumlah ditambahkan ke space.</p>
</li>
<li><p>Setiap komponen lain yang terlibat dalam pemrosesan pesanan, seperti manajemen persediaan dan pembayaran, dapat membaca tuple dari space dan menangani tugasnya.</p>
</li>
<li><p>Setelah pesanan selesai diproses,tuple dihapus dari space.</p>
</li>
</ul>
<p>Keuntungan Space-Based Arsitektur</p>
<ul>
<li><p>Skalabilitas kemampuan untuk mendistribusikan dan mereplikasi space memungkinkan aplikasi untuk dengan mudah ditingkatkan secara horizontal untuk menangani beban kerja meningkat.</p>
</li>
<li><p>Ketersediaan Tinggi Replikasi data dibeberapa node memastikan ketersediaan tinggi jika salah satu node mengalami kegagalan.</p>
</li>
<li><p>Kinerja Penyimpanan data dalam memori(IMDG) memungkinkan akses data yang cepat dan meningkatkan kinerja aplikasi.</p>
</li>
<li><p>Fleksibilitas Space-based arsitektur mendukung aplikasi yang dinamis dan responsif terhadap perubahan.</p>
</li>
</ul>
<p>Kelemahan Space-Based Arsitektur</p>
<ul>
<li><p>Kompleksitas Implementasi arsitektur ini dapat lebih kompleks dibandingkan dengan pola arsitektur lainya karena melibatkan manajemen space,replika data, dan koordinasi antar komponen.</p>
</li>
<li><p>Sinkronisasi Data sikronisasi data antar node dapat menyebabkan overhead dan memerlukan manajemen yang hati - hati untuk menghindari konflik dan ketidaksesuaian data.</p>
</li>
<li><p>Biaya Infrastruktur Membutuhkan infrastruktur yang kuat dan besar untuk mendukung mekanisme dan replikasi.</p>
</li>
</ul>
<p>Space-Based Arsitektur sering digunakan dalam aplikasi terdistribusi yang memerlukan ketersediaan tinggi,skalabilitas dan performa tinggi,seperti e-commerce,permainan online dan aplikasi perbankan.penerapan pola ini harus dipertimbangkan berdasarkan kebutuhan spesifik aplikasi dan kemampuan infrastruktur.</p>
]]></content:encoded></item><item><title><![CDATA[Trend : Bahasa Pemrograman Python]]></title><description><![CDATA[Python telah menjadi salah satu bahasa pemrograman yang paling populer dan sering digunakan di dunia. Dengan sintaks yang sederhana, mudah dipelajari, dan fleksibilitasnya, Python telah menjadi pilihan favorit bagi pemula hingga profesional dalam men...]]></description><link>https://gariskode.com/trend-bahasa-pemrograman-python</link><guid isPermaLink="true">https://gariskode.com/trend-bahasa-pemrograman-python</guid><category><![CDATA[Python]]></category><dc:creator><![CDATA[Rahma Yanti]]></dc:creator><pubDate>Thu, 27 Jul 2023 08:39:33 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1690446940516/302d1402-068c-4a6f-8c46-8c1f118050d0.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Python telah menjadi salah satu bahasa pemrograman yang paling populer dan sering digunakan di dunia. Dengan sintaks yang sederhana, mudah dipelajari, dan fleksibilitasnya, Python telah menjadi pilihan favorit bagi pemula hingga profesional dalam mengembangkan berbagai jenis proyek, mulai dari aplikasi web hingga kecerdasan buatan.</p>
<p>Mengapa harus Python?</p>
<p>Simak lanjutannya</p>
]]></content:encoded></item><item><title><![CDATA[Pengenalan Go Module]]></title><description><![CDATA[Go (biasanya disebut sebagai Go), yang merupakan sistem manajemen dependensi baru yang diperkenalkan pada Go versi 1.11 pada tahun 2018. Go Modules dirancang untuk memudahkan manajemen dependensi dan mengatasi masalah yang sering timbul dengan sistem...]]></description><link>https://gariskode.com/pengenalan-go-module</link><guid isPermaLink="true">https://gariskode.com/pengenalan-go-module</guid><category><![CDATA[Golang developer]]></category><category><![CDATA[Go Language]]></category><dc:creator><![CDATA[Sukma Rizki]]></dc:creator><pubDate>Thu, 27 Jul 2023 07:07:26 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1690391722186/0266fdb5-7073-4f4c-894e-646bb9cd0d5e.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Go (biasanya disebut sebagai Go), yang merupakan sistem manajemen dependensi baru yang diperkenalkan pada Go versi 1.11 pada tahun 2018. Go Modules dirancang untuk memudahkan manajemen dependensi dan mengatasi masalah yang sering timbul dengan sistem GOPATH yang lebih lama.</p>
<p>Berikut adalah beberapa konsep penting dalam Go Modules:</p>
<ol>
<li><p><strong>Go.mod</strong>: Ini adalah file konfigurasi untuk modul Go. Ini berisi daftar dependensi proyek, beserta nomor versi yang diinginkan. Go.mod juga mencatat versi Go minimal yang diperlukan untuk proyek tersebut. File ini berada di root proyek Go.</p>
</li>
<li><p><strong>Go.sum</strong>: File ini berisi checksum dari setiap dependensi yang digunakan dalam proyek. Ini membantu mencegah adanya manipulasi pada dependensi dan memastikan bahwa Anda mendapatkan dependensi yang tepat setiap kali Anda membangun proyek.</p>
</li>
<li><p><strong>Versi Semantik</strong>: Go Modules mengikuti prinsip SemVer (Versi Semantik), yang berarti nomor versi dependensi memiliki format MAJOR.MINOR.PATCH. Ketika Anda menambahkan dependensi ke proyek, Anda dapat menentukan range versi yang diizinkan untuk digunakan, misalnya: <code>module@v1.2.3</code> atau <code>module@^1.2.3</code>.</p>
</li>
<li><p><strong>Perintah Go</strong>: Sejumlah perintah telah ditambahkan ke perangkat lunak Go untuk bekerja dengan Go Modules. Beberapa perintah ini meliputi:</p>
<ul>
<li><p><code>go mod init</code>: Digunakan untuk menginisialisasi proyek Go Modules di direktori.</p>
</li>
<li><p><code>go get</code>: Digunakan untuk menambahkan dependensi ke proyek.</p>
</li>
<li><p><code>go build</code> / <code>go run</code>: Perintah ini akan mengunduh dan mengelola dependensi proyek secara otomatis sesuai dengan file go.mod dan go.sum.</p>
</li>
</ul>
</li>
<li><p><strong>Vendor Directory (opsional)</strong>: Sebelum Go Modules, pendekatan populer untuk manajemen dependensi adalah dengan meletakkan salinan kode dependensi di direktori "vendor". Go Modules juga mendukung pendekatan ini, yang berarti Anda dapat menyimpan dependensi di vendor Anda sendiri jika Anda memilih untuk tidak menggunakan proxy modul publik.</p>
</li>
</ol>
<p>Dengan Go Modules, pengembang Go sekarang memiliki cara yang lebih baik untuk mengelola dependensi dan memastikan bahwa proyek mereka tetap konsisten dengan versi dependensi yang digunakan. Ini membuat kolaborasi lebih mudah dan memperkuat ekosistem Go secara keseluruhan.</p>
]]></content:encoded></item><item><title><![CDATA[Micro Kernel Architecture]]></title><description><![CDATA[Micro kernel architecture ,juga dikenal dikenal dikalangan pengembang nano kernel atau minimal kernel,adalah salah satu pola arsitektur bertujuan untuk meminimalkan ukuran dan kompleksitas kernel (inti)Sistem Operasi atau perngkat Lunak.Pola ini berf...]]></description><link>https://gariskode.com/micro-kernel-architecture</link><guid isPermaLink="true">https://gariskode.com/micro-kernel-architecture</guid><category><![CDATA[architecture]]></category><category><![CDATA[microkernel]]></category><category><![CDATA[New Data-Architect Test Pattern]]></category><dc:creator><![CDATA[Sukma Rizki]]></dc:creator><pubDate>Thu, 27 Jul 2023 07:07:02 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1690463843742/63c9ca32-9d8b-42a1-956a-73e0852bb337.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Micro kernel architecture ,juga dikenal dikenal dikalangan pengembang nano kernel atau minimal kernel,adalah salah satu pola arsitektur bertujuan untuk meminimalkan ukuran dan kompleksitas kernel (inti)Sistem Operasi atau perngkat Lunak.Pola ini berfokus pada pemisahan fungsi inti layanan tambahan atau modul sehingga membuat sistem lebih modular, modifikasi dan dapat diupgrade lebih mudah.</p>
<p>Konsep utama dalam microkernel arsitektur adalah untuk menyederhanakan kernel menjadi setidaknya fungsi minimum ,seperti manajemen memori,pengelolaan proses dan komunikasi antar proses.Semua fungsi esensial,seperti sistem file,jaringan atau antarmuka pengguna, dipindahkan keluar kernel menjadi modul- modul terpisah yang berjalan diruang pengguna(user space).</p>
<p>Micro kernel adalah bagian inti dari sistem informasi yang menyediakan fungsi -fungsi dasar spserti manajemen memori, manajemen proses, dan komunikasi antarproses.Mikrokernel berfungsi sebagai jembatan antara perangkat keras dan modul lain yang berjalan diruang pengguna.</p>
<p>Server atau Modul Layanan adalah modul - modul atau server -server yang berjalan diruang pengguna (user space) dan menyediakan layanan tambahan seperti sistem file ,jaringan ,antarmuka pengguna, dll.Komunikasi antar server atau mikrokernel biasanya menggunakan komunikasi yang efisiensi,seperti interproses dan comunication(IPC) yang dapat berupa pesan atau protokol lainnya.</p>
<p>Keuntungan Microkernel Architecture:</p>
<ul>
<li><p><strong>Kesederhanaan</strong>: Kernel menjadi sangat kecil dan fokus pada fungsi dasar saja, sehingga mudah diimplementasikan, dipelihara, dan diverifikasi.</p>
</li>
<li><p><strong>Kestabilan</strong>: Pemisahan modul dari kernel menyebabkan kesalahan atau kegagalan di modul tidak langsung mempengaruhi stabilitas kernel.</p>
</li>
<li><p><strong>Modularitas</strong>: Sistem dibagi menjadi modul yang terpisah, sehingga memungkinkan untuk mengganti, menambahkan, atau memperbarui modul dengan lebih mudah tanpa mengganggu kernel.</p>
</li>
<li><p><strong>Keamanan</strong>: Dengan fungsi-fungsi kritis terisolasi dalam microkernel, ada sedikit potensi untuk kegagalan atau eksploitasi keamanan yang dapat mempengaruhi kernel.</p>
</li>
</ul>
<p>Kelamahan Microkernel Architecture:</p>
<ul>
<li><p><strong>Overhead Komunikasi</strong>: Karena komunikasi antara kernel dan modul di ruang pengguna melalui IPC, ini bisa menyebabkan overhead yang lebih besar dibandingkan jika semuanya berada dalam kernel.</p>
</li>
<li><p><strong>Kompleksitas Manajemen Modul</strong>: Memisahkan layanan ke dalam modul tambahan juga dapat meningkatkan kompleksitas manajemen dan koordinasi di antara modul-modul tersebut.</p>
</li>
<li><p><strong>Performa</strong>: Penggunaan mekanisme komunikasi antara modul dapat mempengaruhi performa aplikasi jika tidak diimplementasikan dengan efisien.</p>
</li>
<li><p><strong>Keterbatasan Dukungan</strong>: Beberapa fungsi yang biasanya dianggap sebagai bagian dari kernel dapat terbatas karena dipindahkan ke modul di ruang pengguna.</p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Ayo Berkenalan Dengan Arduino & Microcontroller]]></title><description><![CDATA[Arduino adalah sebuah platform elektronik yang terdiri dari board mikrokontroler dan perangkat lunak (software) yang digunakan untuk memprogram dan mengontrol berbagai macam perangkat elektronik. Board mikrokontroler pada Arduino dapat dihubungkan de...]]></description><link>https://gariskode.com/ayo-berkenalan-dengan-arduino-microcontroller</link><guid isPermaLink="true">https://gariskode.com/ayo-berkenalan-dengan-arduino-microcontroller</guid><category><![CDATA[arduino]]></category><dc:creator><![CDATA[Fajri Chan]]></dc:creator><pubDate>Wed, 26 Jul 2023 12:33:30 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1690375169527/5558d494-13cc-4014-aa36-6e39c34d1042.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Arduino adalah sebuah platform elektronik yang terdiri dari board <strong>mikrokontroler</strong> dan <strong>perangkat lunak</strong> (software) yang digunakan untuk memprogram dan mengontrol berbagai macam perangkat elektronik. Board mikrokontroler pada Arduino dapat dihubungkan dengan berbagai sensor, aktuator, dan perangkat lainnya untuk membuat sistem elektronik yang dapat dikendalikan secara program.</p>
<p>Dengan menggunakan Arduino, bisa dapat membantu kita membuat berbagai macam sistem elektronik yang dapat dikendalikan melalui program yang telah dibuat. Misalnya, orang awam dapat membuat sistem otomatisasi rumah, robot sederhana, atau bahkan kendali taman pintar dengan menggunakan board mikrokontroler pada Arduino dan menghubungkannya dengan sensor dan aktuator yang sesuai. Dengan kemudahan pemrogramannya, Arduino juga menjadi populer sebagai platform pembelajaran bagi pemula yang ingin belajar tentang dunia elektronik dan pemrograman.</p>
<h2 id="heading-board">Board</h2>
<h3 id="heading-arduino-uno">Arduino Uno</h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1690373028897/c51ca6ca-77dc-42df-8aab-6ccca66a8640.jpeg" alt class="image--center mx-auto" /></p>
<p>Arduino Uno adalah salah satu jenis board mikrokontroler yang dikembangkan oleh perusahaan Arduino. Board ini sangat populer karena mudah digunakan oleh pemula dan mendukung banyak bahasa pemrograman, termasuk bahasa C/C++.</p>
<p>Arduino Uno dilengkapi dengan mikrokontroler ATmega328P, yang memiliki spesifikasi sebagai berikut:</p>
<ul>
<li><p>Kecepatan Clock: 16 MHz</p>
</li>
<li><p>Memori Program: 32 KB</p>
</li>
<li><p>Memori SRAM: 2 KB</p>
</li>
<li><p>Memori EEPROM: 1 KB</p>
</li>
<li><p>Input Voltage: 5-12V</p>
</li>
</ul>
<p>Arduino Uno memiliki banyak pin input/output (I/O) yang dapat digunakan untuk menghubungkan berbagai komponen elektronik seperti sensor, LED, motor, dan lain sebagainya. Board ini juga dilengkapi dengan USB port yang dapat digunakan untuk menghubungkannya dengan komputer dan mengupload program ke dalam board.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1690373005950/6898e75c-f68e-4ca5-b3b1-35787201b1e2.png" alt class="image--center mx-auto" /></p>
<table><tbody><tr><td><p>PIN</p></td><td><p>Fungsi</p></td></tr><tr><td><p>Pin Digital (D0-D13)</p></td><td><p>Pin D0-D13 adalah pin input/output digital pada Arduino Uno. Pin ini bisa digunakan sebagai input untuk membaca nilai digital dari sensor atau output untuk mengontrol perangkat elektronik seperti LED. Pin D0-D13 juga dapat berfungsi sebagai pin PWM (Pulse Width Modulation) yang berguna untuk mengatur kecepatan motor atau tingkat kecerahan LED.</p></td></tr><tr><td><p>Pin Analog (A0-A5)</p></td><td><p>Pin A0-A5 adalah pin input analog pada Arduino Uno. Pin ini bisa digunakan untuk membaca nilai analog dari sensor seperti sensor suhu atau sensor cahaya. Pin analog juga dapat digunakan sebagai input/output digital seperti pin digital.</p></td></tr><tr><td><p>Pin Power (5V, 3.3V, GND) :</p></td><td><p>Pin 5V dan 3.3V adalah pin output untuk memberikan tegangan yang dibutuhkan oleh perangkat elektronik yang kita gunakan. Pin GND (Ground) adalah pin yang digunakan sebagai ground atau titik nol pada rangkaian elektronik yang kita buat.</p></td></tr><tr><td><p>Pin Khusus:</p></td><td><p>Pin RESET adalah pin yang digunakan untuk mereset atau mengulang program pada Arduino Uno. Pin TX (Transmit) dan RX (Receive) digunakan untuk komunikasi serial dengan perangkat lain seperti komputer.</p></td></tr></tbody></table>

<h3 id="heading-arduino-nano">Arduino Nano</h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1690373109769/ae24c6db-ac59-442c-9a26-9f7d56808ae5.jpeg" alt class="image--center mx-auto" /></p>
<p>Arduino Nano adalah salah satu jenis board mikrokontroler Board ini merupakan versi mini dari Arduino Uno dengan ukuran yang lebih kecil. Arduino Nano memiliki spesifikasi yang hampir sama dengan Arduino Uno, hanya saja beberapa pin pada Arduino Nano diatur dalam bentuk header pin dengan jarak 2,54 mm, sehingga lebih mudah untuk dihubungkan dengan breadboard atau prototyping board.</p>
<p>Berikut adalah perbandingan antara Arduino Nano dan Arduino Uno:</p>
<ol>
<li><p><strong>Ukuran</strong>: Arduino Nano lebih kecil dari Arduino Uno, sehingga lebih mudah untuk digunakan dalam proyek-proyek yang membutuhkan board mikrokontroler dengan ukuran yang kompak.</p>
</li>
<li><p><strong>Jumlah Pin</strong>: Arduino Uno memiliki 14 pin digital dan 6 pin analog, sedangkan Arduino Nano memiliki 14 pin digital dan 8 pin analog.</p>
</li>
<li><p><strong>Harga</strong>: Arduino Nano lebih murah dibandingkan dengan Arduino Uno, karena ukurannya yang lebih kecil dan jumlah pin yang sedikit lebih sedikit.</p>
</li>
<li><p><strong>Ketersediaan</strong>: Arduino Uno lebih mudah ditemukan di pasaran karena lebih populer dan sudah lama digunakan, sedangkan Arduino Nano masih relatif baru.</p>
</li>
</ol>
<h3 id="heading-etc"><strong>Etc.</strong></h3>
<ul>
<li><p>arduino due</p>
</li>
<li><p>arduino mega</p>
</li>
<li><p>arduino leonardo</p>
</li>
<li><p>arduino fio</p>
</li>
<li><p>arduino lilypad</p>
</li>
<li><p>arduino mini</p>
</li>
<li><p>arduino micro</p>
</li>
<li><p>arduino ethernet</p>
</li>
<li><p>arduino esplora</p>
</li>
<li><p>arduino robot</p>
</li>
</ul>
<h2 id="heading-software"><strong>Software</strong></h2>
<h3 id="heading-arduino-ide"><strong>Arduino IDE</strong></h3>
<p>Arduino IDE (Integrated Development Environment) adalah sebuah perangkat lunak atau software yang digunakan untuk membuat program atau kode program untuk board mikrokontroler Arduino. Dengan menggunakan Arduino IDE, kita dapat membuat program yang dapat mengontrol berbagai jenis perangkat elektronik seperti sensor, motor, lampu LED, dan lain sebagainya.</p>
<p>Arduino IDE menyediakan lingkungan yang mudah digunakan oleh pemula yang ingin belajar membuat program untuk board mikrokontroler Arduino. Kita dapat menulis kode program dalam bahasa C/C++ pada jendela editor yang disediakan. Setelah kode program selesai, kita dapat mengunggahnya ke board mikrokontroler Arduino melalui koneksi USB.</p>
<p>Dalam menggunakan Arduino IDE, terdapat banyak fitur yang sangat membantu, seperti sintaks highlighting, fitur auto-complete, dan debugger. Selain itu, Arduino IDE juga menyediakan banyak library atau pustaka perangkat lunak yang dapat digunakan untuk mengendalikan berbagai jenis perangkat elektronik.</p>
<p>Penjelasan Tombol pada Software Arduino IDE:</p>
<ol>
<li><p><strong>Verify</strong></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1690374124475/c4330479-1c28-49d2-aca7-e9b961326bcb.png" alt /></p>
<p> berfungsi untuk melakukan checking kode yang kamu buat apakah sudah sesuai dengan kaidah pemrograman yang ada atau belum</p>
</li>
<li><p>Upload</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1690374221177/13622f52-bba7-4081-b60c-b7895971c2d9.png" alt /></p>
<p> Berfungsi untuk melakukan kompilasi program atau kode yang kamu buat menjadi bahasa yang dapat dipahami oleh mesih alias si Arduino.</p>
</li>
<li><p>Serial Monitor</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1690374305231/d2033574-6c92-4352-bbe8-26a6600df324.png" alt /></p>
<p> Berfungsi untuk membuka serial monitor. Serial monitor disini merupakan jendela yang menampilkan data apa saja yang dikirimkan atau dipertukarkan antara arduino dengan sketch pada port serialnya. Serial Monitor ini sangat berguna sekali ketika kamu ingin membuat program atau melakukan <em>debugging</em> tanpa menggunakan LCD pada Arduino. Serial monitor ini dapat digunakan untuk menampilkan nilai proses, nilai pembacaan, bahkan pesan error.</p>
</li>
<li><p>Board Select</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1690374500142/3963a58a-75da-4506-8453-c6d6cdd56e79.png" alt /></p>
<p> Berfungsi untuk Memilih port serial dari board yang ingin di program, setiap board yang di koneksi kan ke Laptop/PC akan terbaca oleh arduino IDE beserta port yang dipakai</p>
</li>
</ol>
]]></content:encoded></item><item><title><![CDATA[Laravel #4: HTTP Method]]></title><description><![CDATA[Dalam pengembangan aplikasi web menggunakan Laravel, HTTP method memegang peran penting dalam menentukan jenis tindakan yang dilakukan terhadap sumber daya atau objek dalam aplikasi. HTTP method digunakan oleh server dan klien untuk berkomunikasi dan...]]></description><link>https://gariskode.com/laravel-4-http-method</link><guid isPermaLink="true">https://gariskode.com/laravel-4-http-method</guid><category><![CDATA[Laravel]]></category><category><![CDATA[PHP]]></category><dc:creator><![CDATA[Fajar Chaniago]]></dc:creator><pubDate>Tue, 25 Jul 2023 17:19:51 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1690305557276/8609a2f8-55ef-4aab-99a1-50cd738766fe.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Dalam pengembangan aplikasi web menggunakan Laravel, HTTP method memegang peran penting dalam menentukan jenis tindakan yang dilakukan terhadap sumber daya atau objek dalam aplikasi. HTTP method digunakan oleh server dan klien untuk berkomunikasi dan menentukan tindakan yang diinginkan. Pada artikel ini, kita akan membahas berbagai jenis HTTP method yang sering digunakan dalam Laravel dan cara menggunakannya.</p>
<h2 id="heading-http-method"><strong>HTTP Method</strong></h2>
<p>Berikut adalah beberapa HTTP method yang umum digunakan dalam aplikasi web:</p>
<ol>
<li><p><strong>GET</strong>: HTTP method ini digunakan untuk mengambil data dari sumber daya tanpa melakukan perubahan pada server. Biasanya digunakan untuk menampilkan halaman atau data dari server.</p>
</li>
<li><p><strong>POST</strong>: HTTP method ini digunakan untuk mengirimkan data ke server dan menyimpannya sebagai sumber daya baru. Biasanya digunakan untuk menyimpan data yang dikirim melalui form.</p>
</li>
<li><p><strong>PUT</strong>: HTTP method ini digunakan untuk mengirimkan data ke server dan menggantikan seluruh sumber daya atau objek yang ada dengan data yang baru. Namun, dalam praktiknya, metode PUT jarang digunakan, dan sering digantikan dengan metode PATCH.</p>
</li>
<li><p><strong>PATCH</strong>: HTTP method ini digunakan untuk mengirimkan data ke server dan melakukan perubahan terhadap bagian atau beberapa atribut dari sumber daya atau objek yang ada.</p>
</li>
<li><p><strong>DELETE</strong>: HTTP method ini digunakan untuk menghapus sumber daya atau objek dari server.</p>
</li>
</ol>
<h2 id="heading-menggunakan-http-method-dalam-laravel"><strong>Menggunakan HTTP Method dalam Laravel</strong></h2>
<p>Dalam Laravel, kita dapat menentukan jenis HTTP method yang digunakan dalam routing dengan menggunakan metode <code>match</code> atau metode khusus seperti <code>get</code>, <code>post</code>, <code>put</code>, <code>patch</code>, dan <code>delete</code>.</p>
<p>Untuk menangani data yang dikirim melalui form pada metode POST, PUT, dan PATCH, kita perlu menggunakan instance dari kelas <code>Illuminate\Http\Request</code> dalam parameter metode controller.</p>
<p>Contoh penggunaan Request dalam controller:</p>
<pre><code class="lang-php"><span class="hljs-comment">// app/Http/Controllers/ExampleController.php</span>

<span class="hljs-keyword">namespace</span> <span class="hljs-title">App</span>\<span class="hljs-title">Http</span>\<span class="hljs-title">Controllers</span>;

<span class="hljs-keyword">use</span> <span class="hljs-title">Illuminate</span>\<span class="hljs-title">Http</span>\<span class="hljs-title">Request</span>;

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">ExampleController</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Controller</span>
</span>{
    <span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">index</span>(<span class="hljs-params"></span>)
    </span>{
        <span class="hljs-comment">// Logika untuk menampilkan daftar data</span>
        <span class="hljs-comment">// ...</span>
        <span class="hljs-keyword">return</span> view(<span class="hljs-string">'example.index'</span>, [<span class="hljs-string">'data'</span> =&gt; $data]);
    }

    <span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">store</span>(<span class="hljs-params">Request $request</span>)
    </span>{
        <span class="hljs-comment">// Logika untuk menyimpan data baru</span>
        <span class="hljs-comment">// ...</span>
        <span class="hljs-keyword">return</span> redirect()-&gt;route(<span class="hljs-string">'example.index'</span>)-&gt;with(<span class="hljs-string">'success'</span>, <span class="hljs-string">'Data berhasil disimpan!'</span>);
    }

    <span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">update</span>(<span class="hljs-params">Request $request, $id</span>)
    </span>{
        <span class="hljs-comment">// Logika untuk mengupdate data berdasarkan ID</span>
        <span class="hljs-comment">// ...</span>
        <span class="hljs-keyword">return</span> redirect()-&gt;route(<span class="hljs-string">'example.index'</span>)-&gt;with(<span class="hljs-string">'success'</span>, <span class="hljs-string">'Data berhasil diupdate!'</span>);
    }

    <span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">destroy</span>(<span class="hljs-params">$id</span>)
    </span>{
        <span class="hljs-comment">// Logika untuk menghapus data berdasarkan ID</span>
        <span class="hljs-comment">// ...</span>
        <span class="hljs-keyword">return</span> redirect()-&gt;route(<span class="hljs-string">'example.index'</span>)-&gt;with(<span class="hljs-string">'success'</span>, <span class="hljs-string">'Data berhasil dihapus!'</span>);
    }
}
</code></pre>
<p>Setelah controller dibuat, kita perlu menghubungkannya dengan routing agar controller dapat menangani permintaan dari pengguna sesuai dengan HTTP Method yang benar.</p>
<pre><code class="lang-php"><span class="hljs-comment">// routes/web.php</span>

<span class="hljs-keyword">use</span> <span class="hljs-title">App</span>\<span class="hljs-title">Http</span>\<span class="hljs-title">Controllers</span>\<span class="hljs-title">ExampleController</span>;

Route::get(<span class="hljs-string">'/example'</span>, [ExampleController::class, <span class="hljs-string">'index'</span>])-&gt;name(<span class="hljs-string">'read'</span>);
Route::post(<span class="hljs-string">'/example'</span>, [ExampleController::class, <span class="hljs-string">'store'</span>])-&gt;name(<span class="hljs-string">'create'</span>);
Route::put(<span class="hljs-string">'/example/{id}'</span>, [ExampleController::class, <span class="hljs-string">'update'</span>])-&gt;name(<span class="hljs-string">'update'</span>);
Route::delete(<span class="hljs-string">'/example/{id}'</span>, [ExampleController::class, <span class="hljs-string">'destroy'</span>])-&gt;name(<span class="hljs-string">'delete'</span>);
</code></pre>
]]></content:encoded></item><item><title><![CDATA[Laravel #3: Controller]]></title><description><![CDATA[Setelah kita mengenal Routing dan View dalam Laravel, sekarang saatnya kita membahas tentang Controller, salah satu komponen utama dalam arsitektur Model-View-Controller (MVC) yang digunakan dalam pengembangan aplikasi web menggunakan Laravel. Contro...]]></description><link>https://gariskode.com/laravel-3-controller</link><guid isPermaLink="true">https://gariskode.com/laravel-3-controller</guid><category><![CDATA[Laravel]]></category><category><![CDATA[PHP]]></category><dc:creator><![CDATA[Fajar Chaniago]]></dc:creator><pubDate>Tue, 25 Jul 2023 17:01:42 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1690304433589/3eac67ab-537f-494b-a555-aa5ffba44060.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Setelah kita mengenal Routing dan View dalam Laravel, sekarang saatnya kita membahas tentang Controller, salah satu komponen utama dalam arsitektur Model-View-Controller (MVC) yang digunakan dalam pengembangan aplikasi web menggunakan Laravel. Controller bertanggung jawab untuk mengelola logika aplikasi dan berfungsi sebagai perantara antara Routing dan View.</p>
<h2 id="heading-apa-itu-controller"><strong>Apa Itu Controller?</strong></h2>
<p>Controller merupakan kelas PHP yang digunakan untuk mengelola permintaan HTTP dari pengguna dan memberikan respons yang sesuai. Ketika pengguna melakukan aksi di aplikasi web, seperti mengakses halaman, mengirim form, atau memanggil API, permintaan tersebut akan diteruskan ke controller yang akan menangani logika dan kembali memberikan respons kepada pengguna, baik berupa tampilan (View) atau data JSON.</p>
<h2 id="heading-membuat-controller"><strong>Membuat Controller</strong></h2>
<p>Untuk membuat controller pada Laravel, kita dapat menggunakan perintah artisan yang sudah disediakan.</p>
<pre><code class="lang-bash">php artisan make:controller ExampleController
</code></pre>
<p>Gantilah "NamaController" dengan nama yang sesuai untuk controller yang ingin Anda buat. Setelah perintah dijalankan, Laravel akan membuat file controller baru dalam folder <code>app/Http/Controllers</code>.</p>
<h2 id="heading-struktur-controller"><strong>Struktur Controller</strong></h2>
<p>Sebuah controller biasanya terdiri dari beberapa metode (fungsi) yang berfungsi untuk menangani berbagai jenis permintaan yang diterima oleh aplikasi. Misalnya, dalam controller yang menangani entitas "User", kita mungkin memiliki metode untuk menampilkan daftar user, menampilkan halaman tambah user, menyimpan data user baru, mengedit user, dan lain-lain.</p>
<p>Contoh sederhana Controller:</p>
<pre><code class="lang-php"><span class="hljs-comment">// app/Http/Controllers/ExampleController.php</span>

<span class="hljs-keyword">namespace</span> <span class="hljs-title">App</span>\<span class="hljs-title">Http</span>\<span class="hljs-title">Controllers</span>;

<span class="hljs-keyword">use</span> <span class="hljs-title">Illuminate</span>\<span class="hljs-title">Http</span>\<span class="hljs-title">Request</span>;

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">ExampleController</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Controller</span>
</span>{
    <span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">index</span>(<span class="hljs-params"></span>)
    </span>{
        <span class="hljs-comment">// Logika untuk menampilkan daftar data</span>
        <span class="hljs-comment">// ...</span>
        <span class="hljs-keyword">return</span> view(<span class="hljs-string">'index'</span>);
    }
}
</code></pre>
<h2 id="heading-menghubungkan-controller-dengan-routing"><strong>Menghubungkan Controller dengan Routing</strong></h2>
<p>Setelah controller dibuat, kita perlu menghubungkannya dengan routing agar controller dapat menangani permintaan dari pengguna.</p>
<pre><code class="lang-php"><span class="hljs-comment">// routes/web.php</span>

<span class="hljs-keyword">use</span> <span class="hljs-title">App</span>\<span class="hljs-title">Http</span>\<span class="hljs-title">Controllers</span>\<span class="hljs-title">ExampleController</span>;

Route::get(<span class="hljs-string">'/example'</span>, [ExampleController::class, <span class="hljs-string">'index'</span>])-&gt;name(<span class="hljs-string">'index'</span>);
</code></pre>
<p>Dalam contoh di atas, kita telah menghubungkan setiap metode di controller <code>ExampleController</code> dengan routing yang sesuai menggunakan metode HTTP yang sesuai Selain itu, kita memberikan nama (name) pada masing-masing route, sehingga kita dapat dengan mudah merujuk ke route tersebut dalam kode aplikasi kita.</p>
]]></content:encoded></item><item><title><![CDATA[Laravel #2: Routing dan View]]></title><description><![CDATA[Pada artikel sebelumnya, kita telah mengenal Laravel sebagai salah satu framework web PHP yang powerful dan efisien. Sekarang, kita akan melanjutkan perjalanan dengan membahas dua komponen utama dalam pengembangan aplikasi web menggunakan Laravel, ya...]]></description><link>https://gariskode.com/laravel-2-routing-dan-view</link><guid isPermaLink="true">https://gariskode.com/laravel-2-routing-dan-view</guid><category><![CDATA[Laravel]]></category><category><![CDATA[PHP]]></category><dc:creator><![CDATA[Fajar Chaniago]]></dc:creator><pubDate>Tue, 25 Jul 2023 03:42:37 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1690256458943/9635d1f8-585f-4c10-9aea-f91abfd83e65.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Pada artikel sebelumnya, kita telah mengenal Laravel sebagai salah satu framework web PHP yang powerful dan efisien. Sekarang, kita akan melanjutkan perjalanan dengan membahas dua komponen utama dalam pengembangan aplikasi web menggunakan Laravel, yaitu Routing dan View.</p>
<h2 id="heading-routing-dalam-laravel"><strong>Routing dalam Laravel</strong></h2>
<p>Routing adalah mekanisme yang digunakan untuk mengarahkan permintaan HTTP ke kode yang sesuai dalam aplikasi web kita. Dengan menggunakan routing, kita dapat menentukan bagaimana URL akan diakses oleh pengguna dan bagaimana permintaan tersebut akan dihandle oleh aplikasi kita.</p>
<h3 id="heading-membuat-routing"><strong>Membuat Routing</strong></h3>
<p>Untuk membuat routing dalam Laravel, kita dapat menggunakan file <code>routes/web.php</code> atau <code>routes/api.php</code>. Pada artikel ini, kita akan fokus pada file <code>web.php</code>, yang digunakan untuk routing aplikasi web.</p>
<p>Contoh sederhana membuat route:</p>
<pre><code class="lang-php"><span class="hljs-comment">// routes/web.php</span>

Route::get(<span class="hljs-string">'/'</span>, <span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params"></span>) </span>{
    <span class="hljs-keyword">return</span> view(<span class="hljs-string">'welcome'</span>);
});

Route::get(<span class="hljs-string">'/about'</span>, <span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params"></span>) </span>{
    <span class="hljs-keyword">return</span> <span class="hljs-string">'Ini Adalah Halaman About'</span>;
});
</code></pre>
<p>Silahkan kamu ketik <code>http://127.0.0.1:8000/about</code> pada browser, maka akan menghasilkan output:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1690255423902/fac464a2-150e-4f93-a694-943a04b72c2e.png" alt class="image--center mx-auto" /></p>
<p>Dalam contoh di atas, kita telah membuat dua routing dengan menggunakan metode <code>get</code>. Routing pertama akan menghandle permintaan ke URL root (<code>/</code>), sedangkan routing kedua akan menghandle permintaan ke URL <code>/about</code>.</p>
<h3 id="heading-parameter-routing"><strong>Parameter Routing</strong></h3>
<p>Kita juga dapat menggunakan parameter dalam routing untuk menangkap nilai yang dikirimkan melalui URL. Contoh:</p>
<pre><code class="lang-php"><span class="hljs-comment">// routes/web.php</span>

Route::get(<span class="hljs-string">'/post/{id}'</span>, <span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params">$id</span>) </span>{
    <span class="hljs-keyword">return</span> <span class="hljs-string">'Menampilkan post dengan ID: '</span> . $id;
});
</code></pre>
<p>Silahkan kamu ketik <code>http://127.0.0.1:8000/post/1</code> pada browser, maka Output yang dihasilkan:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1690255607149/2a130365-b805-4d4b-9cc0-0ddffd574176.png" alt class="image--center mx-auto" /></p>
<p>Dalam contoh di atas, kita telah membuat routing dengan parameter <code>{id}</code>. Nilai <code>id</code> yang dikirimkan melalui URL akan ditangkap dan digunakan dalam fungsi untuk memberikan respon yang sesuai.</p>
<h2 id="heading-view-dalam-laravel"><strong>View dalam Laravel</strong></h2>
<p>View adalah tampilan atau antarmuka yang akan ditampilkan kepada pengguna. Dalam Laravel, kita menggunakan template engine Blade untuk mengelola tampilan aplikasi.</p>
<h3 id="heading-membuat-view"><strong>Membuat View</strong></h3>
<p>View dapat dibuat dalam folder <code>resources/views</code>. Misalnya, untuk membuat view dengan nama <code>about.blade.php</code>, kita dapat melakukan seperti ini:</p>
<pre><code class="lang-xml"><span class="hljs-comment">&lt;!-- resources/views/about.blade.php --&gt;</span>

<span class="hljs-meta">&lt;!DOCTYPE <span class="hljs-meta-keyword">html</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">html</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">head</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">title</span>&gt;</span>About Us<span class="hljs-tag">&lt;/<span class="hljs-name">title</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">head</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">body</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">h1</span>&gt;</span>Tentang Garis kode<span class="hljs-tag">&lt;/<span class="hljs-name">h1</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">body</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">html</span>&gt;</span>
</code></pre>
<h3 id="heading-menggunakan-view-dalam-routing"><strong>Menggunakan View dalam Routing</strong></h3>
<p>Setelah view dibuat, kita bisa menggunakan view tersebut dalam routing untuk memberikan respon kepada pengguna.</p>
<pre><code class="lang-php"><span class="hljs-comment">// routes/web.php</span>

Route::get(<span class="hljs-string">'/about'</span>, <span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params"></span>) </span>{
    <span class="hljs-keyword">return</span> view(<span class="hljs-string">'about'</span>);
});
</code></pre>
<p>Maka akan menghasilkan output:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1690256085230/4fb9bf15-c8c3-49a6-90ae-f7c0909d9e25.png" alt class="image--center mx-auto" /></p>
<p>Dalam contoh di atas, kita telah mengarahkan permintaan ke URL about (<code>/about</code>) untuk menampilkan view <code>about.blade.php</code>.</p>
<h3 id="heading-mengirim-data-ke-view"><strong>Mengirim Data ke View</strong></h3>
<p>Ketika menggunakan view, kita juga dapat mengirimkan data dari routing ke view untuk ditampilkan.</p>
<pre><code class="lang-php"><span class="hljs-comment">// routes/web.php</span>

Route::get(<span class="hljs-string">'/hello/{name}'</span>, <span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params">$name</span>) </span>{
    <span class="hljs-keyword">return</span> view(<span class="hljs-string">'greeting'</span>, [<span class="hljs-string">'name'</span> =&gt; $name]);
});
</code></pre>
<pre><code class="lang-xml"><span class="hljs-comment">&lt;!-- resources/views/greeting.blade.php --&gt;</span>

<span class="hljs-meta">&lt;!DOCTYPE <span class="hljs-meta-keyword">html</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">html</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">head</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">title</span>&gt;</span>Salam<span class="hljs-tag">&lt;/<span class="hljs-name">title</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">head</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">body</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">h1</span>&gt;</span>Halo, {{ $name }}!<span class="hljs-tag">&lt;/<span class="hljs-name">h1</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">body</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">html</span>&gt;</span>
</code></pre>
<p>Maka akan menghasilkan output:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1690256347825/2c6981d5-244c-4cc6-888b-b3fbd655ff9a.png" alt class="image--center mx-auto" /></p>
<p>Dalam contoh di atas, kita mengirimkan data berupa variabel <code>name</code> ke view <code>greeting.blade.php</code> dan menampilkannya menggunakan sintaks Blade <code>{{ $name }}</code>.</p>
<p><strong>See you next article...</strong></p>
]]></content:encoded></item><item><title><![CDATA[Laravel #1: Apa itu laravel? dan cara instalasinya]]></title><description><![CDATA[Laravel adalah salah satu framework web paling populer dalam pengembangan aplikasi berbasis PHP. Dengan sintaks yang elegan dan sederhana, Laravel memberikan kemudahan bagi para developer untuk membangun aplikasi web yang kuat dan efisien. Dalam arti...]]></description><link>https://gariskode.com/laravel-1-apa-itu-laravel-dan-cara-instalasinya</link><guid isPermaLink="true">https://gariskode.com/laravel-1-apa-itu-laravel-dan-cara-instalasinya</guid><category><![CDATA[Laravel]]></category><category><![CDATA[PHP]]></category><dc:creator><![CDATA[Fajar Chaniago]]></dc:creator><pubDate>Tue, 25 Jul 2023 02:15:13 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1690250667325/d51a3f27-4995-4972-9a5b-3ed7daef263f.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Laravel adalah salah satu framework web paling populer dalam pengembangan aplikasi berbasis PHP. Dengan sintaks yang elegan dan sederhana, Laravel memberikan kemudahan bagi para developer untuk membangun aplikasi web yang kuat dan efisien. Dalam artikel ini, kita akan membahas apa itu Laravel dan bagaimana cara menginstalnya.</p>
<h1 id="heading-pengertian">Pengertian</h1>
<p>Laravel adalah sebuah framework open-source (sumber terbuka) yang dikembangkan oleh Taylor Otwell dan pertama kali dirilis pada tahun 2011. Framework ini ditulis dalam bahasa pemrograman PHP dan mengikuti konsep arsitektur Model-View-Controller (MVC). MVC memisahkan logika aplikasi, tampilan, dan pemodelan data, sehingga memungkinkan para developer untuk mengembangkan aplikasi dengan lebih terstruktur dan mudah diorganisir.</p>
<p>Beberapa fitur unggulan dari Laravel antara lain:</p>
<ol>
<li><p><strong>Sintaks Elegan dan Ekspresif</strong>: Laravel menawarkan sintaks yang mudah dipahami dan ekspresif, sehingga mempercepat proses pengembangan dan mengurangi kesalahan kode.</p>
</li>
<li><p><strong>Paket Komponen</strong>: Laravel dilengkapi dengan berbagai paket komponen yang siap digunakan, seperti sistem otentikasi, manajemen sesi, validasi data, dan lain-lain, yang mempercepat proses pengembangan.</p>
</li>
<li><p><strong>Database Migration</strong>: Laravel menyediakan mekanisme database migration yang memungkinkan para developer untuk mengelola skema database dengan mudah dan aman.</p>
</li>
<li><p><strong>Eloquent ORM</strong>: Eloquent adalah fitur ORM (Object-Relational Mapping) yang memungkinkan para developer untuk berinteraksi dengan database menggunakan sintaks PHP, sehingga mengurangi kompleksitas query database.</p>
</li>
<li><p><strong>Routing yang Kuat</strong>: Laravel memiliki sistem routing yang kuat untuk mengatur URL dan mengarahkan permintaan HTTP ke controller yang sesuai.</p>
</li>
<li><p><strong>Blade Templating Engine</strong>: Blade adalah mesin templating yang kuat dan intuitif yang digunakan untuk mengelola tampilan aplikasi dengan lebih efisien.</p>
</li>
<li><p><strong>Keamanan</strong>: Laravel menyediakan berbagai fitur keamanan, seperti proteksi CSRF (Cross-Site Request Forgery), proteksi XSS (Cross-Site Scripting), dan lain-lain untuk mengamankan aplikasi dari ancaman keamanan.</p>
</li>
</ol>
<h2 id="heading-cara-instalasi-laravel"><strong>Cara Instalasi Laravel</strong></h2>
<p>Untuk menginstal Laravel, pastikan komputer Anda telah memenuhi persyaratan minimum berikut:</p>
<ul>
<li><p>PHP versi 7.3.0 atau yang lebih baru</p>
</li>
<li><p>Ekstensi PHP: BCMath, Ctype, Fileinfo, JSON, Mbstring, OpenSSL, PDO, Tokenizer, dan XML</p>
</li>
<li><p>Composer (alat manajemen paket PHP)</p>
</li>
</ul>
<p>Berikut adalah langkah-langkah instalasi Laravel:</p>
<h3 id="heading-langkah-1-instal-composer"><strong>Langkah 1: Instal Composer</strong></h3>
<p>Composer adalah alat manajemen paket PHP yang digunakan untuk menginstal Laravel dan dependensinya. Jika Anda belum memiliki Composer, Anda dapat mengunduhnya dari situs resminya di <a target="_blank" href="https://getcomposer.org/download/"><strong>https://getcomposer.org/download/</strong></a>.</p>
<h3 id="heading-langkah-2-buka-terminal-atau-command-prompt"><strong>Langkah 2: Buka Terminal atau Command Prompt</strong></h3>
<p>Buka terminal (Linux/Mac) atau command prompt (Windows) pada komputer Anda.</p>
<h3 id="heading-langkah-3-instal-laravel-menggunakan-composer"><strong>Langkah 3: Instal Laravel Menggunakan Composer</strong></h3>
<p>Setelah terminal atau command prompt terbuka, masukkan perintah berikut untuk menginstal Laravel menggunakan Composer:</p>
<pre><code class="lang-bash">composer create-project laravel/laravel example-app
</code></pre>
<p>Atau anda dapat menginstall laravel secara global dengan perintah :</p>
<pre><code class="lang-bash">composer global require laravel/installer

laravel new example-app
</code></pre>
<p>Ubahlah "example-app" dengan nama yang Anda inginkan untuk proyek Laravel baru Anda.</p>
<h3 id="heading-langkah-4-jalankan-aplikasi"><strong>Langkah 4: Jalankan Aplikasi</strong></h3>
<p>Setelah proses pembuatan proyek selesai, Anda dapat menjalankan aplikasi Laravel menggunakan server bawaan dengan perintah berikut:</p>
<pre><code class="lang-bash"><span class="hljs-built_in">cd</span> example-app
php artisan serve
</code></pre>
<p>Setelah itu, buka browser dan kunjungi <a target="_blank" href="http://localhost:8000"><code>http://localhost:8000</code></a> untuk melihat aplikasi Laravel Anda berjalan.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1690254965165/f819e9cf-db24-4851-a36d-133afae70a86.png" alt class="image--center mx-auto" /></p>
<p><strong>Selamat... Laravel anda berhasil dijalankan.</strong></p>
]]></content:encoded></item><item><title><![CDATA[Penggunaan Mutex di Go]]></title><description><![CDATA[Mungkin anda bertanya cara menggunakan mutex di golang dan ini article yang mungkin memberi tahu anda cara menggunakannya.
Sebelum itu mari kita berkenalan dengan mutex ,Mutex adalah Mutual Exclusion konsep dalam Bahasa pemograman Golang menghindari ...]]></description><link>https://gariskode.com/penggunaan-mutex-di-go</link><guid isPermaLink="true">https://gariskode.com/penggunaan-mutex-di-go</guid><category><![CDATA[Golang developer]]></category><category><![CDATA[#gocomu]]></category><category><![CDATA[Go Language]]></category><dc:creator><![CDATA[Sukma Rizki]]></dc:creator><pubDate>Mon, 24 Jul 2023 09:09:20 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1690189578793/7a6707f2-998d-4fc5-9719-7cdc5bfa0ca2.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Mungkin anda bertanya cara menggunakan mutex di golang dan ini article yang mungkin memberi tahu anda cara menggunakannya.</p>
<p>Sebelum itu mari kita berkenalan dengan mutex ,Mutex adalah Mutual Exclusion konsep dalam Bahasa pemograman Golang menghindari akses secara bersamaan ke sumber daya yang dibagi Oleh beberapa Gorotine(Unit eksekusi konkuren dalam Go) atau thread.Dalam Go atau Golang,Anda Dapat menggunakan mekanisme mutex untuk mencapai sikronisasi dan mengamankan akses ke data bersama.</p>
<p>Dalam Go,anda dapat menggunakan tipe 'sync.Mutex' untuk membuat mutex.code dibawah ini akan membuat kamu lebih mengerti cara penggunaanya</p>
<pre><code class="lang-go">
<span class="hljs-keyword">package</span> main

<span class="hljs-keyword">import</span> ( <span class="hljs-string">"fmt"</span> <span class="hljs-string">"sync"</span> )

<span class="hljs-keyword">var</span> counter <span class="hljs-keyword">int</span> <span class="hljs-keyword">var</span> mutex sync.Mutex

<span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">increment</span><span class="hljs-params">()</span></span> { mutex.Lock() 

<span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> {
<span class="hljs-keyword">var</span> wg sync.WaitGroup
<span class="hljs-keyword">for</span> i := <span class="hljs-number">0</span>; i &lt; <span class="hljs-number">10</span>; i++ {
wg.Add(<span class="hljs-number">1</span>)
<span class="hljs-keyword">go</span> <span class="hljs-function"><span class="hljs-keyword">func</span><span class="hljs-params">()</span></span> {
increment()
wg.Done()
}() }
wg.Wait()
fmt.Println(<span class="hljs-string">"Counter:"</span>, counter)
}
</code></pre>
<p>Pada contoh diatas kita memiliki fungsi 'increment' untuk meningkatkan nilai 'counter' secara aman dengan menggunakan mutex.saat goroutine mencoba untuk mengakses 'increment' pada satu waktu,sehingga menghindari akses bersamaan dan menghindari data race yang dapat menyebabkan masalah dalam program konkuren.</p>
<p>Show,"MUTEX di Golang" mengacu pada konsep mutex dan penggunaannya dalam bahasa pemograman Go (Golang) untuk sikronisasi dan mengamankan akses kedata bersama dalam program konkuren.</p>
]]></content:encoded></item></channel></rss>